content: /*
   * 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.io.InputStream;
  import java.io.Reader;
  import java.sql.NClob;
  import java.sql.ResultSetMetaData;
  import java.sql.RowId;
  import java.sql.SQLException;
  import java.sql.SQLXML;
  import java.util.Properties;
  import java.util.TimeZone;
  
  /**
   * Implementation of {@link AvaticaFactory} for JDBC 4.1 (corresponds to JDK
   * 1.7).
   */
  @SuppressWarnings("UnusedDeclaration")
  class AvaticaJdbc41Factory implements AvaticaFactory {
    private final int major;
    private final int minor;
  
    /** Creates a JDBC factory. */
    // CHECKSTYLE: stop RedundantModifierCheck
    public AvaticaJdbc41Factory() {
      this(4, 1);
    }
    // CHECKSTYLE: resume RedundantModifierCheck
  
  
    /** Creates a JDBC factory with given major/minor version number. */
    protected AvaticaJdbc41Factory(int major, int minor) {
      this.major = major;
      this.minor = minor;
    }
  
    public int getJdbcMajorVersion() {
      return major;
    }
  
    public int getJdbcMinorVersion() {
      return minor;
    }
  
    public AvaticaConnection newConnection(
        UnregisteredDriver driver,
        AvaticaFactory factory,
        String url,
        Properties info) {
      return new AvaticaJdbc41Connection(driver, factory, url, info);
    }
  
    public AvaticaSpecificDatabaseMetaData newDatabaseMetaData(
        AvaticaConnection connection) {
      return new AvaticaJdbc41DatabaseMetaData(connection);
    }
  
    public AvaticaStatement newStatement(AvaticaConnection connection,
        Meta.StatementHandle h, int resultSetType, int resultSetConcurrency,
        int resultSetHoldability) {
      return new AvaticaJdbc41Statement(connection, h, resultSetType,
          resultSetConcurrency, resultSetHoldability);
    }
  
    public AvaticaPreparedStatement newPreparedStatement(
        AvaticaConnection connection, Meta.StatementHandle h,
        Meta.Signature signature, int resultSetType, int resultSetConcurrency,
        int resultSetHoldability)
        throws SQLException {
      return new AvaticaJdbc41PreparedStatement(connection, h, signature,
          resultSetType, resultSetConcurrency, resultSetHoldability);
    }
  
    public AvaticaResultSet newResultSet(AvaticaStatement statement,
        QueryState state, Meta.Signature signature, TimeZone timeZone, Meta.Frame firstFrame)
        throws SQLException {
      final ResultSetMetaData metaData =
          newResultSetMetaData(statement, signature);
      return new AvaticaResultSet(statement, state, signature, metaData, timeZone,
          firstFrame);
    }
  
    public AvaticaResultSetMetaData newResultSetMetaData(
        AvaticaStatement statement, Meta.Signature signature) {
      return new AvaticaResultSetMetaData(statement, null, signature);
    }
  
    /** Implementation of Connection for JDBC 4.1. */
    private static class AvaticaJdbc41Connection extends AvaticaConnection {
      AvaticaJdbc41Connection(UnregisteredDriver driver,
          AvaticaFactory factory,
          String url,
          Properties info) {
        super(driver, factory, url, info);
      }
    }
  
    /** Implementation of Statement for JDBC 4.1. */
    private static class AvaticaJdbc41Statement extends AvaticaStatement {
      private AvaticaJdbc41Statement(AvaticaConnection connection,
          Meta.StatementHandle h, int resultSetType, int resultSetConcurrency,
          int resultSetHoldability) {
        super(connection, h, resultSetType, resultSetConcurrency,
            resultSetHoldability);
      }
    }
  
    /** Implementation of PreparedStatement for JDBC 4.1. */
    private static class AvaticaJdbc41PreparedStatement
        extends AvaticaPreparedStatement {
      AvaticaJdbc41PreparedStatement(AvaticaConnection connection,
          Meta.StatementHandle h, Meta.Signature signature, int resultSetType,
          int resultSetConcurrency, int resultSetHoldability)
          throws SQLException {
        super(connection, h, signature, resultSetType, resultSetConcurrency,
            resultSetHoldability);
      }
  
      public void setRowId(
          int parameterIndex,
          RowId x) throws SQLException {
        getSite(parameterIndex).setRowId(x);
      }
  
      public void setNString(
          int parameterIndex, String value) throws SQLException {
        getSite(parameterIndex).setNString(value);
      }
  
      public void setNCharacterStream(
          int parameterIndex,
          Reader value,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setNCharacterStream(value, length);
      }
  
      public void setNClob(
          int parameterIndex,
          NClob value) throws SQLException {
        getSite(parameterIndex).setNClob(value);
      }
  
      public void setClob(
          int parameterIndex,
          Reader reader,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setClob(reader, length);
      }
  
      public void setBlob(
          int parameterIndex,
          InputStream inputStream,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setBlob(inputStream, length);
      }
  
      public void setNClob(
          int parameterIndex,
          Reader reader,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setNClob(reader, length);
      }
  
      public void setSQLXML(
          int parameterIndex, SQLXML xmlObject) throws SQLException {
        getSite(parameterIndex).setSQLXML(xmlObject);
      }
  
      public void setAsciiStream(
          int parameterIndex,
          InputStream x,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setAsciiStream(x, length);
      }
  
      public void setBinaryStream(
          int parameterIndex,
          InputStream x,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setBinaryStream(x, length);
      }
  
      public void setCharacterStream(
          int parameterIndex,
          Reader reader,
          long length) throws SQLException {
        getSite(parameterIndex)
            .setCharacterStream(reader, length);
      }
  
      public void setAsciiStream(
          int parameterIndex, InputStream x) throws SQLException {
        getSite(parameterIndex).setAsciiStream(x);
      }
  
      public void setBinaryStream(
          int parameterIndex, InputStream x) throws SQLException {
        getSite(parameterIndex).setBinaryStream(x);
      }
  
      public void setCharacterStream(
          int parameterIndex, Reader reader) throws SQLException {
        getSite(parameterIndex)
            .setCharacterStream(reader);
      }
  
      public void setNCharacterStream(
          int parameterIndex, Reader value) throws SQLException {
        getSite(parameterIndex)
            .setNCharacterStream(value);
      }
  
      public void setClob(
          int parameterIndex,
          Reader reader) throws SQLException {
        getSite(parameterIndex).setClob(reader);
      }
  
      public void setBlob(
          int parameterIndex, InputStream inputStream) throws SQLException {
        getSite(parameterIndex).setBlob(inputStream);
      }
  
      public void setNClob(
          int parameterIndex, Reader reader) throws SQLException {
        getSite(parameterIndex).setNClob(reader);
      }
    }
  
    /** Implementation of DatabaseMetaData for JDBC 4.1. */
    private static class AvaticaJdbc41DatabaseMetaData
        extends AvaticaDatabaseMetaData {
      AvaticaJdbc41DatabaseMetaData(AvaticaConnection connection) {
        super(connection);
      }
    }
  }
  
  // End AvaticaJdbc41Factory.java
  