Search in sources :

Example 81 with DbType

use of com.alibaba.druid.DbType in project druid by alibaba.

the class Issue1865 method test_for_delete_group.

public void test_for_delete_group() throws Exception {
    final DbType dbType = JdbcConstants.MYSQL;
    String sql = "delete from t where id = 2 and name = 'wenshao'";
    SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType, SQLParserFeature.EnableSQLBinaryOpExprGroup);
    SQLDeleteStatement stmt = (SQLDeleteStatement) parser.parseStatement();
    assertTrue(stmt.removeCondition("name = 'wenshao'"));
    assertEquals("DELETE FROM t\n" + "WHERE id = 2", stmt.toString());
    assertTrue(stmt.removeCondition("id = 2"));
    assertEquals("DELETE FROM t", stmt.toString());
    stmt.addCondition("id = 3");
    assertEquals("DELETE FROM t\n" + "WHERE id = 3", stmt.toString());
}
Also used : SQLStatementParser(com.alibaba.druid.sql.parser.SQLStatementParser) SQLDeleteStatement(com.alibaba.druid.sql.ast.statement.SQLDeleteStatement) DbType(com.alibaba.druid.DbType)

Example 82 with DbType

use of com.alibaba.druid.DbType in project druid by alibaba.

the class Issue1865 method test_for_select.

public void test_for_select() throws Exception {
    final DbType dbType = JdbcConstants.MYSQL;
    String sql = "select * from t where id = 2 and name = 'wenshao'";
    SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
    SQLSelectStatement stmt = (SQLSelectStatement) parser.parseStatement();
    SQLSelectQueryBlock queryBlock = stmt.getSelect().getQueryBlock();
    assertTrue(queryBlock.removeCondition("name = 'wenshao'"));
    assertEquals("SELECT *\n" + "FROM t\n" + "WHERE id = 2", stmt.toString());
    assertTrue(queryBlock.removeCondition("id = 2"));
    assertEquals("SELECT *\n" + "FROM t", stmt.toString());
    queryBlock.addCondition("id = 3");
    assertEquals("SELECT *\n" + "FROM t\n" + "WHERE id = 3", stmt.toString());
}
Also used : SQLStatementParser(com.alibaba.druid.sql.parser.SQLStatementParser) SQLSelectStatement(com.alibaba.druid.sql.ast.statement.SQLSelectStatement) SQLSelectQueryBlock(com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock) DbType(com.alibaba.druid.DbType)

Example 83 with DbType

use of com.alibaba.druid.DbType in project druid by alibaba.

the class Issue1935 method test_for_issue.

public void test_for_issue() throws Exception {
    DbType DBTYPE = JdbcConstants.MYSQL;
    // String sql = "select name, course ,scole from student inner join scole on student.id = scole.sd_id where course = '数学' limit 10;";
    // sql = "select name,course,sum(scole) as total from student where student.id in (select sd_id from scole where name='aaa') and scole in (1,2,3) group by name HAVING total <60 order by scole desc limit 10 ,2 ";
    String sql = "select name from  student where id in (select sd_id from scole where scole < 60 order by scole asc) or id = 2 order by name desc";
    String format = SQLUtils.format(sql, DBTYPE);
    // System.out.println("formated sql :  " + format);
    List<SQLStatement> list = SQLUtils.parseStatements(sql, DBTYPE);
    for (int i = 0; i < list.size(); i++) {
        SQLStatement stmt = list.get(i);
        MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
        stmt.accept(visitor);
        // 获取操作方法名称,依赖于表名称
        System.out.println("涉及到的所有表 : " + visitor.getTables());
        Map<TableStat.Name, TableStat> table_map = visitor.getTables();
        for (Map.Entry<TableStat.Name, TableStat> entry : table_map.entrySet()) {
            TableStat.Name name = entry.getKey();
            name.getName();
            // 存储表的调度次数,包括select ,update等
            TableStat ts = entry.getValue();
        }
        // 获取字段名称
        System.out.println(visitor.getParameters());
        // 获取列名
        System.out.println("查询的列信息 : " + visitor.getColumns());
        Collection<TableStat.Column> cc = visitor.getColumns();
        // column 存储了表名,列名,以及列是出现的位置,where,select,groupby ,order
        for (TableStat.Column column : cc) {
        }
        System.out.println("conditions : " + visitor.getConditions());
        List<TableStat.Condition> conditions = visitor.getConditions();
        System.out.println("----------------------------");
        for (TableStat.Condition cond : conditions) {
            System.out.println("column : " + cond.getColumn());
            System.out.println("operator : " + cond.getOperator());
            System.out.println("values  : " + cond.getValues());
            System.out.println("----------------------------");
        }
        System.out.println("group by : " + visitor.getGroupByColumns());
        System.out.println("order by : " + visitor.getOrderByColumns());
        System.out.println("relations ships  : " + visitor.getRelationships());
    }
}
Also used : TableStat(com.alibaba.druid.stat.TableStat) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) DbType(com.alibaba.druid.DbType) MySqlSchemaStatVisitor(com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor) Map(java.util.Map)

