Search in sources :

Example 36 with ParserException

use of com.alibaba.druid.sql.parser.ParserException in project druid by alibaba.

the class MySqlSelectTest_196_wall method test_0.

public void test_0() throws Exception {
    String sql = "update task_info set priority = 1, content = 'x渓螼h\u0013[\u0014\u0006饆蜭�)漉=灔�\u000B\u0011\u0011u�\uE06A圥Z[\u0017殞c怈﹝櫃&c摍0\u007Fj璟\u0004]JWRb峌膮埜\u0014譢\"瓺\\\\塼!.D牡玕\"邥\t� 佥篼緖.W=Rw4�\u001E3\t玭YF螭�\u0004�);\u0011�I\u0017�%\u0017谦漜f*\bm梄恀拒t)/�I�\"uSP蟉�\u0006I3\\\"�\u0016敐\f\\Z殷觀n\\\"餭讖;祵Y換g\uE5B7&柋\u0017�\u0011﹗A欍媞(I=\u0010�x鐹�\u000B!蜿\u0006\u0013�lQw�(33毳圳倀!\uE324=&释烃襲�&b\uE1EF�\u0013mm孺L\u0014嚍_MS7湏痘笫滴;y鶲\b爱骤求秩G-\u001By~殿揀\uE222�\u0003鮝[�Dqo:蟎'~=裼�\u001F垴蟵\\rY�\u0013.\uE3F9R\u000E�\u0012滂燶n鑲�\u0002贛龎=\u0010ミ�\u0007/%�\u001C癳c�\u000E\\Z旊\u001B�\u000B2栣玄岜�#cc吜\uE6C5�\u001B嚮醽nx�\u001B巘肅輕4E鎊\u0018E\u0018跴欱貯i\u0007蘉渚秘\u0007c\u00129狓\u0004F\u001F\f\u0013�觠3\u000B��-XS8�\u0010�\u0019V\u001E諭餸�\u000Fk\\r|\u0014V\u0005躒_A彙?E�*�\u0015琔�\u001Ep共\u000B�\u0006Z\u001F�%楳�\u001D\u001C玾郳\"\uE26B\u0011�\u0006Jj\u0016h\u0005�\u001C�\u0002�\u0002�\u0004j貌`.�\u0001�\u0005韁\"�\u0006z佉\u0012�\u001CxQ�\u0007\u0017@呃-斵曼\\0k砛0k\u0003鬨Z\uE5E9\u007F\u0006^�\u000Es\u0005欳B�\f\\0\\0��+僜'�', attribute = 0, create_time = from_unixtime(1531714297) where id = 2726633030";
    Exception error = null;
    try {
        MySqlStatementParser parser = new MySqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();
    } catch (ParserException ex) {
        error = ex;
    }
    assertNotNull(error);
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) MySqlStatementParser(com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) ParserException(com.alibaba.druid.sql.parser.ParserException)

Example 37 with ParserException

use of com.alibaba.druid.sql.parser.ParserException in project druid by alibaba.

the class MySqlSelectTest_plus_sub_comment method test_4.

public void test_4() throws Exception {
    String sql = "select  1 ---++1 ";
    try {
        MySqlStatementParser parser = new MySqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();
        SQLSelectStatement stmt = (SQLSelectStatement) statementList.get(0);
        assertEquals("SELECT 1 - -(-(+(+1)))", stmt.toString());
    } catch (Exception e) {
        assertTrue(e instanceof ParserException);
    }
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) SQLSelectStatement(com.alibaba.druid.sql.ast.statement.SQLSelectStatement) MySqlStatementParser(com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) ParserException(com.alibaba.druid.sql.parser.ParserException)

Example 38 with ParserException

use of com.alibaba.druid.sql.parser.ParserException in project druid by alibaba.

the class MySqlSelectTest_plus_sub_comment method test_15.

// public void test_14() throws Exception {
// String sql = "select max(id) ---min(id) from test_tablesl";
// 
// MySqlStatementParser parser = new MySqlStatementParser(sql);
// List<SQLStatement> statementList = parser.parseStatementList();
// SQLSelectStatement stmt = (SQLSelectStatement) statementList.get(0);
// assertEquals("SELECT MAX(id) - -(-MIN(id))\n" + "FROM test_tablesl", stmt.toString());
// }
public void test_15() throws Exception {
    String sql = "select max(id) --+-- min(id) from test_tablesl";
    try {
        MySqlStatementParser parser = new MySqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();
        SQLSelectStatement stmt = (SQLSelectStatement) statementList.get(0);
        fail();
    } catch (Exception e) {
        assertTrue(e instanceof ParserException);
    }
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) SQLSelectStatement(com.alibaba.druid.sql.ast.statement.SQLSelectStatement) MySqlStatementParser(com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) ParserException(com.alibaba.druid.sql.parser.ParserException)

Example 39 with ParserException

use of com.alibaba.druid.sql.parser.ParserException in project druid by alibaba.

the class MySqlSelectTest_plus_sub_comment method test_1_1.

public void test_1_1() throws Exception {
    String sql = "select  1 --- 2 ";
    try {
        MySqlStatementParser parser = new MySqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();
        SQLSelectStatement stmt = (SQLSelectStatement) statementList.get(0);
        fail();
    } catch (Exception e) {
        assertTrue(e instanceof ParserException);
    }
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) SQLSelectStatement(com.alibaba.druid.sql.ast.statement.SQLSelectStatement) MySqlStatementParser(com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) ParserException(com.alibaba.druid.sql.parser.ParserException)

Example 40 with ParserException

use of com.alibaba.druid.sql.parser.ParserException in project canal by alibaba.

