@@ -499,9 +499,39 @@ def test_snowflake(self):
499499 self .validate_identity (
500500 "TO_DECIMAL(expr, fmt, precision, scale)" , "TO_NUMBER(expr, fmt, precision, scale)"
501501 )
502- self .validate_identity ("TO_NUMBER(expr)" )
503- self .validate_identity ("TO_NUMBER(expr, fmt)" )
504- self .validate_identity ("TO_NUMBER(expr, fmt, precision, scale)" )
502+ self .validate_identity ("TO_NUMBER(expr, 38, 0)" , "TO_NUMBER(expr)" )
503+ self .validate_identity ("TO_NUMBER(expr, 38)" , "TO_NUMBER(expr)" )
504+
505+ ast = self .validate_identity ("TO_NUMBER('12.3456')" )
506+ self .assertIsInstance (ast , exp .ToNumber )
507+ self .assertIsNone (ast .args .get ("format" ))
508+ self .assertEqual (ast .args .get ("precision" ).name , "38" )
509+ self .assertEqual (ast .args .get ("scale" ).name , "0" )
510+
511+ ast = self .validate_identity ("TO_NUMBER('12.3456', 10, 1)" )
512+ self .assertIsInstance (ast , exp .ToNumber )
513+ self .assertIsNone (ast .args .get ("format" ))
514+ self .assertEqual (ast .args .get ("precision" ).name , "10" )
515+ self .assertEqual (ast .args .get ("scale" ).name , "1" )
516+
517+ ast = self .validate_identity ("TO_NUMBER('12.3456', '99.99')" )
518+ self .assertIsInstance (ast , exp .ToNumber )
519+ self .assertEqual (ast .args .get ("format" ).name , "99.99" )
520+ self .assertEqual (ast .args .get ("precision" ).name , "38" )
521+ self .assertEqual (ast .args .get ("scale" ).name , "0" )
522+
523+ ast = self .validate_identity ("TO_NUMBER('12.3456', '99.99', 10, 1)" )
524+ self .assertIsInstance (ast , exp .ToNumber )
525+ self .assertEqual (ast .args .get ("format" ).name , "99.99" )
526+ self .assertEqual (ast .args .get ("precision" ).name , "10" )
527+ self .assertEqual (ast .args .get ("scale" ).name , "1" )
528+
529+ ast = self .validate_identity ("TO_NUMBER('12.3456', 3)" )
530+ self .assertIsInstance (ast , exp .ToNumber )
531+ self .assertIsNone (ast .args .get ("format" ))
532+ self .assertEqual (ast .args .get ("precision" ).name , "3" )
533+ self .assertEqual (ast .args .get ("scale" ).name , "0" )
534+
505535 self .validate_identity ("TO_DECFLOAT('123.456')" )
506536 self .validate_identity ("TO_DECFLOAT('1,234.56', '999,999.99')" )
507537 self .validate_identity ("TRY_TO_DECFLOAT('123.456')" )
@@ -542,9 +572,44 @@ def test_snowflake(self):
542572 self .validate_identity ("TRY_TO_FILE(object_col)" )
543573 self .validate_identity ("TRY_TO_FILE('file.csv')" )
544574 self .validate_identity ("TRY_TO_FILE('file.csv', 'relativepath/')" )
545- self .validate_identity ("TRY_TO_NUMBER('123.45')" )
546- self .validate_identity ("TRY_TO_NUMBER('123.45', '999.99')" )
547- self .validate_identity ("TRY_TO_NUMBER('123.45', '999.99', 10, 2)" )
575+ self .validate_identity ("TRY_TO_NUMBER(expr, 38, 0)" , "TRY_TO_NUMBER(expr)" )
576+ self .validate_identity ("TRY_TO_NUMBER(expr, 38)" , "TRY_TO_NUMBER(expr)" )
577+
578+ ast = self .validate_identity ("TRY_TO_NUMBER('12.3456')" )
579+ self .assertIsInstance (ast , exp .ToNumber )
580+ self .assertIsNone (ast .args .get ("format" ))
581+ self .assertEqual (ast .args .get ("precision" ).name , "38" )
582+ self .assertEqual (ast .args .get ("scale" ).name , "0" )
583+ self .assertTrue (ast .args .get ("safe" ))
584+
585+ ast = self .validate_identity ("TRY_TO_NUMBER('12.3456', 10, 1)" )
586+ self .assertIsInstance (ast , exp .ToNumber )
587+ self .assertIsNone (ast .args .get ("format" ))
588+ self .assertEqual (ast .args .get ("precision" ).name , "10" )
589+ self .assertEqual (ast .args .get ("scale" ).name , "1" )
590+ self .assertTrue (ast .args .get ("safe" ))
591+
592+ ast = self .validate_identity ("TRY_TO_NUMBER('12.3456', '99.99')" )
593+ self .assertIsInstance (ast , exp .ToNumber )
594+ self .assertEqual (ast .args .get ("format" ).name , "99.99" )
595+ self .assertEqual (ast .args .get ("precision" ).name , "38" )
596+ self .assertEqual (ast .args .get ("scale" ).name , "0" )
597+ self .assertTrue (ast .args .get ("safe" ))
598+
599+ ast = self .validate_identity ("TRY_TO_NUMBER('12.3456', '99.99', 10, 1)" )
600+ self .assertIsInstance (ast , exp .ToNumber )
601+ self .assertEqual (ast .args .get ("format" ).name , "99.99" )
602+ self .assertEqual (ast .args .get ("precision" ).name , "10" )
603+ self .assertEqual (ast .args .get ("scale" ).name , "1" )
604+ self .assertTrue (ast .args .get ("safe" ))
605+
606+ ast = self .validate_identity ("TRY_TO_NUMBER('12.3456', 3)" )
607+ self .assertIsInstance (ast , exp .ToNumber )
608+ self .assertIsNone (ast .args .get ("format" ))
609+ self .assertEqual (ast .args .get ("precision" ).name , "3" )
610+ self .assertEqual (ast .args .get ("scale" ).name , "0" )
611+ self .assertTrue (ast .args .get ("safe" ))
612+
548613 self .validate_identity ("TO_NUMERIC('123.45')" , "TO_NUMBER('123.45')" )
549614 self .validate_identity ("TO_NUMERIC('123.45', '999.99')" , "TO_NUMBER('123.45', '999.99')" )
550615 self .validate_identity (
0 commit comments