/*
* Copyright 1999-2017 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.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.SQLExpr;
import com.alibaba.druid.sql.ast.SQLName;
import com.alibaba.druid.sql.ast.SQLObject;
import com.alibaba.druid.sql.ast.SQLPartitionBy;
import com.alibaba.druid.sql.ast.statement.SQLCreateTableStatement;
import com.alibaba.druid.sql.ast.statement.SQLExprTableSource;
import com.alibaba.druid.sql.ast.statement.SQLSelect;
import com.alibaba.druid.sql.dialect.mysql.ast.MySqlObjectImpl;
import com.alibaba.druid.sql.dialect.mysql.visitor.MySqlASTVisitor;
import com.alibaba.druid.sql.visitor.SQLASTVisitor;
import com.alibaba.druid.util.JdbcConstants;
public class MySqlCreateTableStatement extends SQLCreateTableStatement implements MySqlStatement {
private Map<String, SQLObject> tableOptions = new LinkedHashMap<String, SQLObject>();
private SQLPartitionBy partitioning;
private List<SQLCommentHint> hints = new ArrayList<SQLCommentHint>();
private List<SQLCommentHint> optionHints = new ArrayList<SQLCommentHint>();
private SQLExprTableSource like;
private SQLName tableGroup;
public MySqlCreateTableStatement(){
super (JdbcConstants.MYSQL);
}
public SQLExprTableSource getLike() {
return like;
}
public void setLike(SQLName like) {
this.setLike(new SQLExprTableSource(like));
}
public void setLike(SQLExprTableSource like) {
if (like != null) {
like.setParent(this);
}
this.like = like;
}
public List<SQLCommentHint> getHints() {
return hints;
}
public void setHints(List<SQLCommentHint> hints) {
this.hints = hints;
}
public void setTableOptions(Map<String, SQLObject> tableOptions) {
this.tableOptions = tableOptions;
}
public SQLPartitionBy getPartitioning() {
return partitioning;
}
public void setPartitioning(SQLPartitionBy partitioning) {
this.partitioning = partitioning;
}
public Map<String, SQLObject> getTableOptions() {
return tableOptions;
}
@Deprecated
public SQLSelect getQuery() {
return select;
}
@Deprecated
public void setQuery(SQLSelect query) {
this.select = query;
}
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor instanceof MySqlASTVisitor) {
accept0((MySqlASTVisitor) visitor);
} else {
throw new IllegalArgumentException("not support visitor type : " + visitor.getClass().getName());
}
}
public void accept0(MySqlASTVisitor visitor) {
if (visitor.visit(this)) {
this.acceptChild(visitor, getHints());
this.acceptChild(visitor, getTableSource());
this.acceptChild(visitor, getTableElementList());
this.acceptChild(visitor, getLike());
this.acceptChild(visitor, getSelect());
}
visitor.endVisit(this);
}
public static class TableSpaceOption extends MySqlObjectImpl {
private SQLName name;
private SQLExpr storage;
public SQLName getName() {
return name;
}
public void setName(SQLName name) {
this.name = name;
}
public SQLExpr getStorage() {
return storage;
}
public void setStorage(SQLExpr storage) {
this.storage = storage;
}
@Override
public void accept0(MySqlASTVisitor visitor) {
if (visitor.visit(this)) {
acceptChild(visitor, getName());
acceptChild(visitor, getStorage());
}
visitor.endVisit(this);
}
}
public List<SQLCommentHint> getOptionHints() {
return optionHints;
}
public void setOptionHints(List<SQLCommentHint> optionHints) {
this.optionHints = optionHints;
}
public SQLName getTableGroup() {
return tableGroup;
}
public void setTableGroup(SQLName tableGroup) {
this.tableGroup = tableGroup;
}
}