提交 59d222f5 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Return a long from ROWNUM()

上级 69bae116
...@@ -5139,7 +5139,7 @@ READONLY() ...@@ -5139,7 +5139,7 @@ READONLY()
ROWNUM() ROWNUM()
"," ","
Returns the number of the current row. Returns the number of the current row.
This method returns an integer value. This method returns a long value.
It is supported for SELECT statements, as well as for DELETE and UPDATE. It is supported for SELECT statements, as well as for DELETE and UPDATE.
The first row has the row number 1, and is calculated before ordering and grouping the result set, The first row has the row number 1, and is calculated before ordering and grouping the result set,
but after evaluating index conditions (even when the index conditions are specified in an outer query). but after evaluating index conditions (even when the index conditions are specified in an outer query).
......
...@@ -17,6 +17,7 @@ import org.h2.message.DbException; ...@@ -17,6 +17,7 @@ import org.h2.message.DbException;
import org.h2.message.Trace; import org.h2.message.Trace;
import org.h2.result.ResultInterface; import org.h2.result.ResultInterface;
import org.h2.table.TableView; import org.h2.table.TableView;
import org.h2.util.MathUtils;
import org.h2.util.StatementBuilder; import org.h2.util.StatementBuilder;
import org.h2.value.Value; import org.h2.value.Value;
...@@ -60,7 +61,7 @@ public abstract class Prepared { ...@@ -60,7 +61,7 @@ public abstract class Prepared {
* already read, {@code >0} if object is stored and its id is not yet read. * already read, {@code >0} if object is stored and its id is not yet read.
*/ */
private int persistedObjectId; private int persistedObjectId;
private int currentRowNumber; private long currentRowNumber;
private int rowScanCount; private int rowScanCount;
/** /**
* Common table expressions (CTE) in queries require us to create temporary views, * Common table expressions (CTE) in queries require us to create temporary views,
...@@ -356,7 +357,7 @@ public abstract class Prepared { ...@@ -356,7 +357,7 @@ public abstract class Prepared {
* *
* @param rowNumber the row number * @param rowNumber the row number
*/ */
public void setCurrentRowNumber(int rowNumber) { public void setCurrentRowNumber(long rowNumber) {
if ((++rowScanCount & 127) == 0) { if ((++rowScanCount & 127) == 0) {
checkCanceled(); checkCanceled();
} }
...@@ -369,7 +370,7 @@ public abstract class Prepared { ...@@ -369,7 +370,7 @@ public abstract class Prepared {
* *
* @return the row number * @return the row number
*/ */
public int getCurrentRowNumber() { public long getCurrentRowNumber() {
return currentRowNumber; return currentRowNumber;
} }
...@@ -380,7 +381,9 @@ public abstract class Prepared { ...@@ -380,7 +381,9 @@ public abstract class Prepared {
if ((currentRowNumber & 127) == 0) { if ((currentRowNumber & 127) == 0) {
session.getDatabase().setProgress( session.getDatabase().setProgress(
DatabaseEventListener.STATE_STATEMENT_PROGRESS, DatabaseEventListener.STATE_STATEMENT_PROGRESS,
sqlStatement, currentRowNumber, 0); sqlStatement,
// TODO update interface
MathUtils.convertLongToInt(currentRowNumber), 0);
} }
} }
......
...@@ -400,7 +400,7 @@ public class Insert extends Prepared implements ResultTarget { ...@@ -400,7 +400,7 @@ public class Insert extends Prepared implements ResultTarget {
ArrayList<String> variableNames = new ArrayList<>( ArrayList<String> variableNames = new ArrayList<>(
duplicateKeyAssignmentMap.size()); duplicateKeyAssignmentMap.size());
Expression[] row = (currentRow == null) ? list.get(getCurrentRowNumber() - 1) Expression[] row = (currentRow == null) ? list.get((int) getCurrentRowNumber() - 1)
: new Expression[columns.length]; : new Expression[columns.length];
for (int i = 0; i < columns.length; i++) { for (int i = 0; i < columns.length; i++) {
String key = table.getSchema().getName() + "." + String key = table.getSchema().getName() + "." +
......
...@@ -438,7 +438,7 @@ public class Select extends Query { ...@@ -438,7 +438,7 @@ public class Select extends Query {
} }
private void gatherGroup(int columnCount, int stage) { private void gatherGroup(int columnCount, int stage) {
int rowNumber = 0; long rowNumber = 0;
setCurrentRowNumber(0); setCurrentRowNumber(0);
int sampleSize = getSampleSizeValue(session); int sampleSize = getSampleSizeValue(session);
ArrayList<Row>[] forUpdateRows = initForUpdateRows(); ArrayList<Row>[] forUpdateRows = initForUpdateRows();
...@@ -583,7 +583,7 @@ public class Select extends Query { ...@@ -583,7 +583,7 @@ public class Select extends Query {
limitRows = Long.MAX_VALUE; limitRows = Long.MAX_VALUE;
} }
} }
int rowNumber = 0; long rowNumber = 0;
setCurrentRowNumber(0); setCurrentRowNumber(0);
Index index = topTableFilter.getIndex(); Index index = topTableFilter.getIndex();
SearchRow first = null; SearchRow first = null;
...@@ -1665,7 +1665,7 @@ public class Select extends Query { ...@@ -1665,7 +1665,7 @@ public class Select extends Query {
*/ */
private abstract class LazyResultSelect extends LazyResult { private abstract class LazyResultSelect extends LazyResult {
int rowNumber; long rowNumber;
int columnCount; int columnCount;
LazyResultSelect(Expression[] expressions, int columnCount) { LazyResultSelect(Expression[] expressions, int columnCount) {
......
...@@ -11,7 +11,7 @@ import org.h2.message.DbException; ...@@ -11,7 +11,7 @@ import org.h2.message.DbException;
import org.h2.table.ColumnResolver; import org.h2.table.ColumnResolver;
import org.h2.table.TableFilter; import org.h2.table.TableFilter;
import org.h2.value.Value; import org.h2.value.Value;
import org.h2.value.ValueInt; import org.h2.value.ValueLong;
/** /**
* Represents the ROWNUM function. * Represents the ROWNUM function.
...@@ -29,7 +29,7 @@ public class Rownum extends Expression { ...@@ -29,7 +29,7 @@ public class Rownum extends Expression {
@Override @Override
public Value getValue(Session session) { public Value getValue(Session session) {
return ValueInt.get(prepared.getCurrentRowNumber()); return ValueLong.get(prepared.getCurrentRowNumber());
} }
@Override @Override
...@@ -59,12 +59,12 @@ public class Rownum extends Expression { ...@@ -59,12 +59,12 @@ public class Rownum extends Expression {
@Override @Override
public long getPrecision() { public long getPrecision() {
return ValueInt.PRECISION; return ValueLong.PRECISION;
} }
@Override @Override
public int getDisplaySize() { public int getDisplaySize() {
return ValueInt.DISPLAY_SIZE; return ValueLong.DISPLAY_SIZE;
} }
@Override @Override
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论