package com.zillabyte.motherbrain.relational;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.NonNullByDefault;
import com.zillabyte.motherbrain.flow.sourcefromrelation.ShardType;
public class Query implements Serializable {
/**
*
*/
private static final long serialVersionUID = 7577193370942882125L;
protected final @NonNull JSONArray _aliases;
private final @NonNull String _sql;
public Query(final @NonNull String sql, final @NonNull JSONArray columns) {
_sql = sql;
_aliases = columns;
}
public String sql() {
return _sql;
}
/**
* Sql queries don't have types that we know of
* @return
*/
public @NonNullByDefault List<ColumnDef> valueColumns() {
List<ColumnDef> list = new ArrayList<>();
for(int i=0;i<_aliases.size();i++) {
JSONObject o = _aliases.getJSONObject(i);
ColumnDef c = new ColumnDef("v" + i, DataType.UNKNOWN, o.getString("alias"));
list.add(c);
}
return list;
}
public String getAliasOrConcreteName(String concreteName) {
if (_aliases.size() != 0) {
for(Object raw : _aliases) {
JSONObject obj = (JSONObject) raw;
if (obj.getString("concrete_name").equals(concreteName)) {
// TODO: make compatible with single-alias
String alias = obj.optString("alias", null);
if(alias != null) {
return alias;
}
return obj.getString("concrete_name");
}
}
}
return concreteName;
}
public long batchSize = -1;
/**********************/
public JSONArray getAliases() {
return _aliases;
}
public @NonNullByDefault ShardType shardType() {
return ShardType.JSON;
}
static final @NonNullByDefault JSONArray columnsFor(final JSONObject settings) {
final JSONArray columnArray = settings.getJSONArray("columns");
if (columnArray == null) {
throw new NullPointerException("columns should not be null!");
}
return columnArray;
}
}