use of org.apache.calcite.jdbc.CalciteSchema in project beam by apache.
the class SqlCreateExternalTable method execute.
@Override
public void execute(CalcitePrepare.Context context) {
final Pair<CalciteSchema, String> pair = SqlDdlNodes.schema(context, true, name);
if (pair.left.plus().getTable(pair.right) != null) {
// Table exists.
if (!ifNotExists) {
// They did not specify IF NOT EXISTS, so give error.
throw SqlUtil.newContextException(name.getParserPosition(), RESOURCE.tableExists(pair.right));
}
return;
}
// Table does not exist. Create it.
if (!(pair.left.schema instanceof BeamCalciteSchema)) {
throw SqlUtil.newContextException(name.getParserPosition(), RESOURCE.internal("Schema is not instanceof BeamCalciteSchema"));
}
BeamCalciteSchema schema = (BeamCalciteSchema) pair.left.schema;
schema.getTableProvider().createTable(toTable());
}
use of org.apache.calcite.jdbc.CalciteSchema in project beam by apache.
the class SqlDdlNodes method schema.
/**
* Returns the schema in which to create an object.
*/
static Pair<CalciteSchema, String> schema(CalcitePrepare.Context context, boolean mutable, SqlIdentifier id) {
final List<String> path;
if (id.isSimple()) {
path = context.getDefaultSchemaPath();
} else {
path = Util.skipLast(id.names);
}
CalciteSchema schema = mutable ? context.getMutableRootSchema() : context.getRootSchema();
for (String p : path) {
schema = schema.getSubSchema(p, true);
if (schema == null) {
throw new AssertionError(String.format("Got null sub-schema for path '%s' in %s", p, path));
}
}
return Pair.of(schema, name(id));
}
use of org.apache.calcite.jdbc.CalciteSchema in project drill by axbaretto.
the class DynamicSchema method getSubSchema.
@Override
public CalciteSchema getSubSchema(String schemaName, boolean caseSensitive) {
Schema s = schema.getSubSchema(schemaName);
if (s != null) {
return new DynamicSchema(this, s, schemaName);
}
CalciteSchema ret = getSubSchemaMap().get(schemaName);
return ret;
}
use of org.apache.calcite.jdbc.CalciteSchema in project beam by apache.
the class JdbcFactory method newConnection.
@Override
public AvaticaConnection newConnection(UnregisteredDriver driver, AvaticaFactory avaticaFactory, String url, Properties info, @Nullable CalciteSchema rootSchema, @Nullable JavaTypeFactory typeFactory) {
Properties connectionProps = ensureDefaultProperties(info);
CalciteSchema actualRootSchema = rootSchema;
if (rootSchema == null) {
actualRootSchema = CalciteSchema.createRootSchema(true, false, "");
}
return super.newConnection(driver, avaticaFactory, url, connectionProps, actualRootSchema, typeFactory);
}
use of org.apache.calcite.jdbc.CalciteSchema in project calcite by apache.
the class CassandraSchema method addMaterializedViews.
/**
* Add all materialized views defined in the schema to this column family
*/
private void addMaterializedViews() {
// Close the hook use to get us here
hook.close();
for (MaterializedViewMetadata view : getKeyspace().getMaterializedViews()) {
String tableName = view.getBaseTable().getName();
StringBuilder queryBuilder = new StringBuilder("SELECT ");
// Add all the selected columns to the query
List<String> columnNames = new ArrayList<String>();
for (ColumnMetadata column : view.getColumns()) {
columnNames.add("\"" + column.getName() + "\"");
}
queryBuilder.append(Util.toString(columnNames, "", ", ", ""));
queryBuilder.append(" FROM \"" + tableName + "\"");
// Get the where clause from the system schema
String whereQuery = "SELECT where_clause from system_schema.views " + "WHERE keyspace_name='" + keyspace + "' AND view_name='" + view.getName() + "'";
queryBuilder.append(" WHERE " + session.execute(whereQuery).one().getString(0));
// Parse and unparse the view query to get properly quoted field names
String query = queryBuilder.toString();
SqlParser.ConfigBuilder configBuilder = SqlParser.configBuilder();
configBuilder.setUnquotedCasing(Casing.UNCHANGED);
SqlSelect parsedQuery;
try {
parsedQuery = (SqlSelect) SqlParser.create(query, configBuilder.build()).parseQuery();
} catch (SqlParseException e) {
LOGGER.warn("Could not parse query {} for CQL view {}.{}", query, keyspace, view.getName());
continue;
}
StringWriter stringWriter = new StringWriter(query.length());
PrintWriter printWriter = new PrintWriter(stringWriter);
SqlWriter writer = new SqlPrettyWriter(CalciteSqlDialect.DEFAULT, true, printWriter);
parsedQuery.unparse(writer, 0, 0);
query = stringWriter.toString();
// Add the view for this query
String viewName = "$" + getTableNames().size();
SchemaPlus schema = parentSchema.getSubSchema(name);
CalciteSchema calciteSchema = CalciteSchema.from(schema);
List<String> viewPath = calciteSchema.path(viewName);
schema.add(viewName, MaterializedViewTable.create(calciteSchema, query, null, viewPath, view.getName(), true));
}
}
Aggregations