Search in sources :

Example 21 with SQLASTOutputVisitor

use of com.alibaba.druid.sql.visitor.SQLASTOutputVisitor in project druid by alibaba.

the class SQLParserUtils method addBackQuote.

public static String addBackQuote(String sql, DbType dbType) {
    if (StringUtils.isEmpty(sql)) {
        return sql;
    }
    SQLStatementParser parser = createSQLStatementParser(sql, dbType);
    StringBuffer buf = new StringBuffer(sql.length() + 20);
    SQLASTOutputVisitor out = SQLUtils.createOutputVisitor(buf, DbType.mysql);
    out.config(VisitorFeature.OutputNameQuote, true);
    SQLType sqlType = getSQLType(sql, dbType);
    if (sqlType == SQLType.INSERT) {
        parser.config(SQLParserFeature.InsertReader, true);
        SQLInsertStatement stmt = (SQLInsertStatement) parser.parseStatement();
        int startPos = parser.getLexer().startPos;
        stmt.accept(out);
        if (stmt.getQuery() == null) {
            buf.append(' ');
            buf.append(sql, startPos, sql.length());
        }
    } else {
        SQLStatement stmt = parser.parseStatement();
        stmt.accept(out);
    }
    return buf.toString();
}
Also used : PGSQLStatementParser(com.alibaba.druid.sql.dialect.postgresql.parser.PGSQLStatementParser) SQLInsertStatement(com.alibaba.druid.sql.ast.statement.SQLInsertStatement) SQLASTOutputVisitor(com.alibaba.druid.sql.visitor.SQLASTOutputVisitor) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement)

Example 22 with SQLASTOutputVisitor

use of com.alibaba.druid.sql.visitor.SQLASTOutputVisitor in project druid by alibaba.

the class Oracle_param_1 method test_for_parameterize.

public void test_for_parameterize() throws Exception {
    final DbType dbType = JdbcConstants.MYSQL;
    String sql = "SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;";
    SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
    List<SQLStatement> stmtList = parser.parseStatementList();
    SQLStatement statement = stmtList.get(0);
    StringBuilder out = new StringBuilder();
    SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.ORACLE);
    List<Object> parameters = new ArrayList<Object>();
    visitor.setParameterized(true);
    visitor.setParameterizedMergeInList(true);
    visitor.setParameters(parameters);
    /*visitor.setPrettyFormat(false);*/
    statement.accept(visitor);
    /* JSONArray array = new JSONArray();
        for(String table : visitor.getTables()){
            array.add(table.replaceAll("`",""));
        }*/
    String psql = out.toString();
    assertEquals("SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')\n" + "FROM dual;", psql);
    String params_json = JSONArray.toJSONString(parameters, SerializerFeature.WriteClassName);
    System.out.println(params_json);
    JSONArray jsonArray = JSON.parseArray(params_json);
    String json = JSONArray.toJSONString(jsonArray, SerializerFeature.WriteClassName);
    assertEquals("[]", json);
    String rsql = SQLUtils.toSQLString(SQLUtils.parseStatements(psql, dbType), dbType, jsonArray);
    assertEquals("SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD')\n" + "FROM dual;", rsql);
}
Also used : SQLStatementParser(com.alibaba.druid.sql.parser.SQLStatementParser) ArrayList(java.util.ArrayList) JSONArray(com.alibaba.fastjson.JSONArray) SQLASTOutputVisitor(com.alibaba.druid.sql.visitor.SQLASTOutputVisitor) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) DbType(com.alibaba.druid.DbType)

Example 23 with SQLASTOutputVisitor

use of com.alibaba.druid.sql.visitor.SQLASTOutputVisitor in project druid by alibaba.

the class SQLUtils method toSQLString.

public static String toSQLString(SQLObject sqlObject, DbType dbType, FormatOption option, VisitorFeature... features) {
    StringBuilder out = new StringBuilder();
    SQLASTOutputVisitor visitor = createOutputVisitor(out, dbType);
    if (option == null) {
        option = DEFAULT_FORMAT_OPTION;
    }
    visitor.setUppCase(option.isUppCase());
    visitor.setPrettyFormat(option.isPrettyFormat());
    visitor.setParameterized(option.isParameterized());
    int featuresValue = option.features;
    if (features != null) {
        for (VisitorFeature feature : features) {
            visitor.config(feature, true);
            featuresValue |= feature.mask;
        }
    }
    visitor.setFeatures(featuresValue);
    sqlObject.accept(visitor);
    String sql = out.toString();
    return sql;
}
Also used : VisitorFeature(com.alibaba.druid.sql.visitor.VisitorFeature) SQLASTOutputVisitor(com.alibaba.druid.sql.visitor.SQLASTOutputVisitor)

