support column primary key & unique index

This commit is contained in:
wenshao
2012-12-02 01:04:34 +08:00
parent 64764c6df4
commit 797f4c8a3c
6 changed files with 97 additions and 3 deletions
@@ -0,0 +1,17 @@
package com.alibaba.druid.sql.ast.statement;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLColumnPrimaryKey extends SQLConstaintImpl implements SQLColumnConstraint {
private static final long serialVersionUID = 1L;
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, this.getName());
}
visitor.endVisit(this);
}
}
@@ -0,0 +1,17 @@
package com.alibaba.druid.sql.ast.statement;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class SQLColumnUniqueIndex extends SQLConstaintImpl implements SQLColumnConstraint {
private static final long serialVersionUID = 1L;
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, this.getName());
}
visitor.endVisit(this);
}
}
@@ -62,6 +62,7 @@ import com.alibaba.druid.sql.ast.statement.NotNullConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLCharactorDataType;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectOrderByItem;
@@ -1232,6 +1233,20 @@ public class SQLExprParser extends SQLParser {
column.setDefaultExpr(new SQLNullExpr());
return parseColumnRest(column);
}
if (lexer.token == Token.PRIMARY) {
lexer.nextToken();
accept(Token.KEY);
column.getConstaints().add(new SQLColumnPrimaryKey());
return parseColumnRest(column);
}
if (lexer.token == Token.UNION) {
lexer.nextToken();
accept(Token.KEY);
column.getConstaints().add(new SQLColumnPrimaryKey());
return parseColumnRest(column);
}
return column;
}
@@ -59,12 +59,17 @@ import com.alibaba.druid.sql.ast.expr.SQLUnaryExpr;
import com.alibaba.druid.sql.ast.expr.SQLVariantRefExpr;
import com.alibaba.druid.sql.ast.statement.NotNullConstraint;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddColumn;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropColumnItem;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
import com.alibaba.druid.sql.ast.statement.SQLColumnConstraint;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLColumnUniqueIndex;
import com.alibaba.druid.sql.ast.statement.SQLCommentStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLDeleteStatement;
import com.alibaba.druid.sql.ast.statement.SQLDropIndexStatement;
@@ -75,9 +80,6 @@ import com.alibaba.druid.sql.ast.statement.SQLInsertStatement;
import com.alibaba.druid.sql.ast.statement.SQLInsertStatement.ValuesClause;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource;
import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableAddPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement;
import com.alibaba.druid.sql.ast.statement.SQLReleaseSavePointStatement;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.ast.statement.SQLSavePointStatement;
@@ -1179,4 +1181,16 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter {
}
return false;
}
@Override
public boolean visit(SQLColumnPrimaryKey x) {
print(" PRIMARY KEY");
return false;
}
@Override
public boolean visit(SQLColumnUniqueIndex x) {
print(" UNIQUE INDEX");
return false;
}
}
@@ -60,6 +60,8 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLColumnUniqueIndex;
import com.alibaba.druid.sql.ast.statement.SQLCommentStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
@@ -395,4 +397,12 @@ public interface SQLASTVisitor {
void endVisit(SQLOver x);
boolean visit(SQLOver x);
void endVisit(SQLColumnPrimaryKey x);
boolean visit(SQLColumnPrimaryKey x);
void endVisit(SQLColumnUniqueIndex x);
boolean visit(SQLColumnUniqueIndex x);
}
@@ -60,6 +60,8 @@ import com.alibaba.druid.sql.ast.statement.SQLAlterTableDropIndex;
import com.alibaba.druid.sql.ast.statement.SQLAssignItem;
import com.alibaba.druid.sql.ast.statement.SQLCallStatement;
import com.alibaba.druid.sql.ast.statement.SQLColumnDefinition;
import com.alibaba.druid.sql.ast.statement.SQLColumnPrimaryKey;
import com.alibaba.druid.sql.ast.statement.SQLColumnUniqueIndex;
import com.alibaba.druid.sql.ast.statement.SQLCommentStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateDatabaseStatement;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
@@ -714,4 +716,23 @@ public class SQLASTVisitorAdapter implements SQLASTVisitor {
public boolean visit(SQLOver x) {
return true;
}
@Override
public void endVisit(SQLColumnPrimaryKey x) {
}
@Override
public boolean visit(SQLColumnPrimaryKey x) {
return true;
}
@Override
public void endVisit(SQLColumnUniqueIndex x) {
}
@Override
public boolean visit(SQLColumnUniqueIndex x) {
return true;
}
}