@@ -32,6 +32,7 @@ import (
3232 "context"
3333 "errors"
3434 "fmt"
35+ "github.com/stretchr/testify/require"
3536 "io"
3637 "math"
3738 "math/big"
@@ -3288,3 +3289,150 @@ func TestQuery_NamedValues(t *testing.T) {
32883289 t .Fatal (err )
32893290 }
32903291}
3292+
3293+ func TestQuery_WithNowInSeconds (t * testing.T ) {
3294+ session := createSession (t )
3295+ defer session .Close ()
3296+
3297+ if session .cfg .ProtoVersion < protoVersion5 {
3298+ t .Skip ("Query now in seconds are only available on protocol >= 5" )
3299+ }
3300+
3301+ if err := createTable (session , `CREATE TABLE query_now_in_seconds (id int primary key, val text)` ); err != nil {
3302+ t .Fatal (err )
3303+ }
3304+
3305+ err := session .Query ("INSERT INTO query_now_in_seconds (id, val) VALUES (?, ?) USING TTL 20" , 1 , "val" ).
3306+ WithNowInSeconds (int (0 )).
3307+ Exec ()
3308+ if err != nil {
3309+ t .Fatal (err )
3310+ }
3311+
3312+ var remainingTTL int
3313+ err = session .Query (`SELECT TTL(val) FROM query_now_in_seconds WHERE id = ?` , 1 ).
3314+ WithNowInSeconds (10 ).
3315+ Scan (& remainingTTL )
3316+ if err != nil {
3317+ t .Fatal (err )
3318+ }
3319+
3320+ require .Equal (t , remainingTTL , 10 )
3321+ }
3322+
3323+ func TestQuery_SetKeyspace (t * testing.T ) {
3324+ session := createSession (t )
3325+ defer session .Close ()
3326+
3327+ if session .cfg .ProtoVersion < protoVersion5 {
3328+ t .Skip ("keyspace for QUERY message is not supported in protocol < 5" )
3329+ }
3330+
3331+ const keyspaceStmt = `
3332+ CREATE KEYSPACE IF NOT EXISTS gocql_query_keyspace_override_test
3333+ WITH replication = {
3334+ 'class': 'SimpleStrategy',
3335+ 'replication_factor': '1'
3336+ };
3337+ `
3338+
3339+ err := session .Query (keyspaceStmt ).Exec ()
3340+ if err != nil {
3341+ t .Fatal (err )
3342+ }
3343+
3344+ err = createTable (session , "CREATE TABLE IF NOT EXISTS gocql_query_keyspace_override_test.query_keyspace(id int, value text, PRIMARY KEY (id))" )
3345+ if err != nil {
3346+ t .Fatal (err )
3347+ }
3348+
3349+ expectedID := 1
3350+ expectedText := "text"
3351+
3352+ // Testing PREPARE message
3353+ err = session .Query ("INSERT INTO gocql_query_keyspace_override_test.query_keyspace (id, value) VALUES (?, ?)" , expectedID , expectedText ).Exec ()
3354+ if err != nil {
3355+ t .Fatal (err )
3356+ }
3357+
3358+ var (
3359+ id int
3360+ text string
3361+ )
3362+
3363+ q := session .Query ("SELECT * FROM gocql_query_keyspace_override_test.query_keyspace" ).
3364+ SetKeyspace ("gocql_query_keyspace_override_test" )
3365+ err = q .Scan (& id , & text )
3366+ if err != nil {
3367+ t .Fatal (err )
3368+ }
3369+
3370+ require .Equal (t , expectedID , id )
3371+ require .Equal (t , expectedText , text )
3372+
3373+ // Testing QUERY message
3374+ id = 0
3375+ text = ""
3376+
3377+ q = session .Query ("SELECT * FROM gocql_query_keyspace_override_test.query_keyspace" ).
3378+ SetKeyspace ("gocql_query_keyspace_override_test" )
3379+ q .skipPrepare = true
3380+ err = q .Scan (& id , & text )
3381+ if err != nil {
3382+ t .Fatal (err )
3383+ }
3384+
3385+ require .Equal (t , expectedID , id )
3386+ require .Equal (t , expectedText , text )
3387+ }
3388+
3389+ func TestLargeSizeQuery (t * testing.T ) {
3390+ session := createSession (t )
3391+ defer session .Close ()
3392+
3393+ if err := createTable (session , "CREATE TABLE gocql_test.large_size_query(id int, text_col text, PRIMARY KEY (id))" ); err != nil {
3394+ t .Fatal (err )
3395+ }
3396+
3397+ defer session .Close ()
3398+
3399+ longString := strings .Repeat ("a" , 500_000 )
3400+
3401+ err := session .Query ("INSERT INTO gocql_test.large_size_query (id, text_col) VALUES (?, ?)" , "1" , longString ).Exec ()
3402+ if err != nil {
3403+ t .Fatal (err )
3404+ }
3405+
3406+ var result string
3407+ err = session .Query ("SELECT text_col FROM gocql_test.large_size_query" ).Scan (& result )
3408+ if err != nil {
3409+ t .Fatal (err )
3410+ }
3411+
3412+ require .Equal (t , longString , result )
3413+ }
3414+
3415+ func TestQueryCompressionNotWorthIt (t * testing.T ) {
3416+ session := createSession (t )
3417+ defer session .Close ()
3418+
3419+ if err := createTable (session , "CREATE TABLE gocql_test.compression_now_worth_it(id int, text_col text, PRIMARY KEY (id))" ); err != nil {
3420+ t .Fatal (err )
3421+ }
3422+
3423+ defer session .Close ()
3424+
3425+ str := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*()_+"
3426+ err := session .Query ("INSERT INTO gocql_test.large_size_query (id, text_col) VALUES (?, ?)" , "1" , str ).Exec ()
3427+ if err != nil {
3428+ t .Fatal (err )
3429+ }
3430+
3431+ var result string
3432+ err = session .Query ("SELECT text_col FROM gocql_test.large_size_query" ).Scan (& result )
3433+ if err != nil {
3434+ t .Fatal (err )
3435+ }
3436+
3437+ require .Equal (t , str , result )
3438+ }
0 commit comments