Skip to content

Commit

Permalink
Exasol: Use ANSI value_clause to handle insert_stmts correctly (#5959)
Browse files Browse the repository at this point in the history
  • Loading branch information
stephnan committed Jun 9, 2024
1 parent b01895a commit 9f1446f
Show file tree
Hide file tree
Showing 5 changed files with 123 additions and 47 deletions.
23 changes: 0 additions & 23 deletions src/sqlfluff/dialects/dialect_exasol.py
Original file line number Diff line number Diff line change
Expand Up @@ -1530,7 +1530,6 @@ class InsertStatementSegment(BaseSegment):
Ref.keyword("INTO", optional=True),
Ref("TableReferenceSegment"),
AnyNumberOf(
Ref("ValuesInsertClauseSegment"),
Ref("ValuesRangeClauseSegment"),
Sequence("DEFAULT", "VALUES"),
Ref("SelectableGrammar"),
Expand All @@ -1539,28 +1538,6 @@ class InsertStatementSegment(BaseSegment):
)


class ValuesInsertClauseSegment(BaseSegment):
"""A `VALUES` clause like in `INSERT`."""

type = "values_insert_clause"
match_grammar = Sequence(
"VALUES",
Delimited(
Bracketed(
Delimited(
Ref("LiteralGrammar"),
Ref("IntervalExpressionSegment"),
Ref("FunctionSegment"),
Ref("BareFunctionSegment"),
"DEFAULT",
Ref("SelectableGrammar"),
),
parse_mode=ParseMode.GREEDY,
),
),
)


############################
# UPDATE
############################
Expand Down
2 changes: 2 additions & 0 deletions test/fixtures/dialects/exasol/insert_statement.sql
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ INSERT INTO s.t(c1, c2, c3) VALUES((SELECT x FROM y), 'val1', 'val2');
INSERT INTO t (adate) values(current_timestamp);
INSERT INTO t VALUES BETWEEN 1 AND 100;
INSERT INTO t (i) VALUES BETWEEN 1 AND 100 WITH STEP 4;
INSERT INTO t (d1, n1, v1) values (add_days(current_date, -1), 15.0, 'myvalue');
INSERT INTO t (d1, n1, v1) values (current_date +1, 15.0, 'myvalue');
121 changes: 98 additions & 23 deletions test/fixtures/dialects/exasol/insert_statement.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# computed by SQLFluff when running the tests. Please run
# `python test/generate_parse_fixture_yml.py` to generate them after adding or
# altering SQL files.
_hash: 0ca0a589ad98d8a2f91b99db2f29bc962416ea5cef4eaaee8fb4d1d07bd1e7c3
_hash: ae3b8347b6d652d4e75500c1e5661774581425658e7aa09b5b9ef4fee40a49f4
file:
- statement:
insert_statement:
Expand All @@ -22,7 +22,7 @@ file:
- column_reference:
naked_identifier: t1
- end_bracket: )
- values_insert_clause:
- values_clause:
keyword: VALUES
bracketed:
- start_bracket: (
Expand All @@ -39,7 +39,7 @@ file:
- keyword: INTO
- table_reference:
naked_identifier: t
- values_insert_clause:
- values_clause:
- keyword: VALUES
- bracketed:
- start_bracket: (
Expand All @@ -65,7 +65,7 @@ file:
- keyword: INTO
- table_reference:
naked_identifier: t
- values_insert_clause:
- values_clause:
keyword: VALUES
bracketed:
- start_bracket: (
Expand Down Expand Up @@ -189,26 +189,28 @@ file:
- column_reference:
naked_identifier: c3
- end_bracket: )
- values_insert_clause:
- values_clause:
keyword: VALUES
bracketed:
- start_bracket: (
- bracketed:
start_bracket: (
select_statement:
select_clause:
keyword: SELECT
select_clause_element:
column_reference:
naked_identifier: x
from_clause:
keyword: FROM
from_expression:
from_expression_element:
table_expression:
table_reference:
naked_identifier: y
end_bracket: )
- expression:
bracketed:
start_bracket: (
expression:
select_statement:
select_clause:
keyword: SELECT
select_clause_element:
column_reference:
naked_identifier: x
from_clause:
keyword: FROM
from_expression:
from_expression_element:
table_expression:
table_reference:
naked_identifier: y
end_bracket: )
- comma: ','
- quoted_literal: "'val1'"
- comma: ','
Expand All @@ -226,11 +228,12 @@ file:
column_reference:
naked_identifier: adate
end_bracket: )
- values_insert_clause:
- values_clause:
keyword: values
bracketed:
start_bracket: (
bare_function: current_timestamp
expression:
bare_function: current_timestamp
end_bracket: )
- statement_terminator: ;
- statement:
Expand Down Expand Up @@ -267,3 +270,75 @@ file:
- keyword: STEP
- numeric_literal: '4'
- statement_terminator: ;
- statement:
insert_statement:
- keyword: INSERT
- keyword: INTO
- table_reference:
naked_identifier: t
- bracketed:
- start_bracket: (
- column_reference:
naked_identifier: d1
- comma: ','
- column_reference:
naked_identifier: n1
- comma: ','
- column_reference:
naked_identifier: v1
- end_bracket: )
- values_clause:
keyword: values
bracketed:
- start_bracket: (
- expression:
function:
function_name:
function_name_identifier: add_days
bracketed:
- start_bracket: (
- expression:
bare_function: current_date
- comma: ','
- expression:
numeric_literal:
sign_indicator: '-'
numeric_literal: '1'
- end_bracket: )
- comma: ','
- numeric_literal: '15.0'
- comma: ','
- quoted_literal: "'myvalue'"
- end_bracket: )
- statement_terminator: ;
- statement:
insert_statement:
- keyword: INSERT
- keyword: INTO
- table_reference:
naked_identifier: t
- bracketed:
- start_bracket: (
- column_reference:
naked_identifier: d1
- comma: ','
- column_reference:
naked_identifier: n1
- comma: ','
- column_reference:
naked_identifier: v1
- end_bracket: )
- values_clause:
keyword: values
bracketed:
- start_bracket: (
- expression:
bare_function: current_date
binary_operator: +
numeric_literal: '1'
- comma: ','
- numeric_literal: '15.0'
- comma: ','
- quoted_literal: "'myvalue'"
- end_bracket: )
- statement_terminator: ;
2 changes: 2 additions & 0 deletions test/fixtures/dialects/exasol/select_statement.sql
Original file line number Diff line number Diff line change
Expand Up @@ -158,3 +158,5 @@ SELECT 'My mail address is my_mail@exasol.com'
SELECT 'My mail address is my_mail@exasol.com'
NOT REGEXP_LIKE '(?i).*[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}.*'
AS contains_email;
--
SELECT current_date -1 as dt from dual;
22 changes: 21 additions & 1 deletion test/fixtures/dialects/exasol/select_statement.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
# computed by SQLFluff when running the tests. Please run
# `python test/generate_parse_fixture_yml.py` to generate them after adding or
# altering SQL files.
_hash: 1b5fd3bd0d3c91581cd2ee9f167c2a4607a98296c43717424aa44d4dba77243f
_hash: 405ab9d1f5df047af29966b099705a1830b65db2c3918e8f4f78dadab5ffbc70
file:
- statement:
select_statement:
Expand Down Expand Up @@ -1869,3 +1869,23 @@ file:
keyword: AS
naked_identifier: contains_email
- statement_terminator: ;
- statement:
select_statement:
select_clause:
keyword: SELECT
select_clause_element:
expression:
bare_function: current_date
binary_operator: '-'
numeric_literal: '1'
alias_expression:
keyword: as
naked_identifier: dt
from_clause:
keyword: from
from_expression:
from_expression_element:
table_expression:
table_reference:
naked_identifier: dual
- statement_terminator: ;

0 comments on commit 9f1446f

Please sign in to comment.