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