sql format support lcase

This commit is contained in:
高铁
2015-12-13 14:56:09 +08:00
parent de0715bd9c
commit 65cf8fa9a3
17 changed files with 699 additions and 646 deletions
@@ -133,10 +133,18 @@ public class SQLUtils {
public static String formatMySql(String sql) {
return format(sql, JdbcUtils.MYSQL);
}
public static String formatMySql(String sql, FormatOption option) {
return format(sql, JdbcUtils.MYSQL, option);
}
public static String formatOracle(String sql) {
return format(sql, JdbcUtils.ORACLE);
}
public static String formatOracle(String sql, FormatOption option) {
return format(sql, JdbcUtils.ORACLE, option);
}
public static String formatOdps(String sql) {
return format(sql, JdbcUtils.ODPS);
@@ -151,8 +159,20 @@ public class SQLUtils {
}
public static String toOracleString(SQLObject sqlObject) {
return toOracleString(sqlObject, null);
}
public static String toOracleString(SQLObject sqlObject, FormatOption option) {
StringBuilder out = new StringBuilder();
sqlObject.accept(new OracleOutputVisitor(out, false));
OracleOutputVisitor visitor = new OracleOutputVisitor(out, false);
if (option == null) {
option = DEFAULT_FORMAT_OPTION;
}
visitor.setUppCase(option.isUppCase());
sqlObject.accept(visitor);
String sql = out.toString();
return sql;
@@ -194,8 +214,8 @@ public class SQLUtils {
return sql;
}
public static String formatPGSql(String sql) {
return format(sql, JdbcUtils.POSTGRESQL);
public static String formatPGSql(String sql, FormatOption option) {
return format(sql, JdbcUtils.POSTGRESQL, option);
}
public static SQLExpr toSQLExpr(String sql, String dbType) {
@@ -42,32 +42,32 @@ public class DB2OutputVisitor extends SQLASTOutputVisitor implements DB2ASTVisit
SQLOrderBy orderBy= ((SQLSelect) parent).getOrderBy();
if (orderBy!=null&&orderBy.getItems().size() > 0) {
println();
print("ORDER BY ");
print0(ucase ? "ORDER BY " : "order by ");
printAndAccept(orderBy.getItems(), ", ");
((SQLSelect) parent).setOrderBy(null);
}
}
println();
print("FETCH FIRST ");
print0(ucase ? "FETCH FIRST " : "fetch first ");
x.getFirst().accept(this);
print(" ROWS ONLY");
print0(ucase ? " ROWS ONLY" : " rows only");
}
if (x.isForReadOnly()) {
println();
print("FOR READ ONLY");
print0(ucase ? "FOR READ ONLY" : "for read only");
}
if (x.getIsolation() != null) {
println();
print("WITH ");
print(x.getIsolation().name());
print0(ucase ? "WITH " : "with ");
print0(x.getIsolation().name());
}
if (x.getOptimizeFor() != null) {
println();
print("OPTIMIZE FOR ");
print0(ucase ? "OPTIMIZE FOR " : "optimize for ");
x.getOptimizeFor().accept(this);
}
@@ -82,7 +82,7 @@ public class DB2OutputVisitor extends SQLASTOutputVisitor implements DB2ASTVisit
@Override
public boolean visit(DB2ValuesStatement x) {
print("VALUES ");
print0(ucase ? "VALUES " : "values ");
x.getExpr().accept(this);
return false;
}
@@ -60,12 +60,12 @@ public class OracleSelectUnPivot extends OracleSelectPivotBase {
public static enum NullsIncludeType {
INCLUDE_NULLS, EXCLUDE_NULLS;
public static String toString(NullsIncludeType type) {
public static String toString(NullsIncludeType type, boolean ucase) {
if (INCLUDE_NULLS.equals(type)) {
return "INCLUDE NULLS";
return ucase ? "INCLUDE NULLS" : "include nulls";
}
if (EXCLUDE_NULLS.equals(type)) {
return "EXCLUDE NULLS";
return ucase ? "EXCLUDE NULLS" : "exclude nulls";
}
throw new IllegalArgumentException();
File diff suppressed because it is too large Load Diff
@@ -136,9 +136,9 @@ public class OracleToMySqlOutputVisitor extends OracleOutputVisitor {
if (limit != null) {
subSelect.accept(this);
println();
print("LIMIT ");
print0(ucase ? "LIMIT " : "limit ");
print(offset);
print(", ");
print0(", ");
print(limit);
return false;
}
@@ -192,7 +192,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
if (x.getInto() != null) {
println();
if (x.getIntoOption() != null) {
print(x.getIntoOption().name());
print0(x.getIntoOption().name());
print(' ');
}
@@ -296,7 +296,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
if (x.getAlias() != null) {
print0(ucase ? " AS " : " as ");
print(x.getAlias());
print0(x.getAlias());
}
if (x.getUsing().size() > 0) {
@@ -469,7 +469,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
if (x.getAlias() != null) {
print0(ucase ? " AS " : " as ");
print(x.getAlias());
print0(x.getAlias());
}
if (x.getParameters().size() > 0) {
@@ -535,7 +535,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
@Override
public boolean visit(PGExtractExpr x) {
print0(ucase ? "EXTRACT (" : "extract (");
print(x.getField().name());
print0(x.getField().name());
print0(ucase ? " FROM " : " from ");
x.getSource().accept(this);
print(')');
@@ -653,7 +653,7 @@ public class PGOutputVisitor extends SQLASTOutputVisitor implements PGASTVisitor
@Override
public boolean visit(SQLBinaryExpr x) {
print0(ucase ? "B'" : "b'");
print(x.getValue());
print0(x.getValue());
print('\'');
return false;
@@ -53,14 +53,14 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
}
public boolean visit(SQLServerSelectQueryBlock x) {
print("SELECT ");
print0(ucase ? "SELECT " : "select ");
if (SQLSetQuantifier.ALL == x.getDistionOption()) {
print("ALL ");
print0(ucase ? "ALL " : "all ");
} else if (SQLSetQuantifier.DISTINCT == x.getDistionOption()) {
print("DISTINCT ");
print0(ucase ? "DISTINCT " : "distinct ");
} else if (SQLSetQuantifier.UNIQUE == x.getDistionOption()) {
print("UNIQUE ");
print0(ucase ? "UNIQUE " : "unique ");
}
if (x.getTop() != null) {
@@ -72,19 +72,19 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
if (x.getInto() != null) {
println();
print("INTO ");
print0(ucase ? "INTO " : "into ");
x.getInto().accept(this);
}
if (x.getFrom() != null) {
println();
print("FROM ");
print0(ucase ? "FROM " : "from ");
x.getFrom().accept(this);
}
if (x.getWhere() != null) {
println();
print("WHERE ");
print0(ucase ? "WHERE " : "where ");
x.getWhere().setParent(x);
x.getWhere().accept(this);
}
@@ -104,23 +104,23 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerTop x) {
print("TOP ");
print0(ucase ? "TOP " : "top ");
boolean paren = false;
if (x.getParent() instanceof SQLServerUpdateStatement || x.getParent() instanceof SQLServerInsertStatement) {
paren = true;
print("(");
print('(');
}
x.getExpr().accept(this);
if (paren) {
print(")");
print(')');
}
if (x.isPercent()) {
print(" PERCENT");
print0(ucase ? " PERCENT" : " percent");
}
return false;
@@ -133,7 +133,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerObjectReferenceExpr x) {
print(x.toString());
print0(x.toString());
return false;
}
@@ -144,7 +144,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerInsertStatement x) {
print("INSERT ");
print0(ucase ? "INSERT " : "insert ");
if (x.getTop() != null) {
x.getTop().setParent(x);
@@ -152,25 +152,25 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
print(' ');
}
print("INTO ");
print0(ucase ? "INTO " : "into ");
x.getTableSource().accept(this);
if (x.getColumns().size() > 0) {
incrementIndent();
println();
print("(");
print('(');
for (int i = 0, size = x.getColumns().size(); i < size; ++i) {
if (i != 0) {
if (i % 5 == 0) {
println();
}
print(", ");
print0(", ");
}
x.getColumns().get(i).accept(this);
}
print(")");
print(')');
decrementIndent();
}
@@ -182,11 +182,11 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
if (x.getValuesList().size() != 0) {
println();
print("VALUES");
print0(ucase ? "VALUES" : "values");
println();
for (int i = 0, size = x.getValuesList().size(); i < size; ++i) {
if (i != 0) {
print(",");
print(',');
println();
}
x.getValuesList().get(i).accept(this);
@@ -199,7 +199,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
}
if (x.isDefaultValues()) {
print(" DEFAULT VALUES");
print0(ucase ? " DEFAULT VALUES" : " default values");
}
return false;
}
@@ -211,7 +211,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerUpdateStatement x) {
print("UPDATE ");
print0(ucase ? "UPDATE " : "update ");
if (x.getTop() != null) {
x.getTop().setParent(x);
@@ -222,10 +222,10 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
x.getTableSource().accept(this);
println();
print("SET ");
print0(ucase ? "SET " : "set ");
for (int i = 0, size = x.getItems().size(); i < size; ++i) {
if (i != 0) {
print(", ");
print0(", ");
}
x.getItems().get(i).accept(this);
}
@@ -238,14 +238,14 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
if (x.getFrom() != null) {
println();
print("FROM ");
print0(ucase ? "FROM " : "from ");
x.getFrom().setParent(x);
x.getFrom().accept(this);
}
if (x.getWhere() != null) {
println();
print("WHERE ");
print0(ucase ? "WHERE " : "where ");
incrementIndent();
x.getWhere().setParent(x);
x.getWhere().accept(this);
@@ -264,14 +264,14 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
x.getExpr().accept(this);
if (x.getHints() != null && x.getHints().size() > 0) {
print(" WITH (");
print0(ucase ? " WITH (" : " with (");
printAndAccept(x.getHints(), ", ");
print(")");
print(')');
}
if (x.getAlias() != null) {
print(' ');
print(x.getAlias());
print0(x.getAlias());
}
return false;
@@ -279,11 +279,11 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(Identity x) {
print("IDENTITY (");
print0(ucase ? "IDENTITY (" : "identity (");
print(x.getSeed());
print(", ");
print0(", ");
print(x.getIncrement());
print(")");
print(')');
return false;
}
@@ -317,7 +317,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
if (x.getEnable() != null) {
if (x.getEnable().booleanValue()) {
print(" ENABLE");
print0(ucase ? " ENABLE" : " enable");
}
}
@@ -338,12 +338,12 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerExecStatement x) {
print("EXEC ");
print0(ucase ? "EXEC " : "exec ");
SQLName returnStatus = x.getReturnStatus();
if (returnStatus != null) {
returnStatus.accept(this);
print(" = ");
print0(" = ");
}
SQLName moduleName = x.getModuleName();
@@ -351,7 +351,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
moduleName.accept(this);
print(' ');
} else {
print(" (");
print0(" (");
}
printAndAccept(x.getParameters(), ", ");
@@ -368,8 +368,8 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerSetTransactionIsolationLevelStatement x) {
print("SET TRANSACTION ISOLATION LEVEL ");
print(x.getLevel());
print0(ucase ? "SET TRANSACTION ISOLATION LEVEL " : "set transaction isolation level ");
print0(x.getLevel());
return false;
}
@@ -380,10 +380,10 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerSetStatement x) {
print("SET ");
print0(ucase ? "SET " : "set ");
SQLAssignItem item = x.getItem();
item.getTarget().accept(this);
print(" ");
print(' ');
item.getValue().accept(this);
return false;
}
@@ -395,30 +395,30 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerOutput x) {
print("OUTPUT ");
print0(ucase ? "OUTPUT " : "output ");
printSelectList(x.getSelectList());
if (x.getInto() != null) {
incrementIndent();
println();
print("INTO ");
print0(ucase ? "INTO " : "into ");
x.getInto().accept(this);
if (x.getColumns().size() > 0) {
incrementIndent();
println();
print("(");
print('(');
for (int i = 0, size = x.getColumns().size(); i < size; ++i) {
if (i != 0) {
if (i % 5 == 0) {
println();
}
print(", ");
print0(", ");
}
x.getColumns().get(i).accept(this);
}
print(")");
print(')');
decrementIndent();
}
}
@@ -436,31 +436,31 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
x.getName().accept(this);
if(x.getType() == SQLServerDeclareItem.Type.TABLE) {
print(" TABLE");
print0(ucase ? " TABLE" : " table");
int size = x.getTableElementList().size();
if (size > 0) {
print(" (");
print0(" (");
incrementIndent();
println();
for (int i = 0; i < size; ++i) {
if (i != 0) {
print(",");
print(',');
println();
}
x.getTableElementList().get(i).accept(this);
}
decrementIndent();
println();
print(")");
print(')');
}
} else if (x.getType() == SQLServerDeclareItem.Type.CURSOR) {
print(" CURSOR");
print0(ucase ? " CURSOR" : " cursor");
} else {
print(" ");
print(' ');
x.getDataType().accept(this);
if (x.getValue() != null) {
print(" = ");
print0(" = ");
x.getValue().accept(this);
}
}
@@ -475,7 +475,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerDeclareStatement x) {
print("DECLARE ");
print0(ucase ? "DECLARE " : "declare ");
this.printAndAccept(x.getItems(), ", ");
return false;
}
@@ -487,7 +487,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(Else x) {
print("ELSE");
print0(ucase ? "ELSE" : "else");
incrementIndent();
println();
@@ -511,7 +511,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerIfStatement x) {
print("IF ");
print0(ucase ? "IF " : "if ");
x.getCondition().accept(this);
incrementIndent();
println();
@@ -539,7 +539,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerBlockStatement x) {
print("BEGIN");
print0(ucase ? "BEGIN" : "begin");
incrementIndent();
println();
for (int i = 0, size = x.getStatementList().size(); i < size; ++i) {
@@ -549,11 +549,11 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
SQLStatement stmt = x.getStatementList().get(i);
stmt.setParent(x);
stmt.accept(this);
print(";");
print(';');
}
decrementIndent();
println();
print("END");
print0(ucase ? "END" : "end");
return false;
}
@@ -565,11 +565,11 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
protected void printGrantOn(SQLGrantStatement x) {
if (x.getOn() != null) {
print(" ON ");
print0(ucase ? " ON " : " on ");
if (x.getObjectType() != null) {
print(x.getObjectType().name());
print("::");
print0(x.getObjectType().name());
print0("::");
}
x.getOn().accept(this);
@@ -586,30 +586,30 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
super.visit(x);
if (x.isForBrowse()) {
println();
print("FOR BROWSE");
print0(ucase ? "FOR BROWSE" : "for browse");
}
if (x.getForXmlOptions().size() > 0) {
println();
print("FOR XML ");
print0(ucase ? "FOR XML " : "for xml ");
for (int i = 0; i < x.getForXmlOptions().size(); ++i) {
if (i != 0) {
print(", ");
print(x.getForXmlOptions().get(i));
print0(", ");
print0(x.getForXmlOptions().get(i));
}
}
}
if (x.getOffset() != null) {
println();
print("OFFSET ");
print0(ucase ? "OFFSET " : "offset ");
x.getOffset().accept(this);
print(" ROWS");
print0(ucase ? " ROWS" : " rows");
if (x.getRowCount() != null) {
print(" FETCH NEXT ");
print0(ucase ? " FETCH NEXT " : " fetch next ");
x.getRowCount().accept(this);
print(" ROWS ONLY");
print0(ucase ? " ROWS ONLY" : " rows only");
}
}
return false;
@@ -617,20 +617,20 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerCommitStatement x) {
print("COMMIT");
print0(ucase ? "COMMIT" : "commit");
if (x.isWork()) {
print(" WORK");
print0(ucase ? " WORK" : " work");
} else {
print(" TRANSACTION");
print0(ucase ? " TRANSACTION" : " transaction");
if (x.getTransactionName() != null) {
print(" ");
print(' ');
x.getTransactionName().accept(this);
}
if (x.getDelayedDurability() != null) {
print(" WITH ( DELAYED_DURABILITY = ");
print0(ucase ? " WITH ( DELAYED_DURABILITY = " : " with ( delayed_durability = ");
x.getDelayedDurability().accept(this);
print(" )");
print0(" )");
}
}
@@ -644,14 +644,14 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerRollbackStatement x) {
print("ROLLBACK");
print0(ucase ? "ROLLBACK" : "rollback");
if (x.isWork()) {
print(" WORK");
print0(ucase ? " WORK" : " work");
} else {
print(" TRANSACTION");
print0(ucase ? " TRANSACTION" : " transaction");
if (x.getName() != null) {
print(" ");
print(' ');
x.getName().accept(this);
}
}
@@ -666,21 +666,21 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
@Override
public boolean visit(SQLServerWaitForStatement x) {
print("WAITFOR");
print0(ucase ? "WAITFOR" : "waitfor");
if (x.getDelay() != null) {
print(" DELAY ");
print0(ucase ? " DELAY " : " delay ");
x.getDelay().accept(this);
} else if (x.getTime() != null) {
print(" TIME ");
print0(ucase ? " TIME " : " time ");
x.getTime().accept(this);
} if (x.getStatement() != null) {
print(" DELAY ");
print0(ucase ? " DELAY " : " delay ");
x.getStatement().accept(this);
}
if(x.getTimeout() != null) {
print(" ,TIMEOUT ");
print0(ucase ? " ,TIMEOUT " : " ,timeout ");
x.getTimeout().accept(this);
}
@@ -698,7 +698,7 @@ public class SQLServerOutputVisitor extends SQLASTOutputVisitor implements SQLSe
x.getExpr().accept(this);
if(x.getType())
{
print(" OUT");
print0(ucase ? " OUT" : " out");
}
return false;
}
@@ -116,9 +116,9 @@ public class ParameterizedOutputVisitorUtils {
x.getExpr().accept(v);
if (x.isNot()) {
v.print(" NOT IN (?)");
v.print(v.isUppCase() ? " NOT IN (?)" : " not in (?)");
} else {
v.print(" IN (?)");
v.print(v.isUppCase() ? " IN (?)" : " in (?)");
}
if (changed) {
@@ -1,5 +1,5 @@
/*
* Copyright 1999-2101 Alibaba Group Holding Ltd.
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -16,6 +16,7 @@
package com.alibaba.druid.sql.visitor;
public interface PrintableVisitor extends SQLASTVisitor {
boolean isUppCase();
void print(char value);
@@ -520,7 +520,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
public boolean visit(SQLDataType x) {
print(x.getName());
print0(x.getName());
if (x.getArguments().size() > 0) {
print('(');
printAndAccept(x.getArguments(), ", ");
@@ -549,7 +549,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
public boolean visit(SQLIdentifierExpr x) {
print(x.getName());
print0(x.getName());
return false;
}
@@ -612,15 +612,15 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
protected void printFunctionName(String name) {
print(name);
print0(name);
}
public boolean visit(SQLAggregateExpr x) {
print(x.getMethodName());
print0(ucase ? x.getMethodName() : x.getMethodName().toLowerCase());
print('(');
if (x.getOption() != null) {
print(x.getOption().toString());
print0(x.getOption().toString());
print(' ');
}
@@ -657,7 +657,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print0(ucase ? "NULL" : "null");
} else {
print0(ucase ? "N'" : "n'");
print(x.getText().replace("'", "''"));
print0(x.getText().replace("'", "''"));
print('\'');
}
return false;
@@ -816,10 +816,10 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (alias != null && alias.length() > 0) {
print0(ucase ? " AS " : " as ");
if (alias.indexOf(' ') == -1 || alias.charAt(0) == '"' || alias.charAt(0) == '\'') {
print(alias);
print0(alias);
} else {
print('"');
print(alias);
print0(alias);
print('"');
}
}
@@ -839,12 +839,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
x.getExpr().accept(this);
if (x.getType() != null) {
print(' ');
print(x.getType().name().toUpperCase());
print0(x.getType().name().toUpperCase());
}
if (x.getCollate() != null) {
print0(ucase ? " COLLATE " : " collate ");
print(x.getCollate());
print0(x.getCollate());
}
return false;
@@ -855,7 +855,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (x.getAlias() != null) {
print(' ');
print(x.getAlias());
print0(x.getAlias());
}
if (isPrettyFormat() && x.hasAfterComment()) {
@@ -878,7 +878,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
int index = x.getIndex();
if (parameters == null || index >= parameters.size()) {
print(x.getName());
print0(x.getName());
return false;
}
@@ -895,7 +895,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (param instanceof Number //
|| param instanceof Boolean) {
print(param.toString());
print0(param.toString());
return;
}
@@ -1207,7 +1207,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLUnionQuery x) {
x.getLeft().accept(this);
println();
print(x.getOperator().name);
print0(x.getOperator().name);
println();
boolean needParen = false;
@@ -1234,7 +1234,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLUnaryExpr x) {
print(x.getOperator().name);
print0(x.getOperator().name);
SQLExpr expr = x.getExpr();
@@ -1266,7 +1266,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLHexExpr x) {
print0("0x");
print(x.getHex());
print0(x.getHex());
String charset = (String) x.getAttribute("USING");
if (charset != null) {
@@ -1349,7 +1349,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (x.getAlias() != null) {
print0(ucase ? " AS " : " as ");
print(x.getAlias());
print0(x.getAlias());
}
decrementIndent();
@@ -1452,7 +1452,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (x.getAlias() != null) {
print(' ');
print(x.getAlias());
print0(x.getAlias());
}
return false;
@@ -1480,7 +1480,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLCommentStatement x) {
print0(ucase ? "COMMENT ON " : "comment on ");
if (x.getType() != null) {
print(x.getType().name());
print0(x.getType().name());
print(' ');
}
x.getOn().accept(this);
@@ -1806,14 +1806,14 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLAlterTableDropConstraint x) {
print(ucase ? "DROP CONSTRAINT " : "drop constraint ");
print0(ucase ? "DROP CONSTRAINT " : "drop constraint ");
x.getConstraintName().accept(this);
return false;
}
@Override
public boolean visit(SQLAlterTableStatement x) {
print(ucase ? "ALTER TABLE " : "alter table ");
print0(ucase ? "ALTER TABLE " : "alter table ");
x.getName().accept(this);
incrementIndent();
for (int i = 0; i < x.getItems().size(); ++i) {
@@ -1838,7 +1838,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLCreateIndexStatement x) {
print0(ucase ? "CREATE " : "create ");
if (x.getType() != null) {
print(x.getType());
print0(x.getType());
print(' ');
}
@@ -2040,7 +2040,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print0(ucase ? " ON " : " on ");
if (x.getObjectType() != null) {
print(x.getObjectType().name());
print0(x.getObjectType().name());
print(' ');
}
@@ -2057,7 +2057,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print0(ucase ? " ON " : " on ");
if (x.getObjectType() != null) {
print(x.getObjectType().name());
print0(x.getObjectType().name());
print(' ');
}
@@ -2128,7 +2128,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLAlterTableAddIndex x) {
print0(ucase ? "ADD " : "add ");
if (x.getType() != null) {
print(x.getType());
print0(x.getType());
print(' ');
}
@@ -2136,7 +2136,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
print0(ucase ? "UNIQUE " : "unique ");
}
print(x.getKeyOrIndex());
print0(x.getKeyOrIndex());
print(' ');
if (x.getName() != null) {
@@ -2149,7 +2149,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
if (x.getUsing() != null) {
print0(ucase ? " USING " : " using ");
print(x.getUsing());
print0(x.getUsing());
}
return false;
}
@@ -2188,7 +2188,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
for (TriggerEvent event : x.getTriggerEvents()) {
print(' ');
print(event.name());
print0(event.name());
}
println();
print0(ucase ? "ON " : "on ");
@@ -2205,7 +2205,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
public boolean visit(SQLBooleanExpr x) {
print(x.getValue() ? "true" : "false");
print0(x.getValue() ? "true" : "false");
return false;
}
@@ -2240,12 +2240,12 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
}
print('\'');
print(x.getLiteral());
print0(x.getLiteral());
print('\'');
if (x.getTimeZone() != null) {
print0(ucase ? " AT TIME ZONE '" : " at time zone '");
print(x.getTimeZone());
print0(x.getTimeZone());
print('\'');
}
@@ -2255,7 +2255,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLBinaryExpr x) {
print0("b'");
print(x.getValue());
print0(x.getValue());
print('\'');
return false;
@@ -2346,7 +2346,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
public boolean visit(SQLAlterTableRenamePartition x) {
print0(ucase ? "PARTITION (" : "partition (");
printAndAccept(x.getPartition(), ", ");
print(ucase ? ") RENAME TO PARTITION(" : ") rename to partition(");
print0(ucase ? ") RENAME TO PARTITION(" : ") rename to partition(");
printAndAccept(x.getTo(), ", ");
print(')');
return false;
@@ -2414,7 +2414,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLOpenStatement x) {
print0(ucase ? "OPEN " : "open ");
print(x.getCursorName());
print0(x.getCursorName());
return false;
}
@@ -2430,7 +2430,7 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Printab
@Override
public boolean visit(SQLCloseStatement x) {
print0(ucase ? "CLOSE " : "close ");
print(x.getCursorName());
print0(x.getCursorName());
return false;
}
@@ -32,13 +32,13 @@ public class OracleMergeTest4 extends OracleTest {
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
@@ -20,6 +20,7 @@ import java.util.List;
import org.junit.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
@@ -35,13 +36,24 @@ public class OracleSelectTest10 extends OracleTest {
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
print(statementList);
SQLStatement stmt = statementList.get(0);
String result = SQLUtils.toOracleString(stmt);
String result_lcase = SQLUtils.toOracleString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
Assert.assertEquals("SELECT *"
+ "\nFROM pivot_table"
+ "\nUNPIVOT INCLUDE NULLS (yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))"
+ "\nORDER BY year, order_mode", result);
Assert.assertEquals("select *"
+ "\nfrom pivot_table"
+ "\nunpivot include nulls (yearly_total for order_mode in (store as 'direct', internet as 'online'))"
+ "\norder by year, order_mode", result_lcase);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
@@ -20,6 +20,7 @@ import java.util.List;
import org.junit.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
@@ -44,13 +45,18 @@ public class OracleSelectTest2 extends OracleTest {
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
String result = SQLUtils.toOracleString(stmt);
String result_lcase = SQLUtils.toOracleString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
Assert.assertEquals(result.toLowerCase(), result_lcase);
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
@@ -20,6 +20,7 @@ import java.util.List;
import org.junit.Assert;
import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.SQLUtils;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
@@ -38,11 +39,25 @@ public class OracleSelectTest36 extends OracleTest {
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
SQLStatement stmt = statementList.get(0);
print(statementList);
String result = SQLUtils.toOracleString(stmt);
String result_lcase = SQLUtils.toOracleString(stmt, SQLUtils.DEFAULT_LCASE_FORMAT_OPTION);
Assert.assertEquals("SELECT ID, name"
+ "\nFROM druid_test"
+ "\nWHERE (name >= ?"
+ "\n\t\tOR name IS NULL)"
+ "\n\tAND card_id < ?", result);
Assert.assertEquals("select ID, name"
+ "\nfrom druid_test"
+ "\nwhere (name >= ?"
+ "\n\t\tor name is null)"
+ "\n\tand card_id < ?", result_lcase);
{
SQLSelect select = ((SQLSelectStatement) statemen).getSelect();
SQLSelect select = ((SQLSelectStatement) stmt).getSelect();
SQLSelectQueryBlock queryBlock = (SQLSelectQueryBlock) select.getQuery();
SQLBinaryOpExpr where = (SQLBinaryOpExpr) queryBlock.getWhere();
Assert.assertEquals(SQLBinaryOperator.BooleanAnd, where.getOperator());
@@ -60,7 +75,7 @@ public class OracleSelectTest36 extends OracleTest {
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
@@ -37,13 +37,13 @@ public class OracleSelectTest37 extends OracleTest {
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());
@@ -23,18 +23,17 @@ import com.alibaba.druid.sql.OracleTest;
import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.dialect.oracle.parser.OracleStatementParser;
import com.alibaba.druid.sql.dialect.oracle.visitor.OracleSchemaStatVisitor;
import com.alibaba.druid.stat.TableStat;
public class OracleSelectTest40 extends OracleTest {
public void test_0() throws Exception {
String sql = //
"WITH a AS (" + //
" SELECT TO_CHAR(csl.create_time,'yyyyMMdd') create_time, cwl.client_key ck, csl.src_id src_id " + //
" SELECT to_char(csl.create_time,'yyyyMMdd') create_time, cwl.client_key ck, csl.src_id src_id " + //
" FROM xxxx csl, xxxx cwl " + //
" WHERE 1 =1 AND csl.src_id = cwl.src_id AND csl.curr_url = cwl.curr_url " + //
" AND TO_CHAR(csl.create_time,'yyyyMMdd') BETWEEN ? " + //
" AND ? AND cwl.day = TO_CHAR(csl.create_time,'yyyyMMdd') " + //
" AND to_char(csl.create_time,'yyyyMMdd') BETWEEN ? " + //
" AND ? AND cwl.day = to_char(csl.create_time,'yyyyMMdd') " + //
" GROUP BY cwl.client_key, csl.src_id, csl.create_time ORDER BY csl.src_id )" + //
", b AS (" + //
" SELECT itn.buyerpaytime, itn.esc_orderid, itn.oldck, " + //
@@ -47,18 +46,18 @@ public class OracleSelectTest40 extends OracleTest {
"SELECT MAX(cos.location) AS position , a.src_id AS srcid , " + //
" COUNT(DISTINCT b.esc_orderid) AS orders , SUM(b.gmv) AS uvGmv, " + //
" COUNT(DISTINCT buyer) AS buyers FROM a, b, cp_operate_statistics cos " + //
"WHERE a.ck = b.oldck(+) AND TO_CHAR(cos.day,'yyyyMMdd') = a.create_time " + //
"WHERE a.ck = b.oldck(+) AND to_char(cos.day,'yyyyMMdd') = a.create_time " + //
" AND a.create_time = b.buyerpaytime AND a.src_id = cos.src_id GROUP BY a.src_id ORDER BY a.src_id"; //
OracleStatementParser parser = new OracleStatementParser(sql);
List<SQLStatement> statementList = parser.parseStatementList();
SQLStatement statemen = statementList.get(0);
SQLStatement stmt = statementList.get(0);
print(statementList);
Assert.assertEquals(1, statementList.size());
OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor();
statemen.accept(visitor);
stmt.accept(visitor);
System.out.println("Tables : " + visitor.getTables());
System.out.println("fields : " + visitor.getColumns());