Twidere-App-Android-Twitter.../twidere.component.querybuilder/src/main/java/org/mariotaku/querybuilder/query/SQLInsertQuery.java

118 lines
2.9 KiB
Java

package org.mariotaku.querybuilder.query;
import org.mariotaku.querybuilder.OnConflict;
import org.mariotaku.querybuilder.SQLQuery;
import org.mariotaku.querybuilder.Utils;
public class SQLInsertQuery implements SQLQuery {
private OnConflict onConflict;
private String table;
private String[] columns;
private String values;
SQLInsertQuery() {
}
@Override
public String getSQL() {
if (table == null) throw new NullPointerException("table must not be null!");
final StringBuilder sb = new StringBuilder();
sb.append("INSERT ");
if (onConflict != null) {
sb.append("OR ");
sb.append(onConflict.getAction());
sb.append(" ");
}
sb.append("INTO ");
sb.append(table);
sb.append(" (");
sb.append(Utils.toString(columns, ',', false));
sb.append(") ");
sb.append("VALUES (");
sb.append(values);
sb.append(") ");
return sb.toString();
}
void setColumns(final String[] columns) {
this.columns = columns;
}
void setOnConflict(final OnConflict onConflict) {
this.onConflict = onConflict;
}
void setSelect(final SQLSelectQuery select) {
this.values = select.getSQL();
}
void setValues(final String... values) {
this.values = Utils.toString(values, ',', false);
}
void setTable(final String table) {
this.table = table;
}
public static final class Builder implements IBuilder<SQLInsertQuery> {
private final SQLInsertQuery query = new SQLInsertQuery();
private boolean buildCalled;
@Override
public SQLInsertQuery build() {
buildCalled = true;
return query;
}
@Override
public String buildSQL() {
return build().getSQL();
}
public Builder columns(final String[] columns) {
checkNotBuilt();
query.setColumns(columns);
return this;
}
public Builder values(final String[] values) {
checkNotBuilt();
query.setValues(values);
return this;
}
public Builder values(final String values) {
checkNotBuilt();
query.setValues(values);
return this;
}
public Builder insertInto(final OnConflict onConflict, final String table) {
checkNotBuilt();
query.setOnConflict(onConflict);
query.setTable(table);
return this;
}
public Builder insertInto(final String table) {
return insertInto(null, table);
}
public Builder select(final SQLSelectQuery select) {
checkNotBuilt();
query.setSelect(select);
return this;
}
private void checkNotBuilt() {
if (buildCalled) throw new IllegalStateException();
}
}
}