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.util;
  
  import org.apache.calcite.avatica.ColumnMetaData;
  
  import org.joou.UByte;
  import org.joou.UInteger;
  import org.joou.ULong;
  import org.joou.UShort;
  
  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.SQLException;
  import java.sql.SQLXML;
  import java.sql.Struct;
  import java.sql.Time;
  import java.sql.Timestamp;
  import java.util.Calendar;
  import java.util.List;
  import java.util.Map;
  
  /**
   * Interface to an iteration that is similar to, and can easily support,
   * a JDBC {@link java.sql.ResultSet}, but is simpler to implement.
   */
  public interface Cursor extends AutoCloseable {
    /**
     * Creates a list of accessors, one per column.
     *
     *
     * @param types List of column types, per {@link java.sql.Types}.
     * @param localCalendar Calendar in local time zone
     * @param factory Factory that creates sub-ResultSets when needed
     * @return List of column accessors
     */
    List<Accessor> createAccessors(List<ColumnMetaData> types,
        Calendar localCalendar, ArrayImpl.Factory factory);
  
    /**
     * Moves to the next row.
     *
     * @return Whether moved
     *
     * @throws SQLException on database error
     */
    boolean next() throws SQLException;
  
    /**
     * Closes this cursor and releases resources.
     */
    void close();
  
    /**
     * Returns whether the last value returned was null.
     *
     * @throws SQLException on database error
     */
    boolean wasNull() throws SQLException;
  
    /**
     * Accessor of a column value.
     */
    interface Accessor {
      boolean wasNull() throws SQLException;
  
      String getString() throws SQLException;
  
      boolean getBoolean() throws SQLException;
  
      byte getByte() throws SQLException;
  
      UByte getUByte() throws SQLException;
  
      short getShort() throws SQLException;
  
      UShort getUShort() throws SQLException;
  
      int getInt() throws SQLException;
  
      UInteger getUInt() throws SQLException;
  
      long getLong() throws SQLException;
  
      ULong getULong() throws SQLException;
  
      float getFloat() throws SQLException;
  
      double getDouble() throws SQLException;
  
      BigDecimal getBigDecimal() throws SQLException;
  
      BigDecimal getBigDecimal(int scale) throws SQLException;
  
      byte[] getBytes() throws SQLException;
  
      InputStream getAsciiStream() throws SQLException;
  
      InputStream getUnicodeStream() throws SQLException;
  
      InputStream getBinaryStream() throws SQLException;
  
      Object getObject() throws SQLException;
  
      Reader getCharacterStream() throws SQLException;
  
      Object getObject(Map<String, Class<?>> map) throws SQLException;
  
      Ref getRef() throws SQLException;
  
      Blob getBlob() throws SQLException;
  
      Clob getClob() throws SQLException;
  
      Array getArray() throws SQLException;
  
      Struct getStruct() throws SQLException;
  
      Date getDate(Calendar calendar) throws SQLException;
  
      Time getTime(Calendar calendar) throws SQLException;
  
      Timestamp getTimestamp(Calendar calendar) throws SQLException;
  
      URL getURL() throws SQLException;
  
      NClob getNClob() throws SQLException;
  
      SQLXML getSQLXML() throws SQLException;
  
      String getNString() throws SQLException;
  
      Reader getNCharacterStream() throws SQLException;
  
      <T> T getObject(Class<T> type) throws SQLException;
    }
  }
  
  // End Cursor.java
  