Skip to content

Commit c2e83d4

Browse files
authored
Allow IF NOT EXISTS after table name for Snowflake (apache#1881)
1 parent 9fc9009 commit c2e83d4

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

src/dialect/snowflake.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -560,6 +560,9 @@ pub fn parse_create_table(
560560
builder.storage_serialization_policy =
561561
Some(parse_storage_serialization_policy(parser)?);
562562
}
563+
Keyword::IF if parser.parse_keywords(&[Keyword::NOT, Keyword::EXISTS]) => {
564+
builder = builder.if_not_exists(true);
565+
}
563566
_ => {
564567
return parser.expected("end of statement", next_token);
565568
}

tests/sqlparser_snowflake.rs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -446,6 +446,27 @@ fn test_snowflake_create_table_if_not_exists() {
446446
}
447447
_ => unreachable!(),
448448
}
449+
450+
for (sql, parse_to) in [
451+
(
452+
r#"CREATE TABLE IF NOT EXISTS "A"."B"."C" (v VARIANT)"#,
453+
r#"CREATE TABLE IF NOT EXISTS "A"."B"."C" (v VARIANT)"#,
454+
),
455+
(
456+
r#"CREATE TABLE "A"."B"."C" IF NOT EXISTS (v VARIANT)"#,
457+
r#"CREATE TABLE IF NOT EXISTS "A"."B"."C" (v VARIANT)"#,
458+
),
459+
(
460+
r#"CREATE TRANSIENT TABLE IF NOT EXISTS "A"."B"."C" (v VARIANT)"#,
461+
r#"CREATE TRANSIENT TABLE IF NOT EXISTS "A"."B"."C" (v VARIANT)"#,
462+
),
463+
(
464+
r#"CREATE TRANSIENT TABLE "A"."B"."C" IF NOT EXISTS (v VARIANT)"#,
465+
r#"CREATE TRANSIENT TABLE IF NOT EXISTS "A"."B"."C" (v VARIANT)"#,
466+
),
467+
] {
468+
snowflake().one_statement_parses_to(sql, parse_to);
469+
}
449470
}
450471

451472
#[test]

0 commit comments

Comments
 (0)