Search in sources :

Example 1 with ModelHandler

use of org.apache.calcite.model.ModelHandler in project calcite by apache.

the class Driver method createHandler.

@Override
protected Handler createHandler() {
    return new HandlerImpl() {

        @Override
        public void onConnectionInit(AvaticaConnection connection_) throws SQLException {
            final CalciteConnectionImpl connection = (CalciteConnectionImpl) connection_;
            super.onConnectionInit(connection);
            final String model = model(connection);
            if (model != null) {
                try {
                    new ModelHandler(connection, model);
                } catch (IOException e) {
                    throw new SQLException(e);
                }
            }
            connection.init();
        }

        String model(CalciteConnectionImpl connection) {
            String model = connection.config().model();
            if (model != null) {
                return model;
            }
            SchemaFactory schemaFactory = connection.config().schemaFactory(SchemaFactory.class, null);
            final Properties info = connection.getProperties();
            final String schemaName = Util.first(connection.config().schema(), "adhoc");
            if (schemaFactory == null) {
                final JsonSchema.Type schemaType = connection.config().schemaType();
                if (schemaType != null) {
                    switch(schemaType) {
                        case JDBC:
                            schemaFactory = JdbcSchema.Factory.INSTANCE;
                            break;
                        case MAP:
                            schemaFactory = AbstractSchema.Factory.INSTANCE;
                            break;
                    }
                }
            }
            if (schemaFactory != null) {
                final JsonBuilder json = new JsonBuilder();
                final Map<String, Object> root = json.map();
                root.put("version", "1.0");
                root.put("defaultSchema", schemaName);
                final List<Object> schemaList = json.list();
                root.put("schemas", schemaList);
                final Map<String, Object> schema = json.map();
                schemaList.add(schema);
                schema.put("type", "custom");
                schema.put("name", schemaName);
                schema.put("factory", schemaFactory.getClass().getName());
                final Map<String, Object> operandMap = json.map();
                schema.put("operand", operandMap);
                for (Map.Entry<String, String> entry : Util.toMap(info).entrySet()) {
                    if (entry.getKey().startsWith("schema.")) {
                        operandMap.put(entry.getKey().substring("schema.".length()), entry.getValue());
                    }
                }
                return "inline:" + json.toJsonString(root);
            }
            return null;
        }
    };
}
Also used : SchemaFactory(org.apache.calcite.schema.SchemaFactory) SQLException(java.sql.SQLException) JsonSchema(org.apache.calcite.model.JsonSchema) ModelHandler(org.apache.calcite.model.ModelHandler) IOException(java.io.IOException) Properties(java.util.Properties) HandlerImpl(org.apache.calcite.avatica.HandlerImpl) JsonBuilder(org.apache.calcite.util.JsonBuilder) AvaticaConnection(org.apache.calcite.avatica.AvaticaConnection) Map(java.util.Map)

Aggregations

IOException (java.io.IOException)1 SQLException (java.sql.SQLException)1 Map (java.util.Map)1 Properties (java.util.Properties)1 AvaticaConnection (org.apache.calcite.avatica.AvaticaConnection)1 HandlerImpl (org.apache.calcite.avatica.HandlerImpl)1 JsonSchema (org.apache.calcite.model.JsonSchema)1 ModelHandler (org.apache.calcite.model.ModelHandler)1 SchemaFactory (org.apache.calcite.schema.SchemaFactory)1 JsonBuilder (org.apache.calcite.util.JsonBuilder)1