Mercurial > hg > monetdb-java
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.