You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by la...@apache.org on 2018/04/28 21:21:43 UTC

calcite-avatica git commit: [CALCITE-2218] Fix AvaticaResultSet#getRow()

Repository: calcite-avatica
Updated Branches:
  refs/heads/master 2501d351f -> ac26f81ee


[CALCITE-2218] Fix AvaticaResultSet#getRow()

According to JDBC spec/Javadoc, ResultSet#getRow() method is 1-indexed
based, but AvaticaResultSet#getRow() is 0-indexed based.

Close apache/calcite-avatica#32


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

Branch: refs/heads/master
Commit: ac26f81ee13cf8ea04a17b7d27e4e2c52f6fbd91
Parents: 2501d35
Author: Laurent Goujon <la...@online.fr>
Authored: Sun Mar 18 15:57:46 2018 -0700
Committer: Laurent Goujon <la...@apache.org>
Committed: Sat Apr 28 14:20:38 2018 -0700

----------------------------------------------------------------------
 .../calcite/avatica/AvaticaResultSet.java       | 13 ++--
 .../calcite/avatica/AvaticaResultSetTest.java   | 73 ++++++++++++++++++++
 2 files changed, 82 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/ac26f81e/core/src/main/java/org/apache/calcite/avatica/AvaticaResultSet.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/calcite/avatica/AvaticaResultSet.java b/core/src/main/java/org/apache/calcite/avatica/AvaticaResultSet.java
index 21d7300..19d9317 100644
--- a/core/src/main/java/org/apache/calcite/avatica/AvaticaResultSet.java
+++ b/core/src/main/java/org/apache/calcite/avatica/AvaticaResultSet.java
@@ -61,6 +61,7 @@ public class AvaticaResultSet extends ArrayFactoryImpl implements ResultSet {
   protected Cursor cursor;
   protected List<Cursor.Accessor> accessorList;
   private int row;
+  private boolean beforeFirst;
   private boolean afterLast;
   private int fetchDirection;
   private int fetchSize;
@@ -174,7 +175,8 @@ public class AvaticaResultSet extends ArrayFactoryImpl implements ResultSet {
     this.cursor = MetaImpl.createCursor(signature.cursorFactory, iterable1);
     this.accessorList =
         cursor.createAccessors(columnMetaDataList, localCalendar, this);
-    this.row = -1;
+    this.row = 0;
+    this.beforeFirst = true;
     this.afterLast = false;
     return this;
   }
@@ -184,7 +186,8 @@ public class AvaticaResultSet extends ArrayFactoryImpl implements ResultSet {
     this.cursor = cursor;
     this.accessorList =
         cursor.createAccessors(columnMetaDataList, localCalendar, this);
-    this.row = -1;
+    this.row = 0;
+    this.beforeFirst = true;
     this.afterLast = false;
     return this;
   }
@@ -206,8 +209,10 @@ public class AvaticaResultSet extends ArrayFactoryImpl implements ResultSet {
     }
     if (cursor.next()) {
       ++row;
+      beforeFirst = false;
       return true;
     } else {
+      row = 0;
       afterLast = true;
       return false;
     }
@@ -398,7 +403,7 @@ public class AvaticaResultSet extends ArrayFactoryImpl implements ResultSet {
   }
 
   public boolean isBeforeFirst() throws SQLException {
-    return row < 0;
+    return beforeFirst;
   }
 
   public boolean isAfterLast() throws SQLException {
@@ -406,7 +411,7 @@ public class AvaticaResultSet extends ArrayFactoryImpl implements ResultSet {
   }
 
   public boolean isFirst() throws SQLException {
-    return row == 0;
+    return row == 1;
   }
 
   public boolean isLast() throws SQLException {

http://git-wip-us.apache.org/repos/asf/calcite-avatica/blob/ac26f81e/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetTest.java b/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetTest.java
new file mode 100644
index 0000000..3536747
--- /dev/null
+++ b/core/src/test/java/org/apache/calcite/avatica/AvaticaResultSetTest.java
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.calcite.avatica;
+
+import org.junit.Test;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.Properties;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Test class for {@link AvaticaResultSet}
+ */
+public class AvaticaResultSetTest {
+
+  /**
+   * A fake test driver for test.
+   */
+  private static final class TestDriver extends UnregisteredDriver {
+
+    @Override protected DriverVersion createDriverVersion() {
+      return new DriverVersion("test", "test 0.0.0", "test", "test 0.0.0", false, 0, 0, 0, 0);
+    }
+
+    @Override protected String getConnectStringPrefix() {
+      return "jdbc:test";
+    }
+
+    @Override public Meta createMeta(AvaticaConnection connection) {
+      return new AvaticaResultSetConversionsTest.TestMetaImpl(connection);
+    }
+  }
+
+  @Test public void testGetRow() throws SQLException {
+    Properties properties = new Properties();
+    properties.setProperty("timeZone", "GMT");
+
+    final TestDriver driver = new TestDriver();
+    try (Connection connection = driver.connect("jdbc:test", properties);
+         ResultSet resultSet =
+             connection.createStatement().executeQuery("SELECT * FROM TABLE")) {
+      assertEquals(0, resultSet.getRow());
+
+      // checking that return values of getRow() are coherent
+      assertTrue(resultSet.next());
+      assertEquals(1, resultSet.getRow());
+      // should be past last record
+      assertFalse(resultSet.next());
+      assertEquals(0, resultSet.getRow());
+    }
+  }
+}
+
+// End AvaticaResultSetTest.java