@@ -2463,7 +2463,43 @@ def test_regexp_substr(self, logger):
24632463            "REGEXP_EXTRACT_ALL(subject, pattern)" ,
24642464        )
24652465
2466-         self .validate_identity ("SELECT REGEXP_COUNT('hello world', 'l')" )
2466+         self .validate_identity ("SELECT SEARCH((play, line), 'dream')" )
2467+         self .validate_identity ("SELECT SEARCH(line, 'king', ANALYZER => 'UNICODE_ANALYZER')" )
2468+         self .validate_identity ("SELECT SEARCH(character, 'king queen', SEARCH_MODE => 'AND')" )
2469+         self .validate_identity (
2470+             "SELECT SEARCH(line, 'king', ANALYZER => 'UNICODE_ANALYZER', SEARCH_MODE => 'OR')" 
2471+         )
2472+ 
2473+         # AST validation tests - verify argument mapping 
2474+         ast  =  self .validate_identity ("SELECT SEARCH(line, 'king')" )
2475+         search_ast  =  ast .find (exp .Search )
2476+         self .assertEqual (list (search_ast .args ), ["this" , "expression" , "analyzer" , "search_mode" ])
2477+         self .assertIsNone (search_ast .args .get ("analyzer" ))
2478+         self .assertIsNone (search_ast .args .get ("search_mode" ))
2479+ 
2480+         ast  =  self .validate_identity ("SELECT SEARCH(line, 'king', ANALYZER => 'UNICODE_ANALYZER')" )
2481+         search_ast  =  ast .find (exp .Search )
2482+         self .assertIsNotNone (search_ast .args .get ("analyzer" ))
2483+         self .assertIsNone (search_ast .args .get ("search_mode" ))
2484+ 
2485+         ast  =  self .validate_identity ("SELECT SEARCH(character, 'king queen', SEARCH_MODE => 'AND')" )
2486+         search_ast  =  ast .find (exp .Search )
2487+         self .assertIsNone (search_ast .args .get ("analyzer" ))
2488+         self .assertIsNotNone (search_ast .args .get ("search_mode" ))
2489+ 
2490+         # Test with arguments in different order (search_mode first, then analyzer) 
2491+         ast  =  self .validate_identity (
2492+             "SELECT SEARCH(line, 'king', SEARCH_MODE => 'AND', ANALYZER => 'PATTERN_ANALYZER')" ,
2493+             "SELECT SEARCH(line, 'king', ANALYZER => 'PATTERN_ANALYZER', SEARCH_MODE => 'AND')" ,
2494+         )
2495+         search_ast  =  ast .find (exp .Search )
2496+         self .assertEqual (list (search_ast .args ), ["this" , "expression" , "analyzer" , "search_mode" ])
2497+         analyzer  =  search_ast .args .get ("analyzer" )
2498+         self .assertIsNotNone (analyzer )
2499+         search_mode  =  search_ast .args .get ("search_mode" )
2500+         self .assertIsNotNone (search_mode )
2501+ 
2502+         self .validate_identity ("SELECT REGEXP_COUNT('hello world', 'l ')" )
24672503        self .validate_identity ("SELECT REGEXP_COUNT('hello world', 'l', 1)" )
24682504        self .validate_identity ("SELECT REGEXP_COUNT('hello world', 'l', 1, 'i')" )
24692505
0 commit comments