/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to you under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package net.hydromatic.optiq.config; import net.hydromatic.avatica.ConnectionProperty; import java.util.HashMap; import java.util.Map; import java.util.Properties; import static net.hydromatic.avatica.ConnectionConfigImpl.*; /** * Properties that may be specified on the JDBC connect string. */ public enum OptiqConnectionProperty implements ConnectionProperty { /** Whether to store query results in temporary tables. */ AUTO_TEMP("autoTemp", Type.BOOLEAN, false), /** Whether Calcite should use materializations. */ MATERIALIZATIONS_ENABLED("materializationsEnabled", Type.BOOLEAN, true), /** Whether Calcite should create materializations. */ CREATE_MATERIALIZATIONS("createMaterializations", Type.BOOLEAN, true), /** URI of the model. */ MODEL("model", Type.STRING, null), /** Lexical policy. */ LEX("lex", Type.ENUM, Lex.ORACLE), /** How identifiers are quoted. * If not specified, value from {@link #LEX} is used. */ QUOTING("quoting", Type.ENUM, null), /** How identifiers are stored if they are quoted. * If not specified, value from {@link #LEX} is used. */ QUOTED_CASING("quotedCasing", Type.ENUM, null), /** How identifiers are stored if they are not quoted. * If not specified, value from {@link #LEX} is used. */ UNQUOTED_CASING("unquotedCasing", Type.ENUM, null), /** Whether identifiers are matched case-sensitively. * If not specified, value from {@link #LEX} is used. */ CASE_SENSITIVE("caseSensitive", Type.BOOLEAN, null), /** Name of initial schema. */ SCHEMA("schema", Type.STRING, null), /** Specifies whether Spark should be used as the engine for processing that * cannot be pushed to the source system. If false (the default), Calcite * generates code that implements the Enumerable interface. */ SPARK("spark", Type.BOOLEAN, false), /** Timezone, for example 'gmt-3'. Default is the JVM's time zone. */ TIMEZONE("timezone", Type.STRING, null), /** Type system. The name of a class that implements * {@code org.eigenbase.reltype.RelDataTypeSystem} and has a public default * constructor or an {@code INSTANCE} constant. */ TYPE_SYSTEM("typeSystem", Type.PLUGIN, null); private final String camelName; private final Type type; private final Object defaultValue; private static final Map<String, OptiqConnectionProperty> NAME_TO_PROPS; static { NAME_TO_PROPS = new HashMap<String, OptiqConnectionProperty>(); for (OptiqConnectionProperty property : OptiqConnectionProperty.values()) { NAME_TO_PROPS.put(property.camelName.toUpperCase(), property); NAME_TO_PROPS.put(property.name(), property); } } OptiqConnectionProperty(String camelName, Type type, Object defaultValue) { this.camelName = camelName; this.type = type; this.defaultValue = defaultValue; assert defaultValue == null || type.valid(defaultValue); } public String camelName() { return camelName; } public Object defaultValue() { return defaultValue; } public Type type() { return type; } public PropEnv wrap(Properties properties) { return new PropEnv(parse(properties, NAME_TO_PROPS), this); } } // End OptiqConnectionProperty.java