Using DEFAULT ON CONVERSTION ERROR in to_number function causes parsing error.
SELECT
TO_NUMBER('dino' DEFAULT 0 ON CONVERSION ERROR) AS Result
FROM
dual;
import sqlglot
query = """SELECT
TO_NUMBER('dino' DEFAULT 0 ON CONVERSION ERROR) AS Result
FROM
dual;"""
try:
ast = sqlglot.parse_one(query,read="oracle")
except sqlglot.ParseError as p:
print('Parsing error!')
print(p)
except Exception as e:
print(type(e))
print(e)
Traceback (most recent call last):
File "C:\local\git\junk\PySqlGlotTests\defaulterror.py", line 9, in <module>
ast = sqlglot.parse_one(query,read="oracle")
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\__init__.py", line 160, in parse_one
result = dialect.parse(sql, **opts)
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\dialects\dialect.py", line 1119, in parse
return self.parser(**opts).parse(self.tokenize(sql), sql)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 2035, in parse
return self._parse(
~~~~~~~~~~~^
parse_method=self.__class__._parse_statement, raw_tokens=raw_tokens, sql=sql
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 2155, in _parse
return self._parse_batch_statements(parse_method=parse_method, sep_first_statement=False)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 2122, in _parse_batch_statements
expressions.append(parse_method(self))
~~~~~~~~~~~~^^^^^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 2285, in _parse_statement
expression = self._parse_set_operations(expression) if expression else self._parse_select()
~~~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 3778, in _parse_select
query = self._parse_select_query(
nested=nested,
...<2 lines>...
parse_set_operation=parse_set_operation,
)
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 3879, in _parse_select_query
projections, exclude = self._parse_projections()
~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 3734, in _parse_projections
return self._parse_expressions(), None
~~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 8508, in _parse_expressions
return self._parse_csv(self._parse_expression)
~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 8473, in _parse_csv
parse_result = parse_method()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5702, in _parse_expression
return self._parse_alias(self._parse_assignment())
~~~~~~~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5705, in _parse_assignment
this = self._parse_disjunction()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5727, in _parse_disjunction
this = self._parse_conjunction()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5739, in _parse_conjunction
this = self._parse_equality()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5751, in _parse_equality
this = self._parse_comparison()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5763, in _parse_comparison
this = self._parse_range()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5773, in _parse_range
this = this or self._parse_bitwise()
~~~~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 5979, in _parse_bitwise
this = self._parse_term()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6012, in _parse_term
this = self._parse_factor()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6035, in _parse_factor
this = self._parse_at_time_zone(parse_method())
~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6067, in _parse_unary
return self._parse_type()
~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6072, in _parse_type
if not fallback_to_identifier and (atom := self._parse_atom()) is not None:
~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6477, in _parse_atom
and (column := self._parse_column()) is not None
~~~~~~~~~~~~~~~~~~^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6502, in _parse_column
this = self._parse_column_reference()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6589, in _parse_column_reference
this = self._parse_field()
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6818, in _parse_field
field = self._parse_primary() or self._parse_function(
~~~~~~~~~~~~~~~~~~~~^
anonymous=anonymous_func, any_token=any_token
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6841, in _parse_function
func = self._parse_function_call(
functions=functions,
...<2 lines>...
any_token=any_token,
)
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 6970, in _parse_function_call
self._match_r_paren(result)
~~~~~~~~~~~~~~~~~~~^^^^^^^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 9297, in _match_r_paren
self.raise_error("Expecting )")
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^
File "C:\local\git\junk\webappsvcstest\.venv\Lib\site-packages\sqlglot\parser.py", line 1992, in raise_error
raise error
sqlglot.errors.ParseError: Expecting ). Line 2, Col: 28.
SELECT
TO_NUMBER('dino' DEFAULT 0 ON CONVERSION ERROR) AS Result
FROM
dual;
Using DEFAULT ON CONVERSTION ERROR in to_number function causes parsing error.
Dialect: oracle
Example query:
Error:
Expecting ). Line 2, Col: 28.
Repro code:
Full traceback: