WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 9e098c3

Browse files
committed
Enable new features unconditionally
1 parent 24185d1 commit 9e098c3

File tree

6 files changed

+8
-211
lines changed

6 files changed

+8
-211
lines changed

src/ast/dml.rs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,6 @@ pub struct MergeInsertExpr {
545545
/// The insert type used by the statement.
546546
pub kind: MergeInsertKind,
547547
/// An optional condition to restrict the insertion (Oracle specific)
548-
///
549-
/// Enabled via [`Dialect::supports_merge_insert_predicate`](crate::dialect::Dialect::supports_merge_insert_predicate).
550548
pub insert_predicate: Option<Expr>,
551549
}
552550

@@ -582,12 +580,8 @@ pub struct MergeUpdateExpr {
582580
/// The update assiment expressions
583581
pub assignments: Vec<Assignment>,
584582
/// `where_clause` for the update (Oralce specific)
585-
///
586-
/// Enabled via [`Dialect::supports_merge_update_predicate`](crate::dialect::Dialect::supports_merge_update_predicate).
587583
pub update_predicate: Option<Expr>,
588584
/// `delete_clause` for the update "delete where" (Oracle specific)
589-
///
590-
/// Enabled via [`Dialect::supports_merge_update_delete_predicate`](crate::dialect::Dialect::supports_merge_update_delete_predicate).
591585
pub delete_predicate: Option<Expr>,
592586
}
593587

src/dialect/mod.rs

Lines changed: 0 additions & 113 deletions
Original file line numberDiff line numberDiff line change
@@ -610,119 +610,6 @@ pub trait Dialect: Debug + Any {
610610
false
611611
}
612612

613-
/// Returns `true` if the dialect supports qualified column names
614-
/// as part of a MERGE's INSERT's column list. Example:
615-
///
616-
/// ```sql
617-
/// MERGE INTO FOO
618-
/// USING FOO_IMP
619-
/// ON (FOO.ID = FOO_IMP.ID)
620-
/// WHEN NOT MATCHED THEN
621-
/// -- no qualifier
622-
/// INSERT (ID, NAME)
623-
/// VALUES (FOO_IMP.ID, UPPER(FOO_IMP.NAME))
624-
/// ```
625-
/// vs.
626-
/// ```sql
627-
/// MERGE INTO FOO
628-
/// USING FOO_IMP
629-
/// ON (FOO.ID = FOO_IMP.ID)
630-
/// WHEN NOT MATCHED THEN
631-
/// -- here: qualified
632-
/// INSERT (FOO.ID, FOO.NAME)
633-
/// VALUES (FOO_IMP.ID, UPPER(FOO_IMP.NAME))
634-
/// ```
635-
/// or
636-
/// ```sql
637-
/// MERGE INTO FOO
638-
/// USING FOO_IMP
639-
/// ON (FOO.ID = FOO_IMP.ID)
640-
/// WHEN NOT MATCHED THEN
641-
/// -- here: qualified with array subscripts
642-
/// INSERT (FOO.ID[1], FOO.NAME[1:12])
643-
/// VALUES (FOO_IMP.ID, UPPER(FOO_IMP.NAME))
644-
/// ```
645-
/// or
646-
/// ```sql
647-
/// MERGE INTO FOO X
648-
/// USING FOO_IMP
649-
/// ON (X.ID = FOO_IMP.ID)
650-
/// WHEN NOT MATCHED THEN
651-
/// -- here: qualified using the alias
652-
/// INSERT (X.ID, X.NAME)
653-
/// VALUES (FOO_IMP.ID, UPPER(FOO_IMP.NAME))
654-
/// ```
655-
///
656-
/// By default, qualifiers are allowed.
657-
fn supports_merge_insert_qualified_columns(&self) -> bool {
658-
true
659-
}
660-
661-
/// Returns `true` if the dialect supports specify an INSERT predicate in
662-
/// MERGE statements. Example:
663-
///
664-
/// ```sql
665-
/// MERGE INTO FOO
666-
/// USING FOO_IMP
667-
/// ON (FOO.ID = FOO_IMP.ID)
668-
/// WHEN NOT MATCHED THEN
669-
/// INSERT (ID, NAME)
670-
/// VALUES (FOO_IMP.ID, UPPER(FOO_IMP.NAME))
671-
/// -- insert predicate
672-
/// WHERE NOT FOO_IMP.NAME like '%.IGNORE'
673-
/// ```
674-
///
675-
/// By default, the additional predicate support is enabled.
676-
///
677-
/// See also [Dialect::supports_merge_update_predicate] and
678-
/// [Dialect::supports_merge_update_delete_predicate].
679-
fn supports_merge_insert_predicate(&self) -> bool {
680-
true
681-
}
682-
683-
/// Indicates the supports of UPDATE predicates in MERGE
684-
/// statements. Example:
685-
///
686-
/// ```sql
687-
/// MERGE INTO FOO
688-
/// USING FOO_IMPORT
689-
/// ON (FOO.ID = FOO_IMPORT.ID)
690-
/// WHEN MATCHED THEN
691-
/// UPDATE SET FOO.NAME = FOO_IMPORT.NAME
692-
/// -- update predicate
693-
/// WHERE FOO.NAME <> 'pete'
694-
/// ```
695-
///
696-
/// By default, the additional predicate is enabled.
697-
///
698-
/// See also [Dialect::supports_merge_insert_predicate] and
699-
/// [Dialect::supports_merge_update_delete_predicate].
700-
fn supports_merge_update_predicate(&self) -> bool {
701-
true
702-
}
703-
704-
/// Indicates the supports of UPDATE ... DELETEs and associated predicates
705-
/// in MERGE statements. Example:
706-
///
707-
/// ```sql
708-
/// MERGE INTO FOO
709-
/// USING FOO_IMPORT
710-
/// ON (FOO.ID = FOO_IMPORT.ID)
711-
/// WHEN MATCHED THEN
712-
/// UPDATE SET FOO.NAME = FOO_IMPORT.NAME
713-
/// -- update delete with predicate
714-
/// DELETE WHERE UPPER(FOO.NAME) == FOO.NAME
715-
/// ```
716-
///
717-
/// By default, the support for the `UPDATE ... DELETE` and its associated
718-
/// predicate is enabled.
719-
///
720-
/// See also [Dialect::supports_merge_insert_predicate] and
721-
/// [Dialect::supports_merge_update_predicate].
722-
fn supports_merge_update_delete_predicate(&self) -> bool {
723-
true
724-
}
725-
726613
/// Dialect-specific infix parser override
727614
///
728615
/// This method is called to parse the next infix expression.

src/dialect/mssql.rs

Lines changed: 0 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -123,26 +123,6 @@ impl Dialect for MsSqlDialect {
123123
true
124124
}
125125

126-
/// Set <https://learn.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql>
127-
fn supports_merge_insert_predicate(&self) -> bool {
128-
false
129-
}
130-
131-
/// Set <https://learn.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql>
132-
fn supports_merge_insert_qualified_columns(&self) -> bool {
133-
false
134-
}
135-
136-
/// Set <https://learn.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql>
137-
fn supports_merge_update_delete_predicate(&self) -> bool {
138-
false
139-
}
140-
141-
/// Set <https://learn.microsoft.com/en-us/sql/t-sql/statements/merge-transact-sql>
142-
fn supports_merge_update_predicate(&self) -> bool {
143-
false
144-
}
145-
146126
/// See <https://learn.microsoft.com/en-us/sql/relational-databases/security/authentication-access/server-level-roles>
147127
fn get_reserved_grantees_types(&self) -> &[GranteesType] {
148128
&[GranteesType::Public]

src/dialect/postgresql.rs

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -280,19 +280,4 @@ impl Dialect for PostgreSqlDialect {
280280
fn supports_interval_options(&self) -> bool {
281281
true
282282
}
283-
284-
/// See <https://www.postgresql.org/docs/current/sql-merge.html>
285-
fn supports_merge_insert_predicate(&self) -> bool {
286-
false
287-
}
288-
289-
/// See <https://www.postgresql.org/docs/current/sql-merge.html>
290-
fn supports_merge_update_delete_predicate(&self) -> bool {
291-
false
292-
}
293-
294-
/// See <https://www.postgresql.org/docs/current/sql-merge.html>
295-
fn supports_merge_update_predicate(&self) -> bool {
296-
false
297-
}
298283
}

src/parser/merge.rs

Lines changed: 5 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ use alloc::{boxed::Box, format, string::ToString, vec, vec::Vec};
1818
use crate::{
1919
ast::{
2020
Merge, MergeAction, MergeClause, MergeClauseKind, MergeInsertExpr, MergeInsertKind,
21-
MergeUpdateExpr, ObjectName, ObjectNamePart, OutputClause, SetExpr, Statement,
21+
MergeUpdateExpr, ObjectName, OutputClause, SetExpr, Statement,
2222
},
2323
dialect::{BigQueryDialect, GenericDialect, MySqlDialect},
2424
keywords::Keyword,
@@ -116,16 +116,12 @@ impl Parser<'_> {
116116
let update_token = self.get_current_token().clone();
117117
self.expect_keyword_is(Keyword::SET)?;
118118
let assignments = self.parse_comma_separated(Parser::parse_assignment)?;
119-
let update_predicate = if self.dialect.supports_merge_update_predicate()
120-
&& self.parse_keyword(Keyword::WHERE)
121-
{
119+
let update_predicate = if self.parse_keyword(Keyword::WHERE) {
122120
Some(self.parse_expr()?)
123121
} else {
124122
None
125123
};
126-
let delete_predicate = if self.dialect.supports_merge_update_delete_predicate()
127-
&& self.parse_keyword(Keyword::DELETE)
128-
{
124+
let delete_predicate = if self.parse_keyword(Keyword::DELETE) {
129125
let _ = self.expect_keyword(Keyword::WHERE)?;
130126
Some(self.parse_expr()?)
131127
} else {
@@ -179,9 +175,7 @@ impl Parser<'_> {
179175
let values = self.parse_values(is_mysql, false)?;
180176
(MergeInsertKind::Values(values), values_token)
181177
};
182-
let insert_predicate = if self.dialect.supports_merge_insert_predicate()
183-
&& self.parse_keyword(Keyword::WHERE)
184-
{
178+
let insert_predicate = if self.parse_keyword(Keyword::WHERE) {
185179
Some(self.parse_expr()?)
186180
} else {
187181
None
@@ -216,25 +210,7 @@ impl Parser<'_> {
216210
&mut self,
217211
allow_empty: bool,
218212
) -> Result<Vec<ObjectName>, ParserError> {
219-
if self.dialect.supports_merge_insert_qualified_columns() {
220-
self.parse_parenthesized_qualified_column_list(IsOptional::Optional, allow_empty)
221-
} else {
222-
self.parse_parenthesized_column_list_as_object_names(IsOptional::Optional, allow_empty)
223-
}
224-
}
225-
226-
/// Just like [Parser::parse_parenthesized_column_list] parses a
227-
/// parenthesized list of (simple) column names but returns them as object
228-
/// names.
229-
fn parse_parenthesized_column_list_as_object_names(
230-
&mut self,
231-
optional: IsOptional,
232-
allow_empty: bool,
233-
) -> Result<Vec<ObjectName>, ParserError> {
234-
self.parse_parenthesized_column_list_inner(optional, allow_empty, |p| {
235-
p.parse_identifier()
236-
.map(|ident| ObjectName(vec![ObjectNamePart::Identifier(ident)]))
237-
})
213+
self.parse_parenthesized_qualified_column_list(IsOptional::Optional, allow_empty)
238214
}
239215

240216
fn parse_output(

tests/sqlparser_common.rs

Lines changed: 3 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1641,14 +1641,6 @@ fn ms_and_generic() -> TestedDialects {
16411641
TestedDialects::new(vec![Box::new(MsSqlDialect {}), Box::new(GenericDialect {})])
16421642
}
16431643

1644-
fn only_ms() -> TestedDialects {
1645-
TestedDialects::new(vec![Box::new(MsSqlDialect {})])
1646-
}
1647-
1648-
fn only_generic() -> TestedDialects {
1649-
TestedDialects::new(vec![Box::new(GenericDialect {})])
1650-
}
1651-
16521644
#[test]
16531645
fn parse_json_ops_without_colon() {
16541646
use self::BinaryOperator::*;
@@ -10101,7 +10093,7 @@ WHEN NOT MATCHED THEN \
1010110093
INSERT (ID, NAME) \
1010210094
VALUES (FOO_IMPORT.ID, UPPER(FOO_IMPORT.NAME)) \
1010310095
WHERE NOT FOO_IMPORT.NAME LIKE '%.DO_NOT_INSERT'";
10104-
only_generic().verified_stmt(sql);
10096+
all_dialects().verified_stmt(sql);
1010510097
}
1010610098

1010710099
#[test]
@@ -10121,7 +10113,7 @@ MERGE INTO FOO USING FOO_IMPORT ON (FOO.ID = FOO_IMPORT.ID) \
1012110113
WHEN NOT MATCHED THEN \
1012210114
INSERT (FOO.ID, FOO.NAME) \
1012310115
VALUES (1, 'abc')";
10124-
pg_and_generic().verified_stmt(sql);
10116+
all_dialects().verified_stmt(sql);
1012510117
}
1012610118

1012710119
#[test]
@@ -10131,24 +10123,7 @@ MERGE INTO PLAYGROUND.FOO USING FOO_IMPORT ON (PLAYGROUND.FOO.ID = FOO_IMPORT.ID
1013110123
WHEN NOT MATCHED THEN \
1013210124
INSERT (PLAYGROUND.FOO.ID, PLAYGROUND.FOO.NAME) \
1013310125
VALUES (1, 'abc')";
10134-
pg_and_generic().verified_stmt(sql);
10135-
}
10136-
10137-
#[test]
10138-
fn test_merge_insert_with_qualified_columns_not_supported() {
10139-
let sql = "\
10140-
MERGE INTO FOO USING FOO_IMPORT ON (FOO.ID = FOO_IMPORT.ID) \
10141-
WHEN NOT MATCHED THEN \
10142-
INSERT (FOO.ID, FOO.NAME) \
10143-
VALUES (1, 'abc')";
10144-
assert!(only_ms().parse_sql_statements(sql).is_err());
10145-
10146-
let sql = "\
10147-
MERGE INTO PLAYGROUND.FOO USING FOO_IMPORT ON (PLAYGROUND.FOO.ID = FOO_IMPORT.ID) \
10148-
WHEN NOT MATCHED THEN \
10149-
INSERT (PLAYGROUND.FOO.ID, PLAYGROUND.FOO.NAME) \
10150-
VALUES (1, 'abc')";
10151-
assert!(only_ms().parse_sql_statements(sql).is_err());
10126+
all_dialects().verified_stmt(sql);
1015210127
}
1015310128

1015410129
#[test]

0 commit comments

Comments
 (0)