Skip to content

Commit 61bf782

Browse files
committed
feat: databricks insert by name support
1 parent 7c96c94 commit 61bf782

File tree

4 files changed

+252
-1
lines changed

4 files changed

+252
-1
lines changed

crates/lib-dialects/src/databricks.rs

+10
Original file line numberDiff line numberDiff line change
@@ -504,6 +504,16 @@ pub fn dialect() -> Dialect {
504504
)
505505
.into(),
506506
),
507+
// https://docs.databricks.com/aws/en/sql/language-manual/sql-ref-syntax-dml-insert-into#insert-using-the-by-name-clause
508+
(
509+
"InsertBracketedColumnReferenceListGrammar".into(),
510+
one_of(vec_of_erased![
511+
Ref::new("BracketedColumnReferenceListGrammar"),
512+
Sequence::new(vec_of_erased![Ref::keyword("BY"), Ref::keyword("NAME"),]),
513+
])
514+
.to_matchable()
515+
.into(),
516+
),
507517
]);
508518

509519
// A reference to an object.

crates/lib-dialects/src/sparksql.rs

+7-1
Original file line numberDiff line numberDiff line change
@@ -1934,6 +1934,12 @@ pub fn raw_dialect() -> Dialect {
19341934
.to_matchable()
19351935
.into(),
19361936
),
1937+
(
1938+
"InsertBracketedColumnReferenceListGrammar".into(),
1939+
Ref::new("BracketedColumnReferenceListGrammar")
1940+
.to_matchable()
1941+
.into(),
1942+
),
19371943
(
19381944
"InsertStatementSegment".into(),
19391945
NodeMatcher::new(
@@ -1947,7 +1953,7 @@ pub fn raw_dialect() -> Dialect {
19471953
Ref::keyword("TABLE").optional(),
19481954
Ref::new("TableReferenceSegment"),
19491955
Ref::new("PartitionSpecGrammar").optional(),
1950-
Ref::new("BracketedColumnReferenceListGrammar").optional(),
1956+
Ref::new("InsertBracketedColumnReferenceListGrammar").optional(),
19511957
one_of(vec_of_erased![
19521958
AnyNumberOf::new(vec_of_erased![Ref::new("ValuesClauseSegment")]).config(
19531959
|config| {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
INSERT INTO target BY NAME SELECT named_struct('b', 2, 'a', 1) AS s, 0 AS n, 'data' AS text;
2+
INSERT INTO target BY NAME SELECT array(named_struct('b', 2, 'a', 1)) AS arr, 0 AS n;
3+
INSERT INTO target BY NAME SELECT array(named_struct('b', 2, 'a', 1)) AS arr;
4+
INSERT INTO target BY NAME SELECT array(named_struct('b', 2, 'a', 1)) AS arr, 0 AS badname;
5+
INSERT INTO target BY NAME SELECT array(named_struct('b', 2, 'a', 1)) AS arr, 0 AS n, 1 AS n;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,230 @@
1+
file:
2+
- statement:
3+
- insert_statement:
4+
- keyword: INSERT
5+
- keyword: INTO
6+
- object_reference:
7+
- naked_identifier: target
8+
- keyword: BY
9+
- keyword: NAME
10+
- select_statement:
11+
- select_clause:
12+
- keyword: SELECT
13+
- select_clause_element:
14+
- function:
15+
- function_name:
16+
- function_name_identifier: named_struct
17+
- bracketed:
18+
- start_bracket: (
19+
- expression:
20+
- quoted_literal: '''b'''
21+
- comma: ','
22+
- expression:
23+
- numeric_literal: '2'
24+
- comma: ','
25+
- expression:
26+
- quoted_literal: '''a'''
27+
- comma: ','
28+
- expression:
29+
- numeric_literal: '1'
30+
- end_bracket: )
31+
- alias_expression:
32+
- keyword: AS
33+
- naked_identifier: s
34+
- comma: ','
35+
- select_clause_element:
36+
- numeric_literal: '0'
37+
- alias_expression:
38+
- keyword: AS
39+
- naked_identifier: n
40+
- comma: ','
41+
- select_clause_element:
42+
- quoted_literal: '''data'''
43+
- alias_expression:
44+
- keyword: AS
45+
- naked_identifier: text
46+
- statement_terminator: ;
47+
- statement:
48+
- insert_statement:
49+
- keyword: INSERT
50+
- keyword: INTO
51+
- object_reference:
52+
- naked_identifier: target
53+
- keyword: BY
54+
- keyword: NAME
55+
- select_statement:
56+
- select_clause:
57+
- keyword: SELECT
58+
- select_clause_element:
59+
- function:
60+
- function_name:
61+
- function_name_identifier: array
62+
- bracketed:
63+
- start_bracket: (
64+
- expression:
65+
- function:
66+
- function_name:
67+
- function_name_identifier: named_struct
68+
- bracketed:
69+
- start_bracket: (
70+
- expression:
71+
- quoted_literal: '''b'''
72+
- comma: ','
73+
- expression:
74+
- numeric_literal: '2'
75+
- comma: ','
76+
- expression:
77+
- quoted_literal: '''a'''
78+
- comma: ','
79+
- expression:
80+
- numeric_literal: '1'
81+
- end_bracket: )
82+
- end_bracket: )
83+
- alias_expression:
84+
- keyword: AS
85+
- naked_identifier: arr
86+
- comma: ','
87+
- select_clause_element:
88+
- numeric_literal: '0'
89+
- alias_expression:
90+
- keyword: AS
91+
- naked_identifier: n
92+
- statement_terminator: ;
93+
- statement:
94+
- insert_statement:
95+
- keyword: INSERT
96+
- keyword: INTO
97+
- object_reference:
98+
- naked_identifier: target
99+
- keyword: BY
100+
- keyword: NAME
101+
- select_statement:
102+
- select_clause:
103+
- keyword: SELECT
104+
- select_clause_element:
105+
- function:
106+
- function_name:
107+
- function_name_identifier: array
108+
- bracketed:
109+
- start_bracket: (
110+
- expression:
111+
- function:
112+
- function_name:
113+
- function_name_identifier: named_struct
114+
- bracketed:
115+
- start_bracket: (
116+
- expression:
117+
- quoted_literal: '''b'''
118+
- comma: ','
119+
- expression:
120+
- numeric_literal: '2'
121+
- comma: ','
122+
- expression:
123+
- quoted_literal: '''a'''
124+
- comma: ','
125+
- expression:
126+
- numeric_literal: '1'
127+
- end_bracket: )
128+
- end_bracket: )
129+
- alias_expression:
130+
- keyword: AS
131+
- naked_identifier: arr
132+
- statement_terminator: ;
133+
- statement:
134+
- insert_statement:
135+
- keyword: INSERT
136+
- keyword: INTO
137+
- object_reference:
138+
- naked_identifier: target
139+
- keyword: BY
140+
- keyword: NAME
141+
- select_statement:
142+
- select_clause:
143+
- keyword: SELECT
144+
- select_clause_element:
145+
- function:
146+
- function_name:
147+
- function_name_identifier: array
148+
- bracketed:
149+
- start_bracket: (
150+
- expression:
151+
- function:
152+
- function_name:
153+
- function_name_identifier: named_struct
154+
- bracketed:
155+
- start_bracket: (
156+
- expression:
157+
- quoted_literal: '''b'''
158+
- comma: ','
159+
- expression:
160+
- numeric_literal: '2'
161+
- comma: ','
162+
- expression:
163+
- quoted_literal: '''a'''
164+
- comma: ','
165+
- expression:
166+
- numeric_literal: '1'
167+
- end_bracket: )
168+
- end_bracket: )
169+
- alias_expression:
170+
- keyword: AS
171+
- naked_identifier: arr
172+
- comma: ','
173+
- select_clause_element:
174+
- numeric_literal: '0'
175+
- alias_expression:
176+
- keyword: AS
177+
- naked_identifier: badname
178+
- statement_terminator: ;
179+
- statement:
180+
- insert_statement:
181+
- keyword: INSERT
182+
- keyword: INTO
183+
- object_reference:
184+
- naked_identifier: target
185+
- keyword: BY
186+
- keyword: NAME
187+
- select_statement:
188+
- select_clause:
189+
- keyword: SELECT
190+
- select_clause_element:
191+
- function:
192+
- function_name:
193+
- function_name_identifier: array
194+
- bracketed:
195+
- start_bracket: (
196+
- expression:
197+
- function:
198+
- function_name:
199+
- function_name_identifier: named_struct
200+
- bracketed:
201+
- start_bracket: (
202+
- expression:
203+
- quoted_literal: '''b'''
204+
- comma: ','
205+
- expression:
206+
- numeric_literal: '2'
207+
- comma: ','
208+
- expression:
209+
- quoted_literal: '''a'''
210+
- comma: ','
211+
- expression:
212+
- numeric_literal: '1'
213+
- end_bracket: )
214+
- end_bracket: )
215+
- alias_expression:
216+
- keyword: AS
217+
- naked_identifier: arr
218+
- comma: ','
219+
- select_clause_element:
220+
- numeric_literal: '0'
221+
- alias_expression:
222+
- keyword: AS
223+
- naked_identifier: n
224+
- comma: ','
225+
- select_clause_element:
226+
- numeric_literal: '1'
227+
- alias_expression:
228+
- keyword: AS
229+
- naked_identifier: n
230+
- statement_terminator: ;

0 commit comments

Comments
 (0)