You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by el...@apache.org on 2016/03/03 18:30:51 UTC

[7/7] calcite git commit: [CALCITE-1118] Add a noop-JDBC driver for testing Avatica server

[CALCITE-1118] Add a noop-JDBC driver for testing Avatica server


Project: http://git-wip-us.apache.org/repos/asf/calcite/repo
Commit: http://git-wip-us.apache.org/repos/asf/calcite/commit/d27e642c
Tree: http://git-wip-us.apache.org/repos/asf/calcite/tree/d27e642c
Diff: http://git-wip-us.apache.org/repos/asf/calcite/diff/d27e642c

Branch: refs/heads/master
Commit: d27e642c497d406474fd8b543d74836152e8696c
Parents: aecefef
Author: Josh Elser <el...@apache.org>
Authored: Wed Mar 2 17:43:50 2016 -0500
Committer: Josh Elser <el...@apache.org>
Committed: Wed Mar 2 23:26:08 2016 -0500

----------------------------------------------------------------------
 avatica-noop/pom.xml                            | 110 +++
 .../avatica/noop/AvaticaNoopConnection.java     | 256 ++++++
 .../noop/AvaticaNoopDatabaseMetaData.java       | 770 +++++++++++++++++++
 .../calcite/avatica/noop/AvaticaNoopDriver.java |  74 ++
 .../noop/AvaticaNoopParameterMetaData.java      |  85 ++
 .../noop/AvaticaNoopPreparedStatement.java      | 344 +++++++++
 .../avatica/noop/AvaticaNoopResultSet.java      | 661 ++++++++++++++++
 .../noop/AvaticaNoopResultSetMetaData.java      | 133 ++++
 .../avatica/noop/AvaticaNoopStatement.java      | 191 +++++
 .../calcite/avatica/noop/PackageMarker.java     |  37 +
 .../calcite/avatica/noop/package-info.java      |  24 +
 .../resources/META-INF/services/java.sql.Driver |   1 +
 pom.xml                                         |   6 +
 13 files changed, 2692 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/pom.xml
