From 6690d48e8c9a6281f1280c7f008885b5971cd5fc Mon Sep 17 00:00:00 2001 From: zaza Date: Sun, 8 Jan 2023 22:46:02 +0100 Subject: [PATCH] Support DROP MATERIALIZED VIEW statements --- .../net/sf/jsqlparser/statement/drop/Drop.java | 18 +++++++++++++++++- .../jsqlparser/util/deparser/DropDeParser.java | 3 +++ .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 1 + .../sf/jsqlparser/statement/drop/DropTest.java | 5 +++++ 4 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/sf/jsqlparser/statement/drop/Drop.java b/src/main/java/net/sf/jsqlparser/statement/drop/Drop.java index 6be3bc8f4..17ef20e22 100644 --- a/src/main/java/net/sf/jsqlparser/statement/drop/Drop.java +++ b/src/main/java/net/sf/jsqlparser/statement/drop/Drop.java @@ -28,6 +28,7 @@ public class Drop implements Statement { private List parameters; private Map> typeToParameters = new HashMap<>(); private boolean ifExists = false; + private boolean materialized = false; @Override public void accept(StatementVisitor statementVisitor) { @@ -66,6 +67,14 @@ public void setIfExists(boolean ifExists) { this.ifExists = ifExists; } + public boolean isMaterialized() { + return materialized; + } + + public void setMaterialized(boolean materialized) { + this.materialized = materialized; + } + public Map> getTypeToParameters() { return typeToParameters; } @@ -76,7 +85,9 @@ public void setTypeToParameters(Map> typeToParameters) { @Override public String toString() { - String sql = "DROP " + type + " " + String sql = "DROP " + + (materialized ? "MATERIALIZED " : "") + + type + " " + (ifExists ? "IF EXISTS " : "") + name.toString(); if (type.equals("FUNCTION")) { @@ -106,6 +117,11 @@ public Drop withIfExists(boolean ifExists) { return this; } + public Drop withMaterialized(boolean materialized) { + this.setMaterialized(materialized); + return this; + } + public Drop withType(String type) { this.setType(type); return this; diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/DropDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/DropDeParser.java index ed1febf30..849165dd7 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/DropDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/DropDeParser.java @@ -21,6 +21,9 @@ public DropDeParser(StringBuilder buffer) { @Override public void deParse(Drop drop) { buffer.append("DROP "); + if (drop.isMaterialized()) { + buffer.append("MATERIALIZED "); + } buffer.append(drop.getType()); if (drop.isIfExists()) { buffer.append(" IF EXISTS"); diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index aeb0ae341..9aab29e30 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -5698,6 +5698,7 @@ Drop Drop(): } { + [ { drop.setMaterialized(true);} ] ( tk= | diff --git a/src/test/java/net/sf/jsqlparser/statement/drop/DropTest.java b/src/test/java/net/sf/jsqlparser/statement/drop/DropTest.java index 1de5bb8b3..7087dc2b3 100644 --- a/src/test/java/net/sf/jsqlparser/statement/drop/DropTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/drop/DropTest.java @@ -87,6 +87,11 @@ public void testDropViewIssue545_2() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("DROP VIEW IF EXISTS myview"); } + @Test + public void testDropMaterializedView() throws JSQLParserException { + assertSqlCanBeParsedAndDeparsed("DROP MATERIALIZED VIEW myview"); + } + @Test public void testDropSchemaIssue855() throws JSQLParserException { assertSqlCanBeParsedAndDeparsed("DROP SCHEMA myschema");