rdb 全schema同步

This commit is contained in:
mcy
2018-12-10 09:25:40 +08:00
parent dac642f744
commit 24d898d87a
12 changed files with 258 additions and 75 deletions

View File

@@ -42,7 +42,7 @@ public class DBTest {
.prepareStatement("insert into user (id,name,role_id,c_time,test1,test2) values (?,?,?,?,?,?)");
java.util.Date now = new java.util.Date();
for (int i = 1; i <= 100000; i++) {
for (int i = 1; i <= 10000; i++) {
pstmt.clearParameters();
pstmt.setLong(1, (long) i);
pstmt.setString(2, "test_" + i);

View File

@@ -0,0 +1,86 @@
wpackage com.alibaba.otter.canal.client.adapter.rdb.test;
import com.alibaba.fastsql.sql.ast.SQLName;
import com.alibaba.fastsql.sql.ast.SQLStatement;
import com.alibaba.fastsql.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.fastsql.sql.ast.statement.SQLExprTableSource;
import com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlCreateTableParser;
import com.alibaba.fastsql.sql.dialect.mysql.parser.MySqlStatementParser;
import com.alibaba.fastsql.sql.dialect.mysql.visitor.MySqlOutputVisitor;
import com.alibaba.fastsql.sql.dialect.mysql.visitor.MySqlSchemaStatVisitor;
import com.alibaba.fastsql.sql.parser.SQLStatementParser;
import java.io.StringWriter;
public class SqlParserTest {
public static class TableNameVisitor extends MySqlOutputVisitor {
public TableNameVisitor(Appendable appender){
super(appender);
}
@Override
public boolean visit(SQLExprTableSource x) {
SQLName table = (SQLName) x.getExpr();
String tableName = table.getSimpleName();
// 改写tableName
print0("new_" + tableName.toUpperCase());
return true;
}
}
public static void main(String[] args) {
// String sql = "select * from `mytest`.`t` where id=1 and name=ming group by
// uid limit 1,200 order by ctime";
String sql = "CREATE TABLE `mytest`.`user` (\n" + " `id` bigint(20) NOT NULL AUTO_INCREMENT,\n"
+ " `name` varchar(30) NOT NULL,\n" + " `c_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,\n"
+ " `role_id` bigint(20) DEFAULT NULL,\n" + " `test1` text,\n" + " `test2` blob,\n"
+ " `key` varchar(30) DEFAULT NULL,\n" + " PRIMARY KEY (`id`)\n"
+ ") ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;";
// // 新建 MySQL Parser
// SQLStatementParser parser = new MySqlStatementParser(sql);
//
// // 使用Parser解析生成AST,这里SQLStatement就是AST
// SQLStatement sqlStatement = parser.parseStatement();
//
// MySqlSchemaStatVisitor visitor = new MySqlSchemaStatVisitor();
// sqlStatement.accept(visitor);
//
// System.out.println("getTables:" + visitor.getTables());
// System.out.println("getParameters:" + visitor.getParameters());
// System.out.println("getOrderByColumns:" + visitor.getOrderByColumns());
// System.out.println("getGroupByColumns:" + visitor.getGroupByColumns());
// System.out.println("---------------------------------------------------------------------------");
//
// // 使用select访问者进行select的关键信息打印
// // SelectPrintVisitor selectPrintVisitor = new SelectPrintVisitor();
// // sqlStatement.accept(selectPrintVisitor);
//
// System.out.println("---------------------------------------------------------------------------");
// // 最终sql输出
// StringWriter out = new StringWriter();
// TableNameVisitor outputVisitor = new TableNameVisitor(out);
// sqlStatement.accept(outputVisitor);
// System.out.println(out.toString());
MySqlCreateTableParser parser1 = new MySqlCreateTableParser(sql);
SQLCreateTableStatement createTableStatement = parser1.parseCreateTable();
// MySqlSchemaStatVisitor visitor1 = new MySqlSchemaStatVisitor();
// createTableStatement.accept(visitor1);
// visitor1.getTables().forEach((k, v) -> {
// System.out.println(k.);
// System.out.println(v);
// });
// 最终sql输出
StringWriter out = new StringWriter();
TableNameVisitor outputVisitor = new TableNameVisitor(out);
createTableStatement.accept(outputVisitor);
System.out.println(out.toString());
}
}