----------------------------------------------------------------------
diff --git a/avatica-noop/pom.xml b/avatica-noop/pom.xml
new file mode 100644
index 0000000..3a05cdd
--- /dev/null
+++ b/avatica-noop/pom.xml
@@ -0,0 +1,110 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+  <parent>
+    <groupId>org.apache.calcite</groupId>
+    <artifactId>calcite</artifactId>
+    <version>1.7.0-SNAPSHOT</version>
+  </parent>
+
+  <artifactId>calcite-avatica-noop</artifactId>
+  <packaging>jar</packaging>
+  <name>Calcite Avatica Noop</name>
+  <description>A Noop JDBC driver.</description>
+
+  <properties>
+    <top.dir>${project.basedir}/..</top.dir>
+  </properties>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.eclipse.m2e</groupId>
+          <artifactId>lifecycle-mapping</artifactId>
+          <version>1.0.0</version>
+          <configuration>
+            <lifecycleMappingMetadata>
+              <pluginExecutions>
+                <pluginExecution>
+                  <pluginExecutionFilter>
+                    <groupId>org.apache.maven.plugins</groupId>
+                    <artifactId>maven-checkstyle-plugin</artifactId>
+                    <versionRange>[2.12.1,)</versionRange>
+                    <goals>
+                      <goal>check</goal>
+                    </goals>
+                  </pluginExecutionFilter>
+                  <action>
+                    <ignore />
+                  </action>
+                </pluginExecution>
+              </pluginExecutions>
+            </lifecycleMappingMetadata>
+          </configuration>
+        </plugin>
+      </plugins>
+    </pluginManagement>
+    <plugins>
+      <!-- Parent module has the same plugin and does the work of
+           generating -sources.jar for each project. But without the
+           plugin declared here, IDEs don't know the sources are
+           available. -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-source-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>attach-sources</id>
+            <phase>verify</phase>
+            <goals>
+              <goal>jar-no-fork</goal>
+              <goal>test-jar-no-fork</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+
+      <!-- Produce a tests jar so that avatica-server/pom.xml can reference for suite.
+           TODO: remove after moving over to annotation-based TestSuite definitions. -->
+      <plugin>
+        <groupId>org.apache.maven.plugins</groupId>
+        <artifactId>maven-jar-plugin</artifactId>
+        <executions>
+          <execution>
+            <goals>
+              <goal>test-jar</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+      <plugin>
+        <artifactId>maven-remote-resources-plugin</artifactId>
+        <executions>
+          <execution>
+            <id>non-root-resources</id>
+            <goals>
+              <goal>process</goal>
+            </goals>
+          </execution>
+        </executions>
+      </plugin>
+    </plugins>
+  </build>
+</project>

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopConnection.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopConnection.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopConnection.java
new file mode 100644
index 0000000..6870717
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopConnection.java
@@ -0,0 +1,256 @@
+/*
+ * 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.noop;
+
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.CallableStatement;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.NClob;
+import java.sql.PreparedStatement;
+import java.sql.SQLClientInfoException;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Savepoint;
+import java.sql.Statement;
+import java.sql.Struct;
+import java.util.Collections;
+import java.util.Map;
+import java.util.Properties;
+import java.util.concurrent.Executor;
+
+/**
+ * A {@link Connection} implementation which does nothing.
+ */
+public class AvaticaNoopConnection implements Connection {
+
+  private static final AvaticaNoopConnection INSTANCE = new AvaticaNoopConnection();
+
+  public static AvaticaNoopConnection getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopConnection() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("Unsupported");
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Statement createStatement() throws SQLException {
+    return AvaticaNoopStatement.getInstance();
+  }
+
+  @Override public PreparedStatement prepareStatement(String sql) throws SQLException {
+    return AvaticaNoopPreparedStatement.getInstance();
+  }
+
+  @Override public CallableStatement prepareCall(String sql) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String nativeSQL(String sql) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setAutoCommit(boolean autoCommit) throws SQLException {}
+
+  @Override public boolean getAutoCommit() throws SQLException {
+    return false;
+  }
+
+  @Override public void commit() throws SQLException {}
+
+  @Override public void rollback() throws SQLException {}
+
+  @Override public void close() throws SQLException {}
+
+  @Override public boolean isClosed() throws SQLException {
+    return true;
+  }
+
+  @Override public DatabaseMetaData getMetaData() throws SQLException {
+    return AvaticaNoopDatabaseMetaData.getInstance();
+  }
+
+  @Override public void setReadOnly(boolean readOnly) throws SQLException {}
+
+  @Override public boolean isReadOnly() throws SQLException {
+    return false;
+  }
+
+  @Override public void setCatalog(String catalog) throws SQLException {}
+
+  @Override public String getCatalog() throws SQLException {
+    return null;
+  }
+
+  @Override public void setTransactionIsolation(int level) throws SQLException {}
+
+  @Override public int getTransactionIsolation() throws SQLException {
+    return 0;
+  }
+
+  @Override public SQLWarning getWarnings() throws SQLException {
+    return null;
+  }
+
+  @Override public void clearWarnings() throws SQLException {}
+
+  @Override public Statement createStatement(int resultSetType, int resultSetConcurrency)
+      throws SQLException {
+    return AvaticaNoopStatement.getInstance();
+  }
+
+  @Override public PreparedStatement prepareStatement(String sql, int resultSetType,
+      int resultSetConcurrency) throws SQLException {
+    return AvaticaNoopPreparedStatement.getInstance();
+  }
+
+  @Override public CallableStatement prepareCall(String sql, int resultSetType,
+      int resultSetConcurrency) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Map<String, Class<?>> getTypeMap() throws SQLException {
+    return Collections.emptyMap();
+  }
+
+  @Override public void setTypeMap(Map<String, Class<?>> map) throws SQLException {}
+
+  @Override public void setHoldability(int holdability) throws SQLException {}
+
+  @Override public int getHoldability() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Savepoint setSavepoint() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Savepoint setSavepoint(String name) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void rollback(Savepoint savepoint) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void releaseSavepoint(Savepoint savepoint) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Statement createStatement(int resultSetType, int resultSetConcurrency,
+      int resultSetHoldability) throws SQLException {
+    return AvaticaNoopStatement.getInstance();
+  }
+
+  @Override public PreparedStatement prepareStatement(String sql, int resultSetType,
+      int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+    return AvaticaNoopPreparedStatement.getInstance();
+  }
+
+  @Override public CallableStatement prepareCall(String sql, int resultSetType,
+      int resultSetConcurrency, int resultSetHoldability) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public PreparedStatement prepareStatement(String sql, int autoGeneratedKeys)
+      throws SQLException {
+    return AvaticaNoopPreparedStatement.getInstance();
+  }
+
+  @Override public PreparedStatement prepareStatement(String sql, int[] columnIndexes)
+      throws SQLException {
+    return AvaticaNoopPreparedStatement.getInstance();
+  }
+
+  @Override public PreparedStatement prepareStatement(String sql, String[] columnNames)
+      throws SQLException {
+    return AvaticaNoopPreparedStatement.getInstance();
+  }
+
+  @Override public Clob createClob() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Blob createBlob() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public NClob createNClob() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public SQLXML createSQLXML() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isValid(int timeout) throws SQLException {
+    return true;
+  }
+
+  @Override public void setClientInfo(String name, String value) throws SQLClientInfoException {}
+
+  @Override public void setClientInfo(Properties properties) throws SQLClientInfoException {}
+
+  @Override public String getClientInfo(String name) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Properties getClientInfo() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Array createArrayOf(String typeName, Object[] elements) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Struct createStruct(String typeName, Object[] attributes) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setSchema(String schema) throws SQLException {}
+
+  @Override public String getSchema() throws SQLException {
+    return null;
+  }
+
+  @Override public void abort(Executor executor) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setNetworkTimeout(Executor executor, int milliseconds)
+      throws SQLException {}
+
+  @Override public int getNetworkTimeout() throws SQLException {
+    throw unsupported();
+  }
+
+}
+
+// End AvaticaNoopConnection.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDatabaseMetaData.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDatabaseMetaData.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDatabaseMetaData.java
new file mode 100644
index 0000000..2b58590
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDatabaseMetaData.java
@@ -0,0 +1,770 @@
+/*
+ * 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.noop;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.ResultSet;
+import java.sql.RowIdLifetime;
+import java.sql.SQLException;
+
+/**
+ * A {@link DatabaseMetaData} implementation which does nothing.
+ */
+public class AvaticaNoopDatabaseMetaData implements DatabaseMetaData {
+
+  private static final AvaticaNoopDatabaseMetaData INSTANCE = new AvaticaNoopDatabaseMetaData();
+
+  public static AvaticaNoopDatabaseMetaData getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopDatabaseMetaData() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("Unsupported");
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean allProceduresAreCallable() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean allTablesAreSelectable() throws SQLException {
+    return false;
+  }
+
+  @Override public String getURL() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getUserName() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isReadOnly() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean nullsAreSortedHigh() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean nullsAreSortedLow() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean nullsAreSortedAtStart() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean nullsAreSortedAtEnd() throws SQLException {
+    return false;
+  }
+
+  @Override public String getDatabaseProductName() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getDatabaseProductVersion() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getDriverName() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getDriverVersion() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getDriverMajorVersion() {
+    return 0;
+  }
+
+  @Override public int getDriverMinorVersion() {
+    return 0;
+  }
+
+  @Override public boolean usesLocalFiles() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean usesLocalFilePerTable() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsMixedCaseIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean storesUpperCaseIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean storesLowerCaseIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean storesMixedCaseIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean storesUpperCaseQuotedIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean storesLowerCaseQuotedIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean storesMixedCaseQuotedIdentifiers() throws SQLException {
+    return false;
+  }
+
+  @Override public String getIdentifierQuoteString() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getSQLKeywords() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getNumericFunctions() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getStringFunctions() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getSystemFunctions() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getTimeDateFunctions() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getSearchStringEscape() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getExtraNameCharacters() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean supportsAlterTableWithAddColumn() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsAlterTableWithDropColumn() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsColumnAliasing() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean nullPlusNonNullIsNull() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsConvert() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsConvert(int fromType, int toType) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsTableCorrelationNames() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsDifferentTableCorrelationNames() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsExpressionsInOrderBy() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsOrderByUnrelated() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsGroupBy() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsGroupByUnrelated() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsGroupByBeyondSelect() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsLikeEscapeClause() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsMultipleResultSets() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsMultipleTransactions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsNonNullableColumns() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsMinimumSQLGrammar() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCoreSQLGrammar() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsExtendedSQLGrammar() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsANSI92EntryLevelSQL() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsANSI92IntermediateSQL() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsANSI92FullSQL() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsIntegrityEnhancementFacility() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsOuterJoins() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsFullOuterJoins() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsLimitedOuterJoins() throws SQLException {
+    return false;
+  }
+
+  @Override public String getSchemaTerm() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getProcedureTerm() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getCatalogTerm() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isCatalogAtStart() throws SQLException {
+    return false;
+  }
+
+  @Override public String getCatalogSeparator() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean supportsSchemasInDataManipulation() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSchemasInProcedureCalls() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSchemasInTableDefinitions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSchemasInIndexDefinitions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCatalogsInDataManipulation() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCatalogsInProcedureCalls() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCatalogsInTableDefinitions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCatalogsInIndexDefinitions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsPositionedDelete() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsPositionedUpdate() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSelectForUpdate() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsStoredProcedures() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSubqueriesInComparisons() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSubqueriesInExists() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSubqueriesInIns() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsSubqueriesInQuantifieds() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsCorrelatedSubqueries() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsUnion() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsUnionAll() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsOpenCursorsAcrossCommit() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsOpenCursorsAcrossRollback() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsOpenStatementsAcrossCommit() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsOpenStatementsAcrossRollback() throws SQLException {
+    return false;
+  }
+
+  @Override public int getMaxBinaryLiteralLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxCharLiteralLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxColumnNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxColumnsInGroupBy() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxColumnsInIndex() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxColumnsInOrderBy() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxColumnsInSelect() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxColumnsInTable() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxConnections() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxCursorNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxIndexLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxSchemaNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxProcedureNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxCatalogNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxRowSize() throws SQLException {
+    return 0;
+  }
+
+  @Override public boolean doesMaxRowSizeIncludeBlobs() throws SQLException {
+    return false;
+  }
+
+  @Override public int getMaxStatementLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxStatements() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxTableNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxTablesInSelect() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getMaxUserNameLength() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getDefaultTransactionIsolation() throws SQLException {
+    return 0;
+  }
+
+  @Override public boolean supportsTransactions() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsTransactionIsolationLevel(int level) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsDataDefinitionAndDataManipulationTransactions()
+      throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsDataManipulationTransactionsOnly() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean dataDefinitionCausesTransactionCommit() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean dataDefinitionIgnoredInTransactions() throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet getProcedures(String catalog, String schemaPattern,
+      String procedureNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getProcedureColumns(String catalog, String schemaPattern,
+      String procedureNamePattern, String columnNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getTables(String catalog, String schemaPattern,
+      String tableNamePattern, String[] types) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getSchemas() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getCatalogs() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getTableTypes() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getColumns(String catalog, String schemaPattern,
+      String tableNamePattern, String columnNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getColumnPrivileges(String catalog, String schema, String table,
+      String columnNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getTablePrivileges(String catalog, String schemaPattern,
+      String tableNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getBestRowIdentifier(String catalog, String schema, String table,
+      int scope, boolean nullable) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getVersionColumns(String catalog, String schema, String table)
+      throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getPrimaryKeys(String catalog, String schema, String table)
+      throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getImportedKeys(String catalog, String schema, String table)
+      throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getExportedKeys(String catalog, String schema, String table)
+      throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getCrossReference(String parentCatalog, String parentSchema,
+      String parentTable, String foreignCatalog, String foreignSchema,
+      String foreignTable) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getTypeInfo() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getIndexInfo(String catalog, String schema, String table,
+      boolean unique, boolean approximate) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public boolean supportsResultSetType(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsResultSetConcurrency(int type, int concurrency)
+      throws SQLException {
+    return false;
+  }
+
+  @Override public boolean ownUpdatesAreVisible(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean ownDeletesAreVisible(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean ownInsertsAreVisible(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean othersUpdatesAreVisible(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean othersDeletesAreVisible(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean othersInsertsAreVisible(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean updatesAreDetected(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean deletesAreDetected(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean insertsAreDetected(int type) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsBatchUpdates() throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern,
+      int[] types) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Connection getConnection() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean supportsSavepoints() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsNamedParameters() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsMultipleOpenResults() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsGetGeneratedKeys() throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet getSuperTypes(String catalog, String schemaPattern,
+      String typeNamePattern) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public ResultSet getSuperTables(String catalog, String schemaPattern,
+      String tableNamePattern) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public ResultSet getAttributes(String catalog, String schemaPattern,
+      String typeNamePattern, String attributeNamePattern) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean supportsResultSetHoldability(int holdability) throws SQLException {
+    return false;
+  }
+
+  @Override public int getResultSetHoldability() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getDatabaseMajorVersion() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getDatabaseMinorVersion() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getJDBCMajorVersion() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getJDBCMinorVersion() throws SQLException {
+    return 0;
+  }
+
+  @Override public int getSQLStateType() throws SQLException {
+    return 0;
+  }
+
+  @Override public boolean locatorsUpdateCopy() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean supportsStatementPooling() throws SQLException {
+    return false;
+  }
+
+  @Override public RowIdLifetime getRowIdLifetime() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException {
+    return false;
+  }
+
+  @Override public boolean autoCommitFailureClosesAllResultSets() throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet getClientInfoProperties() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getFunctions(String catalog, String schemaPattern,
+      String functionNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getFunctionColumns(String catalog, String schemaPattern,
+      String functionNamePattern, String columnNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public ResultSet getPseudoColumns(String catalog, String schemaPattern,
+      String tableNamePattern, String columnNamePattern) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public boolean generatedKeyAlwaysReturned() throws SQLException {
+    return false;
+  }
+}
+
+// End AvaticaNoopDatabaseMetaData.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDriver.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDriver.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDriver.java
new file mode 100644
index 0000000..76f5356
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopDriver.java
@@ -0,0 +1,74 @@
+/*
+ * 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.noop;
+
+import java.sql.Connection;
+import java.sql.Driver;
+import java.sql.DriverManager;
+import java.sql.DriverPropertyInfo;
+import java.sql.SQLException;
+import java.sql.SQLFeatureNotSupportedException;
+import java.util.Properties;
+import java.util.logging.Logger;
+
+/**
+ * A Noop JDBC Driver.
+ */
+public class AvaticaNoopDriver implements Driver {
+
+  private static final AvaticaNoopDriver INSTANCE = new AvaticaNoopDriver();
+
+  static {
+    try {
+      DriverManager.registerDriver(INSTANCE);
+    } catch (Exception e) {
+      System.err.println("Failed to register driver");
+      e.printStackTrace(System.err);
+    }
+  }
+
+  @Override public Connection connect(String url, Properties info) throws SQLException {
+    return AvaticaNoopConnection.getInstance();
+  }
+
+  @Override public boolean acceptsURL(String url) throws SQLException {
+    return url.startsWith("jdbc:avatica:noop");
+  }
+
+  @Override public DriverPropertyInfo[] getPropertyInfo(String url, Properties info)
+      throws SQLException {
+    return new DriverPropertyInfo[0];
+  }
+
+  @Override public int getMajorVersion() {
+    return 1;
+  }
+
+  @Override public int getMinorVersion() {
+    return 7;
+  }
+
+  @Override public boolean jdbcCompliant() {
+    return true;
+  }
+
+  @Override public Logger getParentLogger() throws SQLFeatureNotSupportedException {
+    return Logger.getLogger("");
+  }
+}
+
+// End AvaticaNoopDriver.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopParameterMetaData.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopParameterMetaData.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopParameterMetaData.java
new file mode 100644
index 0000000..f7117e9
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopParameterMetaData.java
@@ -0,0 +1,85 @@
+/*
+ * 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.noop;
+
+import java.sql.ParameterMetaData;
+import java.sql.SQLException;
+
+/**
+ * An implementation of {@link ParameterMetaData} which does nothing.
+ */
+public class AvaticaNoopParameterMetaData implements ParameterMetaData {
+
+  private static final AvaticaNoopParameterMetaData INSTANCE = new AvaticaNoopParameterMetaData();
+
+  public static AvaticaNoopParameterMetaData getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopParameterMetaData() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("Unsupported");
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    return false;
+  }
+
+  @Override public int getParameterCount() throws SQLException {
+    return 0;
+  }
+
+  @Override public int isNullable(int param) throws SQLException {
+    return 0;
+  }
+
+  @Override public boolean isSigned(int param) throws SQLException {
+    return false;
+  }
+
+  @Override public int getPrecision(int param) throws SQLException {
+    return 0;
+  }
+
+  @Override public int getScale(int param) throws SQLException {
+    return 0;
+  }
+
+  @Override public int getParameterType(int param) throws SQLException {
+    return 0;
+  }
+
+  @Override public String getParameterTypeName(int param) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getParameterClassName(int param) throws SQLException {
+    return "java.lang.Object";
+  }
+
+  @Override public int getParameterMode(int param) throws SQLException {
+    return 0;
+  }
+
+}
+
+// End AvaticaNoopParameterMetaData.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopPreparedStatement.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopPreparedStatement.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopPreparedStatement.java
new file mode 100644
index 0000000..b8ad8cc
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopPreparedStatement.java
@@ -0,0 +1,344 @@
+/*
+ * 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.noop;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Connection;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.ParameterMetaData;
+import java.sql.PreparedStatement;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+
+/**
+ * A {@link PreparedStatement} instance which does nothing.
+ */
+public class AvaticaNoopPreparedStatement implements PreparedStatement {
+
+  private static final AvaticaNoopPreparedStatement INSTANCE = new AvaticaNoopPreparedStatement();
+
+  public static AvaticaNoopPreparedStatement getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopPreparedStatement() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("Unsupported");
+  }
+
+  @Override public ResultSet executeQuery(String sql) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public int executeUpdate(String sql) throws SQLException {
+    return 1;
+  }
+
+  @Override public void close() throws SQLException {}
+
+  @Override public int getMaxFieldSize() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setMaxFieldSize(int max) throws SQLException {}
+
+  @Override public int getMaxRows() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setMaxRows(int max) throws SQLException {}
+
+  @Override public void setEscapeProcessing(boolean enable) throws SQLException {}
+
+  @Override public int getQueryTimeout() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setQueryTimeout(int seconds) throws SQLException {}
+
+  @Override public void cancel() throws SQLException {}
+
+  @Override public SQLWarning getWarnings() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void clearWarnings() throws SQLException {}
+
+  @Override public void setCursorName(String name) throws SQLException {}
+
+  @Override public boolean execute(String sql) throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet getResultSet() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public int getUpdateCount() throws SQLException {
+    return 1;
+  }
+
+  @Override public boolean getMoreResults() throws SQLException {
+    return false;
+  }
+
+  @Override public void setFetchDirection(int direction) throws SQLException {}
+
+  @Override public int getFetchDirection() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setFetchSize(int rows) throws SQLException {}
+
+  @Override public int getFetchSize() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getResultSetConcurrency() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getResultSetType() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void addBatch(String sql) throws SQLException {}
+
+  @Override public void clearBatch() throws SQLException {}
+
+  @Override public int[] executeBatch() throws SQLException {
+    return new int[0];
+  }
+
+  @Override public Connection getConnection() throws SQLException {
+    return AvaticaNoopConnection.getInstance();
+  }
+
+  @Override public boolean getMoreResults(int current) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public ResultSet getGeneratedKeys() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+    return 1;
+  }
+
+  @Override public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
+    return 1;
+  }
+
+  @Override public int executeUpdate(String sql, String[] columnNames) throws SQLException {
+    return 1;
+  }
+
+  @Override public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
+    return true;
+  }
+
+  @Override public boolean execute(String sql, int[] columnIndexes) throws SQLException {
+    return true;
+  }
+
+  @Override public boolean execute(String sql, String[] columnNames) throws SQLException {
+    return true;
+  }
+
+  @Override public int getResultSetHoldability() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isClosed() throws SQLException {
+    return false;
+  }
+
+  @Override public void setPoolable(boolean poolable) throws SQLException {}
+
+  @Override public boolean isPoolable() throws SQLException {
+    return true;
+  }
+
+  @Override public void closeOnCompletion() throws SQLException {}
+
+  @Override public boolean isCloseOnCompletion() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet executeQuery() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public int executeUpdate() throws SQLException {
+    return 1;
+  }
+
+  @Override public void setNull(int parameterIndex, int sqlType) throws SQLException {}
+
+  @Override public void setBoolean(int parameterIndex, boolean x) throws SQLException {}
+
+  @Override public void setByte(int parameterIndex, byte x) throws SQLException {}
+
+  @Override public void setShort(int parameterIndex, short x) throws SQLException {}
+
+  @Override public void setInt(int parameterIndex, int x) throws SQLException {}
+
+  @Override public void setLong(int parameterIndex, long x) throws SQLException {}
+
+  @Override public void setFloat(int parameterIndex, float x) throws SQLException {}
+
+  @Override public void setDouble(int parameterIndex, double x) throws SQLException {}
+
+  @Override public void setBigDecimal(int parameterIndex, BigDecimal x) throws SQLException {}
+
+  @Override public void setString(int parameterIndex, String x) throws SQLException {}
+
+  @Override public void setBytes(int parameterIndex, byte[] x) throws SQLException {}
+
+  @Override public void setDate(int parameterIndex, Date x) throws SQLException {}
+
+  @Override public void setTime(int parameterIndex, Time x) throws SQLException {}
+
+  @Override public void setTimestamp(int parameterIndex, Timestamp x) throws SQLException {}
+
+  @Override public void setAsciiStream(int parameterIndex, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void setUnicodeStream(int parameterIndex, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void setBinaryStream(int parameterIndex, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void clearParameters() throws SQLException {}
+
+  @Override public void setObject(int parameterIndex, Object x, int targetSqlType)
+      throws SQLException {}
+
+  @Override public void setObject(int parameterIndex, Object x) throws SQLException {}
+
+  @Override public boolean execute() throws SQLException {
+    return false;
+  }
+
+  @Override public void addBatch() throws SQLException {}
+
+  @Override public void setCharacterStream(int parameterIndex, Reader reader, int length)
+      throws SQLException {}
+
+  @Override public void setRef(int parameterIndex, Ref x) throws SQLException {}
+
+  @Override public void setBlob(int parameterIndex, Blob x) throws SQLException {}
+
+  @Override public void setClob(int parameterIndex, Clob x) throws SQLException {}
+
+  @Override public void setArray(int parameterIndex, Array x) throws SQLException {}
+
+  @Override public ResultSetMetaData getMetaData() throws SQLException {
+    return AvaticaNoopResultSetMetaData.getInstance();
+  }
+
+  @Override public void setDate(int parameterIndex, Date x, Calendar cal) throws SQLException {}
+
+  @Override public void setTime(int parameterIndex, Time x, Calendar cal) throws SQLException {}
+
+  @Override public void setTimestamp(int parameterIndex, Timestamp x, Calendar cal)
+      throws SQLException {}
+
+  @Override public void setNull(int parameterIndex, int sqlType, String typeName)
+      throws SQLException {}
+
+  @Override public void setURL(int parameterIndex, URL x) throws SQLException {}
+
+  @Override public ParameterMetaData getParameterMetaData() throws SQLException {
+    return AvaticaNoopParameterMetaData.getInstance();
+  }
+
+  @Override public void setRowId(int parameterIndex, RowId x) throws SQLException {}
+
+  @Override public void setNString(int parameterIndex, String value) throws SQLException {}
+
+  @Override public void setNCharacterStream(int parameterIndex, Reader value, long length)
+      throws SQLException {}
+
+  @Override public void setNClob(int parameterIndex, NClob value) throws SQLException {}
+
+  @Override public void setClob(int parameterIndex, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void setBlob(int parameterIndex, InputStream inputStream, long length)
+      throws SQLException {}
+
+  @Override public void setNClob(int parameterIndex, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void setSQLXML(int parameterIndex, SQLXML xmlObject) throws SQLException {}
+
+  @Override public void setObject(int parameterIndex, Object x, int targetSqlType,
+      int scaleOrLength)
+      throws SQLException {}
+
+  @Override public void setAsciiStream(int parameterIndex, InputStream x, long length)
+      throws SQLException {}
+
+  @Override public void setBinaryStream(int parameterIndex, InputStream x, long length)
+      throws SQLException {}
+
+  @Override public void setCharacterStream(int parameterIndex, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void setAsciiStream(int parameterIndex, InputStream x) throws SQLException {}
+
+  @Override public void setBinaryStream(int parameterIndex, InputStream x) throws SQLException {}
+
+  @Override public void setCharacterStream(int parameterIndex, Reader reader) throws SQLException {}
+
+  @Override public void setNCharacterStream(int parameterIndex, Reader value) throws SQLException {}
+
+  @Override public void setClob(int parameterIndex, Reader reader) throws SQLException {}
+
+  @Override public void setBlob(int parameterIndex, InputStream inputStream) throws SQLException {}
+
+  @Override public void setNClob(int parameterIndex, Reader reader) throws SQLException {}
+}
+
+// End AvaticaNoopPreparedStatement.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSet.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSet.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSet.java
new file mode 100644
index 0000000..2d71184
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSet.java
@@ -0,0 +1,661 @@
+/*
+ * 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.noop;
+
+import java.io.InputStream;
+import java.io.Reader;
+import java.math.BigDecimal;
+import java.net.URL;
+import java.sql.Array;
+import java.sql.Blob;
+import java.sql.Clob;
+import java.sql.Date;
+import java.sql.NClob;
+import java.sql.Ref;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.RowId;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.SQLXML;
+import java.sql.Statement;
+import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Calendar;
+import java.util.Map;
+
+/**
+ * A {@link ResultSet} implementation which does nothing.
+ */
+public class AvaticaNoopResultSet implements ResultSet {
+
+  private static final AvaticaNoopResultSet INSTANCE = new AvaticaNoopResultSet();
+
+  public static AvaticaNoopResultSet getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopResultSet() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("unsupported");
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean next() throws SQLException {
+    return false;
+  }
+
+  @Override public void close() throws SQLException {}
+
+  @Override public boolean wasNull() throws SQLException {
+    return false;
+  }
+
+  @Override public String getString(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean getBoolean(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public byte getByte(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public short getShort(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getInt(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public long getLong(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public float getFloat(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public double getDouble(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public BigDecimal getBigDecimal(int columnIndex, int scale) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public byte[] getBytes(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Date getDate(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Time getTime(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Timestamp getTimestamp(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public InputStream getAsciiStream(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public InputStream getUnicodeStream(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public InputStream getBinaryStream(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getString(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean getBoolean(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public byte getByte(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public short getShort(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getInt(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public long getLong(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public float getFloat(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public double getDouble(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public BigDecimal getBigDecimal(String columnLabel, int scale) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public byte[] getBytes(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Date getDate(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Time getTime(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Timestamp getTimestamp(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public InputStream getAsciiStream(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public InputStream getUnicodeStream(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public InputStream getBinaryStream(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public SQLWarning getWarnings() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void clearWarnings() throws SQLException {}
+
+  @Override public String getCursorName() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public ResultSetMetaData getMetaData() throws SQLException {
+    return AvaticaNoopResultSetMetaData.getInstance();
+  }
+
+  @Override public Object getObject(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Object getObject(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int findColumn(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Reader getCharacterStream(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Reader getCharacterStream(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public BigDecimal getBigDecimal(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public BigDecimal getBigDecimal(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isBeforeFirst() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isAfterLast() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isFirst() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isLast() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void beforeFirst() throws SQLException {}
+
+  @Override public void afterLast() throws SQLException {}
+
+  @Override public boolean first() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean last() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getRow() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean absolute(int row) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean relative(int rows) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean previous() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setFetchDirection(int direction) throws SQLException {}
+
+  @Override public int getFetchDirection() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setFetchSize(int rows) throws SQLException {}
+
+  @Override public int getFetchSize() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getType() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getConcurrency() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean rowUpdated() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean rowInserted() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean rowDeleted() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void updateNull(int columnIndex) throws SQLException {}
+
+  @Override public void updateBoolean(int columnIndex, boolean x) throws SQLException {}
+
+  @Override public void updateByte(int columnIndex, byte x) throws SQLException {}
+
+  @Override public void updateShort(int columnIndex, short x) throws SQLException {}
+
+  @Override public void updateInt(int columnIndex, int x) throws SQLException {}
+
+  @Override public void updateLong(int columnIndex, long x) throws SQLException {}
+
+  @Override public void updateFloat(int columnIndex, float x) throws SQLException {}
+
+  @Override public void updateDouble(int columnIndex, double x) throws SQLException {}
+
+  @Override public void updateBigDecimal(int columnIndex, BigDecimal x) throws SQLException {}
+
+  @Override public void updateString(int columnIndex, String x) throws SQLException {}
+
+  @Override public void updateBytes(int columnIndex, byte[] x) throws SQLException {}
+
+  @Override public void updateDate(int columnIndex, Date x) throws SQLException {}
+
+  @Override public void updateTime(int columnIndex, Time x) throws SQLException {}
+
+  @Override public void updateTimestamp(int columnIndex, Timestamp x) throws SQLException {}
+
+  @Override public void updateAsciiStream(int columnIndex, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void updateBinaryStream(int columnIndex, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void updateCharacterStream(int columnIndex, Reader x, int length)
+      throws SQLException {}
+
+  @Override public void updateObject(int columnIndex, Object x, int scaleOrLength)
+      throws SQLException {}
+
+  @Override public void updateObject(int columnIndex, Object x) throws SQLException {}
+
+  @Override public void updateNull(String columnLabel) throws SQLException {}
+
+  @Override public void updateBoolean(String columnLabel, boolean x) throws SQLException {}
+
+  @Override public void updateByte(String columnLabel, byte x) throws SQLException {}
+
+  @Override public void updateShort(String columnLabel, short x) throws SQLException {}
+
+  @Override public void updateInt(String columnLabel, int x) throws SQLException {}
+
+  @Override public void updateLong(String columnLabel, long x) throws SQLException {}
+
+  @Override public void updateFloat(String columnLabel, float x) throws SQLException {}
+
+  @Override public void updateDouble(String columnLabel, double x) throws SQLException {}
+
+  @Override public void updateBigDecimal(String columnLabel, BigDecimal x) throws SQLException {}
+
+  @Override public void updateString(String columnLabel, String x) throws SQLException {}
+
+  @Override public void updateBytes(String columnLabel, byte[] x) throws SQLException {}
+
+  @Override public void updateDate(String columnLabel, Date x) throws SQLException {}
+
+  @Override public void updateTime(String columnLabel, Time x) throws SQLException {}
+
+  @Override public void updateTimestamp(String columnLabel, Timestamp x) throws SQLException {}
+
+  @Override public void updateAsciiStream(String columnLabel, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void updateBinaryStream(String columnLabel, InputStream x, int length)
+      throws SQLException {}
+
+  @Override public void updateCharacterStream(String columnLabel, Reader reader, int length)
+      throws SQLException {}
+
+  @Override public void updateObject(String columnLabel, Object x, int scaleOrLength)
+      throws SQLException {}
+
+  @Override public void updateObject(String columnLabel, Object x) throws SQLException {}
+
+  @Override public void insertRow() throws SQLException {}
+
+  @Override public void updateRow() throws SQLException {}
+
+  @Override public void deleteRow() throws SQLException {}
+
+  @Override public void refreshRow() throws SQLException {}
+
+  @Override public void cancelRowUpdates() throws SQLException {}
+
+  @Override public void moveToInsertRow() throws SQLException {}
+
+  @Override public void moveToCurrentRow() throws SQLException {}
+
+  @Override public Statement getStatement() throws SQLException {
+    return AvaticaNoopStatement.getInstance();
+  }
+
+  @Override public Object getObject(int columnIndex, Map<String, Class<?>> map)
+      throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Ref getRef(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Blob getBlob(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Clob getClob(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Array getArray(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Object getObject(String columnLabel, Map<String, Class<?>> map)
+      throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Ref getRef(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Blob getBlob(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Clob getClob(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Array getArray(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Date getDate(int columnIndex, Calendar cal) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Date getDate(String columnLabel, Calendar cal) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Time getTime(int columnIndex, Calendar cal) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Time getTime(String columnLabel, Calendar cal) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Timestamp getTimestamp(int columnIndex, Calendar cal) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Timestamp getTimestamp(String columnLabel, Calendar cal) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public URL getURL(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public URL getURL(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void updateRef(int columnIndex, Ref x) throws SQLException {}
+
+  @Override public void updateRef(String columnLabel, Ref x) throws SQLException {}
+
+  @Override public void updateBlob(int columnIndex, Blob x) throws SQLException {}
+
+  @Override public void updateBlob(String columnLabel, Blob x) throws SQLException {}
+
+  @Override public void updateClob(int columnIndex, Clob x) throws SQLException {}
+
+  @Override public void updateClob(String columnLabel, Clob x) throws SQLException {}
+
+  @Override public void updateArray(int columnIndex, Array x) throws SQLException {}
+
+  @Override public void updateArray(String columnLabel, Array x) throws SQLException {}
+
+  @Override public RowId getRowId(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public RowId getRowId(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void updateRowId(int columnIndex, RowId x) throws SQLException {}
+
+  @Override public void updateRowId(String columnLabel, RowId x) throws SQLException {}
+
+  @Override public int getHoldability() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isClosed() throws SQLException {
+    return false;
+  }
+
+  @Override public void updateNString(int columnIndex, String nString) throws SQLException {}
+
+  @Override public void updateNString(String columnLabel, String nString) throws SQLException {}
+
+  @Override public void updateNClob(int columnIndex, NClob nClob) throws SQLException {}
+
+  @Override public void updateNClob(String columnLabel, NClob nClob) throws SQLException {}
+
+  @Override public NClob getNClob(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public NClob getNClob(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public SQLXML getSQLXML(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public SQLXML getSQLXML(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void updateSQLXML(int columnIndex, SQLXML xmlObject) throws SQLException {}
+
+  @Override public void updateSQLXML(String columnLabel, SQLXML xmlObject) throws SQLException {}
+
+  @Override public String getNString(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getNString(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Reader getNCharacterStream(int columnIndex) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public Reader getNCharacterStream(String columnLabel) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void updateNCharacterStream(int columnIndex, Reader x, long length)
+      throws SQLException {}
+
+  @Override public void updateNCharacterStream(String columnLabel, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void updateAsciiStream(int columnIndex, InputStream x, long length)
+      throws SQLException {}
+
+  @Override public void updateBinaryStream(int columnIndex, InputStream x, long length)
+      throws SQLException {}
+
+  @Override public void updateCharacterStream(int columnIndex, Reader x, long length)
+      throws SQLException {}
+
+  @Override public void updateAsciiStream(String columnLabel, InputStream x, long length)
+      throws SQLException {}
+
+  @Override public void updateBinaryStream(String columnLabel, InputStream x, long length)
+      throws SQLException {}
+
+  @Override public void updateCharacterStream(String columnLabel, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void updateBlob(int columnIndex, InputStream inputStream, long length)
+      throws SQLException {}
+
+  @Override public void updateBlob(String columnLabel, InputStream inputStream, long length)
+      throws SQLException {}
+
+  @Override public void updateClob(int columnIndex, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void updateClob(String columnLabel, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void updateNClob(int columnIndex, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void updateNClob(String columnLabel, Reader reader, long length)
+      throws SQLException {}
+
+  @Override public void updateNCharacterStream(int columnIndex, Reader x) throws SQLException {}
+
+  @Override public void updateNCharacterStream(String columnLabel, Reader reader)
+      throws SQLException {}
+
+  @Override public void updateAsciiStream(int columnIndex, InputStream x) throws SQLException {}
+
+  @Override public void updateBinaryStream(int columnIndex, InputStream x) throws SQLException {}
+
+  @Override public void updateCharacterStream(int columnIndex, Reader x) throws SQLException {}
+
+  @Override public void updateAsciiStream(String columnLabel, InputStream x) throws SQLException {}
+
+  @Override public void updateBinaryStream(String columnLabel, InputStream x) throws SQLException {}
+
+  @Override public void updateCharacterStream(String columnLabel, Reader reader)
+      throws SQLException {}
+
+  @Override public void updateBlob(int columnIndex, InputStream inputStream) throws SQLException {}
+
+  @Override public void updateBlob(String columnLabel, InputStream inputStream)
+      throws SQLException {}
+
+  @Override public void updateClob(int columnIndex, Reader reader) throws SQLException {}
+
+  @Override public void updateClob(String columnLabel, Reader reader) throws SQLException {}
+
+  @Override public void updateNClob(int columnIndex, Reader reader) throws SQLException {}
+
+  @Override public void updateNClob(String columnLabel, Reader reader) throws SQLException {}
+
+  @Override public <T> T getObject(int columnIndex, Class<T> type) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public <T> T getObject(String columnLabel, Class<T> type) throws SQLException {
+    throw unsupported();
+  }
+
+}
+
+// End AvaticaNoopResultSet.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSetMetaData.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSetMetaData.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSetMetaData.java
new file mode 100644
index 0000000..ddc8c3b
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopResultSetMetaData.java
@@ -0,0 +1,133 @@
+/*
+ * 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.noop;
+
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+
+/**
+ * A {@link ResultSetMetaData} implementation which does nothing.
+ */
+public class AvaticaNoopResultSetMetaData implements ResultSetMetaData {
+
+  private static final AvaticaNoopResultSetMetaData INSTANCE = new AvaticaNoopResultSetMetaData();
+
+  public static AvaticaNoopResultSetMetaData getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopResultSetMetaData() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("Unsupported");
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getColumnCount() throws SQLException {
+    return 0;
+  }
+
+  @Override public boolean isAutoIncrement(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean isCaseSensitive(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean isSearchable(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean isCurrency(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public int isNullable(int column) throws SQLException {
+    return 0;
+  }
+
+  @Override public boolean isSigned(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public int getColumnDisplaySize(int column) throws SQLException {
+    return 0;
+  }
+
+  @Override public String getColumnLabel(int column) throws SQLException {
+    return "";
+  }
+
+  @Override public String getColumnName(int column) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getSchemaName(int column) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getPrecision(int column) throws SQLException {
+    return 0;
+  }
+
+  @Override public int getScale(int column) throws SQLException {
+    return 0;
+  }
+
+  @Override public String getTableName(int column) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public String getCatalogName(int column) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getColumnType(int column) throws SQLException {
+    return 0;
+  }
+
+  @Override public String getColumnTypeName(int column) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isReadOnly(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean isWritable(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public boolean isDefinitelyWritable(int column) throws SQLException {
+    return false;
+  }
+
+  @Override public String getColumnClassName(int column) throws SQLException {
+    throw unsupported();
+  }
+
+}
+
+// End AvaticaNoopResultSetMetaData.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopStatement.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopStatement.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopStatement.java
new file mode 100644
index 0000000..079cea4
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/AvaticaNoopStatement.java
@@ -0,0 +1,191 @@
+/*
+ * 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.noop;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.SQLWarning;
+import java.sql.Statement;
+
+/**
+ * A {@link Statement} implementation which does nothing.
+ */
+public class AvaticaNoopStatement implements Statement {
+
+  private static final AvaticaNoopStatement INSTANCE = new AvaticaNoopStatement();
+
+  public static AvaticaNoopStatement getInstance() {
+    return INSTANCE;
+  }
+
+  private AvaticaNoopStatement() {}
+
+  private UnsupportedOperationException unsupported() {
+    return new UnsupportedOperationException("Unsupported");
+  }
+
+  @Override public ResultSet executeQuery(String sql) throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public int executeUpdate(String sql) throws SQLException {
+    return 1;
+  }
+
+  @Override public void close() throws SQLException {}
+
+  @Override public int getMaxFieldSize() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setMaxFieldSize(int max) throws SQLException {}
+
+  @Override public int getMaxRows() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setMaxRows(int max) throws SQLException {}
+
+  @Override public void setEscapeProcessing(boolean enable) throws SQLException {}
+
+  @Override public int getQueryTimeout() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setQueryTimeout(int seconds) throws SQLException {}
+
+  @Override public void cancel() throws SQLException {}
+
+  @Override public SQLWarning getWarnings() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void clearWarnings() throws SQLException {}
+
+  @Override public void setCursorName(String name) throws SQLException {}
+
+  @Override public boolean execute(String sql) throws SQLException {
+    return false;
+  }
+
+  @Override public ResultSet getResultSet() throws SQLException {
+    return AvaticaNoopResultSet.getInstance();
+  }
+
+  @Override public int getUpdateCount() throws SQLException {
+    return 1;
+  }
+
+  @Override public boolean getMoreResults() throws SQLException {
+    return false;
+  }
+
+  @Override public void setFetchDirection(int direction) throws SQLException {}
+
+  @Override public int getFetchDirection() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void setFetchSize(int rows) throws SQLException {}
+
+  @Override public int getFetchSize() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getResultSetConcurrency() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int getResultSetType() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public void addBatch(String sql) throws SQLException {}
+
+  @Override public void clearBatch() throws SQLException {}
+
+  @Override public int[] executeBatch() throws SQLException {
+    return new int[0];
+  }
+
+  @Override public Connection getConnection() throws SQLException {
+    return AvaticaNoopConnection.getInstance();
+  }
+
+  @Override public boolean getMoreResults(int current) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public ResultSet getGeneratedKeys() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public int executeUpdate(String sql, int autoGeneratedKeys) throws SQLException {
+    return 1;
+  }
+
+  @Override public int executeUpdate(String sql, int[] columnIndexes) throws SQLException {
+    return 1;
+  }
+
+  @Override public int executeUpdate(String sql, String[] columnNames) throws SQLException {
+    return 1;
+  }
+
+  @Override public boolean execute(String sql, int autoGeneratedKeys) throws SQLException {
+    return true;
+  }
+
+  @Override public boolean execute(String sql, int[] columnIndexes) throws SQLException {
+    return true;
+  }
+
+  @Override public boolean execute(String sql, String[] columnNames) throws SQLException {
+    return true;
+  }
+
+  @Override public int getResultSetHoldability() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isClosed() throws SQLException {
+    return false;
+  }
+
+  @Override public void setPoolable(boolean poolable) throws SQLException {}
+
+  @Override public boolean isPoolable() throws SQLException {
+    return true;
+  }
+
+  @Override public void closeOnCompletion() throws SQLException {}
+
+  @Override public boolean isCloseOnCompletion() throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public <T> T unwrap(Class<T> iface) throws SQLException {
+    throw unsupported();
+  }
+
+  @Override public boolean isWrapperFor(Class<?> iface) throws SQLException {
+    throw unsupported();
+  }
+}
+
+// End AvaticaNoopStatement.java

http://git-wip-us.apache.org/repos/asf/calcite/blob/d27e642c/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/PackageMarker.java
----------------------------------------------------------------------
diff --git a/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/PackageMarker.java b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/PackageMarker.java
new file mode 100644
index 0000000..6ae1905
--- /dev/null
+++ b/avatica-noop/src/main/java/org/apache/calcite/avatica/noop/PackageMarker.java
@@ -0,0 +1,37 @@
+/*
+ * 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.noop;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/**
+ * This is a dummy annotation that forces javac to produce output for
+ * otherwise empty package-info.java.
+ *
+ * <p>The result is maven-compiler-plugin can properly identify the scope of
+ * changed files
+ *
+ * <p>See more details in
+ * <a href="https://jira.codehaus.org/browse/MCOMPILER-205">
+ *   maven-compiler-plugin: incremental compilation broken</a>
+ */
+@Retention(RetentionPolicy.SOURCE)
+public @interface PackageMarker {
+}
+
+// End PackageMarker.java