Example 24 with SQLASTOutputVisitor

use of com.alibaba.druid.sql.visitor.SQLASTOutputVisitor in project druid by alibaba.

the class MySqlParameterizedOutputVisitorTest_53_or method test_for_parameterize.

public void test_for_parameterize() throws Exception {
    final DbType dbType = JdbcConstants.MYSQL;
    String sql = "SELECT p.id as \"id\", p.rule_id as \"ruleId\", p.name as \"name\", p.param_type as \"type\", p.default_value as \"defaultValue\", p.description as \"description\" FROM rules_parameters p WHERE (( p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=? or p.rule_id=?))";
    SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
    List<SQLStatement> stmtList = parser.parseStatementList();
    SQLStatement statement = stmtList.get(0);
    StringBuilder out = new StringBuilder();
    SQLASTOutputVisitor visitor = SQLUtils.createOutputVisitor(out, JdbcConstants.MYSQL);
    List<Object> parameters = new ArrayList<Object>();
    visitor.setParameterized(true);
    visitor.setParameterizedMergeInList(true);
    visitor.setParameters(parameters);
    /*visitor.setPrettyFormat(false);*/
    statement.accept(visitor);
    /* JSONArray array = new JSONArray();
        for(String table : visitor.getTables()){
            array.add(table.replaceAll("`",""));
        }*/
    String psql = out.toString();
    System.out.println(psql);
    assertEquals("SELECT p.id AS \"id\", p.rule_id AS \"ruleId\", p.name AS \"name\", p.param_type AS \"type\", p.default_value AS \"defaultValue\"\n" + "\t, p.description AS \"description\"\n" + "FROM rules_parameters p\n" + "WHERE p.rule_id = ?", psql);
}
Also used : SQLStatementParser(com.alibaba.druid.sql.parser.SQLStatementParser) ArrayList(java.util.ArrayList) SQLASTOutputVisitor(com.alibaba.druid.sql.visitor.SQLASTOutputVisitor) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) DbType(com.alibaba.druid.DbType)

Example 25 with SQLASTOutputVisitor

use of com.alibaba.druid.sql.visitor.SQLASTOutputVisitor in project druid by alibaba.

the class OracleSysdateTest method test_0.

public void test_0() throws Exception {
    OracleSysdateExpr sysdate = new OracleSysdateExpr();
    StringBuffer buf = new StringBuffer();
    SQLASTOutputVisitor v = new SQLASTOutputVisitor(buf);
    sysdate.accept(v);
    assertEquals("SYSDATE", buf.toString());
}
Also used : OracleSysdateExpr(com.alibaba.druid.sql.dialect.oracle.ast.expr.OracleSysdateExpr) SQLASTOutputVisitor(com.alibaba.druid.sql.visitor.SQLASTOutputVisitor)

Aggregations

SQLASTOutputVisitor (com.alibaba.druid.sql.visitor.SQLASTOutputVisitor)67 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)56 ArrayList (java.util.ArrayList)48 DbType (com.alibaba.druid.DbType)45 SQLStatementParser (com.alibaba.druid.sql.parser.SQLStatementParser)44 JSONArray (com.alibaba.fastjson.JSONArray)10 MySqlOutputVisitor (com.alibaba.druid.sql.dialect.mysql.visitor.MySqlOutputVisitor)3 OracleOutputVisitor (com.alibaba.druid.sql.dialect.oracle.visitor.OracleOutputVisitor)3 SQLExpr (com.alibaba.druid.sql.ast.SQLExpr)2 SQLAggregateExpr (com.alibaba.druid.sql.ast.expr.SQLAggregateExpr)2 SQLAllColumnExpr (com.alibaba.druid.sql.ast.expr.SQLAllColumnExpr)2 SQLIdentifierExpr (com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)2 SQLSelectGroupByClause (com.alibaba.druid.sql.ast.statement.SQLSelectGroupByClause)2 SQLSelectItem (com.alibaba.druid.sql.ast.statement.SQLSelectItem)2 DB2SelectQueryBlock (com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock)2 DB2OutputVisitor (com.alibaba.druid.sql.dialect.db2.visitor.DB2OutputVisitor)2 MySqlSelectQueryBlock (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock)2 MySqlStatementParser (com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser)2 OracleSelectQueryBlock (com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleSelectQueryBlock)2 PGSelectQueryBlock (com.alibaba.druid.sql.dialect.postgresql.ast.stmt.PGSelectQueryBlock)2