@@ -256,6 +256,55 @@ func TestObserve(t *testing.T) {
256256 }
257257}
258258
259+ func TestObserve_KeyspaceOverrideAPI (t * testing.T ) {
260+ session := createSession (t )
261+ defer session .Close ()
262+
263+ if err := createTable (session , `CREATE KEYSPACE IF NOT EXISTS gocql_test2 WITH replication = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 }` ); err != nil {
264+ t .Fatal ("create:" , err )
265+ }
266+
267+ if err := createTable (session , `CREATE TABLE IF NOT EXISTS gocql_test2.observe (id int, PRIMARY KEY (id))` ); err != nil {
268+ t .Fatal ("create:" , err )
269+ }
270+
271+ var observedKeyspace string
272+
273+ resetObserved := func () {
274+ observedKeyspace = ""
275+ }
276+
277+ observer := funcQueryObserver (func (ctx context.Context , o ObservedQuery ) {
278+ observedKeyspace = o .Keyspace
279+ })
280+
281+ const overrideKeyspace = "gocql_test2"
282+
283+ // Session default keyspace
284+ err := session .Query (`INSERT INTO observe (id) VALUES (?)` , 42 ).
285+ Observer (observer ).
286+ SetKeyspace (overrideKeyspace ).
287+ Exec ()
288+ if err != nil {
289+ t .Fatal ("insert:" , err )
290+ }
291+ if observedKeyspace != overrideKeyspace {
292+ t .Fatalf ("expected keyspace '%s', got %s" , overrideKeyspace , observedKeyspace )
293+ }
294+
295+ resetObserved ()
296+ var id int
297+ if err := session .Query (`SELECT id FROM observe WHERE id = ?` , 42 ).
298+ Observer (observer ).
299+ SetKeyspace (overrideKeyspace ).
300+ Scan (& id ); err != nil {
301+ t .Fatal ("select:" , err )
302+ }
303+ if observedKeyspace != overrideKeyspace {
304+ t .Fatalf ("expected keyspace '%s', got %s" , overrideKeyspace , observedKeyspace )
305+ }
306+ }
307+
259308func TestObserve_Pagination (t * testing.T ) {
260309 session := createSession (t )
261310 defer session .Close ()
@@ -4676,3 +4725,43 @@ func TestIterMapScanUDT(t *testing.T) {
46764725 require .NoError (t , err )
46774726 require .Nil (t , rawResult ["value" ])
46784727}
4728+
4729+ func TestUDT_MarshalNilMap (t * testing.T ) {
4730+ session := createSession (t )
4731+ defer session .Close ()
4732+
4733+ err := createTable (session , `CREATE TYPE IF NOT EXISTS gocql_test.nil_map_udt (
4734+ field_a text,
4735+ field_b int
4736+ );` )
4737+ require .NoError (t , err )
4738+
4739+ err = createTable (session , `CREATE TABLE IF NOT EXISTS gocql_test.nil_map_udt_table (
4740+ id int PRIMARY KEY,
4741+ value frozen<nil_map_udt>
4742+ );` )
4743+ require .NoError (t , err )
4744+
4745+ nilMap := map [string ]interface {}(nil )
4746+ err = session .Query ("INSERT INTO nil_map_udt_table (id, value) VALUES (?, ?)" , 1 , nilMap ).Exec ()
4747+ require .NoError (t , err )
4748+
4749+ ctx := context .Background ()
4750+
4751+ const selectQuery = "SELECT value FROM nil_map_udt_table WHERE id = ?"
4752+ t .Run ("scan" , func (t * testing.T ) {
4753+ var scanned map [string ]interface {}
4754+ err = session .Query (selectQuery , 1 ).ScanContext (ctx , & scanned )
4755+ require .NoError (t , err )
4756+ require .Nil (t , scanned )
4757+ })
4758+
4759+ t .Run ("iter map scan" , func (t * testing.T ) {
4760+ rawResult := map [string ]interface {}{}
4761+ rawResultIter := session .Query (selectQuery , 1 ).IterContext (ctx )
4762+ rawResultIter .MapScan (rawResult )
4763+ err = rawResultIter .Close ()
4764+ require .NoError (t , err )
4765+ require .Nil (t , rawResult ["value" ])
4766+ })
4767+ }
0 commit comments