package cassandra.cql.query;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Insert extends Query<Insert> {
private List<String> names;
private List<Object> values;
private Clause options;
private boolean ifNotExists;
Insert(String keyspace, String table) {
this.keyspace = keyspace;
this.table = table;
names = new ArrayList<String>();
values = new ArrayList<Object>();
}
public List<String> names() {
return Collections.unmodifiableList(names);
}
public List<Object> values() {
return Collections.unmodifiableList(values);
}
public boolean hasOptions() {
return options != null;
}
public Clause options() {
return options;
}
public Insert value(String name, Object value) {
if (name == null) {
throw new NullPointerException("name");
}
if (name.isEmpty()) {
throw new IllegalArgumentException("empty name");
}
names.add(name);
values.add(value);
return this;
}
public Insert values(String[] names, Object[] values) {
if (names == null) {
throw new NullPointerException("name");
}
if (values == null) {
throw new NullPointerException("name");
}
if (names.length != values.length) {
throw new IllegalArgumentException();
}
for (int i = 0; i < names.length; i++) {
value(names[i], values[i]);
}
return this;
}
public boolean isIfNotExists() {
return ifNotExists;
}
public Insert ifNotExists() {
ifNotExists = true;
return this;
}
public Insert usingTimestamp(long value) {
return using(timestamp(value));
}
public Insert usingTTL(int value) {
return using(ttl(value));
}
public Insert using(Clause.Using using) {
if (using == null) {
throw new NullPointerException("using");
}
if (options == null) {
options = using;
} else if (options instanceof Clause.And) {
((Clause.And)options).clauses().add(using);
} else {
Clause.And and = new Clause.And();
and.clauses().add(options);
and.clauses().add(using);
options = and;
}
return this;
}
@Override
public void accept(QueryVisitor visitor) {
visitor.visit(this);
}
}