Skip to content

Commit 85d9b59

Browse files
committed
ref
1 parent 0f55425 commit 85d9b59

2 files changed

Lines changed: 16 additions & 18 deletions

File tree

sqlglot/generators/snowflake.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -708,21 +708,23 @@ def tonumber_sql(self, expression: exp.ToNumber) -> str:
708708
precision = expression.args.get("precision")
709709
scale = expression.args.get("scale")
710710

711-
is_default = (
712-
isinstance(precision, exp.Literal)
713-
and precision.name == "38"
714-
and isinstance(scale, exp.Literal)
715-
and scale.name == "0"
716-
)
711+
default_precision = isinstance(precision, exp.Literal) and precision.name == "38"
712+
default_scale = isinstance(scale, exp.Literal) and scale.name == "0"
713+
714+
if default_precision and default_scale:
715+
precision = None
716+
scale = None
717+
elif default_scale:
718+
scale = None
717719

718720
func_name = "TRY_TO_NUMBER" if expression.args.get("safe") else "TO_NUMBER"
719721

720722
return self.func(
721723
func_name,
722724
expression.this,
723725
expression.args.get("format"),
724-
None if is_default else precision,
725-
None if is_default else scale,
726+
precision,
727+
scale,
726728
)
727729

728730
def timestampfromparts_sql(self, expression: exp.TimestampFromParts) -> str:

tests/dialects/test_snowflake.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -496,9 +496,8 @@ def test_snowflake(self):
496496
self.validate_identity(
497497
"TO_DECIMAL(expr, fmt, precision, scale)", "TO_NUMBER(expr, fmt, precision, scale)"
498498
)
499-
self.validate_identity("TO_NUMBER(expr)")
500-
self.validate_identity("TO_NUMBER(expr, fmt)")
501-
self.validate_identity("TO_NUMBER(expr, fmt, precision, scale)")
499+
self.validate_identity("TO_NUMBER(expr, 38, 0)", "TO_NUMBER(expr)")
500+
self.validate_identity("TO_NUMBER(expr, 38)", "TO_NUMBER(expr)")
502501

503502
ast = self.validate_identity("TO_NUMBER('12.3456')")
504503
self.assertIsInstance(ast, exp.ToNumber)
@@ -524,7 +523,7 @@ def test_snowflake(self):
524523
self.assertEqual(ast.args.get("precision").name, "10")
525524
self.assertEqual(ast.args.get("scale").name, "1")
526525

527-
ast = self.validate_identity("TO_NUMBER('12.3456', 3)", "TO_NUMBER('12.3456', 3, 0)")
526+
ast = self.validate_identity("TO_NUMBER('12.3456', 3)")
528527
self.assertIsInstance(ast, exp.ToNumber)
529528
self.assertIsNone(ast.args.get("format"))
530529
self.assertEqual(ast.args.get("precision").name, "3")
@@ -570,9 +569,8 @@ def test_snowflake(self):
570569
self.validate_identity("TRY_TO_FILE(object_col)")
571570
self.validate_identity("TRY_TO_FILE('file.csv')")
572571
self.validate_identity("TRY_TO_FILE('file.csv', 'relativepath/')")
573-
self.validate_identity("TRY_TO_NUMBER('123.45')")
574-
self.validate_identity("TRY_TO_NUMBER('123.45', '999.99')")
575-
self.validate_identity("TRY_TO_NUMBER('123.45', '999.99', 10, 2)")
572+
self.validate_identity("TRY_TO_NUMBER(expr, 38, 0)", "TRY_TO_NUMBER(expr)")
573+
self.validate_identity("TRY_TO_NUMBER(expr, 38)", "TRY_TO_NUMBER(expr)")
576574

577575
ast = self.validate_identity("TRY_TO_NUMBER('12.3456')")
578576
self.assertIsInstance(ast, exp.ToNumber)
@@ -602,9 +600,7 @@ def test_snowflake(self):
602600
self.assertEqual(ast.args.get("scale").name, "1")
603601
self.assertTrue(ast.args.get("safe"))
604602

605-
ast = self.validate_identity(
606-
"TRY_TO_NUMBER('12.3456', 3)", "TRY_TO_NUMBER('12.3456', 3, 0)"
607-
)
603+
ast = self.validate_identity("TRY_TO_NUMBER('12.3456', 3)")
608604
self.assertIsInstance(ast, exp.ToNumber)
609605
self.assertIsNone(ast.args.get("format"))
610606
self.assertEqual(ast.args.get("precision").name, "3")

0 commit comments

Comments
 (0)