@@ -2,6 +2,7 @@ package tarantool_test
2
2
3
3
import (
4
4
"fmt"
5
+ "github.com/stretchr/testify/require"
5
6
"log"
6
7
"os"
7
8
"reflect"
@@ -59,9 +60,9 @@ var spaceName = "test"
59
60
var indexNo = uint32 (0 )
60
61
var indexName = "primary"
61
62
var opts = Opts {
62
- Timeout : 500 * time .Millisecond ,
63
- User : "test" ,
64
- Pass : "test" ,
63
+ // Timeout: 500 * time.Millisecond,
64
+ User : "test" ,
65
+ Pass : "test" ,
65
66
//Concurrency: 32,
66
67
//RateLimit: 4*1024,
67
68
}
@@ -169,6 +170,50 @@ func BenchmarkClientSerialSQL(b *testing.B) {
169
170
}
170
171
}
171
172
173
+ func BenchmarkClientSerialSQLPrepared (b * testing.B ) {
174
+ // Tarantool supports SQL since version 2.0.0
175
+ isLess , err := test_helpers .IsTarantoolVersionLess (2 , 0 , 0 )
176
+ if err != nil {
177
+ b .Fatal ("Could not check the Tarantool version" )
178
+ }
179
+ if isLess {
180
+ b .Skip ()
181
+ }
182
+
183
+ conn , err := Connect (server , opts )
184
+ if err != nil {
185
+ b .Errorf ("Failed to connect: %s" , err )
186
+ return
187
+ }
188
+ defer conn .Close ()
189
+
190
+ spaceNo := 519
191
+ _ , err = conn .Replace (spaceNo , []interface {}{uint (1111 ), "hello" , "world" })
192
+ if err != nil {
193
+ b .Errorf ("Failed to replace: %s" , err )
194
+ }
195
+
196
+ stmt , err := conn .Prepare ("SELECT NAME0,NAME1,NAME2 FROM SQL_TEST WHERE NAME0=?" )
197
+ if err != nil {
198
+ b .Fatalf ("failed to prepare a SQL statement" )
199
+ }
200
+ executeReq := NewExecutePreparedRequest (stmt )
201
+ unprepareReq := NewUnprepareRequest (stmt )
202
+
203
+ b .ResetTimer ()
204
+ for i := 0 ; i < b .N ; i ++ {
205
+ _ , err := conn .Do (executeReq .Args ([]interface {}{uint (1111 )})).Get ()
206
+ if err != nil {
207
+ b .Errorf ("Select failed: %s" , err .Error ())
208
+ break
209
+ }
210
+ }
211
+ _ , err = conn .Do (unprepareReq ).Get ()
212
+ if err != nil {
213
+ b .Fatalf ("failed to unprepare a SQL statement" )
214
+ }
215
+ }
216
+
172
217
func BenchmarkClientFuture (b * testing.B ) {
173
218
var err error
174
219
@@ -462,6 +507,48 @@ func BenchmarkClientParallelSQL(b *testing.B) {
462
507
})
463
508
}
464
509
510
+ func BenchmarkClientParallelSQLPrepared (b * testing.B ) {
511
+ // Tarantool supports SQL since version 2.0.0
512
+ isLess , err := test_helpers .IsTarantoolVersionLess (2 , 0 , 0 )
513
+ if err != nil {
514
+ b .Fatal ("Could not check the Tarantool version" )
515
+ }
516
+ if isLess {
517
+ b .Skip ()
518
+ }
519
+
520
+ conn := test_helpers .ConnectWithValidation (b , server , opts )
521
+ defer conn .Close ()
522
+
523
+ spaceNo := 519
524
+ _ , err = conn .Replace (spaceNo , []interface {}{uint (1111 ), "hello" , "world" })
525
+ if err != nil {
526
+ b .Errorf ("No connection available" )
527
+ }
528
+
529
+ stmt , err := conn .Prepare ("SELECT NAME0,NAME1,NAME2 FROM SQL_TEST WHERE NAME0=?" )
530
+ if err != nil {
531
+ b .Fatalf ("failed to prepare a SQL statement" )
532
+ }
533
+ executeReq := NewExecutePreparedRequest (stmt )
534
+ unprepareReq := NewUnprepareRequest (stmt )
535
+
536
+ b .ResetTimer ()
537
+ b .RunParallel (func (pb * testing.PB ) {
538
+ for pb .Next () {
539
+ _ , err := conn .Do (executeReq .Args ([]interface {}{uint (1111 )})).Get ()
540
+ if err != nil {
541
+ b .Errorf ("Select failed: %s" , err .Error ())
542
+ break
543
+ }
544
+ }
545
+ })
546
+ _ , err = conn .Do (unprepareReq ).Get ()
547
+ if err != nil {
548
+ b .Fatalf ("failed to unprepare a SQL statement" )
549
+ }
550
+ }
551
+
465
552
func BenchmarkSQLSerial (b * testing.B ) {
466
553
// Tarantool supports SQL since version 2.0.0
467
554
isLess , err := test_helpers .IsTarantoolVersionLess (2 , 0 , 0 )
@@ -1341,6 +1428,58 @@ func TestStressSQL(t *testing.T) {
1341
1428
}
1342
1429
}
1343
1430
1431
+ func TestPrepare (t * testing.T ) {
1432
+ var err error
1433
+
1434
+ conn := test_helpers .ConnectWithValidation (t , server , opts )
1435
+ defer conn .Close ()
1436
+
1437
+ stmt , err := conn .Prepare (selectNamedQuery2 )
1438
+ if err != nil {
1439
+ t .Errorf ("failed to prepare: %v" , err )
1440
+ }
1441
+
1442
+ executeReq := NewExecutePreparedRequest (stmt )
1443
+ unprepareReq := NewUnprepareRequest (stmt )
1444
+
1445
+ resp , err := conn .Do (executeReq .Args ([]interface {}{1 , "test" })).Get ()
1446
+ if err != nil {
1447
+ t .Errorf ("failed to execute prepared: %v" , err )
1448
+ }
1449
+ if resp .Code != OkCode {
1450
+ t .Errorf ("failed to execute prepared: code %d" , resp .Code )
1451
+ }
1452
+ if reflect .DeepEqual (resp .Data [0 ], []interface {}{1 , "test" }) {
1453
+ t .Error ("Select with named arguments failed" )
1454
+ }
1455
+ if resp .MetaData [0 ].FieldType != "unsigned" ||
1456
+ resp .MetaData [0 ].FieldName != "NAME0" ||
1457
+ resp .MetaData [1 ].FieldType != "string" ||
1458
+ resp .MetaData [1 ].FieldName != "NAME1" {
1459
+ t .Error ("Wrong metadata" )
1460
+ }
1461
+
1462
+ resp , err = conn .Do (unprepareReq ).Get ()
1463
+ if err != nil {
1464
+ t .Errorf ("failed to unprepare prepared statement: %v" , err )
1465
+ }
1466
+ if resp .Code != OkCode {
1467
+ t .Errorf ("failed to unprepare prepared statement: code %d" , resp .Code )
1468
+ }
1469
+
1470
+ _ , err = conn .Do (unprepareReq ).Get ()
1471
+ if err == nil {
1472
+ t .Errorf ("the statement must be already unprepared" )
1473
+ }
1474
+ require .Contains (t , err .Error (), "Prepared statement with id" )
1475
+
1476
+ _ , err = conn .Do (executeReq ).Get ()
1477
+ if err == nil {
1478
+ t .Errorf ("the statement must be already unprepared" )
1479
+ }
1480
+ require .Contains (t , err .Error (), "Prepared statement with id" )
1481
+ }
1482
+
1344
1483
func TestSchema (t * testing.T ) {
1345
1484
var err error
1346
1485
0 commit comments