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

95 lines
2.4 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 SQLSelectQuery select;
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(String.format("OR %s ", onConflict.getAction()));
}
sb.append(String.format("INTO %s ", table));
sb.append(String.format("(%s) ", Utils.toString(columns, ',', false)));
sb.append(String.format("%s ", select.getSQL()));
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.select = select;
}
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 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();
}
}
}