Java源码示例:com.alibaba.druid.sql.parser.SQLStatementParser

示例1
private static boolean isSupportSelect(String stmt) {
    SQLStatementParser parser = new MySqlStatementParser(stmt);
    SQLStatement statement = parser.parseStatement();
    if (!(statement instanceof SQLSelectStatement)) {
        return false;
    }

    SQLSelectQuery sqlSelectQuery = ((SQLSelectStatement) statement).getSelect().getQuery();
    if (!(sqlSelectQuery instanceof MySqlSelectQueryBlock)) {
        return false;
    }
    MySqlSelectQueryBlock selectQueryBlock = (MySqlSelectQueryBlock) sqlSelectQuery;
    SQLTableSource mysqlFrom = selectQueryBlock.getFrom();
    if (mysqlFrom != null) {
        return false;
    }
    for (SQLSelectItem item : selectQueryBlock.getSelectList()) {
        SQLExpr selectItem = item.getExpr();
        if (!isVariantRef(selectItem)) {
            return false;
        }
    }
    return true;
}
 
示例2
private static boolean isInsertSeq(ServerConnection c, String stmt, SchemaConfig schema) throws SQLException {
    SQLStatementParser parser = new MySqlStatementParser(stmt);
    MySqlInsertStatement statement = (MySqlInsertStatement) parser.parseStatement();
    String schemaName = schema == null ? null : schema.getName();
    SQLExprTableSource tableSource = statement.getTableSource();
    SchemaUtil.SchemaInfo schemaInfo = SchemaUtil.getSchemaInfo(c.getUser(), schemaName, tableSource);
    String tableName = schemaInfo.getTable();
    schema = schemaInfo.getSchemaConfig();
    TableConfig tableConfig = schema.getTables().get(tableName);
    if (tableConfig == null) {
        return false;
    } else if (tableConfig.isAutoIncrement()) {
        return true;
    }
    return false;
}
 
示例3
@Override
public SQLStatement parserSQL(String originSql) throws SQLSyntaxErrorException {
    SQLStatementParser parser = new MySqlStatementParser(originSql);

    /**
     * thrown SQL SyntaxError if parser error
     */
    try {
        List<SQLStatement> list = parser.parseStatementList();
        if (list.size() > 1) {
            throw new SQLSyntaxErrorException("MultiQueries is not supported,use single query instead ");
        }
        return list.get(0);
    } catch (Exception t) {
        LOGGER.info("routeNormalSqlWithAST", t);
        if (t.getMessage() != null) {
            throw new SQLSyntaxErrorException(t.getMessage());
        } else {
            throw new SQLSyntaxErrorException(t);
        }
    }
}
 
示例4
@Override
public String getCountSql(String sql) {
	SQLStatementParser parser = new MySqlStatementParser(sql);
	List<SQLStatement> stmtList = parser.parseStatementList();

	// 将AST通过visitor输出
	StringBuilder out = new StringBuilder();
	MysqlCountOutputVisitor visitor = new MysqlCountOutputVisitor(out);

	for (SQLStatement stmt : stmtList) {
		if (stmt instanceof SQLSelectStatement) {
			stmt.accept(visitor);
			out.append(";");
		}
	}

	return out.toString();
}
 
示例5
public String getExecutableSql() {
    if (parametersSize < 1) {
        return sql;
    }

    List<Object> parameters = new ArrayList<>(parametersSize);
    JdbcParameter jdbcParam;
    for (int i = 0; i < parametersSize; ++i) {
        jdbcParam = this.parameters[i];
        parameters.add(jdbcParam != null ? jdbcParam.getValue() : null);
    }

    try {
        SQLStatementParser parser = ESActionFactory.createSqlStatementParser(sql);
        List<SQLStatement> statementList = parser.parseStatementList();
        return SQLUtils.toSQLString(statementList, JdbcConstants.MYSQL, parameters, sqlFormatOption);
    } catch (ClassCastException | ParserException ex) {
        LOG.warn("format error", ex);
        return sql;
    }
}
 
