use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.schema.SchemaPlus in project drill by apache.
the class JdbcCatalogSchema method setHolder.
void setHolder(SchemaPlus plusOfThis) {
for (String s : getSubSchemaNames()) {
CapitalizingJdbcSchema inner = getSubSchema(s);
SchemaPlus holder = plusOfThis.add(s, inner);
inner.setHolder(holder);
}
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.schema.SchemaPlus in project drill by apache.
the class UserSession method setDefaultSchemaPath.
/**
* Update the schema path for the session.
* @param newDefaultSchemaPath New default schema path to set. It could be relative to the current default schema or
* absolute schema.
* @param currentDefaultSchema Current default schema.
* @throws ValidationException If the given default schema path is invalid in current schema tree.
*/
public void setDefaultSchemaPath(String newDefaultSchemaPath, SchemaPlus currentDefaultSchema) throws ValidationException {
final List<String> newDefaultPathAsList = SchemaUtilites.getSchemaPathAsList(newDefaultSchemaPath);
SchemaPlus newDefault;
// First try to find the given schema relative to the current default schema.
newDefault = SchemaUtilites.findSchema(currentDefaultSchema, newDefaultPathAsList);
if (newDefault == null) {
// If we fail to find the schema relative to current default schema, consider the given new default schema path as
// absolute schema path.
newDefault = SchemaUtilites.findSchema(currentDefaultSchema, newDefaultPathAsList);
}
if (newDefault == null) {
SchemaUtilites.throwSchemaNotFoundException(currentDefaultSchema, newDefaultSchemaPath);
}
properties.setProperty(DrillProperties.SCHEMA, SchemaUtilites.getSchemaPath(newDefault));
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.schema.SchemaPlus in project drill by apache.
the class SplunkSchemaFactory method registerSchemas.
@Override
public void registerSchemas(SchemaConfig schemaConfig, SchemaPlus parent) {
SplunkSchema schema = new SplunkSchema(plugin);
SchemaPlus plusOfThis = parent.add(schema.getName(), schema);
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.schema.SchemaPlus in project drill by apache.
the class BaseQueryRunner method applyDefaultSchema.
protected void applyDefaultSchema(String defaultSchema) throws ValidationException {
if (!Strings.isNullOrEmpty(defaultSchema)) {
SessionOptionManager options = webUserConnection.getSession().getOptions();
@SuppressWarnings("resource") SchemaTreeProvider schemaTreeProvider = new SchemaTreeProvider(workManager.getContext());
SchemaPlus rootSchema = schemaTreeProvider.createRootSchema(options);
webUserConnection.getSession().setDefaultSchemaPath(defaultSchema, rootSchema);
}
}
use of org.apache.beam.vendor.calcite.v1_28_0.org.apache.calcite.schema.SchemaPlus in project drill by apache.
the class DynamicRootSchema method loadSchemaFactory.
/**
* Loads schema factory(storage plugin) for specified {@code schemaName}
* @param schemaName the name of the schema
* @param caseSensitive whether matching for the schema name is case sensitive
*/
private void loadSchemaFactory(String schemaName, boolean caseSensitive) {
try {
SchemaPlus schemaPlus = this.plus();
StoragePlugin plugin = storages.getPlugin(schemaName);
if (plugin != null) {
plugin.registerSchemas(schemaConfig, schemaPlus);
return;
}
// Could not find the plugin of schemaName. The schemaName could be `dfs.tmp`, a 2nd level schema under 'dfs'
List<String> paths = SchemaUtilites.getSchemaPathAsList(schemaName);
if (paths.size() == 2) {
plugin = storages.getPlugin(paths.get(0));
if (plugin == null) {
return;
}
// Looking for the SchemaPlus for the top level (e.g. 'dfs') of schemaName (e.g. 'dfs.tmp')
SchemaPlus firstLevelSchema = schemaPlus.getSubSchema(paths.get(0));
if (firstLevelSchema == null) {
// register schema for this storage plugin to 'this'.
plugin.registerSchemas(schemaConfig, schemaPlus);
firstLevelSchema = schemaPlus.getSubSchema(paths.get(0));
}
// Load second level schemas for this storage plugin
List<SchemaPlus> secondLevelSchemas = new ArrayList<>();
for (String secondLevelSchemaName : firstLevelSchema.getSubSchemaNames()) {
secondLevelSchemas.add(firstLevelSchema.getSubSchema(secondLevelSchemaName));
}
for (SchemaPlus schema : secondLevelSchemas) {
org.apache.drill.exec.store.AbstractSchema drillSchema;
try {
drillSchema = schema.unwrap(AbstractSchema.class);
} catch (ClassCastException e) {
throw new RuntimeException(String.format("Schema '%s' is not expected under root schema", schema.getName()));
}
SubSchemaWrapper wrapper = new SubSchemaWrapper(drillSchema);
schemaPlus.add(wrapper.getName(), wrapper);
}
}
} catch (PluginException | IOException ex) {
logger.warn("Failed to load schema for \"" + schemaName + "\"!", ex);
// We can't proceed further without a schema, throw a runtime exception.
UserException.Builder exceptBuilder = UserException.resourceError(ex).message("Failed to load schema for \"" + schemaName + "\"!").addContext(ex.getClass().getName() + ": " + ex.getMessage()).addContext(// Provide hint if it exists
UserExceptionUtils.getUserHint(ex));
throw exceptBuilder.build(logger);
}
}
Aggregations