use of org.eclipse.scout.rt.server.jdbc.parsers.sql.SqlParserToken.BracketExpr in project scout.rt by eclipse.
the class SqlFormatter method formatStatement.
private void formatStatement(Statement stm, FormatContext ctx) {
if (stm != null) {
for (IToken t : stm.getChildren()) {
if (t instanceof Statement) {
formatStatement((Statement) t, ctx);
} else if (t instanceof SingleStatement) {
formatSingleStatement((SingleStatement) t, ctx);
} else if (t instanceof BracketExpr) {
formatBracketExpr((BracketExpr) t, ctx);
} else if (t instanceof UnionToken) {
formatDefault(t, ctx);
ctx.println();
} else if (t instanceof Unparsed) {
ctx.println("*** UNPARSED ***");
formatDefault(t, ctx);
ctx.println();
} else {
formatDefault(t, ctx);
}
}
}
}
use of org.eclipse.scout.rt.server.jdbc.parsers.sql.SqlParserToken.BracketExpr in project scout.rt by eclipse.
the class SqlParser method parse.
public Statement parse(String s) {
ParseContext ctx = new ParseContext();
List<IToken> list = tokenize(s, ctx);
Statement stm = parseStatement(list, ctx);
// sometimes sql is wrapped into brackets
if (stm == null) {
ctx = new ParseContext();
list = tokenize(s, ctx);
BracketExpr be = parseBracketExpr(list, ctx);
if (be != null) {
for (IToken t : be.getChildren()) {
if (t instanceof Statement) {
stm = (Statement) t;
break;
}
}
}
}
if (list.size() > 0) {
Unparsed up = new Unparsed();
up.setText(flatten(list));
if (stm == null) {
stm = new Statement();
}
stm.addChild(up);
}
return stm;
}
use of org.eclipse.scout.rt.server.jdbc.parsers.sql.SqlParserToken.BracketExpr in project scout.rt by eclipse.
the class SqlParser method parseSingleStatement.
/**
* return {@link SingleStatement} or {@link BracketExpr}
*/
private IToken parseSingleStatement(List<IToken> list, ParseContext ctx) {
ParseStep lock = ctx.checkAndAdd("SingleStatement", list);
if (lock == null) {
return null;
}
try {
// brackets
ArrayList<IToken> backup = new ArrayList<IToken>(list);
BracketExpr be = parseBracketExpr(list, ctx);
if (be != null) {
BracketExpr tmp = be;
while (tmp != null) {
// open, token, close
IToken ch = tmp.getChildren().get(1);
if (ch instanceof BracketExpr) {
tmp = (BracketExpr) ch;
} else if (ch instanceof Statement) {
return be;
} else if (ch instanceof SingleStatement) {
return be;
} else {
tmp = null;
}
}
// restore
list.clear();
list.addAll(backup);
return null;
}
//
// Part+
Part p;
SingleStatement ss = new SingleStatement();
if ((p = parsePart(list, ctx, true)) != null) {
// ok
ss.addChild(p);
} else {
return null;
}
while ((p = parsePart(list, ctx, false)) != null) {
ss.addChild(p);
}
if (ss.getChildren().size() == 0) {
return null;
}
return ss;
} finally {
ctx.remove(lock);
}
}
use of org.eclipse.scout.rt.server.jdbc.parsers.sql.SqlParserToken.BracketExpr in project scout.rt by eclipse.
the class SqlParser method parseBracketExpr.
@SuppressWarnings("squid:S2583")
private BracketExpr parseBracketExpr(List<IToken> list, ParseContext ctx) {
// BracketExpr = OpenBracketToken (Statement | ListExpr) CloseBracketToken
ParseStep lock = ctx.checkAndAdd("BracketExpr", list);
if (lock == null) {
return null;
}
try {
IToken open = null;
IToken t = null;
IToken close = null;
ArrayList<IToken> backup = new ArrayList<IToken>(list);
if ((open = removeToken(list, OpenBracketToken.class)) != null && ((t = parseStatement(list, ctx)) != null || (t = parseListExpr(list, ctx)) != null || t == null) && (close = removeToken(list, CloseBracketToken.class)) != null) {
// NOSONAR
// ok
} else {
// restore incomplete
list.clear();
list.addAll(backup);
return null;
}
BracketExpr e = new BracketExpr();
e.addChild(open);
if (t != null) {
e.addChild(t);
}
e.addChild(close);
return e;
} finally {
ctx.remove(lock);
}
}
use of org.eclipse.scout.rt.server.jdbc.parsers.sql.SqlParserToken.BracketExpr in project scout.rt by eclipse.
the class SqlParser method parseFunExpr.
private FunExpr parseFunExpr(List<IToken> list, ParseContext ctx) {
// Name BracketExpr
ParseStep lock = ctx.checkAndAdd("FunExpr", list);
if (lock == null) {
return null;
}
try {
Name nm = null;
BracketExpr be = null;
if ((nm = removeToken(list, Name.class)) != null && (be = parseBracketExpr(list, ctx)) != null) {
// ok
} else {
// restore incomplete
if (nm != null) {
list.add(0, nm);
}
return null;
}
FunExpr e = new FunExpr();
e.addChild(nm);
e.addChild(be);
return e;
} finally {
ctx.remove(lock);
}
}
Aggregations