示例6
private static boolean isMycatSeq(String stmt, SchemaConfig schema)
  {
      if(pattern.matcher(stmt).find()) {
	return true;
}
      SQLStatementParser parser =new MySqlStatementParser(stmt);
      MySqlInsertStatement statement = (MySqlInsertStatement) parser.parseStatement();
      String tableName=   statement.getTableName().getSimpleName();
      TableConfig tableConfig= schema.getTables().get(tableName.toUpperCase());
      if(tableConfig==null) {
	return false;
}
      if(tableConfig.isAutoIncrement())
      {
          boolean isHasIdInSql=false;
          String primaryKey = tableConfig.getPrimaryKey();
          List<SQLExpr> columns = statement.getColumns();
          for (SQLExpr column : columns)
          {
              String columnName = column.toString();
              if(primaryKey.equalsIgnoreCase(columnName))
              {
                  isHasIdInSql = true;
                  break;
              }
          }
          if(!isHasIdInSql) {
		return true;
	}
      }


      return false;
  }
 
示例7
private static String[] getColumns(String sql) {
    String[] columnNames;
    try {
        SQLStatementParser sqlStatementParser = SQLParserUtils.createSQLStatementParser(sql, JdbcUtils.MYSQL);
        SQLStatement statement = sqlStatementParser.parseStatement();
        if (statement instanceof SQLSelectStatement) {
            SQLSelect select = ((SQLSelectStatement) statement).getSelect();
            com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock query = (com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock) select.getQuery();
            int size = query.getSelectList().size();
            if (size == 1){
                if("*".equalsIgnoreCase(   query.getSelectList().get(0).toString())){
                    throw new Exception("unsupport * in select items:"+sql);
                }
            } {
                columnNames = new String[size];
                for (int i = 0; i < size; i++) {
                    columnNames[i] = query.getSelectList().get(i).toString();
                }
                return columnNames;
            }

        }
    }catch (Exception e){
        LOGGER.error("can not get column count",e);
    }
    return new String[]{};
}
 
示例8
public static String changeInsertAddSlot(String sql,int slotValue)
{
    SQLStatementParser parser = new MycatStatementParser(sql);
    MySqlInsertStatement insert = (MySqlInsertStatement) parser.parseStatement();
    insert.getColumns().add(new SQLIdentifierExpr("_slot") );
    insert.getValues().getValues().add(new SQLIntegerExpr(slotValue))  ;
    return insert.toString();
}
 
示例9
private LoadData parseLoadDataPram(String sql , String connectionCharset)
{
	SQLStatementParser parser = new MycatStatementParser(sql);
	MySqlLoadDataInFileStatement statement = (MySqlLoadDataInFileStatement) parser.parseStatement();

	LoadData loadData = new LoadData();
	SQLTextLiteralExpr rawLineEnd = (SQLTextLiteralExpr) statement.getLinesTerminatedBy();
	String lineTerminatedBy = rawLineEnd == null ? "\n" : rawLineEnd.getText();
	loadData.setLineTerminatedBy(lineTerminatedBy);

	SQLTextLiteralExpr rawFieldEnd = (SQLTextLiteralExpr) statement.getColumnsTerminatedBy();
	String fieldTerminatedBy = rawFieldEnd == null ? "\t" : rawFieldEnd.getText();
	loadData.setFieldTerminatedBy(fieldTerminatedBy);

	SQLTextLiteralExpr rawEnclosed = (SQLTextLiteralExpr) statement.getColumnsEnclosedBy();
	String enclose = rawEnclosed == null ? null : rawEnclosed.getText();
	loadData.setEnclose(enclose);

	SQLTextLiteralExpr escapseExpr =  (SQLTextLiteralExpr)statement.getColumnsEscaped() ;
	String escapse=escapseExpr==null?"\\":escapseExpr.getText();
	loadData.setEscape(escapse);
	String charset = statement.getCharset() != null ? statement.getCharset() : connectionCharset;
	loadData.setCharset(charset);

	String fileName = parseFileName(sql);
	if(StringUtils.isBlank(fileName)){
		throw new RuntimeException(" file name is null !");
	}

	loadData.setFileName(fileName);

	return loadData ;
}
 