the class PhoenixSyncService method sync.

/**
 * 批量同步 :将批量DML进行解析并放入List<SingleDml> --> dmlsPartition[hash].add(syncItem);
 * @param mappingConfig 配置集合
 * @param dmls   批量 DML
 */
public void sync(Map<String, Map<String, MappingConfig>> mappingConfig, List<Dml> dmls, Properties envProperties) {
    sync(dmls, dml -> {
        String destination = StringUtils.trimToEmpty(dml.getDestination());
        String groupId = StringUtils.trimToEmpty(dml.getGroupId());
        String database = dml.getDatabase();
        String table = dml.getTable().toLowerCase();
        Map<String, MappingConfig> configMap;
        if (envProperties != null && !"tcp".equalsIgnoreCase(envProperties.getProperty("canal.conf.mode"))) {
            // tcp 模式
            configMap = mappingConfig.get(destination + "-" + groupId + "_" + database + "-" + table);
        } else {
            // kafka 模式 或者 RocketMQ模式
            configMap = mappingConfig.get(destination + "_" + database + "-" + table);
        }
        if (configMap == null) {
            if (logger.isTraceEnabled()) {
                logger.trace("no config map: destination={},groupId={}, database={}, table={}, keys={}", destination, groupId, database, table, mappingConfig.keySet());
            }
            return false;
        }
        if (configMap.values().isEmpty()) {
            logger.info("config map empty: destination={},groupId={}, database={}, table={}, keys={}", destination, groupId, database, table, mappingConfig.keySet());
            return false;
        }
        if (dml.getIsDdl() != null && dml.getIsDdl() && StringUtils.isNotEmpty(dml.getSql())) {
            // DDL
            columnsTypeCache.remove(dml.getDestination() + "." + dml.getDatabase() + "." + dml.getTable());
            List<SQLStatement> stmtList;
            try {
                stmtList = SQLUtils.parseStatements(dml.getSql(), JdbcConstants.MYSQL, false);
            } catch (ParserException e) {
                // 可能存在一些SQL是不支持的,比如存储过程
                logger.info("parse sql error: " + dml.getSql(), e);
                return false;
            }
            for (Map.Entry<String, MappingConfig> entry : configMap.entrySet()) {
                try {
                    alter(batchExecutors[0], entry.getValue(), dml, stmtList, entry.getKey());
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            return false;
        } else {
            // DML
            for (Map.Entry<String, MappingConfig> entry : configMap.entrySet()) {
                MappingConfig config = entry.getValue();
                if (config.isDebug()) {
                    logger.info("DML: {} {}", entry.getKey(), JSON.toJSONString(dml, SerializerFeature.WriteMapNullValue));
                }
                if (config.getConcurrent()) {
                    // 并行同步
                    // 将一批DML转成SingleDml
                    List<SingleDml> singleDmls = SingleDml.dml2SingleDmls(dml);
                    singleDmls.forEach(singleDml -> {
                        // 取主键hash
                        int hash = pkHash(config.getDbMapping(), singleDml.getData());
                        SyncItem syncItem = new SyncItem(config, singleDml);
                        // 相同的主键数据的顺序是可以保证的
                        dmlsPartition[hash].add(syncItem);
                    });
                } else {
                    // 不并行同步
                    int hash = 0;
                    List<SingleDml> singleDmls = SingleDml.dml2SingleDmls(dml);
                    singleDmls.forEach(singleDml -> {
                        SyncItem syncItem = new SyncItem(config, singleDml);
                        // 这里线程默认是3个,如果不并行,则会出现2个线程空跑
                        dmlsPartition[hash].add(syncItem);
                    });
                }
            }
            return true;
        }
    });
}
Also used : ParserException(com.alibaba.druid.sql.parser.ParserException) SQLException(java.sql.SQLException) SingleDml(com.alibaba.otter.canal.client.adapter.phoenix.support.SingleDml) SQLStatement(com.alibaba.druid.sql.ast.SQLStatement) MappingConfig(com.alibaba.otter.canal.client.adapter.phoenix.config.MappingConfig)

Aggregations

ParserException (com.alibaba.druid.sql.parser.ParserException)98 SQLExpr (com.alibaba.druid.sql.ast.SQLExpr)25 SQLStatement (com.alibaba.druid.sql.ast.SQLStatement)18 SQLName (com.alibaba.druid.sql.ast.SQLName)16 MySqlStatementParser (com.alibaba.druid.sql.dialect.mysql.parser.MySqlStatementParser)12 SQLIdentifierExpr (com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr)10 SQLSelectStatement (com.alibaba.druid.sql.ast.statement.SQLSelectStatement)9 Token (com.alibaba.druid.sql.parser.Token)9 SQLCommentHint (com.alibaba.druid.sql.ast.SQLCommentHint)5 SQLCharExpr (com.alibaba.druid.sql.ast.expr.SQLCharExpr)5 SQLIntegerExpr (com.alibaba.druid.sql.ast.expr.SQLIntegerExpr)5 SQLSelect (com.alibaba.druid.sql.ast.statement.SQLSelect)5 SQLOrderBy (com.alibaba.druid.sql.ast.SQLOrderBy)4 SQLBinaryOpExpr (com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr)4 SQLVariantRefExpr (com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr)4 MySqlSelectQueryBlock (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock)4 OracleConstraint (com.alibaba.druid.sql.dialect.oracle.ast.stmt.OracleConstraint)4 DbType (com.alibaba.druid.DbType)3 SQLDeclareItem (com.alibaba.druid.sql.ast.SQLDeclareItem)3 SQLPartitionByHash (com.alibaba.druid.sql.ast.SQLPartitionByHash)3