package com.zillabyte.motherbrain.relational;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public abstract class AliasedQuery extends Query {
private static final long serialVersionUID = -3332999868524375404L;
public AliasedQuery(String sql, JSONArray columns) {
super(sql, columns);
}
/**
* Queries that we pre-define (s3, buffer) have aliases set in advance
*/
@Override
public final List<ColumnDef> valueColumns() {
List<ColumnDef> cols = new ArrayList<>();
for(Object r : _aliases) {
JSONObject col = (JSONObject) r;
Collection<?> aliases = JSONArray.toCollection(col.getJSONArray("aliases"));
if (aliases == null) {
throw new NullPointerException("aliases collection should not be null!");
}
final String[] aliasesArray = aliases.toArray(new String[] {});
assert (aliasesArray != null);
final String name = col.getString("name");
if (name == null) {
throw new NullPointerException("name should exist or be non-null!");
}
final String type = col.getString("type");
if (type == null) {
throw new NullPointerException("type for column " + name + " should exist or be non-null!");
}
final DataType dataType = DataType.valueOf(type.toUpperCase());
/*
* If valueOf fails, it will throw an IllegalArgumentException.
*/
assert (dataType != null);
cols.add(new ColumnDef(name, dataType, aliasesArray));
}
return cols;
}
}