com.alibaba.fastsql.sql.ast.statement.SQLInsertStatement Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of fastsql Show documentation
Show all versions of fastsql Show documentation
An JDBC datasource implementation.
/*
* 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.fastsql.sql.ast.statement;
import com.alibaba.fastsql.DbType;
import com.alibaba.fastsql.sql.SQLUtils;
import com.alibaba.fastsql.sql.ast.*;
import com.alibaba.fastsql.sql.visitor.SQLASTOutputVisitor;
import com.alibaba.fastsql.sql.visitor.SQLASTVisitor;
import java.util.ArrayList;
import java.util.List;
public class SQLInsertStatement extends SQLInsertInto implements SQLStatement {
protected SQLWithSubqueryClause with;
protected boolean upsert = false; // for phoenix
public SQLInsertStatement(){
}
public void cloneTo(SQLInsertStatement x) {
super.cloneTo(x);
x.dbType = dbType;
x.upsert = upsert;
x.afterSemi = afterSemi;
if (with != null) {
x.setWith(with.clone());
}
}
public SQLInsertStatement clone() {
SQLInsertStatement x = new SQLInsertStatement();
cloneTo(x);
return x;
}
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor.visit(this)) {
this.acceptChild(visitor, tableSource);
this.acceptChild(visitor, columns);
this.acceptChild(visitor, valuesList);
this.acceptChild(visitor, query);
}
visitor.endVisit(this);
}
@Override
public List getChildren() {
List children = new ArrayList();
children.add(tableSource);
children.addAll(this.columns);
children.addAll(this.valuesList);
if (query != null) {
children.add(query);
}
return children;
}
public boolean isUpsert() {
return upsert;
}
public void setUpsert(boolean upsert) {
this.upsert = upsert;
}
public static class ValuesClause extends SQLObjectImpl implements SQLReplaceable {
private final List values;
private transient String originalString;
private transient int replaceCount;
public ValuesClause(){
this(new ArrayList());
}
public ValuesClause clone() {
ValuesClause x = new ValuesClause(new ArrayList(this.values.size()));
for (Object v : values) {
x.addValue(v);
}
return x;
}
public boolean replace(SQLExpr expr, SQLExpr target) {
for (int i = 0; i < values.size(); i++) {
if (values.get(i) == expr) {
target.setParent(this);
values.set(i, target);
return true;
}
}
return false;
}
public ValuesClause(List values){
this.values = values;
for (int i = 0; i < values.size(); ++i) {
values.get(i).setParent(this);
}
}
public ValuesClause(List values, SQLObject parent){
this.values = values;
for (int i = 0; i < values.size(); ++i) {
Object val = values.get(i);
if (val instanceof SQLObject) {
((SQLObject) val).setParent(this);
}
}
this.parent = parent;
}
public void addValue(Object value) {
if (value instanceof SQLObject) {
((SQLObject) value).setParent(this);
}
values.add(value);
}
public void addValue(SQLExpr value) {
value.setParent(this);
values.add(value);
}
public List getValues() {
return values;
}
@Override
protected void accept0(SQLASTVisitor visitor) {
if (visitor.visit(this)) {
for (int i = 0; i < values.size(); i++) {
Object item = values.get(i);
if (item instanceof SQLObject) {
SQLObject value = (SQLObject) item;
value.accept(visitor);
}
}
}
visitor.endVisit(this);
}
public String getOriginalString() {
return originalString;
}
public void setOriginalString(String originalString) {
this.originalString = originalString;
}
public int getReplaceCount() {
return replaceCount;
}
public void incrementReplaceCount() {
this.replaceCount++;
}
}
@Override
public DbType getDbType() {
return dbType;
}
public void setDbType(DbType dbType) {
this.dbType = dbType;
}
@Override
public boolean isAfterSemi() {
return afterSemi;
}
@Override
public void setAfterSemi(boolean afterSemi) {
this.afterSemi = afterSemi;
}
public SQLWithSubqueryClause getWith() {
return with;
}
public void setWith(SQLWithSubqueryClause with) {
if (with != null) {
with.setParent(this);
}
this.with = with;
}
public String toString() {
return SQLUtils.toSQLString(this, dbType);
}
}