From 2ed6c868e00869b434630794b00ff9a539041158 Mon Sep 17 00:00:00 2001 From: Olivier Cavadenti Date: Mon, 1 Nov 2021 13:33:08 +0100 Subject: [PATCH 1/3] Add Delete / Update modifiers for MySQL #1254 --- .../jsqlparser/statement/delete/Delete.java | 56 ++++++++++++++++++- .../delete/DeleteModifierPriority.java | 14 +++++ .../jsqlparser/statement/update/Update.java | 36 ++++++++++++ .../update/UpdateModifierPriority.java | 14 +++++ .../util/deparser/DeleteDeParser.java | 9 +++ .../util/deparser/UpdateDeParser.java | 9 ++- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 37 ++++++++++-- .../statement/delete/DeleteTest.java | 43 ++++++++++++++ .../statement/update/UpdateTest.java | 29 +++++++++- 9 files changed, 238 insertions(+), 9 deletions(-) create mode 100644 src/main/java/net/sf/jsqlparser/statement/delete/DeleteModifierPriority.java create mode 100644 src/main/java/net/sf/jsqlparser/statement/update/UpdateModifierPriority.java diff --git a/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java b/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java index 483e4fc72..12f30075d 100644 --- a/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java +++ b/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java @@ -27,6 +27,8 @@ import net.sf.jsqlparser.statement.select.OrderByElement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.WithItem; +import net.sf.jsqlparser.statement.update.Update; +import net.sf.jsqlparser.statement.update.UpdateModifierPriority; public class Delete implements Statement { @@ -43,6 +45,9 @@ public class Delete implements Statement { public List getWithItemsList() { return withItemsList; } + private DeleteModifierPriority modifierPriority; + private boolean modifierIgnore; + private boolean modifierQuick; public void setWithItemsList(List withItemsList) { this.withItemsList = withItemsList; @@ -160,10 +165,20 @@ public String toString() { b.append("DELETE"); + if (modifierPriority != null) { + b.append(" ").append(modifierPriority.name()); + } + if (modifierQuick) { + b.append(" QUICK"); + } + if (modifierIgnore) { + b.append(" IGNORE"); + } + if (tables != null && tables.size() > 0) { b.append(" "); b.append(tables.stream() - .map(t -> t.toString()) + .map(Table::toString) .collect(joining(", "))); } @@ -243,6 +258,45 @@ public Delete withHasFrom(boolean hasFrom) { return this; } + public Delete withModifierPriority(DeleteModifierPriority modifierPriority){ + this.setModifierPriority(modifierPriority); + return this; + } + + public Delete withModifierIgnore(boolean modifierIgnore){ + this.setModifierIgnore(modifierIgnore); + return this; + } + + public Delete withModifierQuick(boolean modifierQuick){ + this.setModifierQuick(modifierQuick); + return this; + } + + public void setModifierPriority(DeleteModifierPriority modifierPriority) { + this.modifierPriority = modifierPriority; + } + + public DeleteModifierPriority getModifierPriority() { + return modifierPriority; + } + + public void setModifierIgnore(boolean modifierIgnore) { + this.modifierIgnore = modifierIgnore; + } + + public void setModifierQuick(boolean modifierQuick) { + this.modifierQuick = modifierQuick; + } + + public boolean isModifierIgnore() { + return modifierIgnore; + } + + public boolean isModifierQuick() { + return modifierQuick; + } + public Delete addTables(Table... tables) { List collection = Optional.ofNullable(getTables()).orElseGet(ArrayList::new); Collections.addAll(collection, tables); diff --git a/src/main/java/net/sf/jsqlparser/statement/delete/DeleteModifierPriority.java b/src/main/java/net/sf/jsqlparser/statement/delete/DeleteModifierPriority.java new file mode 100644 index 000000000..7fdb58039 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/statement/delete/DeleteModifierPriority.java @@ -0,0 +1,14 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2019 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.statement.delete; + +public enum DeleteModifierPriority { + LOW_PRIORITY +} diff --git a/src/main/java/net/sf/jsqlparser/statement/update/Update.java b/src/main/java/net/sf/jsqlparser/statement/update/Update.java index fbfafd68d..0160de1a4 100644 --- a/src/main/java/net/sf/jsqlparser/statement/update/Update.java +++ b/src/main/java/net/sf/jsqlparser/statement/update/Update.java @@ -21,6 +21,7 @@ import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; +import net.sf.jsqlparser.statement.insert.InsertModifierPriority; import net.sf.jsqlparser.statement.select.*; @SuppressWarnings({"PMD.CyclomaticComplexity"}) @@ -38,6 +39,8 @@ public class Update implements Statement { private Limit limit; private boolean returningAllColumns = false; private List returningExpressionList = null; + private UpdateModifierPriority modifierPriority; + private boolean modifierIgnore; public ArrayList getUpdateSets() { return updateSets; @@ -233,6 +236,23 @@ public void setReturningExpressionList(List returningExpre this.returningExpressionList = returningExpressionList; } + public UpdateModifierPriority getModifierPriority() { + return modifierPriority; + } + + public void setModifierPriority(UpdateModifierPriority modifierPriority) { + this.modifierPriority = modifierPriority; + } + + public boolean isModifierIgnore() { + return modifierIgnore; + } + + public void setModifierIgnore(boolean modifierIgnore) { + this.modifierIgnore = modifierIgnore; + } + + @Override @SuppressWarnings({"PMD.CyclomaticComplexity", "PMD.NPathComplexity", "PMD.ExcessiveMethodLength"}) public String toString() { @@ -250,6 +270,12 @@ public String toString() { } } b.append("UPDATE "); + if (modifierPriority != null) { + b.append(modifierPriority.name()).append(" "); + } + if (modifierIgnore) { + b.append("IGNORE "); + } b.append(table); if (startJoins != null) { for (Join join : startJoins) { @@ -405,6 +431,16 @@ public Update withExpressions(List expressions) { return this; } + public Update withModifierPriority(UpdateModifierPriority modifierPriority){ + this.setModifierPriority(modifierPriority); + return this; + } + + public Update withModifierIgnore(boolean modifierIgnore){ + this.setModifierIgnore(modifierIgnore); + return this; + } + public Update addColumns(Column... columns) { List collection = Optional.ofNullable(getColumns()).orElseGet(ArrayList::new); Collections.addAll(collection, columns); diff --git a/src/main/java/net/sf/jsqlparser/statement/update/UpdateModifierPriority.java b/src/main/java/net/sf/jsqlparser/statement/update/UpdateModifierPriority.java new file mode 100644 index 000000000..7e6f84654 --- /dev/null +++ b/src/main/java/net/sf/jsqlparser/statement/update/UpdateModifierPriority.java @@ -0,0 +1,14 @@ +/*- + * #%L + * JSQLParser library + * %% + * Copyright (C) 2004 - 2019 JSQLParser + * %% + * Dual licensed under GNU LGPL 2.1 or Apache License 2.0 + * #L% + */ +package net.sf.jsqlparser.statement.update; + +public enum UpdateModifierPriority { + LOW_PRIORITY +} diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/DeleteDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/DeleteDeParser.java index 50d123f83..c2830f4ee 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/DeleteDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/DeleteDeParser.java @@ -47,6 +47,15 @@ public void deParse(Delete delete) { } } buffer.append("DELETE"); + if (delete.getModifierPriority() != null) { + buffer.append(" ").append(delete.getModifierPriority()); + } + if (delete.isModifierQuick()) { + buffer.append(" QUICK"); + } + if (delete.isModifierIgnore()) { + buffer.append(" IGNORE"); + } if (delete.getTables() != null && !delete.getTables().isEmpty()) { buffer.append( delete.getTables().stream().map(Table::getFullyQualifiedName).collect(joining(", ", " ", ""))); diff --git a/src/main/java/net/sf/jsqlparser/util/deparser/UpdateDeParser.java b/src/main/java/net/sf/jsqlparser/util/deparser/UpdateDeParser.java index fdd168391..77d952568 100644 --- a/src/main/java/net/sf/jsqlparser/util/deparser/UpdateDeParser.java +++ b/src/main/java/net/sf/jsqlparser/util/deparser/UpdateDeParser.java @@ -48,7 +48,14 @@ public void deParse(Update update) { buffer.append(" "); } } - buffer.append("UPDATE ").append(update.getTable()); + buffer.append("UPDATE "); + if (update.getModifierPriority() != null) { + buffer.append(update.getModifierPriority()).append(" "); + } + if (update.isModifierIgnore()) { + buffer.append("IGNORE "); + } + buffer.append(update.getTable()); if (update.getStartJoins() != null) { for (Join join : update.getStartJoins()) { if (join.isSimple()) { diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 33e5c2971..56f6f8484 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -326,6 +326,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */ | | | +| | | | @@ -1124,11 +1125,18 @@ Update Update( List with ): List orderByElements; boolean useColumnsBrackets = false; List returning = null; + Token tk = null; + UpdateModifierPriority modifierPriority = null; + boolean modifierIgnore = false; } { - { update.setOracleHint(getOracleHint()); } table=TableWithAlias() - startJoins=JoinsList() - + { update.setOracleHint(getOracleHint()); } + [(tk = ) + {if (tk!=null) + modifierPriority = UpdateModifierPriority.valueOf(tk.image.toUpperCase()); + }] + [{ modifierIgnore = true; }] + table=TableWithAlias() startJoins=JoinsList() ( LOOKAHEAD(3) tableColumn=Column() "=" valueExpression=SimpleExpression() { update.addUpdateSet(tableColumn, valueExpression); } @@ -1193,6 +1201,8 @@ Update Update( List with ): .withStartJoins(startJoins) .withFromItem(fromItem) .withJoins(joins) + .withModifierPriority(modifierPriority) + .withModifierIgnore(modifierIgnore) .withReturningExpressionList(returning); } } @@ -1480,9 +1490,20 @@ Delete Delete( List with ): Limit limit = null; List orderByElements; boolean hasFrom = false; + Token tk = null; + DeleteModifierPriority modifierPriority = null; + boolean modifierIgnore = false; + boolean modifierQuick = false; } { - { delete.setOracleHint(getOracleHint()); } [LOOKAHEAD(4) (table=TableWithAlias() { tables.add(table); } + { delete.setOracleHint(getOracleHint()); } + [(tk = ) + {if (tk!=null) + modifierPriority = DeleteModifierPriority.valueOf(tk.image.toUpperCase()); + }] + [{ modifierQuick = true; }] + [{ modifierIgnore = true; }] + [LOOKAHEAD(4) (table=TableWithAlias() { tables.add(table); } ("," table=TableWithAlias() { tables.add(table); } )* | ) { hasFrom = true; }] @@ -1497,7 +1518,13 @@ Delete Delete( List with ): delete.setJoins(joins); } return delete.withWithItemsList(with) - .withTables(tables).withTable(table).withHasFrom(hasFrom).withUsingList(usingList); + .withTables(tables) + .withTable(table) + .withHasFrom(hasFrom) + .withUsingList(usingList) + .withModifierPriority(modifierPriority) + .withModifierIgnore(modifierIgnore) + .withModifierQuick(modifierQuick); } } diff --git a/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java b/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java index 0097f4e63..c5f25829a 100644 --- a/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java @@ -12,6 +12,8 @@ import static net.sf.jsqlparser.test.TestUtils.assertSqlCanBeParsedAndDeparsed; import static net.sf.jsqlparser.test.TestUtils.assertOracleHintExists; import static org.junit.Assert.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.StringReader; @@ -137,4 +139,45 @@ public void testUsing() throws JSQLParserException { String statement = "DELETE A USING B.C D WHERE D.Z = 1"; assertSqlCanBeParsedAndDeparsed(statement); } + + @Test + public void testDeleteLowPriority() throws JSQLParserException { + String stmt = "DELETE LOW_PRIORITY FROM tablename"; + Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + assertEquals(delete.getModifierPriority(), DeleteModifierPriority.LOW_PRIORITY); + } + + @Test + public void testDeleteQuickModifier() throws JSQLParserException { + String stmt = "DELETE QUICK FROM tablename"; + Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + assertTrue(delete.isModifierQuick()); + String stmt2 = "DELETE FROM tablename"; + Delete delete2 = (Delete)assertSqlCanBeParsedAndDeparsed(stmt2); + assertFalse(delete2.isModifierQuick()); + } + + @Test + public void testDeleteIgnoreModifier() throws JSQLParserException { + String stmt = "DELETE IGNORE FROM tablename"; + Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + assertTrue(delete.isModifierIgnore()); + String stmt2 = "DELETE FROM tablename"; + Delete delete2 = (Delete)assertSqlCanBeParsedAndDeparsed(stmt2); + assertFalse(delete2.isModifierIgnore()); + } + + @Test + public void testDeleteMultipleModifiers() throws JSQLParserException { + String stmt = "DELETE LOW_PRIORITY QUICK FROM tablename"; + Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + assertEquals(delete.getModifierPriority(), DeleteModifierPriority.LOW_PRIORITY); + assertTrue(delete.isModifierQuick()); + + String stmt2 = "DELETE LOW_PRIORITY QUICK IGNORE FROM tablename"; + Delete delete2 = (Delete)assertSqlCanBeParsedAndDeparsed(stmt2); + assertEquals(delete2.getModifierPriority(), DeleteModifierPriority.LOW_PRIORITY); + assertTrue(delete2.isModifierIgnore()); + assertTrue(delete2.isModifierQuick()); + } } diff --git a/src/test/java/net/sf/jsqlparser/statement/update/UpdateTest.java b/src/test/java/net/sf/jsqlparser/statement/update/UpdateTest.java index 8476b9bb1..5a91ad89e 100644 --- a/src/test/java/net/sf/jsqlparser/statement/update/UpdateTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/update/UpdateTest.java @@ -18,8 +18,8 @@ import net.sf.jsqlparser.expression.operators.relational.GreaterThanEquals; import net.sf.jsqlparser.parser.CCJSqlParserManager; import static net.sf.jsqlparser.test.TestUtils.*; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; +import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; import net.sf.jsqlparser.parser.CCJSqlParserUtil; import org.junit.Assert; @@ -248,4 +248,29 @@ public void testUpdateSetsIssue1316() throws JSQLParserException { Assert.assertEquals(1, update.getUpdateSets().get(2).getColumns().size()); Assert.assertEquals(1, update.getUpdateSets().get(2).getExpressions().size()); } + + @Test + public void testUpdateLowPriority() throws JSQLParserException { + String stmt = "UPDATE LOW_PRIORITY table1 A SET A.columna = 'XXX'"; + Update update = (Update)assertSqlCanBeParsedAndDeparsed(stmt); + assertEquals(update.getModifierPriority(), UpdateModifierPriority.LOW_PRIORITY); + } + + @Test + public void testUpdateIgnoreModifier() throws JSQLParserException { + String stmt = "UPDATE IGNORE table1 A SET A.columna = 'XXX'"; + Update update = (Update)assertSqlCanBeParsedAndDeparsed(stmt); + assertTrue(update.isModifierIgnore()); + String stmt2 = "UPDATE table1 A SET A.columna = 'XXX'"; + Update update2 = (Update)assertSqlCanBeParsedAndDeparsed(stmt2); + assertFalse(update2.isModifierIgnore()); + } + + @Test + public void testUpdateMultipleModifiers() throws JSQLParserException { + String stmt = "UPDATE LOW_PRIORITY IGNORE table1 A SET A.columna = 'XXX'"; + Update update = (Update)assertSqlCanBeParsedAndDeparsed(stmt); + assertEquals(update.getModifierPriority(), UpdateModifierPriority.LOW_PRIORITY); + assertTrue(update.isModifierIgnore()); + } } From bee50e47258af2cdea3740b82b970511e2fca81e Mon Sep 17 00:00:00 2001 From: Olivier Cavadenti Date: Mon, 1 Nov 2021 14:16:42 +0100 Subject: [PATCH 2/3] fix codacy issues + pr return --- .../net/sf/jsqlparser/statement/delete/Delete.java | 9 ++++----- .../net/sf/jsqlparser/statement/update/Update.java | 1 - .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 4 ++-- .../sf/jsqlparser/statement/delete/DeleteTest.java | 14 +++++++------- 4 files changed, 13 insertions(+), 15 deletions(-) diff --git a/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java b/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java index 12f30075d..8fcf8c553 100644 --- a/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java +++ b/src/main/java/net/sf/jsqlparser/statement/delete/Delete.java @@ -27,8 +27,6 @@ import net.sf.jsqlparser.statement.select.OrderByElement; import net.sf.jsqlparser.statement.select.PlainSelect; import net.sf.jsqlparser.statement.select.WithItem; -import net.sf.jsqlparser.statement.update.Update; -import net.sf.jsqlparser.statement.update.UpdateModifierPriority; public class Delete implements Statement { @@ -42,13 +40,14 @@ public class Delete implements Statement { private Limit limit; private List orderByElements; private boolean hasFrom = true; - public List getWithItemsList() { - return withItemsList; - } private DeleteModifierPriority modifierPriority; private boolean modifierIgnore; private boolean modifierQuick; + public List getWithItemsList() { + return withItemsList; + } + public void setWithItemsList(List withItemsList) { this.withItemsList = withItemsList; } diff --git a/src/main/java/net/sf/jsqlparser/statement/update/Update.java b/src/main/java/net/sf/jsqlparser/statement/update/Update.java index 0160de1a4..33f703bb4 100644 --- a/src/main/java/net/sf/jsqlparser/statement/update/Update.java +++ b/src/main/java/net/sf/jsqlparser/statement/update/Update.java @@ -21,7 +21,6 @@ import net.sf.jsqlparser.schema.Table; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.StatementVisitor; -import net.sf.jsqlparser.statement.insert.InsertModifierPriority; import net.sf.jsqlparser.statement.select.*; @SuppressWarnings({"PMD.CyclomaticComplexity"}) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index 56f6f8484..fafc59c21 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -1133,7 +1133,7 @@ Update Update( List with ): { update.setOracleHint(getOracleHint()); } [(tk = ) {if (tk!=null) - modifierPriority = UpdateModifierPriority.valueOf(tk.image.toUpperCase()); + modifierPriority = UpdateModifierPriority.LOW_PRIORITY; }] [{ modifierIgnore = true; }] table=TableWithAlias() startJoins=JoinsList() @@ -1499,7 +1499,7 @@ Delete Delete( List with ): { delete.setOracleHint(getOracleHint()); } [(tk = ) {if (tk!=null) - modifierPriority = DeleteModifierPriority.valueOf(tk.image.toUpperCase()); + modifierPriority = DeleteModifierPriority.LOW_PRIORITY; }] [{ modifierQuick = true; }] [{ modifierIgnore = true; }] diff --git a/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java b/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java index c5f25829a..212aa5d75 100644 --- a/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java +++ b/src/test/java/net/sf/jsqlparser/statement/delete/DeleteTest.java @@ -143,39 +143,39 @@ public void testUsing() throws JSQLParserException { @Test public void testDeleteLowPriority() throws JSQLParserException { String stmt = "DELETE LOW_PRIORITY FROM tablename"; - Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + Delete delete = (Delete) assertSqlCanBeParsedAndDeparsed(stmt); assertEquals(delete.getModifierPriority(), DeleteModifierPriority.LOW_PRIORITY); } @Test public void testDeleteQuickModifier() throws JSQLParserException { String stmt = "DELETE QUICK FROM tablename"; - Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + Delete delete = (Delete) assertSqlCanBeParsedAndDeparsed(stmt); assertTrue(delete.isModifierQuick()); String stmt2 = "DELETE FROM tablename"; - Delete delete2 = (Delete)assertSqlCanBeParsedAndDeparsed(stmt2); + Delete delete2 = (Delete) assertSqlCanBeParsedAndDeparsed(stmt2); assertFalse(delete2.isModifierQuick()); } @Test public void testDeleteIgnoreModifier() throws JSQLParserException { String stmt = "DELETE IGNORE FROM tablename"; - Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + Delete delete = (Delete) assertSqlCanBeParsedAndDeparsed(stmt); assertTrue(delete.isModifierIgnore()); String stmt2 = "DELETE FROM tablename"; - Delete delete2 = (Delete)assertSqlCanBeParsedAndDeparsed(stmt2); + Delete delete2 = (Delete) assertSqlCanBeParsedAndDeparsed(stmt2); assertFalse(delete2.isModifierIgnore()); } @Test public void testDeleteMultipleModifiers() throws JSQLParserException { String stmt = "DELETE LOW_PRIORITY QUICK FROM tablename"; - Delete delete = (Delete)assertSqlCanBeParsedAndDeparsed(stmt); + Delete delete = (Delete) assertSqlCanBeParsedAndDeparsed(stmt); assertEquals(delete.getModifierPriority(), DeleteModifierPriority.LOW_PRIORITY); assertTrue(delete.isModifierQuick()); String stmt2 = "DELETE LOW_PRIORITY QUICK IGNORE FROM tablename"; - Delete delete2 = (Delete)assertSqlCanBeParsedAndDeparsed(stmt2); + Delete delete2 = (Delete) assertSqlCanBeParsedAndDeparsed(stmt2); assertEquals(delete2.getModifierPriority(), DeleteModifierPriority.LOW_PRIORITY); assertTrue(delete2.isModifierIgnore()); assertTrue(delete2.isModifierQuick()); From defd9675331bf92cd36c53295bb88f3885606347 Mon Sep 17 00:00:00 2001 From: Olivier Cavadenti Date: Mon, 1 Nov 2021 14:33:35 +0100 Subject: [PATCH 3/3] simplify low_priority --- .../net/sf/jsqlparser/parser/JSqlParserCC.jjt | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt index fafc59c21..4624ab334 100644 --- a/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt +++ b/src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt @@ -1131,11 +1131,8 @@ Update Update( List with ): } { { update.setOracleHint(getOracleHint()); } - [(tk = ) - {if (tk!=null) - modifierPriority = UpdateModifierPriority.LOW_PRIORITY; - }] - [{ modifierIgnore = true; }] + [ { modifierPriority = UpdateModifierPriority.LOW_PRIORITY; }] + [ { modifierIgnore = true; }] table=TableWithAlias() startJoins=JoinsList() ( @@ -1497,12 +1494,9 @@ Delete Delete( List with ): } { { delete.setOracleHint(getOracleHint()); } - [(tk = ) - {if (tk!=null) - modifierPriority = DeleteModifierPriority.LOW_PRIORITY; - }] - [{ modifierQuick = true; }] - [{ modifierIgnore = true; }] + [ { modifierPriority = DeleteModifierPriority.LOW_PRIORITY; }] + [ { modifierQuick = true; }] + [ { modifierIgnore = true; }] [LOOKAHEAD(4) (table=TableWithAlias() { tables.add(table); } ("," table=TableWithAlias() { tables.add(table); } )* | ) { hasFrom = true; }]