Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 98968200C4F for ; Sat, 1 Apr 2017 22:36:03 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 974D3160B9D; Sat, 1 Apr 2017 20:36:03 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id CE8FE160BC7 for ; Sat, 1 Apr 2017 22:35:56 +0200 (CEST) Received: (qmail 60459 invoked by uid 500); 1 Apr 2017 20:35:56 -0000 Mailing-List: contact commits-help@calcite.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@calcite.apache.org Delivered-To: mailing list commits@calcite.apache.org Received: (qmail 58868 invoked by uid 99); 1 Apr 2017 20:35:54 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 01 Apr 2017 20:35:54 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id B1104DFF66; Sat, 1 Apr 2017 20:35:54 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: elserj@apache.org To: commits@calcite.apache.org Date: Sat, 01 Apr 2017 20:36:37 -0000 Message-Id: <1c40f0bda34846be91d35ac42d04c2a6@git.apache.org> In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [45/51] [partial] calcite-avatica git commit: [CALCITE-1717] Remove Calcite code and lift avatica archived-at: Sat, 01 Apr 2017 20:36:03 -0000 http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java ---------------------------------------------------------------------- diff --git a/avatica/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java b/avatica/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java deleted file mode 100644 index 8870e0c..0000000 --- a/avatica/core/src/main/java/org/apache/calcite/avatica/MetaImpl.java +++ /dev/null @@ -1,1653 +0,0 @@ -/* - * 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 org.apache.calcite.avatica; - -import org.apache.calcite.avatica.remote.TypedValue; -import org.apache.calcite.avatica.util.ArrayIteratorCursor; -import org.apache.calcite.avatica.util.Cursor; -import org.apache.calcite.avatica.util.IteratorCursor; -import org.apache.calcite.avatica.util.ListIteratorCursor; -import org.apache.calcite.avatica.util.MapIteratorCursor; -import org.apache.calcite.avatica.util.RecordIteratorCursor; - -import com.fasterxml.jackson.annotation.JsonIgnore; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; -import java.sql.DatabaseMetaData; -import java.sql.SQLException; -import java.sql.Time; -import java.sql.Timestamp; -import java.sql.Types; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.NoSuchElementException; - -/** - * Basic implementation of {@link Meta}. - * - *

Each sub-class must implement the two remaining abstract methods, - * {@link #prepare} and - * {@link #prepareAndExecute}. - * It should also override metadata methods such as {@link #getCatalogs(Meta.ConnectionHandle)} and - * {@link #getTables} for the element types for which it has instances; the - * default metadata methods return empty collections. - */ -public abstract class MetaImpl implements Meta { - /** The {@link AvaticaConnection} backing {@code this}. */ - protected final AvaticaConnection connection; - /** Represents the various states specific to {@link #connection}. - * - *

Note: this instance is used recursively with {@link #connection}'s getter and setter - * methods.

- */ - protected final ConnectionPropertiesImpl connProps; - - public MetaImpl(AvaticaConnection connection) { - this.connection = connection; - this.connProps = new ConnectionPropertiesImpl(); - } - - /** Uses a {@link org.apache.calcite.avatica.Meta.CursorFactory} to convert - * an {@link Iterable} into a - * {@link org.apache.calcite.avatica.util.Cursor}. */ - public static Cursor createCursor(CursorFactory cursorFactory, - Iterable iterable) { - switch (cursorFactory.style) { - case OBJECT: - return new IteratorCursor(iterable.iterator()) { - protected Getter createGetter(int ordinal) { - return new ObjectGetter(ordinal); - } - }; - case ARRAY: - @SuppressWarnings("unchecked") final Iterable iterable1 = - (Iterable) (Iterable) iterable; - return new ArrayIteratorCursor(iterable1.iterator()); - case RECORD: - @SuppressWarnings("unchecked") final Class clazz = - cursorFactory.clazz; - return new RecordIteratorCursor(iterable.iterator(), clazz); - case RECORD_PROJECTION: - @SuppressWarnings("unchecked") final Class clazz2 = - cursorFactory.clazz; - return new RecordIteratorCursor(iterable.iterator(), clazz2, - cursorFactory.fields); - case LIST: - @SuppressWarnings("unchecked") final Iterable> iterable2 = - (Iterable>) (Iterable) iterable; - return new ListIteratorCursor(iterable2.iterator()); - case MAP: - @SuppressWarnings("unchecked") final Iterable> - iterable3 = - (Iterable>) (Iterable) iterable; - return new MapIteratorCursor(iterable3.iterator(), - cursorFactory.fieldNames); - default: - throw new AssertionError("unknown style: " + cursorFactory.style); - } - } - - public static List> collect(CursorFactory cursorFactory, - final Iterator iterator, List> list) { - final Iterable iterable = new Iterable() { - public Iterator iterator() { - return iterator; - } - }; - return collect(cursorFactory, iterable, list); - } - - public static List> collect(CursorFactory cursorFactory, - Iterable iterable, final List> list) { - switch (cursorFactory.style) { - case OBJECT: - for (Object o : iterable) { - list.add(Collections.singletonList(o)); - } - return list; - case ARRAY: - @SuppressWarnings("unchecked") final Iterable iterable1 = - (Iterable) (Iterable) iterable; - for (Object[] objects : iterable1) { - list.add(Arrays.asList(objects)); - } - return list; - case RECORD: - case RECORD_PROJECTION: - final Field[] fields; - switch (cursorFactory.style) { - case RECORD: - fields = cursorFactory.clazz.getFields(); - break; - default: - fields = cursorFactory.fields.toArray( - new Field[cursorFactory.fields.size()]); - } - for (Object o : iterable) { - final Object[] objects = new Object[fields.length]; - for (int i = 0; i < fields.length; i++) { - Field field = fields[i]; - try { - objects[i] = field.get(o); - } catch (IllegalAccessException e) { - throw new RuntimeException(e); - } - } - list.add(Arrays.asList(objects)); - } - return list; - case LIST: - @SuppressWarnings("unchecked") final Iterable> iterable2 = - (Iterable>) (Iterable) iterable; - for (List objects : iterable2) { - list.add(objects); - } - return list; - case MAP: - @SuppressWarnings("unchecked") final Iterable> - iterable3 = - (Iterable>) (Iterable) iterable; - for (Map map : iterable3) { - final List objects = new ArrayList(); - for (String fieldName : cursorFactory.fieldNames) { - objects.add(map.get(fieldName)); - } - list.add(objects); - } - return list; - default: - throw new AssertionError("unknown style: " + cursorFactory.style); - } - } - - @Override public void openConnection(ConnectionHandle ch, Map info) { - // dummy implementation, connection is already created at this point - } - - @Override public void closeConnection(ConnectionHandle ch) { - // TODO: implement - // - // lots of Calcite tests break with this simple implementation, - // requires investigation - -// try { -// connection.close(); -// } catch (SQLException e) { -// throw new RuntimeException(e); -// } - } - - @Override public ConnectionProperties connectionSync(ConnectionHandle ch, - ConnectionProperties connProps) { - this.connProps.merge(connProps); - this.connProps.setDirty(false); - return this.connProps; - } - - public StatementHandle createStatement(ConnectionHandle ch) { - return new StatementHandle(ch.id, connection.statementCount++, null); - } - - /** Creates an empty result set. Useful for JDBC metadata methods that are - * not implemented or which query entities that are not supported (e.g. - * triggers in Lingual). */ - protected MetaResultSet createEmptyResultSet(final Class clazz) { - return createResultSet(Collections.emptyMap(), - fieldMetaData(clazz).columns, - CursorFactory.deduce(fieldMetaData(clazz).columns, null), - Frame.EMPTY); - } - - public static ColumnMetaData columnMetaData(String name, int index, - Class type, boolean columnNullable) { - return columnMetaData(name, index, type, columnNullable - ? DatabaseMetaData.columnNullable - : DatabaseMetaData.columnNoNulls); - } - - public static ColumnMetaData columnMetaData(String name, int index, - Class type, int columnNullable) { - TypeInfo pair = TypeInfo.m.get(type); - ColumnMetaData.Rep rep = - ColumnMetaData.Rep.VALUE_MAP.get(type); - ColumnMetaData.AvaticaType scalarType = - ColumnMetaData.scalar(pair.sqlType, pair.sqlTypeName, rep); - return new ColumnMetaData( - index, false, true, false, false, - columnNullable, - true, -1, name, name, null, - 0, 0, null, null, scalarType, true, false, false, - scalarType.columnClassName()); - } - - protected static ColumnMetaData.StructType fieldMetaData(Class clazz) { - final List list = new ArrayList(); - for (Field field : clazz.getFields()) { - if (Modifier.isPublic(field.getModifiers()) - && !Modifier.isStatic(field.getModifiers())) { - int columnNullable = getColumnNullability(field); - list.add( - columnMetaData( - AvaticaUtils.camelToUpper(field.getName()), - list.size(), field.getType(), columnNullable)); - } - } - return ColumnMetaData.struct(list); - } - - protected static int getColumnNullability(Field field) { - // Check annotations first - if (field.isAnnotationPresent(ColumnNoNulls.class)) { - return DatabaseMetaData.columnNoNulls; - } - - if (field.isAnnotationPresent(ColumnNullable.class)) { - return DatabaseMetaData.columnNullable; - } - - if (field.isAnnotationPresent(ColumnNullableUnknown.class)) { - return DatabaseMetaData.columnNullableUnknown; - } - - // check the field type to decide if annotated, as a fallback - if (field.getType().isPrimitive()) { - return DatabaseMetaData.columnNoNulls; - } - - return DatabaseMetaData.columnNullable; - } - - protected MetaResultSet createResultSet( - Map internalParameters, List columns, - CursorFactory cursorFactory, Frame firstFrame) { - try { - final AvaticaStatement statement = connection.createStatement(); - final Signature signature = - new Signature(columns, "", Collections.emptyList(), - internalParameters, cursorFactory, Meta.StatementType.SELECT); - return MetaResultSet.create(connection.id, statement.getId(), true, - signature, firstFrame); - } catch (SQLException e) { - throw new RuntimeException(e); - } - } - - /** An object that has a name. */ - public interface Named { - @JsonIgnore String getName(); - } - - /** Annotation that indicates that a meta field may contain null values. */ - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public @interface ColumnNullable { - } - - /** Annotation that indicates that it is unknown whether a meta field may contain - * null values. */ - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public @interface ColumnNullableUnknown { - } - - /** Annotation that indicates that a meta field may not contain null - * values. */ - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public @interface ColumnNoNulls { - } - - /** Metadata describing a column. */ - public static class MetaColumn implements Named { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - @ColumnNoNulls - public final String columnName; - public final int dataType; - @ColumnNoNulls - public final String typeName; - public final Integer columnSize; - @ColumnNullableUnknown - public final Integer bufferLength = null; - public final Integer decimalDigits; - public final Integer numPrecRadix; - public final int nullable; - public final String remarks = null; - public final String columnDef = null; - @ColumnNullableUnknown - public final Integer sqlDataType = null; - @ColumnNullableUnknown - public final Integer sqlDatetimeSub = null; - public final Integer charOctetLength; - public final int ordinalPosition; - @ColumnNoNulls - public final String isNullable; - public final String scopeCatalog = null; - public final String scopeSchema = null; - public final String scopeTable = null; - public final Short sourceDataType = null; - @ColumnNoNulls - public final String isAutoincrement = ""; - @ColumnNoNulls - public final String isGeneratedcolumn = ""; - - public MetaColumn( - String tableCat, - String tableSchem, - String tableName, - String columnName, - int dataType, - String typeName, - Integer columnSize, - Integer decimalDigits, - Integer numPrecRadix, - int nullable, - Integer charOctetLength, - int ordinalPosition, - String isNullable) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.columnName = columnName; - this.dataType = dataType; - this.typeName = typeName; - this.columnSize = columnSize; - this.decimalDigits = decimalDigits; - this.numPrecRadix = numPrecRadix; - this.nullable = nullable; - this.charOctetLength = charOctetLength; - this.ordinalPosition = ordinalPosition; - this.isNullable = isNullable; - } - - public String getName() { - return columnName; - } - } - - /** Metadata describing a table. */ - public static class MetaTable implements Named { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - @ColumnNoNulls - public final String tableType; - public final String remarks = null; - public final String typeCat = null; - public final String typeSchem = null; - public final String typeName = null; - public final String selfReferencingColName = null; - public final String refGeneration = null; - - public MetaTable( - String tableCat, - String tableSchem, - String tableName, - String tableType) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.tableType = tableType; - } - - public String getName() { - return tableName; - } - } - - /** Metadata describing a schema. */ - public static class MetaSchema implements Named { - @ColumnNoNulls - public final String tableSchem; - public final String tableCatalog; - - public MetaSchema( - String tableCatalog, - String tableSchem) { - this.tableCatalog = tableCatalog; - this.tableSchem = tableSchem; - } - - public String getName() { - return tableSchem; - } - } - - /** Metadata describing a catalog. */ - public static class MetaCatalog implements Named { - @ColumnNoNulls - public final String tableCat; - - public MetaCatalog( - String tableCatalog) { - this.tableCat = tableCatalog; - } - - public String getName() { - return tableCat; - } - } - - /** Metadata describing a table type. */ - public static class MetaTableType { - @ColumnNoNulls - public final String tableType; - - public MetaTableType(String tableType) { - this.tableType = tableType; - } - } - - /** Metadata describing a procedure. */ - public static class MetaProcedure { - public final String procedureCat; - public final String procedureSchem; - @ColumnNoNulls - public final String procedureName; - public final String futureUse1 = null; - public final String futureUse2 = null; - public final String futureUse3 = null; - public final String remarks = null; - public final short procedureType; - public final String specificName; - - public MetaProcedure(String procedureCat, String procedureSchem, String procedureName, - short procedureType, String specificName) { - this.procedureCat = procedureCat; - this.procedureSchem = procedureSchem; - this.procedureName = procedureName; - this.procedureType = procedureType; - this.specificName = specificName; - } - } - - /** Metadata describing a procedure column. */ - public static class MetaProcedureColumn { - public final String procedureCat; - public final String procedureSchem; - @ColumnNoNulls - public final String procedureName; - @ColumnNoNulls - public final String columnName; - public final short columnType; - public final int dataType; - @ColumnNoNulls - public final String typeName; - public final Integer precision; - public final Integer length; - public final Short scale; - public final Short radix; - public final short nullable; - public final String remarks = null; - public final String columnDef; - @ColumnNullableUnknown - public final Integer sqlDataType = null; - @ColumnNullableUnknown - public final Integer sqlDatetimeSub = null; - public final Integer charOctetLength; - public final int ordinalPosition; - @ColumnNoNulls - public final String isNullable; - public final String specificName; - - public MetaProcedureColumn( - String procedureCat, - String procedureSchem, - String procedureName, - String columnName, - short columnType, - int dataType, - String typeName, - Integer precision, - Integer length, - Short scale, - Short radix, - short nullable, - String columnDef, - Integer charOctetLength, - int ordinalPosition, - String isNullable, - String specificName) { - this.procedureCat = procedureCat; - this.procedureSchem = procedureSchem; - this.procedureName = procedureName; - this.columnName = columnName; - this.columnType = columnType; - this.dataType = dataType; - this.typeName = typeName; - this.precision = precision; - this.length = length; - this.scale = scale; - this.radix = radix; - this.nullable = nullable; - this.columnDef = columnDef; - this.charOctetLength = charOctetLength; - this.ordinalPosition = ordinalPosition; - this.isNullable = isNullable; - this.specificName = specificName; - } - } - - /** Metadata describing a column privilege. */ - public static class MetaColumnPrivilege { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - @ColumnNoNulls - public final String columnName; - public final String grantor; - @ColumnNoNulls - public final String grantee; - @ColumnNoNulls - public final String privilege; - public final String isGrantable; - - public MetaColumnPrivilege( - String tableCat, - String tableSchem, - String tableName, - String columnName, - String grantor, - String grantee, - String privilege, - String isGrantable) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.columnName = columnName; - this.grantor = grantor; - this.grantee = grantee; - this.privilege = privilege; - this.isGrantable = isGrantable; - } - } - - /** Metadata describing a table privilege. */ - public static class MetaTablePrivilege { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - - public final String grantor; - @ColumnNoNulls - public final String grantee; - @ColumnNoNulls - public final String privilege; - public final String isGrantable; - - public MetaTablePrivilege( - String tableCat, - String tableSchem, - String tableName, - String grantor, - String grantee, - String privilege, - String isGrantable) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.grantor = grantor; - this.grantee = grantee; - this.privilege = privilege; - this.isGrantable = isGrantable; - } - } - - /** Metadata describing the best identifier for a row. */ - public static class MetaBestRowIdentifier { - public final short scope; - @ColumnNoNulls - public final String columnName; - public final int dataType; - @ColumnNoNulls - public final String typeName; - public final Integer columnSize; - @ColumnNullableUnknown - public final Integer bufferLength = null; - public final Short decimalDigits; - public short pseudoColumn; - - public MetaBestRowIdentifier( - short scope, - String columnName, - int dataType, - String typeName, - Integer columnSize, - Short decimalDigits, - short pseudoColumn) { - this.scope = scope; - this.columnName = columnName; - this.dataType = dataType; - this.typeName = typeName; - this.columnSize = columnSize; - this.decimalDigits = decimalDigits; - this.pseudoColumn = pseudoColumn; - } - } - - /** Metadata describing a version column. */ - public static class MetaVersionColumn { - @ColumnNullableUnknown - public final Short scope; - @ColumnNoNulls - public final String columnName; - public final int dataType; - @ColumnNoNulls - public final String typeName; - public final Integer columnSize; - public final Integer bufferLength; - public final Short decimalDigits; - public final short pseudoColumn; - - MetaVersionColumn( - Short scope, - String columnName, - int dataType, - String typeName, - Integer columnSize, - Integer bufferLength, - Short decimalDigits, - short pseudoColumn) { - this.scope = scope; - this.columnName = columnName; - this.dataType = dataType; - this.typeName = typeName; - this.columnSize = columnSize; - this.bufferLength = bufferLength; - this.decimalDigits = decimalDigits; - this.pseudoColumn = pseudoColumn; - } - } - - /** Metadata describing a primary key. */ - public static class MetaPrimaryKey { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - @ColumnNoNulls - public final String columnName; - public final short keySeq; - public final String pkName; - - MetaPrimaryKey( - String tableCat, - String tableSchem, - String tableName, - String columnName, - short keySeq, - String pkName) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.columnName = columnName; - this.keySeq = keySeq; - this.pkName = pkName; - } - } - - /** Metadata describing an imported key. */ - public static class MetaImportedKey { - public final String pktableCat; - public final String pktableSchem; - @ColumnNoNulls - public final String pktableName; - @ColumnNoNulls - public final String pkcolumnName; - public final String fktableCat; - public final String fktableSchem; - @ColumnNoNulls - public final String fktableName; - @ColumnNoNulls - public final String fkcolumnName; - public final short keySeq; - public final short updateRule; - public final short deleteRule; - public final String fkName; - public final String pkName; - public final short deferability; - - public MetaImportedKey( - String pktableCat, - String pktableSchem, - String pktableName, - String pkcolumnName, - String fktableCat, - String fktableSchem, - String fktableName, - String fkcolumnName, - short keySeq, - short updateRule, - short deleteRule, - String fkName, - String pkName, - short deferability) { - this.pktableCat = pktableCat; - this.pktableSchem = pktableSchem; - this.pktableName = pktableName; - this.pkcolumnName = pkcolumnName; - this.fktableCat = fktableCat; - this.fktableSchem = fktableSchem; - this.fktableName = fktableName; - this.fkcolumnName = fkcolumnName; - this.keySeq = keySeq; - this.updateRule = updateRule; - this.deleteRule = deleteRule; - this.fkName = fkName; - this.pkName = pkName; - this.deferability = deferability; - } - } - - /** Metadata describing an exported key. */ - public static class MetaExportedKey { - public final String pktableCat; - public final String pktableSchem; - @ColumnNoNulls - public final String pktableName; - @ColumnNoNulls - public final String pkcolumnName; - public final String fktableCat; - public final String fktableSchem; - @ColumnNoNulls - public final String fktableName; - @ColumnNoNulls - public final String fkcolumnName; - public final short keySeq; - public final short updateRule; - public final short deleteRule; - public final String fkName; - public final String pkName; - public final short deferability; - - public MetaExportedKey( - String pktableCat, - String pktableSchem, - String pktableName, - String pkcolumnName, - String fktableCat, - String fktableSchem, - String fktableName, - String fkcolumnName, - short keySeq, - short updateRule, - short deleteRule, - String fkName, - String pkName, - short deferability) { - this.pktableCat = pktableCat; - this.pktableSchem = pktableSchem; - this.pktableName = pktableName; - this.pkcolumnName = pkcolumnName; - this.fktableCat = fktableCat; - this.fktableSchem = fktableSchem; - this.fktableName = fktableName; - this.fkcolumnName = fkcolumnName; - this.keySeq = keySeq; - this.updateRule = updateRule; - this.deleteRule = deleteRule; - this.fkName = fkName; - this.pkName = pkName; - this.deferability = deferability; - } - } - - /** Metadata describing a cross reference. */ - public static class MetaCrossReference { - public final String pktableCat; - public final String pktableSchem; - @ColumnNoNulls - public final String pktableName; - @ColumnNoNulls - public final String pkcolumnName; - public final String fktableCat; - public final String fktableSchem; - @ColumnNoNulls - public final String fktableName; - @ColumnNoNulls - public final String fkcolumnName; - public final short keySeq; - public final short updateRule; - public final short deleteRule; - public final String fkName; - public final String pkName; - public final short deferability; - - public MetaCrossReference( - String pktableCat, - String pktableSchem, - String pktableName, - String pkcolumnName, - String fktableCat, - String fktableSchem, - String fktableName, - String fkcolumnName, - short keySeq, - short updateRule, - short deleteRule, - String fkName, - String pkName, - short deferability) { - this.pktableCat = pktableCat; - this.pktableSchem = pktableSchem; - this.pktableName = pktableName; - this.pkcolumnName = pkcolumnName; - this.fktableCat = fktableCat; - this.fktableSchem = fktableSchem; - this.fktableName = fktableName; - this.fkcolumnName = fkcolumnName; - this.keySeq = keySeq; - this.updateRule = updateRule; - this.deleteRule = deleteRule; - this.fkName = fkName; - this.pkName = pkName; - this.deferability = deferability; - } - } - - /** Metadata describing type info. */ - public static class MetaTypeInfo implements Named { - @ColumnNoNulls - public final String typeName; - public final int dataType; - public final Integer precision; - public final String literalPrefix; - public final String literalSuffix; - //TODO: Add create parameter for type on DDL - public final String createParams = null; - public final short nullable; - public final boolean caseSensitive; - public final short searchable; - public final boolean unsignedAttribute; - public final boolean fixedPrecScale; - public final boolean autoIncrement; - public final String localTypeName; - public final Short minimumScale; - public final Short maximumScale; - @ColumnNullableUnknown - public final Integer sqlDataType = null; - @ColumnNullableUnknown - public final Integer sqlDatetimeSub = null; - public final Integer numPrecRadix; //nullable int - - public MetaTypeInfo( - String typeName, - int dataType, - Integer precision, - String literalPrefix, - String literalSuffix, - short nullable, - boolean caseSensitive, - short searchable, - boolean unsignedAttribute, - boolean fixedPrecScale, - boolean autoIncrement, - Short minimumScale, - Short maximumScale, - Integer numPrecRadix) { - this.typeName = typeName; - this.dataType = dataType; - this.precision = precision; - this.literalPrefix = literalPrefix; - this.literalSuffix = literalSuffix; - this.nullable = nullable; - this.caseSensitive = caseSensitive; - this.searchable = searchable; - this.unsignedAttribute = unsignedAttribute; - this.fixedPrecScale = fixedPrecScale; - this.autoIncrement = autoIncrement; - this.localTypeName = typeName; - this.minimumScale = minimumScale; - this.maximumScale = maximumScale; - this.numPrecRadix = numPrecRadix == 0 ? null : numPrecRadix; - } - - public String getName() { - return typeName; - } - } - - /** Metadata describing index info. */ - public static class MetaIndexInfo { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - public final boolean nonUnique; - public final String indexQualifier; - public final String indexName; - public final short type; - public final short ordinalPosition; - public final String columnName; - public final String ascOrDesc; - public final long cardinality; - public final long pages; - public final String filterCondition; - - public MetaIndexInfo( - String tableCat, - String tableSchem, - String tableName, - boolean nonUnique, - String indexQualifier, - String indexName, - short type, - short ordinalPosition, - String columnName, - String ascOrDesc, - long cardinality, - long pages, - String filterCondition) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.nonUnique = nonUnique; - this.indexQualifier = indexQualifier; - this.indexName = indexName; - this.type = type; - this.ordinalPosition = ordinalPosition; - this.columnName = columnName; - this.ascOrDesc = ascOrDesc; - this.cardinality = cardinality; - this.pages = pages; - this.filterCondition = filterCondition; - } - } - - /** Metadata describing a user-defined type. */ - public static class MetaUdt { - public final String typeCat; - public final String typeSchem; - @ColumnNoNulls - public final String typeName; - @ColumnNoNulls - public final String className; - public final int dataType; - public final String remarks = null; - public final Short baseType; - - public MetaUdt( - String typeCat, - String typeSchem, - String typeName, - String className, - int dataType, - Short baseType) { - this.typeCat = typeCat; - this.typeSchem = typeSchem; - this.typeName = typeName; - this.className = className; - this.dataType = dataType; - this.baseType = baseType; - } - } - - /** Metadata describing a super-type. */ - public static class MetaSuperType { - public final String typeCat; - public final String typeSchem; - @ColumnNoNulls - public final String typeName; - public final String supertypeCat; - public final String supertypeSchem; - @ColumnNoNulls - public final String supertypeName; - - public MetaSuperType( - String typeCat, - String typeSchem, - String typeName, - String supertypeCat, - String supertypeSchem, - String supertypeName) { - this.typeCat = typeCat; - this.typeSchem = typeSchem; - this.typeName = typeName; - this.supertypeCat = supertypeCat; - this.supertypeSchem = supertypeSchem; - this.supertypeName = supertypeName; - } - } - - /** Metadata describing an attribute. */ - public static class MetaAttribute { - public final String typeCat; - public final String typeSchem; - @ColumnNoNulls - public final String typeName; - @ColumnNoNulls - public final String attrName; - public final int dataType; - @ColumnNoNulls - public String attrTypeName; - public final Integer attrSize; - public final Integer decimalDigits; - public final Integer numPrecRadix; - public final int nullable; - public final String remarks = null; - public final String attrDef = null; - @ColumnNullableUnknown - public final Integer sqlDataType = null; - @ColumnNullableUnknown - public final Integer sqlDatetimeSub = null; - public final Integer charOctetLength; - public final int ordinalPosition; - @ColumnNoNulls - public final String isNullable; - public final String scopeCatalog = null; - public final String scopeSchema = null; - public final String scopeTable = null; - public final Short sourceDataType = null; - - public MetaAttribute( - String typeCat, - String typeSchem, - String typeName, - String attrName, - int dataType, - String attrTypeName, - Integer attrSize, - Integer decimalDigits, - Integer numPrecRadix, - int nullable, - Integer charOctetLength, - int ordinalPosition, - String isNullable) { - this.typeCat = typeCat; - this.typeSchem = typeSchem; - this.typeName = typeName; - this.attrName = attrName; - this.dataType = dataType; - this.attrTypeName = attrTypeName; - this.attrSize = attrSize; - this.decimalDigits = decimalDigits; - this.numPrecRadix = numPrecRadix; - this.nullable = nullable; - this.charOctetLength = charOctetLength; - this.ordinalPosition = ordinalPosition; - this.isNullable = isNullable; - } - } - - /** Metadata describing a client info property. */ - public static class MetaClientInfoProperty { - @ColumnNoNulls - public final String name; - public final int maxLen; - public final String defaultValue; - public final String description; - - public MetaClientInfoProperty( - String name, - int maxLen, - String defaultValue, - String description) { - this.name = name; - this.maxLen = maxLen; - this.defaultValue = defaultValue; - this.description = description; - } - } - - /** Metadata describing a function. */ - public static class MetaFunction { - public final String functionCat; - public final String functionSchem; - @ColumnNoNulls - public final String functionName; - public final String remarks = null; - public final short functionType; - public final String specificName; - - public MetaFunction( - String functionCat, - String functionSchem, - String functionName, - short functionType, - String specificName) { - this.functionCat = functionCat; - this.functionSchem = functionSchem; - this.functionName = functionName; - this.functionType = functionType; - this.specificName = specificName; - } - } - - /** Metadata describing a function column. */ - public static class MetaFunctionColumn { - public final String functionCat; - public final String functionSchem; - @ColumnNoNulls - public final String functionName; - @ColumnNoNulls - public final String columnName; - public final short columnType; - public final int dataType; - @ColumnNoNulls - public final String typeName; - public final Integer precision; - public final Integer length; - public final Short scale; - public final Short radix; - public final short nullable; - public final String remarks = null; - public final Integer charOctetLength; - public final int ordinalPosition; - @ColumnNoNulls - public final String isNullable; - public final String specificName; - - public MetaFunctionColumn( - String functionCat, - String functionSchem, - String functionName, - String columnName, - short columnType, - int dataType, - String typeName, - Integer precision, - Integer length, - Short scale, - Short radix, - short nullable, - Integer charOctetLength, - int ordinalPosition, - String isNullable, - String specificName) { - this.functionCat = functionCat; - this.functionSchem = functionSchem; - this.functionName = functionName; - this.columnName = columnName; - this.columnType = columnType; - this.dataType = dataType; - this.typeName = typeName; - this.precision = precision; - this.length = length; - this.scale = scale; - this.radix = radix; - this.nullable = nullable; - this.charOctetLength = charOctetLength; - this.ordinalPosition = ordinalPosition; - this.isNullable = isNullable; - this.specificName = specificName; - } - } - - /** Metadata describing a pseudo column. */ - public static class MetaPseudoColumn { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - @ColumnNoNulls - public final String columnName; - public final int dataType; - public final Integer columnSize; - public final Integer decimalDigits; - public final Integer numPrecRadix; - @ColumnNoNulls - public final String columnUsage; - public final String remarks = null; - public final Integer charOctetLength; - @ColumnNoNulls - public final String isNullable; - - public MetaPseudoColumn( - String tableCat, - String tableSchem, - String tableName, - String columnName, - int dataType, - Integer columnSize, - Integer decimalDigits, - Integer numPrecRadix, - String columnUsage, - Integer charOctetLength, - String isNullable) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.columnName = columnName; - this.dataType = dataType; - this.columnSize = columnSize; - this.decimalDigits = decimalDigits; - this.numPrecRadix = numPrecRadix; - this.columnUsage = columnUsage; - this.charOctetLength = charOctetLength; - this.isNullable = isNullable; - } - } - - /** Metadata describing a super-table. */ - public static class MetaSuperTable { - public final String tableCat; - public final String tableSchem; - @ColumnNoNulls - public final String tableName; - @ColumnNoNulls - public final String supertableName; - - public MetaSuperTable( - String tableCat, - String tableSchem, - String tableName, - String supertableName) { - this.tableCat = tableCat; - this.tableSchem = tableSchem; - this.tableName = tableName; - this.supertableName = supertableName; - } - } - - public Map getDatabaseProperties(ConnectionHandle ch) { - return Collections.emptyMap(); - } - - public MetaResultSet getTables(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat tableNamePattern, - List typeList) { - return createEmptyResultSet(MetaTable.class); - } - - public MetaResultSet getColumns(ConnectionHandle ch, String catalog, - Pat schemaPattern, - Pat tableNamePattern, - Pat columnNamePattern) { - return createEmptyResultSet(MetaColumn.class); - } - - public MetaResultSet getSchemas(ConnectionHandle ch, String catalog, Pat schemaPattern) { - return createEmptyResultSet(MetaSchema.class); - } - - public MetaResultSet getCatalogs(ConnectionHandle ch) { - return createEmptyResultSet(MetaCatalog.class); - } - - public MetaResultSet getTableTypes(ConnectionHandle ch) { - return createEmptyResultSet(MetaTableType.class); - } - - public MetaResultSet getProcedures(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat procedureNamePattern) { - return createEmptyResultSet(MetaProcedure.class); - } - - public MetaResultSet getProcedureColumns(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat procedureNamePattern, - Pat columnNamePattern) { - return createEmptyResultSet(MetaProcedureColumn.class); - } - - public MetaResultSet getColumnPrivileges(ConnectionHandle ch, - String catalog, - String schema, - String table, - Pat columnNamePattern) { - return createEmptyResultSet(MetaColumnPrivilege.class); - } - - public MetaResultSet getTablePrivileges(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat tableNamePattern) { - return createEmptyResultSet(MetaTablePrivilege.class); - } - - public MetaResultSet getBestRowIdentifier(ConnectionHandle ch, - String catalog, - String schema, - String table, - int scope, - boolean nullable) { - return createEmptyResultSet(MetaBestRowIdentifier.class); - } - - public MetaResultSet getVersionColumns(ConnectionHandle ch, - String catalog, - String schema, - String table) { - return createEmptyResultSet(MetaVersionColumn.class); - } - - public MetaResultSet getPrimaryKeys(ConnectionHandle ch, - String catalog, - String schema, - String table) { - return createEmptyResultSet(MetaPrimaryKey.class); - } - - public MetaResultSet getImportedKeys(ConnectionHandle ch, - String catalog, - String schema, - String table) { - return createEmptyResultSet(MetaImportedKey.class); - } - - public MetaResultSet getExportedKeys(ConnectionHandle ch, - String catalog, - String schema, - String table) { - return createEmptyResultSet(MetaExportedKey.class); - } - - public MetaResultSet getCrossReference(ConnectionHandle ch, - String parentCatalog, - String parentSchema, - String parentTable, - String foreignCatalog, - String foreignSchema, - String foreignTable) { - return createEmptyResultSet(MetaCrossReference.class); - } - - public MetaResultSet getTypeInfo(ConnectionHandle ch) { - return createEmptyResultSet(MetaTypeInfo.class); - } - - public MetaResultSet getIndexInfo(ConnectionHandle ch, - String catalog, - String schema, - String table, - boolean unique, - boolean approximate) { - return createEmptyResultSet(MetaIndexInfo.class); - } - - public MetaResultSet getUDTs(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat typeNamePattern, - int[] types) { - return createEmptyResultSet(MetaUdt.class); - } - - public MetaResultSet getSuperTypes(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat typeNamePattern) { - return createEmptyResultSet(MetaSuperType.class); - } - - public MetaResultSet getSuperTables(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat tableNamePattern) { - return createEmptyResultSet(MetaSuperTable.class); - } - - public MetaResultSet getAttributes(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat typeNamePattern, - Pat attributeNamePattern) { - return createEmptyResultSet(MetaAttribute.class); - } - - public MetaResultSet getClientInfoProperties(ConnectionHandle ch) { - return createEmptyResultSet(MetaClientInfoProperty.class); - } - - public MetaResultSet getFunctions(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat functionNamePattern) { - return createEmptyResultSet(MetaFunction.class); - } - - public MetaResultSet getFunctionColumns(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat functionNamePattern, - Pat columnNamePattern) { - return createEmptyResultSet(MetaFunctionColumn.class); - } - - public MetaResultSet getPseudoColumns(ConnectionHandle ch, - String catalog, - Pat schemaPattern, - Pat tableNamePattern, - Pat columnNamePattern) { - return createEmptyResultSet(MetaPseudoColumn.class); - } - - @Override public Iterable createIterable(StatementHandle handle, QueryState state, - Signature signature, List parameterValues, Frame firstFrame) { - if (firstFrame != null && firstFrame.done) { - return firstFrame.rows; - } - AvaticaStatement stmt; - try { - stmt = connection.lookupStatement(handle); - } catch (SQLException e) { - throw new RuntimeException(e); - } - return new FetchIterable(stmt, state, - firstFrame, parameterValues); - } - - public Frame fetch(AvaticaStatement stmt, List parameterValues, - long offset, int fetchMaxRowCount) throws NoSuchStatementException, MissingResultsException { - return null; - } - - /** Information about a type. */ - private static class TypeInfo { - private static Map, TypeInfo> m = - new HashMap, TypeInfo>(); - static { - put(boolean.class, Types.BOOLEAN, "BOOLEAN"); - put(Boolean.class, Types.BOOLEAN, "BOOLEAN"); - put(byte.class, Types.TINYINT, "TINYINT"); - put(Byte.class, Types.TINYINT, "TINYINT"); - put(short.class, Types.SMALLINT, "SMALLINT"); - put(Short.class, Types.SMALLINT, "SMALLINT"); - put(int.class, Types.INTEGER, "INTEGER"); - put(Integer.class, Types.INTEGER, "INTEGER"); - put(long.class, Types.BIGINT, "BIGINT"); - put(Long.class, Types.BIGINT, "BIGINT"); - put(float.class, Types.FLOAT, "FLOAT"); - put(Float.class, Types.FLOAT, "FLOAT"); - put(double.class, Types.DOUBLE, "DOUBLE"); - put(Double.class, Types.DOUBLE, "DOUBLE"); - put(String.class, Types.VARCHAR, "VARCHAR"); - put(java.sql.Date.class, Types.DATE, "DATE"); - put(Time.class, Types.TIME, "TIME"); - put(Timestamp.class, Types.TIMESTAMP, "TIMESTAMP"); - } - - private final int sqlType; - private final String sqlTypeName; - - public TypeInfo(int sqlType, String sqlTypeName) { - this.sqlType = sqlType; - this.sqlTypeName = sqlTypeName; - } - - static void put(Class clazz, int sqlType, String sqlTypeName) { - m.put(clazz, new TypeInfo(sqlType, sqlTypeName)); - } - } - - /** Iterator that never returns any elements. */ - private static class EmptyIterator implements Iterator { - public static final Iterator INSTANCE = new EmptyIterator(); - - public void remove() { - throw new UnsupportedOperationException(); - } - - public boolean hasNext() { - return false; - } - - public Object next() { - throw new NoSuchElementException(); - } - } - - /** Iterable that yields an iterator over rows coming from a sequence of - * {@link Meta.Frame}s. */ - private class FetchIterable implements Iterable { - private final AvaticaStatement stmt; - private final QueryState state; - private final Frame firstFrame; - private final List parameterValues; - - public FetchIterable(AvaticaStatement stmt, QueryState state, Frame firstFrame, - List parameterValues) { - this.stmt = stmt; - this.state = state; - this.firstFrame = firstFrame; - this.parameterValues = parameterValues; - } - - public Iterator iterator() { - return new FetchIterator(stmt, state, firstFrame, parameterValues); - } - } - - /** Iterator over rows coming from a sequence of {@link Meta.Frame}s. */ - private class FetchIterator implements Iterator { - private final AvaticaStatement stmt; - private final QueryState state; - private Frame frame; - private Iterator rows; - private List parameterValues; - private List originalParameterValues; - private long currentOffset = 0; - - public FetchIterator(AvaticaStatement stmt, QueryState state, Frame firstFrame, - List parameterValues) { - this.stmt = stmt; - this.state = state; - this.parameterValues = parameterValues; - this.originalParameterValues = parameterValues; - if (firstFrame == null) { - frame = Frame.MORE; - rows = EmptyIterator.INSTANCE; - } else { - frame = firstFrame; - rows = firstFrame.rows.iterator(); - } - moveNext(); - } - - public void remove() { - throw new UnsupportedOperationException("remove"); - } - - public boolean hasNext() { - return rows != null; - } - - public Object next() { - if (rows == null) { - throw new NoSuchElementException(); - } - final Object o = rows.next(); - currentOffset++; - moveNext(); - return o; - } - - private void moveNext() { - for (;;) { - if (rows.hasNext()) { - break; - } - if (frame.done) { - rows = null; - break; - } - try { - // currentOffset updated after element is read from `rows` iterator - frame = fetch(stmt.handle, currentOffset, AvaticaStatement.DEFAULT_FETCH_SIZE); - } catch (NoSuchStatementException e) { - resetStatement(); - // re-fetch the batch where we left off - continue; - } catch (MissingResultsException e) { - try { - // We saw the statement, but it didnt' have a resultset initialized. So, reset it. - if (!stmt.syncResults(state, currentOffset)) { - // This returned false, so there aren't actually any more results to iterate over - frame = null; - rows = null; - break; - } - // syncResults returning true means we need to fetch those results - } catch (NoSuchStatementException e1) { - // Tried to reset the result set, but lost the statement, save a loop before retrying. - resetStatement(); - // Will just loop back around to a MissingResultsException, but w/e recursion - } - // Kick back to the top to try to fetch again (in both branches) - continue; - } - parameterValues = null; // don't execute next time - if (frame == null) { - rows = null; - break; - } - // It is valid for rows to be empty, so we go around the loop again to - // check - rows = frame.rows.iterator(); - } - } - - private void resetStatement() { - // If we have to reset the statement, we need to reset the parameterValues too - parameterValues = originalParameterValues; - // Defer to the statement to reset itself - stmt.resetStatement(); - } - } - - /** Returns whether a list of parameter values has any null elements. */ - public static boolean checkParameterValueHasNull(List parameterValues) { - for (TypedValue x : parameterValues) { - if (x == null) { - return true; - } - } - return false; - } -} - -// End MetaImpl.java http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/main/java/org/apache/calcite/avatica/MissingResultsException.java ---------------------------------------------------------------------- diff --git a/avatica/core/src/main/java/org/apache/calcite/avatica/MissingResultsException.java b/avatica/core/src/main/java/org/apache/calcite/avatica/MissingResultsException.java deleted file mode 100644 index 7746769..0000000 --- a/avatica/core/src/main/java/org/apache/calcite/avatica/MissingResultsException.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * 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 org.apache.calcite.avatica; - -import org.apache.calcite.avatica.Meta.StatementHandle; - -import java.sql.ResultSet; - -/** - * An Exception which denotes that a cached Statement is present but has no {@link ResultSet}. - */ -public class MissingResultsException extends Exception { - - private static final long serialVersionUID = 1L; - - private final StatementHandle handle; - - public MissingResultsException(StatementHandle handle) { - this.handle = handle; - } - - public StatementHandle getHandle() { - return handle; - } -} - -// End MissingResultsException.java http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchConnectionException.java ---------------------------------------------------------------------- diff --git a/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchConnectionException.java b/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchConnectionException.java deleted file mode 100644 index b5a940d..0000000 --- a/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchConnectionException.java +++ /dev/null @@ -1,37 +0,0 @@ -/* - * 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 org.apache.calcite.avatica; - -/** - * An Exception that denotes that the given Connection is not cached. - */ -public class NoSuchConnectionException extends RuntimeException { - - private static final long serialVersionUID = 1L; - - private final String connectionId; - - public NoSuchConnectionException(String connectionId) { - this.connectionId = connectionId; - } - - public String getConnectionId() { - return connectionId; - } -} - -// End NoSuchConnectionException.java http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchStatementException.java ---------------------------------------------------------------------- diff --git a/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchStatementException.java b/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchStatementException.java deleted file mode 100644 index 321011b..0000000 --- a/avatica/core/src/main/java/org/apache/calcite/avatica/NoSuchStatementException.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * 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 org.apache.calcite.avatica; - -import org.apache.calcite.avatica.Meta.StatementHandle; - -/** - * An Exception that denotes that the given Statement is not cached. - */ -public class NoSuchStatementException extends Exception { - - private static final long serialVersionUID = 1L; - - private final StatementHandle stmtHandle; - - public NoSuchStatementException(StatementHandle stmtHandle) { - this.stmtHandle = stmtHandle; - } - - public StatementHandle getStatementHandle() { - return stmtHandle; - } -} - -// End NoSuchStatementException.java http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/fc7b26c8/avatica/core/src/main/java/org/apache/calcite/avatica/QueryState.java ---------------------------------------------------------------------- diff --git a/avatica/core/src/main/java/org/apache/calcite/avatica/QueryState.java b/avatica/core/src/main/java/org/apache/calcite/avatica/QueryState.java deleted file mode 100644 index 4ca9ce1..0000000 --- a/avatica/core/src/main/java/org/apache/calcite/avatica/QueryState.java +++ /dev/null @@ -1,466 +0,0 @@ -/* - * 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 org.apache.calcite.avatica; - -import org.apache.calcite.avatica.proto.Common; -import org.apache.calcite.avatica.proto.Common.MetaDataOperationArgument; -import org.apache.calcite.avatica.proto.Common.MetaDataOperationArgument.ArgumentType; -import org.apache.calcite.avatica.remote.MetaDataOperation; - -import com.fasterxml.jackson.annotation.JsonProperty; - -import java.sql.Connection; -import java.sql.DatabaseMetaData; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Statement; -import java.util.Arrays; -import java.util.Objects; - -/** - * A struct used to encapsulate the necessary information to reconstitute a ResultSet in the - * Avatica server. - */ -public class QueryState { - - /** - * An enumeration that represents how a ResultSet was created. - */ - public enum StateType { - SQL, - METADATA; - - public Common.StateType toProto() { - switch (this) { - case SQL: - return Common.StateType.SQL; - case METADATA: - return Common.StateType.METADATA; - default: - return Common.StateType.UNRECOGNIZED; - } - } - - public static StateType fromProto(Common.StateType protoType) { - switch (protoType) { - case SQL: - return StateType.SQL; - case METADATA: - return StateType.METADATA; - default: - throw new IllegalArgumentException("Unhandled StateType " + protoType); - } - } - } - - @JsonProperty("type") - public final StateType type; - - @JsonProperty("sql") - public final String sql; - - @JsonProperty("metaDataOperation") - public final MetaDataOperation metaDataOperation; - @JsonProperty("operationArgs") - public final Object[] operationArgs; - - /** - * Constructor encapsulating a SQL query used to create a result set. - * - * @param sql The SQL query. - */ - public QueryState(String sql) { - // This doesn't to be non-null - this.sql = sql; - this.type = StateType.SQL; - - // Null out the members we don't use. - this.metaDataOperation = null; - this.operationArgs = null; - } - - /** - * Constructor encapsulating a metadata operation's result set. - * - * @param op A pointer to the {@link DatabaseMetaData} operation being invoked. - * @param args The arguments to the method being invoked. - */ - public QueryState(MetaDataOperation op, Object... args) { - this.metaDataOperation = Objects.requireNonNull(op); - this.operationArgs = Arrays.copyOf(Objects.requireNonNull(args), args.length); - this.type = StateType.METADATA; - - // Null out the members we won't use - this.sql = null; - } - - /** - * Not intended for external use. For Jackson-databind only. - */ - public QueryState(StateType type, String sql, MetaDataOperation op, Object... args) { - this.type = Objects.requireNonNull(type); - switch (type) { - case SQL: - this.sql = Objects.requireNonNull(sql); - if (null != op) { - throw new IllegalArgumentException("Expected null MetaDataOperation, but got " + op); - } - this.metaDataOperation = null; - if (null != args) { - throw new IllegalArgumentException("Expected null arguments, but got " - + Arrays.toString(args)); - } - this.operationArgs = null; - break; - case METADATA: - this.metaDataOperation = Objects.requireNonNull(op); - this.operationArgs = Objects.requireNonNull(args); - if (null != sql) { - throw new IllegalArgumentException("Expected null SQl but got " + sql); - } - this.sql = null; - break; - default: - throw new IllegalArgumentException("Unable to handle StateType " + type); - } - } - - /** - * Not intended for external use. For Jackson-databind only. - */ - public QueryState() { - this.sql = null; - this.metaDataOperation = null; - this.type = null; - this.operationArgs = null; - } - - /** - * @return The {@link StateType} for this encapsulated state. - */ - public StateType getType() { - return type; - } - - /** - * @return The SQL expression to invoke. - */ - public String getSql() { - assert type == StateType.SQL; - return sql; - } - - /** - * @return The metadata operation to invoke. - */ - public MetaDataOperation getMetaDataOperation() { - assert type == StateType.METADATA; - return metaDataOperation; - } - - /** - * @return The Arguments for the given metadata operation. - */ - public Object[] getOperationArgs() { - assert type == StateType.METADATA; - return operationArgs; - } - - public ResultSet invoke(Connection conn, Statement statement) throws SQLException { - switch (type) { - case SQL: - boolean ret = Objects.requireNonNull(statement).execute(sql); - ResultSet results = statement.getResultSet(); - - // Either execute(sql) returned true or the resultSet was null - assert ret || null == results; - - return results; - case METADATA: - DatabaseMetaData metadata = Objects.requireNonNull(conn).getMetaData(); - switch (metaDataOperation) { - case GET_ATTRIBUTES: - verifyOpArgs(4); - return metadata.getAttributes((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3]); - case GET_BEST_ROW_IDENTIFIER: - verifyOpArgs(5); - return metadata.getBestRowIdentifier((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (int) operationArgs[3], - (boolean) operationArgs[4]); - case GET_CATALOGS: - verifyOpArgs(0); - return metadata.getCatalogs(); - case GET_COLUMNS: - verifyOpArgs(4); - return metadata.getColumns((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3]); - case GET_COLUMN_PRIVILEGES: - verifyOpArgs(4); - return metadata.getColumnPrivileges((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3]); - case GET_CROSS_REFERENCE: - verifyOpArgs(6); - return metadata.getCrossReference((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3], - (String) operationArgs[4], - (String) operationArgs[5]); - case GET_EXPORTED_KEYS: - verifyOpArgs(3); - return metadata.getExportedKeys((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_FUNCTIONS: - verifyOpArgs(3); - return metadata.getFunctions((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_FUNCTION_COLUMNS: - verifyOpArgs(4); - return metadata.getFunctionColumns((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3]); - case GET_IMPORTED_KEYS: - verifyOpArgs(3); - return metadata.getImportedKeys((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_INDEX_INFO: - verifyOpArgs(5); - return metadata.getIndexInfo((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (boolean) operationArgs[3], - (boolean) operationArgs[4]); - case GET_PRIMARY_KEYS: - verifyOpArgs(3); - return metadata.getPrimaryKeys((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_PROCEDURES: - verifyOpArgs(3); - return metadata.getProcedures((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_PROCEDURE_COLUMNS: - verifyOpArgs(4); - return metadata.getProcedureColumns((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3]); - case GET_PSEUDO_COLUMNS: - verifyOpArgs(4); - return metadata.getPseudoColumns((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String) operationArgs[3]); - case GET_SCHEMAS: - verifyOpArgs(0); - return metadata.getSchemas(); - case GET_SCHEMAS_WITH_ARGS: - verifyOpArgs(2); - return metadata.getSchemas((String) operationArgs[0], - (String) operationArgs[1]); - case GET_SUPER_TABLES: - verifyOpArgs(3); - return metadata.getSuperTables((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_SUPER_TYPES: - verifyOpArgs(3); - return metadata.getSuperTypes((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_TABLES: - verifyOpArgs(4); - return metadata.getTables((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (String[]) operationArgs[3]); - case GET_TABLE_PRIVILEGES: - verifyOpArgs(3); - return metadata.getTablePrivileges((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - case GET_TABLE_TYPES: - verifyOpArgs(0); - return metadata.getTableTypes(); - case GET_TYPE_INFO: - verifyOpArgs(0); - return metadata.getTypeInfo(); - case GET_UDTS: - verifyOpArgs(4); - return metadata.getUDTs((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2], - (int[]) operationArgs[3]); - case GET_VERSION_COLUMNS: - verifyOpArgs(3); - return metadata.getVersionColumns((String) operationArgs[0], - (String) operationArgs[1], - (String) operationArgs[2]); - default: - throw new IllegalArgumentException("Unhandled Metadata operation: " + metaDataOperation); - } - default: - throw new IllegalArgumentException("Unable to process QueryState of type " + type); - } - } - - private void verifyOpArgs(int expectedArgs) { - if (expectedArgs != operationArgs.length) { - throw new RuntimeException("Expected " + expectedArgs + " arguments, but got " - + Arrays.toString(operationArgs)); - } - } - - public Common.QueryState toProto() { - Common.QueryState.Builder builder = Common.QueryState.newBuilder(); - - // Required - switch (type) { - case SQL: - builder.setType(Common.StateType.SQL); - break; - case METADATA: - builder.setType(Common.StateType.METADATA); - break; - default: - throw new IllegalStateException("Unhandled type: " + type); - } - - // Optional SQL - if (null != sql) { - builder.setSql(sql).setHasSql(true); - } - - // Optional metaDataOperation - if (null != metaDataOperation) { - builder.setOp(metaDataOperation.toProto()).setHasOp(true); - } - - // Optional operationArgs - if (null != operationArgs) { - builder.setHasArgs(true); - for (Object arg : operationArgs) { - MetaDataOperationArgument.Builder argBuilder = MetaDataOperationArgument.newBuilder(); - - if (null == arg) { - builder.addArgs(argBuilder.setType(ArgumentType.NULL).build()); - } else if (arg instanceof String) { - builder.addArgs(argBuilder.setType(ArgumentType.STRING) - .setStringValue((String) arg).build()); - } else if (arg instanceof Integer) { - builder.addArgs(argBuilder.setType(ArgumentType.INT).setIntValue((int) arg).build()); - } else if (arg instanceof Boolean) { - builder.addArgs( - argBuilder.setType(ArgumentType.BOOL).setBoolValue((boolean) arg).build()); - } else if (arg instanceof String[]) { - argBuilder.setType(ArgumentType.REPEATED_STRING); - for (String strArg : (String[]) arg) { - argBuilder.addStringArrayValues(strArg); - } - builder.addArgs(argBuilder.build()); - } else if (arg instanceof int[]) { - argBuilder.setType(ArgumentType.REPEATED_INT); - for (int intArg : (int[]) arg) { - argBuilder.addIntArrayValues(intArg); - } - builder.addArgs(argBuilder.build()); - } else { - throw new RuntimeException("Unexpected operation argument: " + arg.getClass()); - } - } - } else { - builder.setHasArgs(false); - } - - return builder.build(); - } - - public static QueryState fromProto(Common.QueryState protoState) { - StateType type = StateType.fromProto(protoState.getType()); - String sql = protoState.getHasSql() ? protoState.getSql() : null; - MetaDataOperation op = protoState.getHasOp() - ? MetaDataOperation.fromProto(protoState.getOp()) : null; - Object[] opArgs = null; - if (protoState.getHasArgs()) { - opArgs = new Object[protoState.getArgsCount()]; - int i = 0; - for (Common.MetaDataOperationArgument arg : protoState.getArgsList()) { - switch (arg.getType()) { - case STRING: - opArgs[i] = arg.getStringValue(); - break; - case BOOL: - opArgs[i] = arg.getBoolValue(); - break; - case INT: - opArgs[i] = arg.getIntValue(); - break; - case REPEATED_STRING: - opArgs[i] = arg.getStringArrayValuesList().toArray( - new String[arg.getStringArrayValuesCount()]); - break; - case REPEATED_INT: - int[] arr = new int[arg.getIntArrayValuesCount()]; - int offset = 0; - for (Integer val : arg.getIntArrayValuesList()) { - arr[offset] = val; - offset++; - } - opArgs[i] = arr; - break; - case NULL: - opArgs[i] = null; - break; - default: - throw new RuntimeException("Could not interpret " + arg.getType()); - } - - i++; - } - } - - return new QueryState(type, sql, op, opArgs); - } - - @Override public int hashCode() { - return Objects.hash(metaDataOperation, Arrays.hashCode(operationArgs), sql); - } - - @Override public boolean equals(Object o) { - return o == this - || o instanceof QueryState - && metaDataOperation == ((QueryState) o).metaDataOperation - && Arrays.deepEquals(operationArgs, ((QueryState) o).operationArgs) - && Objects.equals(sql, ((QueryState) o).sql); - } -} - -// End QueryState.java