diff --git a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKeyImpl.java b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKeyImpl.java index e2c4e48f55..911daf80d4 100644 --- a/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKeyImpl.java +++ b/src/main/java/com/alibaba/druid/sql/ast/statement/SQLPrimaryKeyImpl.java @@ -18,6 +18,7 @@ package com.alibaba.druid.sql.ast.statement; import com.alibaba.druid.sql.visitor.SQLASTVisitor; public class SQLPrimaryKeyImpl extends SQLUnique implements SQLPrimaryKey { + protected boolean clustered = false; // sql server @Override protected void accept0(SQLASTVisitor visitor) { @@ -33,4 +34,17 @@ public class SQLPrimaryKeyImpl extends SQLUnique implements SQLPrimaryKey { cloneTo(x); return x; } + + public void cloneTo(SQLPrimaryKeyImpl x) { + super.cloneTo(x); + x.clustered = clustered; + } + + public boolean isClustered() { + return clustered; + } + + public void setClustered(boolean clustered) { + this.clustered = clustered; + } } diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 5e4ecfdce3..2d6b06d20d 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -2741,6 +2741,12 @@ public class SQLExprParser extends SQLParser { accept(Token.KEY); SQLPrimaryKeyImpl pk = new SQLPrimaryKeyImpl(); + + if (lexer.identifierEquals(FnvHash.Constants.CLUSTERED)) { + lexer.nextToken(); + pk.setClustered(true); + } + accept(Token.LPAREN); orderBy(pk.getColumns(), pk); accept(Token.RPAREN); diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java index b2cc79737b..9d22da3fcd 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java @@ -3829,9 +3829,17 @@ public class SQLASTOutputVisitor extends SQLASTVisitorAdapter implements Paramet x.getName().accept(this); print(' '); } - print0(ucase ? "PRIMARY KEY (" : "primary key ("); + + print0(ucase ? "PRIMARY KEY " : "primary key "); + + if (x.isClustered()) { + print0(ucase ? "CLUSTERED " : "clustered "); + } + + print('('); printAndAccept(x.getColumns(), ", "); print(')'); + return false; }