changeset 49:8217f77fcf6b embedded

Fixed row and column indexing
author Pedro Ferreira <pedro.ferreira@monetdbsolutions.com>
date Mon, 14 Nov 2016 17:47:58 +0100 (2016-11-14)
parents 8353929359d6
children 3b97ec05f6b1
files src/main/java/nl/cwi/monetdb/embedded/mapping/AbstractRowSet.java src/main/java/nl/cwi/monetdb/embedded/tables/MonetDBTable.java src/main/java/nl/cwi/monetdb/embedded/tables/RowIterator.java
diffstat 3 files changed, 17 insertions(+), 19 deletions(-) [+]
line wrap: on
line diff
--- a/src/main/java/nl/cwi/monetdb/embedded/mapping/AbstractRowSet.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/mapping/AbstractRowSet.java
@@ -20,8 +20,8 @@ public abstract class AbstractRowSet {
 
     protected AbstractRowSet(MonetDBToJavaMapping[] mappings, Object[][] rows) {
         this.mappings = mappings;
-        this.rows = new MonetDBRow[mappings.length];
-        for(int i = 0 ; i < mappings.length ; i++) {
+        this.rows = new MonetDBRow[rows.length];
+        for(int i = 0 ; i < rows.length ; i++) {
             this.rows[i] = new MonetDBRow(this, rows[i]);
         }
     }
--- a/src/main/java/nl/cwi/monetdb/embedded/tables/MonetDBTable.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/tables/MonetDBTable.java
@@ -82,8 +82,9 @@ public class MonetDBTable extends Abstra
         try {
             String query = "SELECT COUNT(*) FROM " + this.schemaName + "." + this.tableName + ";";
             QueryResultSet eqr = this.getConnection().sendQuery(query);
-            QueryResultSetColumn<Integer> eqc = eqr.getColumn(0);
-            res = eqc.fetchFirstNColumnValues(1)[0];
+            QueryResultSetColumn<Long> eqc = eqr.getColumn(0);
+            res = eqc.fetchFirstNColumnValues(1)[0].intValue();
+            eqr.close();
         } catch (MonetDBEmbeddedException ex) {
         }
         return res;
@@ -139,19 +140,16 @@ public class MonetDBTable extends Abstra
      */
     private int[] checkIterator(IMonetDBTableBaseIterator iterator) {
         int[] res = {iterator.getFirstRowToIterate(), iterator.getLastRowToIterate()};
-        if(res[0] == res[1]) {
-            throw new ArrayIndexOutOfBoundsException("Iterating over 0 rows?");
-        }
         if(res[1] < res[0]) {
             int aux = res[0];
             res[0] = res[1];
             res[0] = aux;
         }
-        if (res[0] < 0) {
-            res[0] = 0;
+        if (res[0] < 1) {
+            res[0] = 1;
         }
         int numberOfRows = this.getNumberOfRows();
-        if (res[1] > numberOfRows) {
+        if (res[1] >= numberOfRows) {
             res[1] = numberOfRows;
         }
         return res;
@@ -166,9 +164,9 @@ public class MonetDBTable extends Abstra
      */
     public int iterateTable(IMonetDBTableCursor cursor) throws MonetDBEmbeddedException {
         int[] limits = this.checkIterator(cursor);
-        int res = 0, total = limits[1] - limits[0];
+        int res = 0, total = limits[1] - limits[0] + 1;
         String query = new StringBuffer("SELECT * FROM ").append(this.schemaName).append(".").append(this.tableName)
-                .append(" LIMIT ").append(total).append(" OFFSET ").append(limits[0]).append(";").toString();
+                .append(" LIMIT ").append(total).append(" OFFSET ").append(limits[0] - 1).append(";").toString();
 
         QueryResultSet eqr = this.getConnection().sendQuery(query);
         MonetDBRow[] array = eqr.fetchAllRowValues().getAllRows();
@@ -326,13 +324,13 @@ public class MonetDBTable extends Abstra
      */
     public int appendColumns(Object[][] columns) throws MonetDBEmbeddedException {
         int numberOfRows = columns[0].length, numberOfColumns = this.getNumberOfColumns();
+        if (columns.length != numberOfColumns) {
+            throw new ArrayStoreException("The number of columns differs from the table's number of columns!");
+        }
         if(numberOfRows == 0) {
             throw new ArrayStoreException("Appending 0 rows?");
         }
-        if (columns.length != numberOfColumns) {
-            throw new ArrayStoreException("The number of columns differs from the table's number of columns!");
-        }
-        for (int i = 0; i < numberOfRows; i++) {
+        for (int i = 0; i < numberOfColumns; i++) {
             if(columns[i].length != numberOfRows) {
                 throw new ArrayStoreException("The number of rows in each column is not consistent!");
             }
--- a/src/main/java/nl/cwi/monetdb/embedded/tables/RowIterator.java
+++ b/src/main/java/nl/cwi/monetdb/embedded/tables/RowIterator.java
@@ -36,7 +36,7 @@ public class RowIterator extends Abstrac
         this.table = table;
         this.firstIndex = firstIndex;
         this.lastIndex = lastIndex;
-        this.currentIterationNumber = 0;
+        this.currentIterationNumber = -1;
     }
 
     /**
@@ -72,7 +72,7 @@ public class RowIterator extends Abstrac
      *
      * @return The current row number of the table in the iteration
      */
-    public int getCurrentTableRowNumber() { return this.currentIterationNumber + this.firstIndex; }
+    public int getCurrentTableRowNumber() { return this.firstIndex + this.currentIterationNumber; }
 
     /**
      * Gets the current row currentColumns values as Java objects.
@@ -86,7 +86,7 @@ public class RowIterator extends Abstrac
      *
      * @return There are more rows to iterate
      */
-    public boolean hasMore() { return this.currentIterationNumber < this.lastIndex; }
+    public boolean hasMore() { return this.currentIterationNumber + this.firstIndex < this.lastIndex; }
 
     /**
      * Gets a column value as a Java class.