use of org.apache.calcite.jdbc.CalciteSchema in project drill by axbaretto.
the class DynamicRootSchema method getSubSchema.
@Override
public CalciteSchema getSubSchema(String schemaName, boolean caseSensitive) {
CalciteSchema retSchema = getSubSchemaMap().get(schemaName);
if (retSchema != null) {
return retSchema;
}
loadSchemaFactory(schemaName, caseSensitive);
retSchema = getSubSchemaMap().get(schemaName);
return retSchema;
}
use of org.apache.calcite.jdbc.CalciteSchema in project drill by apache.
the class DrillCalciteCatalogReader method isValidSchema.
/**
* Checks if the schema provided is a valid schema:
* <li>schema is not indicated (only one element in the names list)<li/>
*
* @param names list of schema and table names, table name is always the last element
* @throws UserException if the schema is not valid.
*/
void isValidSchema(List<String> names) throws UserException {
List<String> schemaPath = Util.skipLast(names);
for (List<String> currentSchema : getSchemaPaths()) {
List<String> fullSchemaPath = new ArrayList<>(currentSchema);
fullSchemaPath.addAll(schemaPath);
CalciteSchema schema = SqlValidatorUtil.getSchema(getRootSchema(), fullSchemaPath, nameMatcher());
if (schema != null) {
return;
}
}
SchemaUtilites.throwSchemaNotFoundException(defaultSchemaSupplier.get(), schemaPath);
}
use of org.apache.calcite.jdbc.CalciteSchema in project beam by apache.
the class SqlCreateFunction method execute.
@Override
public void execute(CalcitePrepare.Context context) {
final Pair<CalciteSchema, String> pair = SqlDdlNodes.schema(context, true, functionName);
SchemaPlus schema = pair.left.plus();
String lastName = pair.right;
if (!schema.getFunctions(lastName).isEmpty()) {
throw SqlUtil.newContextException(functionName.getParserPosition(), RESOURCE.internal(String.format("Function %s is already defined.", lastName)));
}
JavaUdfLoader udfLoader = new JavaUdfLoader();
// TODO(BEAM-12355) Support qualified function names.
List<String> functionPath = ImmutableList.of(lastName);
if (!(jarPath instanceof SqlCharStringLiteral)) {
throw SqlUtil.newContextException(jarPath.getParserPosition(), RESOURCE.internal("Jar path is not instanceof SqlCharStringLiteral."));
}
String unquotedJarPath = ((SqlCharStringLiteral) jarPath).getNlsString().getValue();
if (isAggregate) {
// Try loading the aggregate function just to make sure it exists. LazyAggregateCombineFn will
// need to fetch it again at runtime.
udfLoader.loadAggregateFunction(functionPath, unquotedJarPath);
LazyAggregateCombineFn<?, ?, ?> combineFn = new LazyAggregateCombineFn<>(functionPath, unquotedJarPath);
schema.add(lastName, combineFn.getUdafImpl());
} else {
ScalarFn scalarFn = udfLoader.loadScalarFunction(functionPath, unquotedJarPath);
Method method = ScalarFnReflector.getApplyMethod(scalarFn);
Function function = ScalarFunctionImpl.create(method, unquotedJarPath);
schema.add(lastName, function);
}
}
use of org.apache.calcite.jdbc.CalciteSchema in project beam by apache.
the class SqlDropObject method execute.
@Override
public void execute(CalcitePrepare.Context context) {
final List<String> path = context.getDefaultSchemaPath();
CalciteSchema schema = 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));
}
}
final boolean existed;
switch(getKind()) {
case DROP_TABLE:
if (schema.schema instanceof BeamCalciteSchema) {
BeamCalciteSchema beamSchema = (BeamCalciteSchema) schema.schema;
beamSchema.getTableProvider().dropTable(name.getSimple());
existed = true;
} else {
existed = schema.removeTable(name.getSimple());
}
if (!existed && !ifExists) {
throw SqlUtil.newContextException(name.getParserPosition(), RESOURCE.tableNotFound(name.getSimple()));
}
break;
default:
throw new AssertionError(getKind());
}
}
use of org.apache.calcite.jdbc.CalciteSchema in project beam by apache.
the class SqlSetOptionBeam method execute.
@Override
public void execute(CalcitePrepare.Context context) {
final SqlIdentifier name = getName();
final SqlNode value = getValue();
final Pair<CalciteSchema, String> pair = SqlDdlNodes.schema(context, true, name);
if (!(pair.left.schema instanceof BeamCalciteSchema)) {
throw SqlUtil.newContextException(name.getParserPosition(), RESOURCE.internal("Schema is not instanceof BeamCalciteSchema"));
}
BeamCalciteSchema schema = (BeamCalciteSchema) pair.left.schema;
if (value != null) {
schema.setPipelineOption(pair.right, SqlDdlNodes.getString(value));
} else if ("ALL".equals(pair.right)) {
schema.removeAllPipelineOptions();
} else {
schema.removePipelineOption(pair.right);
}
}
Aggregations