From 4de1707c59cd36ed95b98b20f0d8bc3d0443510c Mon Sep 17 00:00:00 2001 From: mjh Date: Fri, 2 Feb 2024 08:37:39 +0800 Subject: [PATCH] feat: with no log --- .../statement/select/PlainSelect.java | 36 +++++++++++++++++++ .../util/deparser/SelectDeParser.java | 6 ++++ .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 3 ++ .../statement/select/SelectTest.java | 6 ++++ 4 files changed, 51 insertions(+) diff --git a/src/main/java/net/sf/jsqlparser/statement/select/PlainSelect.java b/src/main/java/net/sf/jsqlparser/statement/select/PlainSelect.java index 560622c67..2745dae6d 100644 --- a/src/main/java/net/sf/jsqlparser/statement/select/PlainSelect.java +++ b/src/main/java/net/sf/jsqlparser/statement/select/PlainSelect.java @@ -67,6 +67,10 @@ public class PlainSelect extends Select { private boolean isUsingOnly = false; + private boolean useWithNoLog = false; + + private Table intoTempTable = null; + @Deprecated public boolean isUseBrackets() { return false; @@ -228,6 +232,32 @@ public PlainSelect withUsingOnly(boolean usingOnly) { return this; } + public boolean isUseWithNoLog() { + return useWithNoLog; + } + + public void setUseWithNoLog(boolean useWithNoLog) { + this.useWithNoLog = useWithNoLog; + } + + public PlainSelect withUseWithNoLog(boolean useWithNoLog) { + this.setUseWithNoLog(useWithNoLog); + return this; + } + + public Table getIntoTempTable() { + return intoTempTable; + } + + public void setIntoTempTable(Table intoTempTable) { + this.intoTempTable = intoTempTable; + } + + public PlainSelect withIntoTempTable(Table intoTempTable) { + this.setIntoTempTable(intoTempTable); + return this; + } + @Override public void accept(SelectVisitor selectVisitor) { selectVisitor.visit(this); @@ -529,6 +559,12 @@ public StringBuilder appendSelectBodyTo(StringBuilder builder) { builder.append(" WHERE ").append(where); } } + if (intoTempTable != null) { + builder.append(" INTO TEMP ").append(intoTempTable); + } + if (useWithNoLog) { + builder.append(" WITH NO LOG"); + } return builder; } diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java index 832989022..d2a53028c 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/SelectDeParser.java @@ -320,6 +320,12 @@ public void visit(PlainSelect plainSelect) { if (plainSelect.getForXmlPath() != null) { buffer.append(" FOR XML PATH(").append(plainSelect.getForXmlPath()).append(")"); } + if (plainSelect.getIntoTempTable() != null) { + buffer.append(" INTO TEMP ").append(plainSelect.getIntoTempTable()); + } + if (plainSelect.isUseWithNoLog()) { + buffer.append(" WITH NO LOG"); + } } diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 13e5d2dd6..c857e4cbb 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -2237,6 +2237,7 @@ PlainSelect PlainSelect() #PlainSelect: boolean noWait = false; String windowName = null; WindowDefinition winDef; + Table intoTempTable = null; } { @@ -2322,6 +2323,8 @@ PlainSelect PlainSelect() #PlainSelect: | { plainSelect.setSkipLocked(true); }) ] ] [ LOOKAHEAD() optimize = OptimizeFor() { plainSelect.setOptimizeFor(optimize); } ] + [ LOOKAHEAD(3) intoTempTable = Table() { plainSelect.setIntoTempTable(intoTempTable);} ] + [ LOOKAHEAD(3) { plainSelect.setUseWithNoLog(true); } ] { plainSelect.setSelectItems(selectItems); plainSelect.setFromItem(fromItem); diff --git a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java index 781b3af59..fd4f28099 100644 --- a/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java @@ -5813,4 +5813,10 @@ public void testIssue1908() throws JSQLParserException { String stmt = "SELECT * FROM ONLY sys_business_rule"; assertSqlCanBeParsedAndDeparsed(stmt); } + + @Test + public void testIssue1833() throws JSQLParserException { + String stmt = "SELECT age, name, gender FROM user_info INTO TEMP user_temp WITH NO LOG"; + assertSqlCanBeParsedAndDeparsed(stmt); + } }