Skip to content

Commit

Permalink
Assorted Fixes #4 (#1676)
Browse files Browse the repository at this point in the history
* support clickhouse global keyword in join

* fix: add missing public Getter

Add public Getter for `updateSets`
Fixes #1630

* feat: Clickhouse GLOBAL JOIN

All credits to @julianzlzhang

fixes #1615
fixes #1535

* feat: IF/ELSE statements supports Block

Make `If... Else...` statements work with Blocks
Make `Statement()` production work with `Block()`
Rewrite the `Block()` related Unit Tests

fixes #1682

* fix: Revert unintended changes to the Special Oracle Tests

* fix: `SET` statement supports `UserVariable`

Make `SetStatement` parse Objects instead of Names only
Add Grammar to accept `UserVariable` (e.g. "set @Flag = 1")
Add Test Case for `UserVariable`

fixes #1682

* feat: Google Spanner Support

Replaces PR #1415, all credit goes to @s13o
Re-arranged some recently added Tokens in alphabetical order
Update Keywords

* fix: fix JSonExpression, accept Expressions

Make JSonExpression accept Expressions
Add Testcase
Expose Idents() and Operators()
Fixes #1696

* test: add Test for Issue #1237

Co-authored-by: Zhang Zhongliang <zhangzhongliang@xiaomi.com>
  • Loading branch information
manticore-projects and Zhang Zhongliang authored Dec 22, 2022
1 parent 08a92fc commit 8d9db70
Show file tree
Hide file tree
Showing 20 changed files with 434 additions and 78 deletions.
24 changes: 8 additions & 16 deletions src/main/java/net/sf/jsqlparser/expression/JsonExpression.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import net.sf.jsqlparser.parser.ASTNodeAccessImpl;

