This commit is contained in:
温少
2012-05-18 10:56:47 +08:00
parent 5dd6e4fb05
commit ec0f96efdc
12 changed files with 54 additions and 36 deletions
@@ -15,9 +15,12 @@
*/
package com.alibaba.druid.sql.dialect.mysql.ast.statement;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLPartitioningClause;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
@@ -37,6 +40,20 @@ public class MySqlCreateTableStatement extends SQLCreateTableStatement {
}
private List<SQLCommentHint> hints = new ArrayList<SQLCommentHint>();
public List<SQLCommentHint> getHints() {
return hints;
}
public void setHints(List<SQLCommentHint> hints) {
this.hints = hints;
}
public void setTableOptions(Map<String, String> tableOptions) {
this.tableOptions = tableOptions;
}
public SQLPartitioningClause getPartitioning() {
return partitioning;
}
@@ -46,7 +46,7 @@ public class MySqlCreateTableParser extends SQLCreateTableParser {
return parseCrateTable(true);
}
public SQLCreateTableStatement parseCrateTable(boolean acceptCreate) throws ParserException {
public MySqlCreateTableStatement parseCrateTable(boolean acceptCreate) throws ParserException {
if (acceptCreate) {
accept(Token.CREATE);
}
@@ -15,10 +15,7 @@
*/
package com.alibaba.druid.sql.dialect.mysql.parser;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLHint;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr;
import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator;
@@ -43,7 +40,6 @@ import com.alibaba.druid.sql.dialect.mysql.ast.expr.MySqlUserName;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSQLColumnDefinition;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlSelectQueryBlock.Limit;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint;
import com.alibaba.druid.sql.parser.Lexer;
import com.alibaba.druid.sql.parser.ParserException;
import com.alibaba.druid.sql.parser.SQLExprParser;
@@ -611,10 +607,4 @@ public class MySqlExprParser extends SQLExprParser {
return null;
}
public void parseHints(List<SQLHint> hints) {
if (lexer.token() == Token.HINT) {
hints.add(new OracleHint(lexer.stringVal()));
lexer.nextToken();
}
}
}
@@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.mysql.parser;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLOrderBy;
@@ -48,6 +49,7 @@ import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlAlterTableStatemen
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlBinlogStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCommitStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateIndexStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateTableStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlCreateUserStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDeleteStatement;
import com.alibaba.druid.sql.dialect.mysql.ast.statement.MySqlDescribeStatement;
@@ -265,9 +267,13 @@ public class MySqlStatementParser extends SQLStatementParser {
public SQLStatement parseCreate() throws ParserException {
accept(Token.CREATE);
List<SQLCommentHint> hints = this.exprParser.parseHints();
if (lexer.token() == Token.TABLE || identifierEquals("TEMPORARY")) {
MySqlCreateTableParser parser = new MySqlCreateTableParser(lexer);
return parser.parseCrateTable(false);
MySqlCreateTableStatement stmt = parser.parseCrateTable(false);
stmt.setHints(hints);
return stmt;
}
if (lexer.token() == Token.UNIQUE || lexer.token() == Token.INDEX || identifierEquals("FULLTEXT")
@@ -1,49 +0,0 @@
/*
* Copyright 1999-2011 Alibaba Group Holding Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.alibaba.druid.sql.dialect.oracle.ast;
import com.alibaba.druid.sql.ast.SQLHint;
import com.alibaba.druid.sql.ast.SQLObjectImpl;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
public class OracleHint extends SQLObjectImpl implements SQLHint {
private static final long serialVersionUID = 1L;
private String text;
public OracleHint(){
}
public OracleHint(String text){
this.text = text;
}
public String getText() {
return this.text;
}
public void setText(String text) {
this.text = text;
}
protected void accept0(SQLASTVisitor visitor) {
visitor.visit(this);
visitor.endVisit(this);
}
}
@@ -18,7 +18,7 @@ package com.alibaba.druid.sql.dialect.oracle.ast.stmt;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLHint;
import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLSetQuantifier;
import com.alibaba.druid.sql.ast.statement.SQLSelectItem;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
@@ -30,7 +30,7 @@ public class OracleSelectQueryBlock extends SQLSelectQueryBlock {
private static final long serialVersionUID = 1L;
private final List<SQLHint> hints = new ArrayList<SQLHint>(1);
private final List<SQLCommentHint> hints = new ArrayList<SQLCommentHint>(1);
private OracleSelectHierachicalQueryClause hierachicalQueryClause;
private ModelClause modelClause;
@@ -55,7 +55,7 @@ public class OracleSelectQueryBlock extends SQLSelectQueryBlock {
this.hierachicalQueryClause = hierachicalQueryClause;
}
public List<SQLHint> getHints() {
public List<SQLCommentHint> getHints() {
return this.hints;
}
@@ -16,7 +16,6 @@
package com.alibaba.druid.sql.dialect.oracle.visitor;
import com.alibaba.druid.sql.ast.expr.SQLObjectCreateExpr;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause;
@@ -17,6 +17,7 @@ package com.alibaba.druid.sql.dialect.oracle.visitor;
import java.util.List;
import com.alibaba.druid.sql.ast.SQLCommentHint;
import com.alibaba.druid.sql.ast.SQLDataType;
import com.alibaba.druid.sql.ast.SQLExpr;
import com.alibaba.druid.sql.ast.SQLHint;
@@ -38,7 +39,6 @@ import com.alibaba.druid.sql.ast.statement.SQLJoinTableSource.JoinType;
import com.alibaba.druid.sql.ast.statement.SQLRollbackStatement;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleHint;
import com.alibaba.druid.sql.dialect.oracle.ast.OracleOrderBy;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.CycleClause;
import com.alibaba.druid.sql.dialect.oracle.ast.clause.FlashbackQueryClause.AsOfFlashbackQueryClause;
@@ -907,7 +907,7 @@ public class OracleOutputVisitor extends SQLASTOutputVisitor implements OracleAS
}
@Override
public void endVisit(OracleHint x) {
public void endVisit(SQLCommentHint x) {
}