Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Assorted fixes to the Java CC Parser definition #1153

Merged
merged 5 commits into from
Apr 16, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion nb-configuration.xml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
That way multiple projects can share the same settings (useful for formatting rules for example).
Any value defined here will override the pom.xml file value but is only applicable to the current project.
-->
<netbeans.compile.on.save>none</netbeans.compile.on.save>
<netbeans.compile.on.save>all</netbeans.compile.on.save>
<com-junichi11-netbeans-changelf.enable>false</com-junichi11-netbeans-changelf.enable>
<com-junichi11-netbeans-changelf.use-project>true</com-junichi11-netbeans-changelf.use-project>
<com-junichi11-netbeans-changelf.lf-kind>LF</com-junichi11-netbeans-changelf.lf-kind>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,8 @@ public class AlterExpression {
private Set<ReferentialAction> referentialActions = new LinkedHashSet<>(2);

private List<String> fkColumns;
private String fkSourceSchema;

private String fkSourceTable;
private List<String> fkSourceColumns;
private boolean uk;
Expand All @@ -56,6 +58,13 @@ public class AlterExpression {
private List<ConstraintState> constraints;
private List<String> parameters;
private String commentText;

public String getFkSourceSchema() {
return fkSourceSchema;
}
public void setFkSourceSchema(String fkSourceSchema) {
this.fkSourceSchema = fkSourceSchema;
}

public String getCommentText() {
return commentText;
Expand Down Expand Up @@ -405,11 +414,18 @@ public String toString() {
}
b.append(" (").append(PlainSelect.getStringList(ukColumns)).append(")");
} else if (fkColumns != null) {
b.append("FOREIGN KEY (").append(PlainSelect.getStringList(fkColumns)).append(") REFERENCES ")
.append(fkSourceTable).append(" (").append(
PlainSelect.getStringList(fkSourceColumns))
.append(")");
referentialActions.forEach(b::append);
b.append("FOREIGN KEY (")
.append(PlainSelect.getStringList(fkColumns))
.append(") REFERENCES ")
.append(
fkSourceSchema != null && fkSourceSchema.trim().length() > 0
? fkSourceSchema + "."
: "")
.append(fkSourceTable)
.append(" (")
.append(PlainSelect.getStringList(fkSourceColumns))
.append(")");
referentialActions.forEach(b::append);
} else if (index != null) {
b.append(index);
}
Expand Down Expand Up @@ -490,6 +506,11 @@ public AlterExpression withFkColumns(List<String> fkColumns) {
this.setFkColumns(fkColumns);
return this;
}

public AlterExpression withFkSourceSchema(String fkSourceSchema) {
this.setFkSourceTable(fkSourceSchema);
return this;
}

public AlterExpression withFkSourceTable(String fkSourceTable) {
this.setFkSourceTable(fkSourceTable);
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/delete/Delete.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.Optional;
import static java.util.stream.Collectors.joining;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.OracleHint;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
Expand All @@ -27,6 +28,7 @@
public class Delete implements Statement {

private Table table;
private OracleHint oracleHint = null;
private List<Table> tables;
private List<Join> joins;
private Expression where;
Expand Down Expand Up @@ -61,6 +63,14 @@ public void setTable(Table name) {
public void setWhere(Expression expression) {
where = expression;
}

public OracleHint getOracleHint() {
return oracleHint;
}

public void setOracleHint(OracleHint oracleHint) {
this.oracleHint = oracleHint;
}

public Limit getLimit() {
return limit;
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/insert/Insert.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.List;
import java.util.Optional;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.OracleHint;
import net.sf.jsqlparser.expression.operators.relational.ItemsList;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
Expand All @@ -29,6 +30,7 @@
public class Insert implements Statement {

private Table table;
private OracleHint oracleHint = null;
private List<Column> columns;
private ItemsList itemsList;
private boolean useValues = true;
Expand Down Expand Up @@ -61,6 +63,14 @@ public Table getTable() {
public void setTable(Table name) {
table = name;
}

public OracleHint getOracleHint() {
return oracleHint;
}

public void setOracleHint(OracleHint oracleHint) {
this.oracleHint = oracleHint;
}

public List<Column> getColumns() {
return columns;
Expand Down
10 changes: 10 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/merge/Merge.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import net.sf.jsqlparser.expression.Alias;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.OracleHint;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
Expand All @@ -19,6 +20,7 @@
public class Merge implements Statement {

private Table table;
private OracleHint oracleHint = null;
private Table usingTable;
private SubSelect usingSelect;
private Alias usingAlias;
Expand All @@ -34,6 +36,14 @@ public Table getTable() {
public void setTable(Table name) {
table = name;
}

public OracleHint getOracleHint() {
return oracleHint;
}

public void setOracleHint(OracleHint oracleHint) {
this.oracleHint = oracleHint;
}

public Table getUsingTable() {
return usingTable;
Expand Down
21 changes: 20 additions & 1 deletion src/main/java/net/sf/jsqlparser/statement/merge/MergeInsert.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ public class MergeInsert {

private List<Column> columns = null;
private List<Expression> values = null;
private Expression whereCondition;

public List<Column> getColumns() {
return columns;
Expand All @@ -38,12 +39,21 @@ public List<Expression> getValues() {
public void setValues(List<Expression> values) {
this.values = values;
}

public Expression getWhereCondition() {
return whereCondition;
}

public void setWhereCondition(Expression whereCondition) {
this.whereCondition = whereCondition;
}

@Override
public String toString() {
return " WHEN NOT MATCHED THEN INSERT "
+ (columns.isEmpty() ? "" : PlainSelect.getStringList(columns, true, true))
+ " VALUES " + PlainSelect.getStringList(values, true, true);
+ " VALUES " + PlainSelect.getStringList(values, true, true)
+ (whereCondition != null ? (" WHERE " + whereCondition) : "");
}

public MergeInsert withColumns(List<Column> columns) {
Expand Down Expand Up @@ -79,4 +89,13 @@ public MergeInsert addValues(Collection<? extends Expression> values) {
collection.addAll(values);
return this.withValues(collection);
}

public MergeInsert withWhereCondition(Expression whereCondition) {
this.setWhereCondition(whereCondition);
return this;
}

public <E extends Expression> E getWhereCondition(Class<E> type) {
return type.cast(getWhereCondition());
}
}
12 changes: 11 additions & 1 deletion src/main/java/net/sf/jsqlparser/statement/update/Update.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
import java.util.List;
import java.util.Optional;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.OracleHint;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
Expand All @@ -39,6 +40,7 @@ public class Update implements Statement {
private Select select;
private boolean useColumnsBrackets = true;
private boolean useSelect = false;
private OracleHint oracleHint = null;
private List<OrderByElement> orderByElements;
private Limit limit;
private boolean returningAllColumns = false;
Expand All @@ -64,6 +66,14 @@ public void setTable(Table table) {
public void setWhere(Expression expression) {
where = expression;
}

public OracleHint getOracleHint() {
return oracleHint;
}

public void setOracleHint(OracleHint oracleHint) {
this.oracleHint = oracleHint;
}

public List<Column> getColumns() {
return columns;
Expand Down Expand Up @@ -160,7 +170,7 @@ public List<SelectExpressionItem> getReturningExpressionList() {
public void setReturningExpressionList(List<SelectExpressionItem> returningExpressionList) {
this.returningExpressionList = returningExpressionList;
}

@Override
public String toString() {
StringBuilder b = new StringBuilder("UPDATE ");
Expand Down
36 changes: 25 additions & 11 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -879,7 +879,7 @@ Update Update():
List<SelectExpressionItem> returning = null;
}
{
<K_UPDATE> table=TableWithAlias()
<K_UPDATE> { update.setOracleHint(getOracleHint()); } table=TableWithAlias()
startJoins=JoinsList()

<K_SET>
Expand Down Expand Up @@ -1023,7 +1023,7 @@ Insert Insert( List<WithItem> with ):
boolean useAs = false;
}
{
<K_INSERT>
<K_INSERT> { insert.setOracleHint(getOracleHint()); }
[(tk = <K_LOW_PRIORITY> | tk = <K_DELAYED> | tk = <K_HIGH_PRIORITY>)
{if (tk!=null)
modifierPriority = InsertModifierPriority.valueOf(tk.image.toUpperCase());
Expand Down Expand Up @@ -1209,7 +1209,7 @@ Delete Delete():
List<OrderByElement> orderByElements;
}
{
<K_DELETE> [LOOKAHEAD(2) (table=TableWithAlias() { tables.add(table); }
<K_DELETE> { delete.setOracleHint(getOracleHint()); } [LOOKAHEAD(2) (table=TableWithAlias() { tables.add(table); }
("," table=TableWithAlias() { tables.add(table); } )*
<K_FROM> | <K_FROM>)]

Expand All @@ -1235,7 +1235,7 @@ Statement Merge() : {
MergeInsert insert;
}
{
<K_MERGE> <K_INTO> table=TableWithAlias() { merge.setTable(table); }
<K_MERGE> { merge.setOracleHint(getOracleHint()); } <K_INTO> table=TableWithAlias() { merge.setTable(table); }
<K_USING>
( table=Table() { merge.setUsingTable(table); }
| "(" select=SubSelect() { merge.setUsingSelect(select); } ")" )
Expand Down Expand Up @@ -1287,14 +1287,18 @@ MergeInsert MergeInsertClause() : {
List<Expression> expList = new ArrayList<Expression>();
Column col;
Expression exp;
Expression condition;
}
{
<K_WHEN> <K_NOT> <K_MATCHED> <K_THEN>
<K_INSERT> ["(" col=Column() { columns.add(col); } ("," col=Column() { columns.add(col); } )* ")"] <K_VALUES>
"(" exp=SimpleExpression() { expList.add(exp); } ("," exp=SimpleExpression() { expList.add(exp); } )* ")"
{
return mi.withColumns(columns).withValues(expList);
}

{ mi.withColumns(columns).withValues(expList); }

[ <K_WHERE> condition = Expression() { mi.setWhereCondition(condition); }]

{ return mi; }
}

List<String> RelObjectNameList() : {
Expand Down Expand Up @@ -4028,7 +4032,7 @@ CreateIndex CreateIndex():
Index index = null;
//String name = null;
List<String> parameter = new ArrayList<String>();
List<String> tailParameter = null;
List<String> tailParameters = new ArrayList<String>();
List<String> name;
}
{
Expand All @@ -4049,13 +4053,15 @@ CreateIndex CreateIndex():

colNames = ColumnNamesWithParamsList()

[ tailParameter = CreateParameter() {} ]
/* [ tailParameter = CreateParameter() {} ] */

( parameter=CreateParameter() { tailParameters.addAll(parameter); } )*

{
index.setColumns(colNames);
createIndex.setIndex(index);
createIndex.setTable(table);
createIndex.setTailParameters(tailParameter);
createIndex.setTailParameters(tailParameters);
return createIndex;
}
}
Expand Down Expand Up @@ -4790,8 +4796,16 @@ AlterExpression AlterExpression():
|
//following two choices regarding foreign keys should be merged
( <K_FOREIGN> <K_KEY> columnNames=ColumnsNamesList() { alterExp.setFkColumns(columnNames); columnNames = null; }
<K_REFERENCES> tk=<S_IDENTIFIER> [ columnNames=ColumnsNamesList() ]
/*
<K_REFERENCES> tk=<S_IDENTIFIER> [ columnNames=ColumnsNamesList() ]
{ alterExp.setFkSourceTable(tk.image); alterExp.setFkSourceColumns(columnNames); }
*/
<K_REFERENCES> fkTable=Table() [ columnNames=ColumnsNamesList() ]
{
alterExp.setFkSourceSchema(fkTable.getSchemaName());
alterExp.setFkSourceTable(fkTable.getName());
alterExp.setFkSourceColumns(columnNames);
}

[LOOKAHEAD(2) (<K_ON> (tk=<K_DELETE> | tk=<K_UPDATE>) action = Action()
{ alterExp.setReferentialAction(ReferentialAction.Type.valueOf(tk.image), action); }
Expand Down
14 changes: 14 additions & 0 deletions src/test/java/net/sf/jsqlparser/statement/alter/AlterTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,20 @@ public void testAlterTableForgeignKey3() throws JSQLParserException {
public void testAlterTableForgeignKey4() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES ra_user (id) ON DELETE SET NULL");
}

@Test
public void testAlterTableForgeignWithFkSchema() throws JSQLParserException {
final String FK_SCHEMA_NAME = "my_schema";
final String FK_TABLE_NAME= "ra_user";
String sql = "ALTER TABLE test ADD FOREIGN KEY (user_id) REFERENCES " + FK_SCHEMA_NAME +"." + FK_TABLE_NAME + " (id) ON DELETE SET NULL";
assertSqlCanBeParsedAndDeparsed(sql);

Alter alter = (Alter) CCJSqlParserUtil.parse(sql);
AlterExpression alterExpression = alter.getAlterExpressions().get(0);

assertEquals(alterExpression.getFkSourceSchema(), FK_SCHEMA_NAME);
assertEquals(alterExpression.getFkSourceTable(), FK_TABLE_NAME);
}

@Test
public void testAlterTableDropColumn() throws JSQLParserException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
package net.sf.jsqlparser.statement.create;

import java.io.StringReader;
import java.util.List;
import net.sf.jsqlparser.JSQLParserException;
import net.sf.jsqlparser.parser.CCJSqlParserManager;
import net.sf.jsqlparser.statement.create.index.CreateIndex;
Expand Down Expand Up @@ -119,4 +120,20 @@ public void testFullIndexNameIssue936() throws JSQLParserException {
public void testFullIndexNameIssue936_2() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed("CREATE INDEX \"TS\".\"IDX\" ON \"TEST\" (\"ID\") TABLESPACE \"TS\"");
}

@Test
public void testCreateIndexTrailingOptions() throws JSQLParserException {
String statement =
"CREATE UNIQUE INDEX cfe.version_info_idx2\n"
+ " ON cfe.version_info ( major_version\n"
+ " , minor_version\n"
+ " , patch_level ) parallel compress nologging\n"
+ ";";
CreateIndex createIndex = (CreateIndex) parserManager.parse(new StringReader(statement));
List<String> tailParameters = createIndex.getTailParameters();
assertEquals(3, tailParameters.size());
assertEquals(tailParameters.get(0), "parallel");
assertEquals(tailParameters.get(1), "compress");
assertEquals(tailParameters.get(2), "nologging");
}
}
Loading