Example 84 with DbType

use of com.alibaba.druid.DbType in project druid by alibaba.

the class MySqlParameterizedOutputVisitorTest_19 method test_for_parameterize.

public void test_for_parameterize() throws Exception {
    final DbType dbType = JdbcConstants.MYSQL;
    String sql = "SELECT COUNT(*), xx_id FROM `a_lb`.lb_release_source_aio GROUP BY xx_id";
    String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType);
    assertEquals("SELECT COUNT(*), xx_id FROM `a_lb`.lb_release_source_aio GROUP BY xx_id", psql);
    SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType);
    List<SQLStatement> stmtList = parser.parseStatementList();
    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.setExportTables(true);
    /*visitor.setPrettyFormat(false);*/
    SQLStatement stmt = stmtList.get(0);
    stmt.accept(visitor);
    // System.out.println(parameters);
    assertEquals(0, parameters.size());
    StringBuilder buf = new StringBuilder();
    SQLASTOutputVisitor visitor1 = SQLUtils.createOutputVisitor(buf, dbType);
    visitor1.addTableMapping("lb_release_source_aio", "lb_release_source_aio_0008");
    visitor1.setParameters(visitor.getParameters());
    stmt.accept(visitor1);
    assertEquals("SELECT COUNT(*), xx_id\n" + "FROM `a_lb`.lb_release_source_aio_0008\n" + "GROUP BY xx_id", buf.toString());
}
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 85 with DbType

use of com.alibaba.druid.DbType in project druid by alibaba.

the class MySqlParameterizedOutputVisitorTest_11 method test_for_parameterize.

public void test_for_parameterize() throws Exception {
    final DbType dbType = JdbcConstants.MYSQL;
    String sql = "/* 72582af814768580067726386d39b6/0// */ select id,uid from mytable";
    String psql = ParameterizedOutputVisitorUtils.parameterize(sql, dbType);
    String expected = "SELECT id, uid\n" + "FROM mytable";
    assertEquals(expected, psql);
    paramaterizeAST(sql, "/* 72582af814768580067726386d39b6/0// */\n" + "SELECT id, uid\n" + "FROM mytable");
}
Also used : DbType(com.alibaba.druid.DbType)

Aggregations

DbType (com.alibaba.druid.DbType)114 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)76 SQLStatementParser (com.alibaba.druid.sql.parser.SQLStatementParser)70 ArrayList (java.util.ArrayList)50 SQLASTOutputVisitor (com.alibaba.druid.sql.visitor.SQLASTOutputVisitor)45 SchemaStatVisitor (com.alibaba.druid.sql.visitor.SchemaStatVisitor)21 TableStat (com.alibaba.druid.stat.TableStat)10 JSONArray (com.alibaba.fastjson.JSONArray)10 MySqlExportParameterVisitor (com.alibaba.druid.sql.dialect.mysql.visitor.MySqlExportParameterVisitor)5 ExportParameterVisitor (com.alibaba.druid.sql.visitor.ExportParameterVisitor)5 ParserException (com.alibaba.druid.sql.parser.ParserException)4 Map (java.util.Map)4 JdbcParameter (com.alibaba.druid.proxy.jdbc.JdbcParameter)2 SQLExpr (com.alibaba.druid.sql.ast.SQLExpr)2 SQLDeleteStatement (com.alibaba.druid.sql.ast.statement.SQLDeleteStatement)2 SQLSelectQueryBlock (com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock)2 SQLSelectStatement (com.alibaba.druid.sql.ast.statement.SQLSelectStatement)2 SQLUpdateStatement (com.alibaba.druid.sql.ast.statement.SQLUpdateStatement)2 MySqlSchemaStatVisitor (com.alibaba.druid.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor)2 OracleSQLObject (com.alibaba.druid.sql.dialect.oracle.ast.OracleSQLObject)2