DRILL-3766:  Fix ResultSet.getRow() (make 1-based; return 0 at end).

Corrected for Avatica's non-JDBC-compliant behavior.

Also purged unused imports.


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

Branch: refs/heads/master
Commit: 194680c564758b6c4fb0d7ce9f9d5432db270f55
Parents: e4f257b
Author: dbarclay <dbarc...@maprtech.com>
Authored: Wed Sep 23 18:13:56 2015 -0700
Committer: Hanifi Gunes <hanifigu...@gmail.com>
Committed: Mon Nov 9 12:17:03 2015 -0800

----------------------------------------------------------------------
 .../drill/jdbc/impl/DrillResultSetImpl.java     |  4 +-
 .../apache/drill/jdbc/DrillResultSetTest.java   | 61 ++++++++++++--------
 2 files changed, 39 insertions(+), 26 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/194680c5/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
----------------------------------------------------------------------
diff --git 
a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java 
b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
index d7de677..4878251 100644
--- a/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
+++ b/exec/jdbc/src/main/java/org/apache/drill/jdbc/impl/DrillResultSetImpl.java
@@ -545,7 +545,9 @@ class DrillResultSetImpl extends AvaticaResultSet 
implements DrillResultSet {
   @Override
   public int getRow() throws SQLException {
     throwIfClosed();
-    return super.getRow();
+    // Map Avatica's erroneous zero-based row numbers to 1-based, and return 0
+    // after end, per JDBC:
+    return isAfterLast() ? 0 : 1 + super.getRow();
   }
 
   @Override

http://git-wip-us.apache.org/repos/asf/drill/blob/194680c5/exec/jdbc/src/test/java/org/apache/drill/jdbc/DrillResultSetTest.java
----------------------------------------------------------------------
diff --git 
a/exec/jdbc/src/test/java/org/apache/drill/jdbc/DrillResultSetTest.java 
b/exec/jdbc/src/test/java/org/apache/drill/jdbc/DrillResultSetTest.java
index 2df173e..8574d28 100644
--- a/exec/jdbc/src/test/java/org/apache/drill/jdbc/DrillResultSetTest.java
+++ b/exec/jdbc/src/test/java/org/apache/drill/jdbc/DrillResultSetTest.java
@@ -20,44 +20,23 @@ package org.apache.drill.jdbc;
 import static org.junit.Assert.*;
 
 import java.sql.Connection;
-import java.sql.DriverManager;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.sql.Statement;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Properties;
-import java.util.Set;
-import java.util.SortedSet;
-import java.util.TreeSet;
-
-import net.hydromatic.linq4j.Ord;
-
-import org.apache.drill.common.config.DrillConfig;
-import org.apache.drill.common.logical.LogicalPlan;
-import org.apache.drill.common.logical.data.LogicalOperator;
-import org.apache.drill.common.util.Hook;
+
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.jdbc.test.JdbcAssert;
 import org.apache.drill.test.DrillTest;
 import org.junit.AfterClass;
-import org.junit.Assert;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
 import static org.hamcrest.CoreMatchers.instanceOf;
 import static org.hamcrest.CoreMatchers.equalTo;
-import static org.hamcrest.CoreMatchers.anyOf;
 import static org.hamcrest.core.StringContains.containsString;
 
-import com.google.common.base.Function;
-import com.google.common.base.Predicate;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Iterables;
-import com.google.common.collect.ImmutableSet.Builder;
+
 
 public class DrillResultSetTest extends DrillTest {
 
@@ -85,7 +64,8 @@ public class DrillResultSetTest extends DrillTest {
   public void test_next_blocksFurtherAccessAfterEnd()
       throws SQLException
   {
-    Connection connection = new Driver().connect( "jdbc:drill:zk=local", 
JdbcAssert.getDefaultProperties() );
+    Connection connection =
+        new Driver().connect( "jdbc:drill:zk=local", 
JdbcAssert.getDefaultProperties() );
     Statement statement = connection.createStatement();
     ResultSet resultSet =
         statement.executeQuery( "SELECT 1 AS x \n" +
@@ -125,7 +105,8 @@ public class DrillResultSetTest extends DrillTest {
   public void test_next_blocksFurtherAccessWhenNoRows()
     throws Exception
   {
-    Connection connection = new Driver().connect( "jdbc:drill:zk=local", 
JdbcAssert.getDefaultProperties() );
+    Connection connection =
+        new Driver().connect( "jdbc:drill:zk=local", 
JdbcAssert.getDefaultProperties() );
     Statement statement = connection.createStatement();
     ResultSet resultSet =
         statement.executeQuery( "SELECT 'Hi' AS x \n" +
@@ -155,6 +136,36 @@ public class DrillResultSetTest extends DrillTest {
     // TODO:  Ideally, test all other accessor methods.
   }
 
+  @Test
+  public void test_getRow_isOneBased()
+    throws Exception
+  {
+    Connection connection =
+        new Driver().connect( "jdbc:drill:zk=local", 
JdbcAssert.getDefaultProperties() );
+    Statement statement = connection.createStatement();
+    ResultSet resultSet =
+        statement.executeQuery( "VALUES (1), (2)" );
+
+    // Expect 0 when before first row:
+    assertThat( "getRow() before first next()", resultSet.getRow(), equalTo( 0 
) );
+
+    resultSet.next();
+
+    // Expect 1 at first row:
+    assertThat( "getRow() at first row", resultSet.getRow(), equalTo( 1 ) );
+
+    resultSet.next();
+
+    // Expect 2 at second row:
+    assertThat( "getRow() at second row", resultSet.getRow(), equalTo( 2 ) );
+
+    resultSet.next();
+
+    // Expect 0 again when after last row:
+    assertThat( "getRow() after last row", resultSet.getRow(), equalTo( 0 ) );
+    resultSet.next();
+    assertThat( "getRow() after last row", resultSet.getRow(), equalTo( 0 ) );
+  }
 
   // TODO:  Ideally, test other methods.
 

Reply via email to