Commit 74512817 authored by godkaikai's avatar godkaikai

ck表存在验证

parent 279df255
package com.dlink.metadata.driver; package com.dlink.metadata.driver;
import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.SQLStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLDropTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement;
import com.alibaba.druid.sql.parser.ParserException; import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.Token; import com.alibaba.druid.sql.parser.Token;
import com.dlink.assertion.Asserts;
import com.dlink.metadata.ast.Clickhouse20CreateTableStatement;
import com.dlink.metadata.convert.ClickHouseTypeConvert; import com.dlink.metadata.convert.ClickHouseTypeConvert;
import com.dlink.metadata.convert.ITypeConvert; import com.dlink.metadata.convert.ITypeConvert;
import com.dlink.metadata.parser.Clickhouse20StatementParser; import com.dlink.metadata.parser.Clickhouse20StatementParser;
...@@ -14,6 +19,7 @@ import com.dlink.result.SqlExplainResult; ...@@ -14,6 +19,7 @@ import com.dlink.result.SqlExplainResult;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -49,6 +55,32 @@ public class ClickHouseDriver extends AbstractJdbcDriver { ...@@ -49,6 +55,32 @@ public class ClickHouseDriver extends AbstractJdbcDriver {
return "ClickHouse OLAP 数据库"; return "ClickHouse OLAP 数据库";
} }
@Override
public List<Table> listTables(String schemaName) {
List<Table> tableList = new ArrayList<>();
PreparedStatement preparedStatement = null;
ResultSet results = null;
String sql = getDBQuery().tablesSql(schemaName);
try {
preparedStatement = conn.prepareStatement(sql);
results = preparedStatement.executeQuery();
while (results.next()) {
String tableName = results.getString(getDBQuery().tableName());
if (Asserts.isNotNullString(tableName)) {
Table tableInfo = new Table();
tableInfo.setName(tableName);
tableInfo.setSchema(schemaName);
tableList.add(tableInfo);
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(preparedStatement, results);
}
return tableList;
}
@Override @Override
public String getCreateTableSql(Table table) { public String getCreateTableSql(Table table) {
return null; return null;
...@@ -72,7 +104,13 @@ public class ClickHouseDriver extends AbstractJdbcDriver { ...@@ -72,7 +104,13 @@ public class ClickHouseDriver extends AbstractJdbcDriver {
current = item.toString(); current = item.toString();
String type = item.getClass().getSimpleName(); String type = item.getClass().getSimpleName();
if(!(item instanceof SQLSelectStatement)){ if(!(item instanceof SQLSelectStatement)){
sqlExplainResults.add(SqlExplainResult.success(type, current, explain.toString())); if(item instanceof Clickhouse20CreateTableStatement){
sqlExplainResults.add(checkCreateTable((Clickhouse20CreateTableStatement)item));
} else if(item instanceof SQLDropTableStatement){
sqlExplainResults.add(checkDropTable((SQLDropTableStatement)item));
} else {
sqlExplainResults.add(SqlExplainResult.success(type, current, explain.toString()));
}
continue; continue;
} }
preparedStatement = conn.prepareStatement("explain "+current); preparedStatement = conn.prepareStatement("explain "+current);
...@@ -90,4 +128,21 @@ public class ClickHouseDriver extends AbstractJdbcDriver { ...@@ -90,4 +128,21 @@ public class ClickHouseDriver extends AbstractJdbcDriver {
return sqlExplainResults; return sqlExplainResults;
} }
} }
private SqlExplainResult checkCreateTable(Clickhouse20CreateTableStatement sqlStatement){
if(existTable(Table.build(sqlStatement.getTableName()))){
return SqlExplainResult.fail(sqlStatement.toString(), "Table "+sqlStatement.getSchema()+"."+sqlStatement.getTableName()+" already exists.");
}else{
return SqlExplainResult.success(sqlStatement.getClass().getSimpleName(), sqlStatement.toString(), null);
}
}
private SqlExplainResult checkDropTable(SQLDropTableStatement sqlStatement){
SQLExprTableSource sqlExprTableSource = sqlStatement.getTableSources().get(0);
if(!existTable(Table.build(sqlExprTableSource.getTableName()))){
return SqlExplainResult.fail(sqlStatement.toString(), "Table "+sqlExprTableSource.getSchema()+"."+sqlExprTableSource.getTableName()+" not exists.");
}else{
return SqlExplainResult.success(sqlStatement.getClass().getSimpleName(), sqlStatement.toString(), null);
}
}
} }
...@@ -38,13 +38,6 @@ public class Clickhouse20CreateTableParser extends SQLCreateTableParser { ...@@ -38,13 +38,6 @@ public class Clickhouse20CreateTableParser extends SQLCreateTableParser {
ckStmt.setPartitionBy(expr); ckStmt.setPartitionBy(expr);
} }
if (lexer.identifierEquals("PRIMARY")) {
lexer.nextToken();
accept(Token.KEY);
SQLExpr expr = this.exprParser.expr();
ckStmt.setPrimaryKey(expr);
}
if (lexer.token() == Token.PRIMARY) { if (lexer.token() == Token.PRIMARY) {
lexer.nextToken(); lexer.nextToken();
accept(Token.KEY); accept(Token.KEY);
......
...@@ -17,7 +17,7 @@ public class ClickHouseQuery extends AbstractDBQuery { ...@@ -17,7 +17,7 @@ public class ClickHouseQuery extends AbstractDBQuery {
@Override @Override
public String tablesSql(String schemaName) { public String tablesSql(String schemaName) {
return "show table status WHERE 1=1 "; return "show tables";
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment