From bc5f33da76440a5364a7f9894be56d4a1262c411 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9E=97=E6=9E=B8?= Date: Mon, 3 Feb 2025 18:31:52 +0800 Subject: [PATCH] Implement databricks create or replace temp table. --- .../databricks/parser/DatabricksCreateTableParser.java | 6 ++++++ .../com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java | 7 +++---- core/src/test/resources/bvt/parser/databricks/0.txt | 7 +++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/com/alibaba/druid/sql/dialect/databricks/parser/DatabricksCreateTableParser.java b/core/src/main/java/com/alibaba/druid/sql/dialect/databricks/parser/DatabricksCreateTableParser.java index a29a63348d..68d2c5dfee 100644 --- a/core/src/main/java/com/alibaba/druid/sql/dialect/databricks/parser/DatabricksCreateTableParser.java +++ b/core/src/main/java/com/alibaba/druid/sql/dialect/databricks/parser/DatabricksCreateTableParser.java @@ -5,6 +5,7 @@ import com.alibaba.druid.sql.parser.SQLExprParser; import com.alibaba.druid.sql.parser.SQLSelectParser; import com.alibaba.druid.sql.parser.Token; +import com.alibaba.druid.util.FnvHash; public class DatabricksCreateTableParser extends SparkCreateTableParser { public DatabricksCreateTableParser(SQLExprParser exprParser) { @@ -19,5 +20,10 @@ protected void createTableBefore(SQLCreateTableStatement createTable) { accept(Token.REPLACE); createTable.config(SQLCreateTableStatement.Feature.OrReplace); } + + if (lexer.identifierEquals(FnvHash.Constants.TEMPORARY) || lexer.identifierEquals("temp")) { + lexer.nextToken(); + createTable.setTemporary(true); + } } } diff --git a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index 2ba61f0971..69687181d1 100644 --- a/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/core/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -10664,6 +10664,9 @@ public boolean visit(MySqlCreateTableStatement x) { } protected void printCreateTableFeatures(SQLCreateTableStatement x) { + if (x.isEnabled(SQLCreateTableStatement.Feature.OrReplace)) { + print0(ucase ? "OR REPLACE " : "or replace "); + } SQLCreateTableStatement.Feature[] features = { SQLCreateTableStatement.Feature.Global, SQLCreateTableStatement.Feature.Local, @@ -10682,10 +10685,6 @@ protected void printCreateTableFeatures(SQLCreateTableStatement x) { print(' '); } } - - if (x.isEnabled(SQLCreateTableStatement.Feature.OrReplace)) { - print0(ucase ? "OR REPLACE " : "or replace "); - } } @Override diff --git a/core/src/test/resources/bvt/parser/databricks/0.txt b/core/src/test/resources/bvt/parser/databricks/0.txt index 9272f410de..c5237b7a5f 100644 --- a/core/src/test/resources/bvt/parser/databricks/0.txt +++ b/core/src/test/resources/bvt/parser/databricks/0.txt @@ -1,3 +1,10 @@ +create or replace temp table c as select a from b +-------------------- +CREATE OR REPLACE TEMPORARY TABLE c +AS +SELECT a +FROM b +------------------------------------------------------------------------------------------------------------------------ refresh table mc_power_insight_dm_ngbi_uat.dm_td_institution; -------------------- REFRESH TABLE mc_power_insight_dm_ngbi_uat.dm_td_institution;