mirror of
https://github.com/alibaba/druid.git
synced 2023-03-04 19:17:16 +00:00
improved sql parser. add new feature JdbcUtils.getCreateTableScript, for issue #1342
This commit is contained in:
@@ -21,17 +21,17 @@ import com.alibaba.druid.sql.ast.statement.SQLUnique;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLUniqueConstraint;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
public class MySqlKey extends SQLUnique implements SQLUniqueConstraint, SQLTableConstraint {
|
||||
|
||||
private SQLName indexName;
|
||||
|
||||
private String indexType;
|
||||
|
||||
private boolean hasConstaint;
|
||||
|
||||
public MySqlKey(){
|
||||
|
||||
dbType = JdbcConstants.MYSQL;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -45,7 +45,7 @@ public class MySqlKey extends SQLUnique implements SQLUniqueConstraint, SQLTable
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, this.getName());
|
||||
acceptChild(visitor, this.getColumns());
|
||||
acceptChild(visitor, indexName);
|
||||
acceptChild(visitor, name);
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
@@ -58,14 +58,6 @@ public class MySqlKey extends SQLUnique implements SQLUniqueConstraint, SQLTable
|
||||
this.indexType = indexType;
|
||||
}
|
||||
|
||||
public SQLName getIndexName() {
|
||||
return indexName;
|
||||
}
|
||||
|
||||
public void setIndexName(SQLName indexName) {
|
||||
this.indexName = indexName;
|
||||
}
|
||||
|
||||
public boolean isHasConstaint() {
|
||||
return hasConstaint;
|
||||
}
|
||||
|
||||
@@ -17,11 +17,12 @@ package com.alibaba.druid.sql.dialect.mysql.ast;
|
||||
|
||||
import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
public class MySqlPrimaryKey extends MySqlKey implements SQLPrimaryKey {
|
||||
|
||||
public MySqlPrimaryKey(){
|
||||
|
||||
dbType = JdbcConstants.MYSQL;
|
||||
}
|
||||
|
||||
protected void accept0(MySqlASTVisitor visitor) {
|
||||
|
||||
@@ -28,7 +28,6 @@ public class MySqlUnique extends MySqlKey implements SQLPrimaryKey {
|
||||
if (visitor.visit(this)) {
|
||||
acceptChild(visitor, this.getName());
|
||||
acceptChild(visitor, this.getColumns());
|
||||
acceptChild(visitor, this.getIndexName());
|
||||
}
|
||||
visitor.endVisit(this);
|
||||
}
|
||||
|
||||
@@ -19,6 +19,7 @@ import com.alibaba.druid.sql.ast.SQLName;
|
||||
import com.alibaba.druid.sql.ast.statement.SQLForeignKeyImpl;
|
||||
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
|
||||
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
|
||||
import com.alibaba.druid.util.JdbcConstants;
|
||||
|
||||
/**
|
||||
* @author kiki
|
||||
@@ -34,6 +35,10 @@ public class MysqlForeignKey extends SQLForeignKeyImpl {
|
||||
protected Option onUpdate;
|
||||
protected Option onDelete;
|
||||
|
||||
public MysqlForeignKey() {
|
||||
dbType = JdbcConstants.MYSQL;
|
||||
}
|
||||
|
||||
public SQLName getIndexName() {
|
||||
return indexName;
|
||||
}
|
||||
|
||||
+6
-1
@@ -165,8 +165,13 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement implement
|
||||
return tableGroup;
|
||||
}
|
||||
|
||||
|
||||
public void setTableGroup(SQLName tableGroup) {
|
||||
this.tableGroup = tableGroup;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void simplify() {
|
||||
tableOptions.clear();
|
||||
super.simplify();
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -774,7 +774,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser {
|
||||
if (lexer.token() == Token.IDENTIFIER || lexer.token() == Token.LITERAL_ALIAS) {
|
||||
SQLName indexName = this.exprParser.name();
|
||||
if (indexName != null) {
|
||||
key.setIndexName(indexName);
|
||||
key.setName(indexName);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -542,6 +542,7 @@ public class MySqlExprParser extends SQLExprParser {
|
||||
|
||||
public SQLColumnDefinition parseColumn() {
|
||||
SQLColumnDefinition column = new SQLColumnDefinition();
|
||||
column.setDbType(dbType);
|
||||
column.setName(name());
|
||||
column.setDataType(parseDataType());
|
||||
|
||||
@@ -813,7 +814,7 @@ public class MySqlExprParser extends SQLExprParser {
|
||||
|
||||
if (lexer.token() != Token.LPAREN) {
|
||||
SQLName indexName = name();
|
||||
unique.setIndexName(indexName);
|
||||
unique.setName(indexName);
|
||||
}
|
||||
|
||||
//5.5语法 USING BTREE 放在index 名字后
|
||||
|
||||
@@ -585,9 +585,10 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
|
||||
print0(ucase ? "KEY" : "key");
|
||||
|
||||
if (x.getIndexName() != null) {
|
||||
SQLName name = x.getName();
|
||||
if (name != null) {
|
||||
print(' ');
|
||||
x.getIndexName().accept(this);
|
||||
name.accept(this);
|
||||
}
|
||||
|
||||
if (x.getIndexType() != null) {
|
||||
@@ -2844,9 +2845,10 @@ public class MySqlOutputVisitor extends SQLASTOutputVisitor implements MySqlASTV
|
||||
|
||||
print0(ucase ? "UNIQUE" : "unique");
|
||||
|
||||
if (x.getIndexName() != null) {
|
||||
SQLName name = x.getName();
|
||||
if (name != null) {
|
||||
print(' ');
|
||||
x.getIndexName().accept(this);
|
||||
name.accept(this);
|
||||
}
|
||||
|
||||
if (x.getIndexType() != null) {
|
||||
|
||||
+24
@@ -78,6 +78,29 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen
|
||||
private SQLName of;
|
||||
private OIDIndex oidIndex;
|
||||
private boolean monitoring;
|
||||
|
||||
|
||||
public void simplify() {
|
||||
tablespace = null;
|
||||
storage = null;
|
||||
lobStorage = null;
|
||||
|
||||
pctfree = null;
|
||||
pctused = null;
|
||||
initrans = null;
|
||||
maxtrans = null;
|
||||
pctincrease = null;
|
||||
|
||||
logging = null;
|
||||
compress = null;
|
||||
compressLevel = null;
|
||||
compressForOltp = false;
|
||||
|
||||
onCommitPreserveRows = false;
|
||||
onCommitDeleteRows = false;
|
||||
|
||||
super.simplify();
|
||||
}
|
||||
|
||||
public OracleCreateTableStatement() {
|
||||
super (JdbcConstants.ORACLE);
|
||||
@@ -466,4 +489,5 @@ public class OracleCreateTableStatement extends SQLCreateTableStatement implemen
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -192,6 +192,7 @@ public class SQLServerExprParser extends SQLExprParser {
|
||||
|
||||
public SQLColumnDefinition createColumnDefinition() {
|
||||
SQLColumnDefinition column = new SQLColumnDefinition();
|
||||
column.setDbType(dbType);
|
||||
return column;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user