@@ -299,7 +299,7 @@ def test_nested_types_without_predicate(self, kikimr, client):
299299 stop_yds_query (client , query_id )
300300
301301 @yq_v1
302- def test_filters (self , kikimr , client ):
302+ def test_filters_non_optional_field (self , kikimr , client ):
303303 client .create_yds_connection (
304304 YDS_CONNECTION , os .getenv ("YDB_DATABASE" ), os .getenv ("YDB_ENDPOINT" ), shared_reading = True
305305 )
@@ -321,11 +321,42 @@ def test_filters(self, kikimr, client):
321321 self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IS NOT DISTINCT FROM \\ "event2\\ "' )
322322 filter = ' event IS DISTINCT FROM "event1"'
323323 self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IS DISTINCT FROM \\ "event1\\ "' )
324+ filter = ' event IS DISTINCT FROM "event1"'
325+ self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IS DISTINCT FROM \\ "event1\\ "' )
324326 filter = 'event IN ("event2")'
325327 self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IN (\\ "event2\\ ")' )
326328 filter = 'event IN ("1", "2", "3", "4", "5", "6", "7", "event2")'
327329 self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IN (\\ "1\\ "' )
328330
331+ @yq_v1
332+ def test_filters_optional_field (self , kikimr , client ):
333+ client .create_yds_connection (
334+ YDS_CONNECTION , os .getenv ("YDB_DATABASE" ), os .getenv ("YDB_ENDPOINT" ), shared_reading = True
335+ )
336+ self .init_topics ("test_filter" )
337+
338+ sql = Rf'''
339+ INSERT INTO { YDS_CONNECTION } .`{ self .output_topic } `
340+ SELECT Cast(time as String) FROM { YDS_CONNECTION } .`{ self .input_topic } `
341+ WITH (format=json_each_row, SCHEMA (time UInt64 NOT NULL, data String, event String)) WHERE '''
342+ data = [
343+ '{"time": 101, "data": "hello1", "event": "event1"}' ,
344+ '{"time": 102, "data": "hello2", "event": "event2"}' ]
345+ expected = ['102' ]
346+ filter = 'data = "hello2"'
347+ self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `data` = \\ "hello2\\ "' )
348+ filter = ' event IS NOT DISTINCT FROM "event2"'
349+ self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IS NOT DISTINCT FROM \\ "event2\\ "' )
350+ filter = ' event IS DISTINCT FROM "event1"'
351+ self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IS DISTINCT FROM \\ "event1\\ "' )
352+ filter = ' event IS DISTINCT FROM "event1"'
353+ self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IS DISTINCT FROM \\ "event1\\ "' )
354+ filter = 'event IN ("event2")'
355+ self .run_and_check (kikimr , client , sql + filter , data , expected , 'predicate: WHERE `event` IN (\\ "event2\\ ")' )
356+ # TODO
357+ #filter = 'event IN ("1", "2", "3", "4", "5", "6", "7", "event2")'
358+ #self.run_and_check(kikimr, client, sql + filter, data, expected, 'predicate: WHERE `event` IN (\\"1\\"')
359+
329360 @yq_v1
330361 def test_filter_missing_fields (self , kikimr , client ):
331362 client .create_yds_connection (
0 commit comments