示例10
static TableMeta initTableMeta(String table, String sql, long timeStamp) {
    if (sql == null) {
        return null;
    }

    try {
        SQLStatementParser parser = new DbleCreateTableParser(sql);
        SQLCreateTableStatement createStatement = parser.parseCreateTable();
        return MetaHelper.initTableMeta(table, createStatement, timeStamp);
    } catch (Exception e) {
        LOGGER.warn("sql[" + sql + "] parser error:", e);
        AlertUtil.alertSelf(AlarmCode.GET_TABLE_META_FAIL, Alert.AlertLevel.WARN, "sql[" + sql + "] parser error:" + e.getMessage(), null);
        return null;
    }
}
 
示例11
private static SQLStatement parseSQL(String stmt) throws SQLSyntaxErrorException {
    SQLStatementParser parser = new MySqlStatementParser(stmt);
    try {
        return parser.parseStatement();
    } catch (Exception t) {
        if (t.getMessage() != null) {
            throw new SQLSyntaxErrorException(t.getMessage());
        } else {
            throw new SQLSyntaxErrorException(t);
        }
    }
}
 
示例12
private List<WhereUnit> getAllWhereUnit(String sql) {
    SQLStatementParser parser = new MySqlStatementParser(sql);

    ServerSchemaStatVisitor visitor;
    //throw exception
    try {
        SQLStatement statement = parser.parseStatement();
        visitor = new ServerSchemaStatVisitor();
        statement.accept(visitor);
        return visitor.getAllWhereUnit();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return  null;
}
 
示例13
private PlanNode getPlanNode(String sql) {
    SQLStatementParser parser = new MySqlStatementParser(sql);
    SQLSelectStatement ast = (SQLSelectStatement) parser.parseStatement();
    MySQLPlanNodeVisitor visitor = new MySQLPlanNodeVisitor("TESTDB", 33, null, true, null);
    visitor.visit(ast);
    return visitor.getTableNode();
}
 
示例14
/**
 * Create the compatible Query object
 * based on the SQL query.
 * @param sql The SQL query.
 * @return Query object.
 */
   public static QueryAction create(Client client, String sql) throws SqlParseException, SQLFeatureNotSupportedException {
       sql = sql.replaceAll("\n", " ").trim();
       String firstWord = sql.substring(0, sql.indexOf(' '));
       switch (firstWord.toUpperCase()) {
		case "SELECT":
		    //zhongshu-comment 将sql字符串解析成AST,即SQLQueryExpr sqlExpr就是AST了,下面的代码就开始访问AST、从中获取token
			SQLQueryExpr sqlExpr = (SQLQueryExpr) toSqlExpr(sql);
               if(isMulti(sqlExpr)){//zhongshu-comment 判断是不是union查询,union查询两个select语句,btw:子查询也有多个select语句,至少2个
                   MultiQuerySelect multiSelect = new SqlParser().parseMultiSelect((SQLUnionQuery) sqlExpr.getSubQuery().getQuery());
                   handleSubQueries(client,multiSelect.getFirstSelect());
                   handleSubQueries(client,multiSelect.getSecondSelect());
                   return new MultiQueryAction(client, multiSelect);
               }
               else if(isJoin(sqlExpr,sql)){//zhongshu-comment join连接查询
                   JoinSelect joinSelect = new SqlParser().parseJoinSelect(sqlExpr);
                   handleSubQueries(client, joinSelect.getFirstTable());
                   handleSubQueries(client, joinSelect.getSecondTable());
                   return ESJoinQueryActionFactory.createJoinAction(client, joinSelect);
               }
               else {
                   //zhongshu-comment 大部分查询都是走这个分支,先看懂这个分支
                   Select select = new SqlParser().parseSelect(sqlExpr);
                   //todo 看不懂,测试了好几个常见的sql,都没有进去handleSubQueries该方法,那就先不理了,看别的
                   handleSubQueries(client, select);
                   return handleSelect(client, select);
               }
		case "DELETE":
               SQLStatementParser parser = createSqlStatementParser(sql);
			SQLDeleteStatement deleteStatement = parser.parseDeleteStatement();
			Delete delete = new SqlParser().parseDelete(deleteStatement);
			return new DeleteQueryAction(client, delete);
           case "SHOW":
               return new ShowQueryAction(client,sql);
		default:
			throw new SQLFeatureNotSupportedException(String.format("Unsupported query: %s", sql));
	}
}
 
示例15
private void oracleValidationQueryCheck() {
    if (validationQuery == null) {
        return;
    }
    if (validationQuery.length() == 0) {
        return;
    }

    SQLStatementParser sqlStmtParser = SQLParserUtils.createSQLStatementParser(validationQuery, this.dbType);
    List<SQLStatement> stmtList = sqlStmtParser.parseStatementList();

    if (stmtList.size() != 1) {
        return;
    }

    SQLStatement stmt = stmtList.get(0);
    if (!(stmt instanceof SQLSelectStatement)) {
        return;
    }

    SQLSelectQuery query = ((SQLSelectStatement) stmt).getSelect().getQuery();
    if (query instanceof SQLSelectQueryBlock) {
        if (((SQLSelectQueryBlock) query).getFrom() == null) {
            LOG.error("invalid oracle validationQuery. " + validationQuery + ", may should be : " + validationQuery
                    + " FROM DUAL");
        }
    }
}
 
示例16
private void db2ValidationQueryCheck() {
    if (validationQuery == null) {
        return;
    }
    if (validationQuery.length() == 0) {
        return;
    }

    SQLStatementParser sqlStmtParser = SQLParserUtils.createSQLStatementParser(validationQuery, this.dbType);
    List<SQLStatement> stmtList = sqlStmtParser.parseStatementList();

    if (stmtList.size() != 1) {
        return;
    }

    SQLStatement stmt = stmtList.get(0);
    if (!(stmt instanceof SQLSelectStatement)) {
        return;
    }

    SQLSelectQuery query = ((SQLSelectStatement) stmt).getSelect().getQuery();
    if (query instanceof SQLSelectQueryBlock) {
        if (((SQLSelectQueryBlock) query).getFrom() == null) {
            LOG.error("invalid db2 validationQuery. " + validationQuery + ", may should be : " + validationQuery
                    + " FROM SYSDUMMY");
        }
    }
}
 
示例17
public static void sqlValid(String sql, DataBaseType dataBaseType){
    SQLStatementParser statementParser = SQLParserUtils.createSQLStatementParser(sql,dataBaseType.getTypeName());
    statementParser.parseStatementList();
}
 
示例18
@Override
public void start(String sql)
{
    clear();
    this.sql = sql;


    SQLStatementParser parser = new MycatStatementParser(sql);
    statement = (MySqlLoadDataInFileStatement) parser.parseStatement();
    fileName = parseFileName(sql);

    if (fileName == null)
    {
        serverConnection.writeErrMessage(ErrorCode.ER_FILE_NOT_FOUND, " file name is null !");
        clear();
        return;
    }
    schema = MycatServer.getInstance().getConfig()
            .getSchemas().get(serverConnection.getSchema());
    if (schema == null){
        throw new RuntimeException("please sql:use schema  before load data");
    }
    tableId2DataNodeCache = (LayerCachePool) MycatServer.getInstance().getCacheService().getCachePool("TableID2DataNodeCache");
    tableName = statement.getTableName().getSimpleName().toUpperCase();
    tableConfig = schema.getTables().get(tableName);
  if(  tableConfig.getRule() != null && tableConfig.getRule().getRuleAlgorithm() instanceof SlotFunction){
      shoudAddSlot=true;
  }
    tempPath = SystemConfig.getHomePath() + File.separator + "temp" + File.separator + serverConnection.getId() + File.separator;
    tempFile = tempPath + "clientTemp.txt";
    tempByteBuffer = new ByteArrayOutputStream();

    List<SQLExpr> columns = statement.getColumns();
    if(tableConfig!=null)
    {
        String pColumn = getPartitionColumn();
        if (pColumn != null && columns != null && columns.size() > 0) {
            for (int i = 0, columnsSize = columns.size(); i < columnsSize; i++) {
                String column = StringUtil.removeBackquote(columns.get(i).toString());
                if (pColumn.equalsIgnoreCase(column)) {
                    partitionColumnIndex = i;
                }
                if("_slot".equalsIgnoreCase(column)){
                    shoudAddSlot=false;
                }
            }

        }
    }
        if(shoudAddSlot){
            columns.add(new SQLIdentifierExpr("_slot"));
        }
    parseLoadDataPram();
    if (statement.isLocal())
    {
        isStartLoadData = true;
        //向客户端请求发送文件
        ByteBuffer buffer = serverConnection.allocate();
        RequestFilePacket filePacket = new RequestFilePacket();
        filePacket.fileName = fileName.getBytes();
        filePacket.packetId = 1;
        filePacket.write(buffer, serverConnection, true);
    } else
    {
        if (!new File(fileName).exists())
        {
            serverConnection.writeErrMessage(ErrorCode.ER_FILE_NOT_FOUND, fileName + " is not found!");
            clear();
        } else
        {
            parseFileByLine(fileName, loadData.getCharset(), loadData.getLineTerminatedBy());
            RouteResultset rrs = buildResultSet(routeResultMap);
            if (rrs != null)
            {
                flushDataToFile();
                isStartLoadData = false;
                serverConnection.getSession2().execute(rrs, ServerParse.LOAD_DATA_INFILE_SQL);
            }

        }
    }
}
 
示例19
public static SchemaInfo parseSchema(String sql) {
    SQLStatementParser parser = new MySqlStatementParser(sql);
    return parseTables(parser.parseStatement(), new MycatSchemaStatVisitor());
}
 
示例20
@Override
public boolean checkDmlPrivilege(String user, String schema, String sql) {

	if ( schema == null ) {
		return true;
	}
	
	boolean isPassed = false;

	MycatConfig conf = MycatServer.getInstance().getConfig();
	UserConfig userConfig = conf.getUsers().get(user);
	if (userConfig != null) {
		
		UserPrivilegesConfig userPrivilege = userConfig.getPrivilegesConfig();
		if ( userPrivilege != null && userPrivilege.isCheck() ) {				
		
			UserPrivilegesConfig.SchemaPrivilege schemaPrivilege = userPrivilege.getSchemaPrivilege( schema );
			if ( schemaPrivilege != null ) {
	
				String tableName = null;
				int index = -1;
				
				//TODO 此处待优化,寻找更优SQL 解析器
				
				//修复bug
				// https://github.com/alibaba/druid/issues/1309
				//com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'begin',expect END, actual EOF begin
				if ( sql != null && sql.length() == 5 && sql.equalsIgnoreCase("begin") ) {
					return true;
				}
				
				SQLStatementParser parser = new MycatStatementParser(sql);			
				SQLStatement stmt = parser.parseStatement();

				if (stmt instanceof MySqlReplaceStatement || stmt instanceof SQLInsertStatement ) {
					index = 0;
				} else if (stmt instanceof SQLUpdateStatement ) {
					index = 1;
				} else if (stmt instanceof SQLSelectStatement ) {
					index = 2;
				} else if (stmt instanceof SQLDeleteStatement ) {
					index = 3;
				}

				if ( index > -1) {
					
					SchemaStatVisitor schemaStatVisitor = new MycatSchemaStatVisitor();
					stmt.accept(schemaStatVisitor);
					String key = schemaStatVisitor.getCurrentTable();
					if ( key != null ) {
						
						if (key.contains("`")) {
							key = key.replaceAll("`", "");
						}
						
						int dotIndex = key.indexOf(".");
						if (dotIndex > 0) {
							tableName = key.substring(dotIndex + 1);
						} else {
							tableName = key;
						}							
						
						//获取table 权限, 此处不需要检测空值, 无设置则自动继承父级权限
						UserPrivilegesConfig.TablePrivilege tablePrivilege = schemaPrivilege.getTablePrivilege( tableName );
						if ( tablePrivilege.getDml()[index] > 0 ) {
							isPassed = true;
						}
						
					} else {
						//skip
						isPassed = true;
					}
					
					
				} else {						
					//skip
					isPassed = true;
				}
				
			} else {					
				//skip
				isPassed = true;
			}
			
		} else {
			//skip
			isPassed = true;
		}

	} else {
		//skip
		isPassed = true;
	}
	
	if( !isPassed ) {
		 ALARM.error(new StringBuilder().append(Alarms.DML_ATTACK ).append("[sql=").append( sql )
                    .append(",user=").append(user).append(']').toString());
	}
	
	return isPassed;
}
 
示例21
private SQLStatement parseStmt(String sql) {
	SQLStatementParser statParser = SQLParserUtils.createSQLStatementParser(sql, "mysql");
	SQLStatement stmt = statParser.parseStatement();
	return stmt;		
}
 
示例22
private static boolean isSupportShow(String stmt) {
    SQLStatementParser parser = new MySqlStatementParser(stmt);
    SQLStatement statement = parser.parseStatement();
    return statement instanceof MySqlShowWarningsStatement || statement instanceof MySqlShowVariantsStatement;
}
 
示例23
private SQLStatement parseStmt(String sql) {
    SQLStatementParser statParser = SQLParserUtils.createSQLStatementParser(sql, "mysql");
    SQLStatement stmt = statParser.parseStatement();
    return stmt;
}
 
示例24
private RouteResultset constructByQuery(String sql, Map<String, String> mapTableToSimple, SchemaConfig schemaConfig) throws SQLException {
    SQLStatementParser parser = new MySqlStatementParser(sql);
    SQLSelectStatement select = (SQLSelectStatement) parser.parseStatement();
    return constructByStatement(sql, mapTableToSimple, select, schemaConfig);
}
 
示例25
@Test
public void createTableCommentTest() {
    String sql = "CREATE TABLE `suntest` (\n" +
            "\t`id` INT (11) DEFAULT NULL,\n" +
            "\t`name` VARCHAR (50) DEFAULT NULL\n" +
            ") ENGINE = INNODB DEFAULT CHARSET = latin1";
    SQLStatementParser parser = new MySqlCreateTableParser(sql);
    parser.parseCreateTable();

    sql = "CREATE TABLE `suntest` (\n" +
            "\t`id` INT (11) NOT NULL,\n" +
            "\t`name` VARCHAR (50) DEFAULT NULL,\n" +
            "\tPRIMARY KEY (`id`)\n" +
            ") ENGINE = INNODB DEFAULT CHARSET = latin1";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "\t`id` INT (11) NOT NULL,\n" +
            "\t`name` VARCHAR (50) DEFAULT NULL,\n" +
            "\tPRIMARY KEY (`id`),\n" +
            "\tUNIQUE KEY `name` (`name`)\n" +
            ") ENGINE = INNODB DEFAULT CHARSET = latin1";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "\t`id` INT (11) NOT NULL,\n" +
            "\t`name` VARCHAR (50) DEFAULT NULL,\n" +
            "\tPRIMARY KEY (`id`),\n" +
            "\tUNIQUE KEY `name` (`name`)\n" +
            ") ENGINE = INNODB DEFAULT CHARSET = latin1 COMMENT = 'suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "  `id` int(11) NOT NULL COMMENT 'test,test)',\n" +
            "  `name` varchar(50) DEFAULT NULL,\n" +
            "  PRIMARY KEY (`id`),\n" +
            "  UNIQUE KEY `name` (`name`)\n" +
            ") ENGINE=InnoDB DEFAULT CHARSET=utf8 MIN_ROWS=10 MAX_ROWS=1000 AVG_ROW_LENGTH=20 CHECKSUM=1 COMMENT='suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "  `id` int(11) NOT NULL COMMENT 'test''test',\n" +
            "  `name` varchar(50) DEFAULT NULL,\n" +
            "  PRIMARY KEY (`id`),\n" +
            "  KEY `name_index` (`name`) COMMENT 'ffff'\n" +
            ") ENGINE=InnoDB DEFAULT CHARSET=utf8 MIN_ROWS=10 MAX_ROWS=1000 AVG_ROW_LENGTH=20 CHECKSUM=1 COMMENT='suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();

    sql = "CREATE TABLE `suntest` (\n" +
            "  `id` int(11) NOT NULL COMMENT 'test''test',\n" +
            "  `name` varchar(50) DEFAULT NULL,\n" +
            "  PRIMARY KEY (`id`),\n" +
            "  UNIQUE KEY `name` (`name`) COMMENT 'test_comment'\n" +
            ") ENGINE=InnoDB DEFAULT CHARSET=utf8 MIN_ROWS=10 MAX_ROWS=1000 AVG_ROW_LENGTH=20 CHECKSUM=1 COMMENT='suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "  `id` int(11) NOT NULL COMMENT 'test''test',\n" +
            "  `name` varchar(20) DEFAULT NULL,\n" +
            "  `rid` int(11) DEFAULT NULL,\n" +
            "  PRIMARY KEY (`id`),\n" +
            "  KEY `rid` (`rid`),\n" +
            "  CONSTRAINT `suntest_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `dbletest` (`id`) COMMENT 'XXXX' " +
            ") ENGINE=InnoDB DEFAULT CHARSET=utf8 MIN_ROWS=10 MAX_ROWS=1000 AVG_ROW_LENGTH=20 CHECKSUM=1 COMMENT='suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "  `id` int(11) NOT NULL COMMENT 'test''test',\n" +
            "  `name` varchar(50) DEFAULT NULL,\n" +
            "  PRIMARY KEY (`id`),\n" +
            "  FULLTEXT KEY `name_index` (`name`) COMMENT 'sdfasdf'\n" +
            ") ENGINE=InnoDB DEFAULT CHARSET=utf8 MIN_ROWS=10 MAX_ROWS=1000 AVG_ROW_LENGTH=20 CHECKSUM=1 COMMENT='suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();


    sql = "CREATE TABLE `suntest` (\n" +
            "  `id` int(11) NOT NULL COMMENT 'test''test',\n" +
            "  `name` varchar(20) DEFAULT NULL,\n" +
            "  `rid` int(11) DEFAULT NULL,\n" +
            "  PRIMARY KEY (`id`) COMMENT 'ffff',\n" +
            "  KEY `rid` (`rid`) COMMENT 'xxxxx',\n" +
            "  CONSTRAINT `suntest_ibfk_1` FOREIGN KEY (`rid`) REFERENCES `dbletest` (`id`)\n" +
            ") ENGINE=InnoDB DEFAULT CHARSET=utf8 MIN_ROWS=10 MAX_ROWS=1000 AVG_ROW_LENGTH=20 CHECKSUM=1 COMMENT='suntest_comment'";
    parser = new MySqlCreateTableParser (sql);
    parser.parseCreateTable();

}
 
示例26
private SQLSelectStatement getSelectStatement(String sql) {
    SQLStatementParser parser = new MySqlStatementParser(sql);
    return (SQLSelectStatement) parser.parseStatement();
}
 
示例27
public static SQLStatementParser createSqlStatementParser(String sql) {
    ElasticLexer lexer = new ElasticLexer(sql);
    lexer.nextToken();
    return new MySqlStatementParser(lexer);
}
 
示例28
private Object[] getParseTables(String sql) throws Exception{
	
	SQLStatementParser parser = new MySqlStatementParser(sql);
	SQLStatement statement = parser.parseStatement();
       MycatSchemaStatVisitor visitor = new MycatSchemaStatVisitor();
       
       
       LayerCachePool cachePool = mock(LayerCachePool.class);
       RouteResultset rrs = new RouteResultset(sql, ServerParse.SELECT);
	
	druidParser.parser(schema, rrs, statement, sql, cachePool, visitor);
	
	DruidShardingParseInfo ctx = druidParser.getCtx();
	return ctx.getTables().toArray();
}