http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/QueryState.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/QueryState.java 
b/avatica/src/main/java/org/apache/calcite/avatica/QueryState.java
deleted file mode 100644
index 4ca9ce1..0000000
--- a/avatica/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

http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/SqlType.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/SqlType.java 
b/avatica/src/main/java/org/apache/calcite/avatica/SqlType.java
deleted file mode 100644
index e34bee6..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/SqlType.java
+++ /dev/null
@@ -1,559 +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.util.ByteString;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.URL;
-import java.sql.Array;
-import java.sql.Blob;
-import java.sql.Clob;
-import java.sql.NClob;
-import java.sql.PreparedStatement;
-import java.sql.Ref;
-import java.sql.RowId;
-import java.sql.Struct;
-import java.sql.Time;
-import java.sql.Timestamp;
-import java.sql.Types;
-import java.util.AbstractMap;
-import java.util.ArrayList;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/** Extends the information in {@link java.sql.Types}.
- *
- * <p>The information in the following conversions tables
- * (from the JDBC 4.1 specification) is held in members of this class.
- *
- * <p>Table B-1: JDBC Types Mapped to Java Types
- *
- * <pre>
- * JDBC Type     Java Type
- * ============= =========================
- * CHAR          String
- * VARCHAR       String
- * LONGVARCHAR   String
- * NUMERIC       java.math.BigDecimal
- * DECIMAL       java.math.BigDecimal
- * BIT           boolean
- * BOOLEAN       boolean
- * TINYINT       byte
- * SMALLINT      short
- * INTEGER       int
- * BIGINT        long
- * REAL          float
- * FLOAT         double
- * DOUBLE        double
- * BINARY        byte[]
- * VARBINARY     byte[]
- * LONGVARBINARY byte[]
- * DATE          java.sql.Date
- * TIME          java.sql.Time
- * TIMESTAMP     java.sql.Timestamp
- * CLOB          java.sql.Clob
- * BLOB          java.sql.Blob
- * ARRAY         java.sql.Array
- * DISTINCT      mapping of underlying type
- * STRUCT        java.sql.Struct
- * REF           java.sql.Ref
- * DATALINK      java.net.URL
- * JAVA_OBJECT   underlying Java class
- * ROWID         java.sql.RowId
- * NCHAR         String
- * NVARCHAR      String
- * LONGNVARCHAR  String
- * NCLOB         java.sql.NClob
- * SQLXML        java.sql.SQLXML
- * </pre>
- *
- * <p>Table B-2: Standard Mapping from Java Types to JDBC Types
- *
- * <pre>
- * Java Type            JDBC Type
- * ==================== ==============================================
- * String               CHAR, VARCHAR, LONGVARCHAR, NCHAR, NVARCHAR or
- *                      LONGNVARCHAR
- * java.math.BigDecimal NUMERIC
- * boolean              BIT or BOOLEAN
- * byte                 TINYINT
- * short                SMALLINT
- * int                  INTEGER
- * long                 BIGINT
- * float                REAL
- * double               DOUBLE
- * byte[]               BINARY, VARBINARY, or LONGVARBINARY
- * java.sql.Date        DATE
- * java.sql.Time        TIME
- * java.sql.Timestamp   TIMESTAMP
- * java.sql.Clob        CLOB
- * java.sql.Blob        BLOB
- * java.sql.Array       ARRAY
- * java.sql.Struct      STRUCT
- * java.sql.Ref         REF
- * java.net.URL         DATALINK
- * Java class           JAVA_OBJECT
- * java.sql.RowId       ROWID
- * java.sql.NClob       NCLOB
- * java.sql.SQLXML      SQLXML
- * </pre>
- *
- * <p>TABLE B-3: Mapping from JDBC Types to Java Object Types
- *
- * <pre>
- * JDBC Type     Java Object Type
- * ============= ======================
- * CHAR          String
- * VARCHAR       String
- * LONGVARCHAR   String
- * NUMERIC       java.math.BigDecimal
- * DECIMAL       java.math.BigDecimal
- * BIT           Boolean
- * BOOLEAN       Boolean
- * TINYINT       Integer
- * SMALLINT      Integer
- * INTEGER       Integer
- * BIGINT        Long
- * REAL          Float
- * FLOAT         Double
- * DOUBLE        Double
- * BINARY        byte[]
- * VARBINARY     byte[]
- * LONGVARBINARY byte[]
- * DATE          java.sql.Date
- * TIME          java.sql.Time
- * TIMESTAMP     java.sql.Timestamp
- * DISTINCT      Object type of underlying type
- * CLOB          java.sql.Clob
- * BLOB          java.sql.Blob
- * ARRAY         java.sql.Array
- * STRUCT        java.sql.Struct or java.sql.SQLData
- * REF           java.sql.Ref
- * DATALINK      java.net.URL
- * JAVA_OBJECT   underlying Java class
- * ROWID         java.sql.RowId
- * NCHAR         String
- * NVARCHAR      String
- * LONGNVARCHAR  String
- * NCLOB         java.sql.NClob
- * SQLXML        java.sql.SQLXML
- * </pre>
- *
- * <p>TABLE B-4: Mapping from Java Object Types to JDBC Types
- *
- * <pre>
- * Java Object Type     JDBC Type
- * ==================== ===========================================
- * String               CHAR, VARCHAR, LONGVARCHAR, NCHAR, NVARCHAR
- *                      or LONGNVARCHAR
- * java.math.BigDecimal NUMERIC
- * Boolean              BIT or BOOLEAN
- * Byte                 TINYINT
- * Short                SMALLINT
- * Integer              INTEGER
- * Long                 BIGINT
- * Float                REAL
- * Double               DOUBLE
- * byte[]               BINARY, VARBINARY, or LONGVARBINARY
- * java.math.BigInteger BIGINT
- * java.sql.Date        DATE
- * java.sql.Time        TIME
- * java.sql.Timestamp   TIMESTAMP
- * java.sql.Clob        CLOB
- * java.sql.Blob        BLOB
- * java.sql.Array       ARRAY
- * java.sql.Struct      STRUCT
- * java.sql.Ref         REF
- * java.net.URL         DATALINK
- * Java class           JAVA_OBJECT
- * java.sql.RowId       ROWID
- * java.sql.NClob       NCLOB
- * java.sql.SQLXML      SQLXML
- * java.util.Calendar   TIMESTAMP
- * java.util.Date       TIMESTAMP
- * </pre>
- *
- * <p><a name="B5">TABLE B-5</a>: Conversions performed by {@code setObject} 
and
- * {@code setNull} between Java object types and target JDBC types
- *
- * <!--
- * CHECKSTYLE: OFF
- * -->
- * <pre>
- *                      T S I B R F D D N B B C V L B V L D T T A B C S R D J 
R N N L N S
- *                      I M N I E L O E U I O H A O I A O A I I R L L T E A A 
O C V O C Q
- *                      N A T G A O U C M T O A R N N R N T M M R O O R F T V 
W H A N L L
- *                      Y L E I L A B I E   L R C G A B G E E E A B B U   A A 
I A R G O X
- *                      I L G N   T L M R   E   H V R I V E   S Y     C   L _ 
D R C N B M
- *                      N I E T     E A I   A   A A Y N A     T       T   I O  
   H V   L
- *                      T N R         L C   N   R R   A R     A           N B  
   A A
- *                        T                       C   R B     M           K J  
   R R
- *                                                H   Y I     P                
     C
- * Java type                                  
- * ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = 
= = = = = =
- * String               x x x x x x x x x x x x x x x x x x x x . . . . . . . 
. x x x . .
- * java.math.BigDecimal x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Boolean              x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Byte                 x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Short                x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Integer              x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Long                 x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Float                x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * Double               x x x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * byte[]               . . . . . . . . . . . . . . x x x . . . . . . . . . . 
. . . . . .
- * java.math.BigInteger . . . x . . . . . . . x x x . . . . . . . . . . . . . 
. . . . . .
- * java.sql.Date        . . . . . . . . . . . x x x . . . x . x . . . . . . . 
. . . . . .
- * java.sql.Time        . . . . . . . . . . . x x x . . . . x x . . . . . . . 
. . . . . .
- * java.sql.Timestamp   . . . . . . . . . . . x x x . . . x x x . . . . . . . 
. . . . . .
- * java.sql.Array       . . . . . . . . . . . . . . . . . . . . x . . . . . . 
. . . . . .
- * java.sql.Blob        . . . . . . . . . . . . . . . . . . . . . x . . . . . 
. . . . . .
- * java.sql.Clob        . . . . . . . . . . . . . . . . . . . . . . x . . . . 
. . . . . .
- * java.sql.Struct      . . . . . . . . . . . . . . . . . . . . . . . x . . . 
. . . . . .
- * java.sql.Ref         . . . . . . . . . . . . . . . . . . . . . . . . x . . 
. . . . . .
- * java.net.URL         . . . . . . . . . . . . . . . . . . . . . . . . . x . 
. . . . . .
- * Java class           . . . . . . . . . . . . . . . . . . . . . . . . . . x 
. . . . . .
- * java.sql.Rowid       . . . . . . . . . . . . . . . . . . . . . . . . . . . 
x . . . . .
- * java.sql.NClob       . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . x .
- * java.sql.SQLXML      . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . x
- * java.util.Calendar   . . . . . . . . . . . x x x . . . x x x . . . . . . . 
. . . . . .
- * java.util.Date       . . . . . . . . . . . x x x . . . x x x . . . . . . . 
. . . . . .
- * </pre>
- * <!--
- * CHECKSTYLE: ON
- * -->
- *
- * <p><a name="B6">TABLE B-6</a>: Use of {@code ResultSet} getter methods to
- * retrieve JDBC data types
- *
- * <!--
- * CHECKSTYLE: OFF
- * -->
- * <pre>
- *                      T S I B R F D D N B B C V L B V L D T T C B A R D S J 
R N N L N S
- *                      I M N I E L O E U I O H A O I A O A I I L L R E A T A 
O C V O C Q
- *                      N A T G A O U C M T O A R N N R N T M M O O R F T R V 
W H A N L L
- *                      Y L E I L A B I E   L R C G A B G E E E B B A   A U A 
I A R G O X
- *                      I L G N   T L M R   E   H V R I V E   S     Y   L C _ 
D R C N B M
- *                      N I E T     E A I   A   A A Y N A     T         I T O  
   H V   L
- *                      T N R         L C   N   R R   A R     A         N   B  
   A A
- *                        T                       C   R B     M         K   J  
   R R
- *                                                H   Y I     P                
     C
- * Java type                                                                
- * ==================== = = = = = = = = = = = = = = = = = = = = = = = = = = = 
= = = = = =
- * getByte              X x x x x x x x x x x x x . . . . . . . . . . . . . . 
x . . . . .
- * getShort             x X x x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * getInt               x x X x x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * getLong              x x x X x x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * getFloat             x x x x X x x x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * getDouble            x x x x x X X x x x x x x . . . . . . . . . . . . . . 
. . . . . .
- * getBigDecimal        x x x x x x x X X x x x x . . . . . . . . . . . . . . 
. . . . . .
- * getBoolean           x x x x x x x x x X x x x . . . . . . . . . . . . . . 
. . . . . .
- * getString            x x x x x x x x x x x X X x x x x x x x . . . . x . . 
. x x x . .
- * getNString           x x x x x x x x x x x x x x x x x x x x . . . . x . . 
. X X x . .
- * getBytes             . . . . . . . . . . . . . . X X x . . . . . . . . . . 
. . . . . .
- * getDate              . . . . . . . . . . . x x x . . . X . x . . . . . . . 
. . . . . .
- * getTime              . . . . . . . . . . . x x x . . . . X x . . . . . . . 
. . . . . .
- * getTimestamp         . . . . . . . . . . . x x x . . . x x X . . . . . . . 
. . . . x .
- * getAsciiStream       . . . . . . . . . . . x x X x x x . . . x . . . . . . 
. . . . . x
- * getBinaryStream      . . . . . . . . . . . . . . x x X . . . . x . . . . . 
. . . . x x
- * getCharacterStream   . . . . . . . . . . . x x X x x x . . . x . . . . . . 
. x x x x x
- * getNCharacterStream  . . . . . . . . . . . x x x x x x . . . x . . . . . . 
. x x X x x
- * getClob              . . . . . . . . . . . . . . . . . . . . X . . . . . . 
. . . . x .
- * getNClob             . . . . . . . . . . . . . . . . . . . . x . . . . . . 
. . . . X .
- * getBlob              . . . . . . . . . . . . . . . . . . . . . X . . . . . 
. . . . . .
- * getArray             . . . . . . . . . . . . . . . . . . . . . . X . . . . 
. . . . . .
- * getRef               . . . . . . . . . . . . . . . . . . . . . . . X . . . 
. . . . . .
- * getURL               . . . . . . . . . . . . . . . . . . . . . . . . X . . 
. . . . . .
- * getObject            x x x x x x x x x x x x x x x x x x x x x x x x x X X 
x x x x x x
- * getRowId             . . . . . . . . . . . . . . . . . . . . . . . . . . . 
X . . . . .
- * getSQLXML            . . . . . . . . . . . . . . . . . . . . . . . . . . . 
. . . . . X
- * </pre>
- * <!--
- * CHECKSTYLE: ON
- * -->
- */
-public enum SqlType {
-  BIT(Types.BIT, boolean.class),
-  BOOLEAN(Types.BOOLEAN, boolean.class),
-  TINYINT(Types.TINYINT, byte.class),
-  SMALLINT(Types.SMALLINT, short.class),
-  INTEGER(Types.INTEGER, int.class),
-  BIGINT(Types.BIGINT, long.class),
-  NUMERIC(Types.NUMERIC, BigDecimal.class),
-  DECIMAL(Types.DECIMAL, BigDecimal.class),
-  FLOAT(Types.FLOAT, double.class),
-  REAL(Types.REAL, float.class),
-  DOUBLE(Types.DOUBLE, double.class),
-  DATE(Types.DATE, java.sql.Date.class, int.class),
-  TIME(Types.TIME, Time.class, int.class),
-  TIMESTAMP(Types.TIMESTAMP, Timestamp.class, long.class),
-  INTERVAL_YEAR_MONTH(Types.OTHER, Boolean.class),
-  INTERVAL_DAY_TIME(Types.OTHER, Boolean.class),
-  CHAR(Types.CHAR, String.class),
-  VARCHAR(Types.VARCHAR, String.class),
-  LONGVARCHAR(Types.LONGVARCHAR, String.class),
-  BINARY(Types.BINARY, byte[].class, ByteString.class, String.class),
-  VARBINARY(Types.VARBINARY, byte[].class, ByteString.class, String.class),
-  LONGVARBINARY(Types.LONGVARBINARY, byte[].class, ByteString.class,
-      String.class),
-  NULL(Types.NULL, Void.class),
-  ANY(Types.JAVA_OBJECT, Object.class),
-  SYMBOL(Types.OTHER, Object.class),
-  MULTISET(Types.ARRAY, List.class),
-  ARRAY(Types.ARRAY, Array.class),
-  BLOB(Types.BLOB, Blob.class),
-  CLOB(Types.CLOB, Clob.class),
-  SQLXML(Types.SQLXML, java.sql.SQLXML.class),
-  MAP(Types.OTHER, Map.class),
-  DISTINCT(Types.DISTINCT, Object.class),
-  STRUCT(Types.STRUCT, Struct.class),
-  REF(Types.REF, Ref.class),
-  DATALINK(Types.DATALINK, URL.class),
-  JAVA_OBJECT(Types.JAVA_OBJECT, Object.class),
-  ROWID(Types.ROWID, RowId.class),
-  NCHAR(Types.NCHAR, String.class),
-  NVARCHAR(Types.NVARCHAR, String.class),
-  LONGNVARCHAR(Types.LONGNVARCHAR, String.class),
-  NCLOB(Types.NCLOB, NClob.class),
-  ROW(Types.STRUCT, Object.class),
-  OTHER(Types.OTHER, Object.class),
-  CURSOR(2012, Object.class),
-  COLUMN_LIST(Types.OTHER + 2, Object.class);
-
-  /** Type id as appears in {@link java.sql.Types},
-   * e.g. {@link java.sql.Types#INTEGER}. */
-  public final int id;
-
-  /** Default Java type for this SQL type, as described in table B-1. */
-  public final Class clazz;
-
-  /** Class used internally in Calcite to represent instances of this type. */
-  public final Class internal;
-
-  /** Class used to serialize values of this type as JSON. */
-  public final Class serial;
-
-  private static final Map<Integer, SqlType> BY_ID = new HashMap<>();
-  static {
-    for (SqlType sqlType : values()) {
-      BY_ID.put(sqlType.id, sqlType);
-    }
-  }
-
-  SqlType(int id, Class clazz, Class internal, Class serial) {
-    this.id = id;
-    this.clazz = clazz;
-    this.internal = internal;
-    this.serial = serial;
-  }
-
-  SqlType(int id, Class clazz, Class internal) {
-    this(id, clazz, internal, internal);
-  }
-
-  SqlType(int id, Class clazz) {
-    this(id, clazz, clazz, clazz);
-  }
-
-  public static SqlType valueOf(int type) {
-    final SqlType sqlType = BY_ID.get(type);
-    if (sqlType == null) {
-      throw new IllegalArgumentException("Unknown SQL type " + type);
-    }
-    return sqlType;
-  }
-
-  /** Returns the boxed type. */
-  public Class boxedClass() {
-    return AvaticaUtils.box(clazz);
-  }
-
-  /** Returns the entries in JDBC table B-5. */
-  public static Iterable<Map.Entry<Class, SqlType>> getSetConversions() {
-    final ArrayList<Map.Entry<Class, SqlType>> list = new ArrayList<>();
-    for (Map.Entry<Class, EnumSet<SqlType>> entry : SET_LIST.entrySet()) {
-      for (SqlType sqlType : entry.getValue()) {
-        list.add(new AbstractMap.SimpleEntry<>(entry.getKey(), sqlType));
-      }
-    }
-    return list;
-  }
-
-  public static final Map<Class, EnumSet<SqlType>> SET_LIST;
-  public static final Map<Method, EnumSet<SqlType>> GET_LIST;
-
-  static {
-    SET_LIST = new HashMap<>();
-    GET_LIST = new HashMap<>();
-
-    EnumSet<SqlType> numericTypes = EnumSet.of(TINYINT, SMALLINT, INTEGER,
-        BIGINT, REAL, FLOAT, DOUBLE, DECIMAL, NUMERIC, BIT, BOOLEAN);
-    Class[] numericClasses = {
-      BigDecimal.class, Boolean.class, Byte.class, Short.class, Integer.class,
-      Long.class, Float.class, Double.class
-    };
-    EnumSet<SqlType> charTypes = EnumSet.of(CHAR, VARCHAR, LONGVARCHAR);
-    EnumSet<SqlType> ncharTypes = EnumSet.of(NCHAR, NVARCHAR, LONGNVARCHAR);
-    EnumSet<SqlType> binaryTypes = EnumSet.of(BINARY, VARBINARY, 
LONGVARBINARY);
-    EnumSet<SqlType> dateTimeTypes = EnumSet.of(DATE, TIME, TIMESTAMP);
-    final EnumSet<SqlType> numericCharTypes = concat(numericTypes, charTypes);
-    SET_LIST.put(String.class,
-        concat(numericCharTypes, binaryTypes, dateTimeTypes, ncharTypes));
-    for (Class clazz : numericClasses) {
-      SET_LIST.put(clazz, numericCharTypes);
-    }
-    SET_LIST.put(byte[].class, binaryTypes);
-    SET_LIST.put(BigInteger.class,
-        EnumSet.of(BIGINT, CHAR, VARCHAR, LONGVARCHAR));
-    SET_LIST.put(java.sql.Date.class,
-        concat(charTypes, EnumSet.of(DATE, TIMESTAMP)));
-    SET_LIST.put(Time.class,
-        concat(charTypes, EnumSet.of(TIME, TIMESTAMP)));
-    SET_LIST.put(Timestamp.class,
-        concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
-    SET_LIST.put(Array.class, EnumSet.of(ARRAY));
-    SET_LIST.put(Blob.class, EnumSet.of(BLOB));
-    SET_LIST.put(Clob.class, EnumSet.of(CLOB));
-    SET_LIST.put(Struct.class, EnumSet.of(STRUCT));
-    SET_LIST.put(Ref.class, EnumSet.of(REF));
-    SET_LIST.put(URL.class, EnumSet.of(DATALINK));
-    SET_LIST.put(Class.class, EnumSet.of(JAVA_OBJECT));
-    SET_LIST.put(RowId.class, EnumSet.of(ROWID));
-    SET_LIST.put(NClob.class, EnumSet.of(NCLOB));
-    SET_LIST.put(java.sql.SQLXML.class, EnumSet.of(SQLXML));
-    SET_LIST.put(Calendar.class,
-        concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
-    SET_LIST.put(java.util.Date.class,
-        concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
-
-    EnumSet<Method> numericMethods =
-        EnumSet.of(Method.GET_BYTE, Method.GET_SHORT, Method.GET_INT,
-            Method.GET_LONG, Method.GET_FLOAT, Method.GET_DOUBLE,
-            Method.GET_BIG_DECIMAL, Method.GET_BOOLEAN);
-    for (Method method : numericMethods) {
-      GET_LIST.put(method, numericCharTypes);
-    }
-    GET_LIST.put(Method.GET_BYTE, EnumSet.of(ROWID));
-    for (Method method : EnumSet.of(Method.GET_STRING, Method.GET_N_STRING)) {
-      GET_LIST.put(method,
-          concat(numericCharTypes, binaryTypes, dateTimeTypes,
-              EnumSet.of(DATALINK), ncharTypes));
-    }
-    GET_LIST.put(Method.GET_BYTES, binaryTypes);
-    GET_LIST.put(Method.GET_DATE,
-        concat(charTypes, EnumSet.of(DATE, TIMESTAMP)));
-    GET_LIST.put(Method.GET_TIME,
-        concat(charTypes, EnumSet.of(TIME, TIMESTAMP)));
-    GET_LIST.put(Method.GET_TIMESTAMP,
-        concat(charTypes, EnumSet.of(DATE, TIME, TIMESTAMP)));
-    GET_LIST.put(Method.GET_ASCII_STREAM,
-        concat(charTypes, binaryTypes, EnumSet.of(CLOB, NCLOB)));
-    GET_LIST.put(Method.GET_BINARY_STREAM,
-        concat(binaryTypes, EnumSet.of(BLOB, SQLXML)));
-    GET_LIST.put(Method.GET_CHARACTER_STREAM,
-        concat(charTypes, binaryTypes, ncharTypes,
-            EnumSet.of(CLOB, NCLOB, SQLXML)));
-    GET_LIST.put(Method.GET_N_CHARACTER_STREAM,
-        concat(
-            charTypes, binaryTypes, ncharTypes, EnumSet.of(CLOB, NCLOB, 
SQLXML)));
-    GET_LIST.put(Method.GET_CLOB, EnumSet.of(CLOB, NCLOB));
-    GET_LIST.put(Method.GET_N_CLOB, EnumSet.of(CLOB, NCLOB));
-    GET_LIST.put(Method.GET_BLOB, EnumSet.of(BLOB));
-    GET_LIST.put(Method.GET_ARRAY, EnumSet.of(ARRAY));
-    GET_LIST.put(Method.GET_REF, EnumSet.of(REF));
-    GET_LIST.put(Method.GET_BLOB, EnumSet.of(BLOB));
-    GET_LIST.put(Method.GET_URL, EnumSet.of(DATALINK));
-    GET_LIST.put(Method.GET_OBJECT, EnumSet.allOf(SqlType.class));
-    GET_LIST.put(Method.GET_ROW_ID, EnumSet.of(ROWID));
-    GET_LIST.put(Method.GET_SQLXML, EnumSet.of(SQLXML));
-  }
-
-  @SafeVarargs
-  private static <E extends Enum<E>> EnumSet<E> concat(Collection<E>... ess) {
-    final List<E> list = new ArrayList<>();
-    for (Collection<E> es : ess) {
-      list.addAll(es);
-    }
-    return EnumSet.copyOf(list);
-  }
-
-  /** Returns whether {@link java.sql.PreparedStatement#setObject} and
-   * {@link PreparedStatement#setNull} can assign a value of a particular class
-   * to a column of a particular SQL type.
-   *
-   * <p>The JDBC standard describes the mapping in table <a href="#B5">B-5</a>.
-   */
-  public static boolean canSet(Class aClass, SqlType sqlType) {
-    final EnumSet<SqlType> sqlTypes = SET_LIST.get(aClass);
-    return sqlTypes != null && sqlTypes.contains(sqlType);
-  }
-
-  /** Returns whether {@link java.sql.ResultSet#getInt(int)} and similar 
methods
-   * can convert a value to a particular SQL type.
-   *
-   * <p>The JDBC standard describes the mapping in table <a href="#B6">B-6</a>.
-   */
-  public static boolean canGet(Method method, SqlType sqlType) {
-    final EnumSet<SqlType> sqlTypes = GET_LIST.get(method);
-    return sqlTypes != null && sqlTypes.contains(sqlType);
-  }
-
-  /** Getter methods in {@link java.sql.ResultSet}. */
-  public enum Method {
-    GET_BYTE("getByte"),
-    GET_SHORT("getShort"),
-    GET_INT("getInt"),
-    GET_LONG("getLong"),
-    GET_FLOAT("getFloat"),
-    GET_DOUBLE("getDouble"),
-    GET_BIG_DECIMAL("getBigDecimal"),
-    GET_BOOLEAN("getBoolean"),
-    GET_STRING("getString"),
-    GET_N_STRING("getNString"),
-    GET_BYTES("getBytes"),
-    GET_DATE("getDate"),
-    GET_TIME("getTime"),
-    GET_TIMESTAMP("getTimestamp"),
-    GET_ASCII_STREAM("getAsciiStream"),
-    GET_BINARY_STREAM("getBinaryStream"),
-    GET_CHARACTER_STREAM("getCharacterStream"),
-    GET_N_CHARACTER_STREAM("getNCharacterStream"),
-    GET_CLOB("getClob"),
-    GET_N_CLOB("getNClob"),
-    GET_BLOB("getBlob"),
-    GET_ARRAY("getArray"),
-    GET_REF("getRef"),
-    GET_URL("getURL"),
-    GET_OBJECT("getObject"),
-    GET_ROW_ID("getRowId"),
-    GET_SQLXML("getSQLXML");
-
-    public final String methodName;
-
-    Method(String methodName) {
-      this.methodName = methodName;
-    }
-  }
-}
-
-// End SqlType.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/UnregisteredDriver.java
----------------------------------------------------------------------
diff --git 
a/avatica/src/main/java/org/apache/calcite/avatica/UnregisteredDriver.java 
b/avatica/src/main/java/org/apache/calcite/avatica/UnregisteredDriver.java
deleted file mode 100644
index b1fe787..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/UnregisteredDriver.java
+++ /dev/null
@@ -1,255 +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 java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.DriverPropertyInfo;
-import java.sql.SQLException;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Implementation of JDBC driver that does not register itself.
- *
- * <p>You can easily create a "vanity driver" that recognizes its own
- * URL prefix as a sub-class of this class. Per the JDBC specification it
- * must register itself when the class is loaded.</p>
- *
- * <p>Derived classes must implement {@link #createDriverVersion()} and
- * {@link #getConnectStringPrefix()}, and may override
- * {@link #createFactory()}.</p>
- *
- * <p>The provider must implement:</p>
- * <ul>
- *   <li>{@link Meta#prepare(Meta.ConnectionHandle, String, long)}
- *   <li>{@link 
Meta#createIterable(org.apache.calcite.avatica.Meta.StatementHandle, 
org.apache.calcite.avatica.QueryState, 
org.apache.calcite.avatica.Meta.Signature, java.util.List, Meta.Frame)}
- * </ul>
- */
-public abstract class UnregisteredDriver implements java.sql.Driver {
-  final DriverVersion version;
-  protected final AvaticaFactory factory;
-  public final Handler handler;
-
-  protected UnregisteredDriver() {
-    this.factory = createFactory();
-    this.version = createDriverVersion();
-    this.handler = createHandler();
-  }
-
-  /**
-   * Creates a factory for JDBC objects (connection, statement).
-   * Called from the driver constructor.
-   *
-   * <p>The default implementation calls {@link JdbcVersion#current},
-   * then {@link #getFactoryClassName} with that version,
-   * then passes that class name to {@link #instantiateFactory(String)}.
-   * This approach is recommended it does not include in the code references
-   * to classes that may not be instantiable in all JDK versions.
-   * But drivers are free to do it their own way.</p>
-   *
-   * @return JDBC object factory
-   */
-  protected AvaticaFactory createFactory() {
-    return instantiateFactory(getFactoryClassName(JdbcVersion.current()));
-  }
-
-  /** Creates a Handler. */
-  protected Handler createHandler() {
-    return new HandlerImpl();
-  }
-
-  /**
-   * Returns the name of a class to be factory for JDBC objects
-   * (connection, statement) appropriate for the current JDBC version.
-   */
-  protected String getFactoryClassName(JdbcVersion jdbcVersion) {
-    switch (jdbcVersion) {
-    case JDBC_30:
-    case JDBC_40:
-      throw new IllegalArgumentException("JDBC version not supported: "
-          + jdbcVersion);
-    case JDBC_41:
-    default:
-      return "org.apache.calcite.avatica.AvaticaJdbc41Factory";
-    }
-  }
-
-  /**
-   * Creates an object describing the name and version of this driver.
-   * Called from the driver constructor.
-   */
-  protected abstract DriverVersion createDriverVersion();
-
-  /**
-   * Returns the connection properties supported by this driver.
-   */
-  protected Collection<ConnectionProperty> getConnectionProperties() {
-    return Arrays.<ConnectionProperty>asList(
-        BuiltInConnectionProperty.values());
-  }
-
-  /** Helper method for creating factories. */
-  protected static AvaticaFactory instantiateFactory(String factoryClassName) {
-    try {
-      final Class<?> clazz = Class.forName(factoryClassName);
-      return (AvaticaFactory) clazz.newInstance();
-    } catch (ClassNotFoundException e) {
-      throw handle("Error loading factory " + factoryClassName, e);
-    } catch (IllegalAccessException e) {
-      throw handle("Error loading factory " + factoryClassName, e);
-    } catch (InstantiationException e) {
-      throw handle("Error loading factory " + factoryClassName, e);
-    } catch (Throwable e) {
-      // It is not usually good to catch Throwable. But class loading can fail
-      // with serious errors such as java.lang.NoClassDefFoundError
-      throw handle("Error loading factory " + factoryClassName, e);
-    }
-  }
-
-  private static RuntimeException handle(String msg, Throwable e) {
-    Logger.getLogger("").log(Level.SEVERE, msg, e);
-    throw new RuntimeException(msg, e);
-  }
-
-  public Connection connect(String url, Properties info) throws SQLException {
-    if (!acceptsURL(url)) {
-      return null;
-    }
-    final String prefix = getConnectStringPrefix();
-    assert url.startsWith(prefix);
-    final String urlSuffix = url.substring(prefix.length());
-    final Properties info2 = ConnectStringParser.parse(urlSuffix, info);
-    final AvaticaConnection connection =
-        factory.newConnection(this, factory, url, info2);
-    handler.onConnectionInit(connection);
-    return connection;
-  }
-
-  public boolean acceptsURL(String url) throws SQLException {
-    return url.startsWith(getConnectStringPrefix());
-  }
-
-  /** Returns the prefix of the connect string that this driver will recognize
-   * as its own. For example, "jdbc:calcite:". */
-  protected abstract String getConnectStringPrefix();
-
-  public DriverPropertyInfo[] getPropertyInfo(
-      String url, Properties info) throws SQLException {
-    List<DriverPropertyInfo> list = new ArrayList<DriverPropertyInfo>();
-
-    // First, add the contents of info
-    for (Map.Entry<Object, Object> entry : info.entrySet()) {
-      list.add(
-          new DriverPropertyInfo(
-              (String) entry.getKey(),
-              (String) entry.getValue()));
-    }
-    // Next, add property definitions not mentioned in info
-    for (ConnectionProperty p : getConnectionProperties()) {
-      if (info.containsKey(p.name())) {
-        continue;
-      }
-      list.add(new DriverPropertyInfo(p.name(), null));
-    }
-    return list.toArray(new DriverPropertyInfo[list.size()]);
-  }
-
-  // JDBC 4.1 support (JDK 1.7 and higher)
-  public Logger getParentLogger() {
-    return Logger.getLogger("");
-  }
-
-  /**
-   * Returns the driver version object. Not in the JDBC API.
-   *
-   * @return Driver version
-   */
-  public DriverVersion getDriverVersion() {
-    return version;
-  }
-
-  public final int getMajorVersion() {
-    return version.majorVersion;
-  }
-
-  public final int getMinorVersion() {
-    return version.minorVersion;
-  }
-
-  public boolean jdbcCompliant() {
-    return version.jdbcCompliant;
-  }
-
-  /**
-   * Registers this driver with the driver manager.
-   */
-  protected void register() {
-    try {
-      DriverManager.registerDriver(this);
-    } catch (SQLException e) {
-      System.out.println(
-          "Error occurred while registering JDBC driver "
-          + this + ": " + e.toString());
-    }
-  }
-
-  /** Creates a service handler that will give connections from this Driver
-   * their behavior. */
-  public abstract Meta createMeta(AvaticaConnection connection);
-
-  /** JDBC version. */
-  protected enum JdbcVersion {
-    /** Unknown JDBC version. */
-    JDBC_UNKNOWN,
-    /** JDBC version 3.0. Generally associated with JDK 1.5. */
-    JDBC_30,
-    /** JDBC version 4.0. Generally associated with JDK 1.6. */
-    JDBC_40,
-    /** JDBC version 4.1. Generally associated with JDK 1.7. */
-    JDBC_41;
-
-    /** Deduces the current JDBC version. */
-    public static JdbcVersion current() {
-      try {
-        // If java.sql.PseudoColumnUsage is present, we are running JDBC
-        // 4.1 or later.
-        Class.forName("java.sql.PseudoColumnUsage");
-        return JDBC_41;
-      } catch (ClassNotFoundException e) {
-        // java.sql.PseudoColumnUsage is not present. This means we are
-        // running JDBC 4.0 or earlier.
-        try {
-          Class.forName("java.sql.Wrapper");
-          return JDBC_40;
-        } catch (ClassNotFoundException e2) {
-          // java.sql.Wrapper is not present. This means we are
-          // running JDBC 3.0 or earlier (probably JDK 1.5).
-          return JDBC_30;
-        }
-      }
-    }
-  }
-}
-
-// End UnregisteredDriver.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/5cee486f/avatica/src/main/java/org/apache/calcite/avatica/package-info.java
----------------------------------------------------------------------
diff --git a/avatica/src/main/java/org/apache/calcite/avatica/package-info.java 
b/avatica/src/main/java/org/apache/calcite/avatica/package-info.java
deleted file mode 100644
index 89a9fbb..0000000
--- a/avatica/src/main/java/org/apache/calcite/avatica/package-info.java
+++ /dev/null
@@ -1,26 +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.
- */
-
-/**
- * Avatica JDBC framework.
- */
-@PackageMarker
-package org.apache.calcite.avatica;
-
-import org.apache.calcite.avatica.util.PackageMarker;
-
-// End package-info.java

Reply via email to