public class JsonExpression extends ASTNodeAccessImpl implements Expression {

private Expression expr;

private List<String> idents = new ArrayList<String>();
Expand All @@ -34,26 +33,19 @@ public void setExpression(Expression expr) {
this.expr = expr;
}

// public List<String> getIdents() {
// return idents;
// }
//
// public void setIdents(List<String> idents) {
// this.idents = idents;
// operators = new ArrayList<String>();
// for (String ident : idents) {
// operators.add("->");
// }
// }
//
// public void addIdent(String ident) {
// addIdent(ident, "->");
// }
public void addIdent(String ident, String operator) {
idents.add(ident);
operators.add(operator);
}

public List<String> getIdents() {
return idents;
}

public List<String> getOperators() {
return operators;
}

@Override
public String toString() {
StringBuilder b = new StringBuilder();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2021 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.expression;

import net.sf.jsqlparser.schema.Table;

import java.util.Collections;
import java.util.List;

public class SpannerInterleaveIn {

public enum OnDelete {
CASCADE,
NO_ACTION
}

private Table table;
private OnDelete onDelete;

public SpannerInterleaveIn() {

}

public SpannerInterleaveIn(Table table, OnDelete action) {
setTable(table);
setOnDelete(action);
}

public SpannerInterleaveIn(List<String> nameParts) {
this(new Table(nameParts), null);
}

public SpannerInterleaveIn(String tableName) {
this(Collections.singletonList(tableName));
}

public Table getTable() {
return table;
}

public void setTable(Table table) {
this.table = table;
}

public OnDelete getOnDelete() {
return onDelete;
}

public void setOnDelete(OnDelete action) {
this.onDelete = action;
}

@Override
public String toString() {
return "INTERLEAVE IN PARENT " + getTable().getName() +
(getOnDelete() == null ? "" : " ON DELETE " + (getOnDelete() == OnDelete.CASCADE ? "CASCADE" : "NO ACTION"));
}

public SpannerInterleaveIn withTable(Table table) {
this.setTable(table);
return this;
}

public SpannerInterleaveIn withOnDelete(OnDelete action) {
this.setOnDelete(action);
return this;
}
}
23 changes: 22 additions & 1 deletion src/main/java/net/sf/jsqlparser/statement/Block.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
package net.sf.jsqlparser.statement;

public class Block implements Statement {
private boolean hasSemicolonAfterEnd = false;

private Statements statements;

Expand All @@ -21,14 +22,34 @@ public void setStatements(Statements statements) {
this.statements = statements;
}

public boolean hasSemicolonAfterEnd() {
return hasSemicolonAfterEnd;
}

public void setSemicolonAfterEnd(boolean hasSemicolonAfterEnd) {
this.hasSemicolonAfterEnd = hasSemicolonAfterEnd;
}

@Override
public void accept(StatementVisitor statementVisitor) {
statementVisitor.visit(this);
}

public StringBuilder appendTo(StringBuilder builder) {
builder.append("BEGIN\n");
if (statements != null) {
builder.append(statements);
}
builder.append("END");
if (hasSemicolonAfterEnd) {
builder.append(";");
}
return builder;
}

@Override
public String toString() {
return "BEGIN\n" + (statements != null ? statements.toString() : "") + "END";
return appendTo(new StringBuilder()).toString();
}

public Block withStatements(Statements statements) {
Expand Down
12 changes: 6 additions & 6 deletions src/main/java/net/sf/jsqlparser/statement/SetStatement.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@ public SetStatement() {
// empty constructor
}

public SetStatement(String name, List<Expression> value) {
public SetStatement(Object name, List<Expression> value) {
add(name, value, true);
}

public void add(String name, List<Expression> value, boolean useEqual) {
public void add(Object name, List<Expression> value, boolean useEqual) {
values.add(new NameExpr(name, value, useEqual));
}

Expand Down Expand Up @@ -66,11 +66,11 @@ public SetStatement setUseEqual(boolean useEqual) {
return setUseEqual(0, useEqual);
}

public String getName() {
public Object getName() {
return getName(0);
}

public String getName(int idx) {
public Object getName(int idx) {
return values.get(idx).name;
}

Expand Down Expand Up @@ -129,11 +129,11 @@ public void accept(StatementVisitor statementVisitor) {

static class NameExpr {

private String name;
private Object name;
private List<Expression> expressions;
private boolean useEqual;

public NameExpr(String name, List<Expression> expressions, boolean useEqual) {
public NameExpr(Object name, List<Expression> expressions, boolean useEqual) {
this.name = name;
this.expressions = expressions;
this.useEqual = useEqual;
Expand Down
4 changes: 2 additions & 2 deletions src/main/java/net/sf/jsqlparser/statement/Statements.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@ public void accept(StatementVisitor statementVisitor) {
public String toString() {
StringBuilder b = new StringBuilder();
for (Statement stmt : statements) {
if (stmt instanceof IfElseStatement) {
// IfElseStatements print the Semicolons by themselves
// IfElseStatements and Blocks control the Semicolons by themselves
if (stmt instanceof IfElseStatement || stmt instanceof Block) {
b.append(stmt).append("\n");
} else {
b.append(stmt).append(";\n");
Expand Down
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.SpannerInterleaveIn;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.statement.StatementVisitor;
Expand All @@ -38,6 +39,8 @@ public class CreateTable implements Statement {

private RowMovement rowMovement;

private SpannerInterleaveIn interleaveIn = null;

@Override
public void accept(StatementVisitor statementVisitor) {
statementVisitor.visit(this);
Expand Down Expand Up @@ -199,6 +202,9 @@ public String toString() {
if (likeTable != null) {
sql += " LIKE " + (selectParenthesis ? "(" : "") + likeTable.toString() + (selectParenthesis ? ")" : "");
}
if (interleaveIn != null) {
sql += ", " + interleaveIn;
}
return sql;
}

Expand Down Expand Up @@ -299,4 +305,17 @@ public CreateTable addIndexes(Collection<? extends Index> indexes) {
collection.addAll(indexes);
return this.withIndexes(collection);
}

public SpannerInterleaveIn getSpannerInterleaveIn() {
return interleaveIn;
}

public void setSpannerInterleaveIn(SpannerInterleaveIn spannerInterleaveIn) {
this.interleaveIn = spannerInterleaveIn;
}

public CreateTable withSpannerInterleaveIn(SpannerInterleaveIn spannerInterleaveIn) {
this.interleaveIn = spannerInterleaveIn;
return this;
}
}
13 changes: 13 additions & 0 deletions src/main/java/net/sf/jsqlparser/statement/select/Join.java
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ public class Join extends ASTNodeAccessImpl {
private boolean right = false;
private boolean left = false;
private boolean natural = false;
private boolean global = false;
private boolean full = false;
private boolean inner = false;
private boolean simple = false;
Expand Down Expand Up @@ -166,6 +167,10 @@ public boolean isNatural() {
return natural;
}

public boolean isGlobal() {
return global;
}

public Join withNatural(boolean b) {
this.setNatural(b);
return this;
Expand All @@ -175,6 +180,10 @@ public void setNatural(boolean b) {
natural = b;
}

public void setGlobal(boolean b) {
global = b;
}

/**
* Whether is a "FULL" join
*
Expand Down Expand Up @@ -299,6 +308,10 @@ public void setJoinWindow(KSQLJoinWindow joinWindow) {
public String toString() {
StringBuilder builder = new StringBuilder();

if ( isGlobal() ) {
builder.append("GLOBAL ");
}

if (isSimple() && isOuter()) {
builder.append("OUTER ").append(rightItem);
} else if (isSimple()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,9 @@ public void deParse(CreateTable createTable) {
buffer.append(")");
}
}
if (createTable.getSpannerInterleaveIn() != null) {
buffer.append(", ").append(createTable.getSpannerInterleaveIn());
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -401,6 +401,10 @@ public void visit(SubJoin subjoin) {

@SuppressWarnings({"PMD.CyclomaticComplexity"})
public void deparseJoin(Join join) {
if ( join.isGlobal() ) {
buffer.append(" GLOBAL ");
}

if (join.isSimple() && join.isOuter()) {
buffer.append(", OUTER ");
} else if (join.isSimple()) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,9 @@ public void visit(Block block) {
}
}
buffer.append("END");
if (block.hasSemicolonAfterEnd()) {
buffer.append(";");
}
}

@Override
Expand Down
Loading

0 comments on commit 8d9db70

Please sign in to comment.