提交 d24688b4 authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Add and use ErrorCode.INVALID_PRECEDING_OR_FOLLOWING

上级 f834f3c5
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=Numeric value out of range: {0} in column {1} 22004=Numeric value out of range: {0} in column {1}
22007=Cannot parse {0} constant {1} 22007=Cannot parse {0} constant {1}
22012=Division by zero: {0} 22012=Division by zero: {0}
22013=Invalid preceding of following size in window function
22018=Data conversion error converting {0} 22018=Data conversion error converting {0}
22025=Error in LIKE ESCAPE: {0} 22025=Error in LIKE ESCAPE: {0}
22030=Value not permitted for column {0}: {1} 22030=Value not permitted for column {0}: {1}
......
...@@ -133,6 +133,15 @@ public class ErrorCode { ...@@ -133,6 +133,15 @@ public class ErrorCode {
*/ */
public static final int DIVISION_BY_ZERO_1 = 22012; public static final int DIVISION_BY_ZERO_1 = 22012;
/**
* The error with code <code>22013</code> is thrown when preceding or
* following size in a window function is null or negative. Example:
* <pre>
* FIRST_VALUE(N) OVER(ORDER BY N ROWS -1 PRECEDING)
* </pre>
*/
public static final int INVALID_PRECEDING_OR_FOLLOWING = 22013;
/** /**
* The error with code <code>22018</code> is thrown when * The error with code <code>22018</code> is thrown when
* trying to convert a value to a data type where the conversion is * trying to convert a value to a data type where the conversion is
......
...@@ -293,7 +293,7 @@ public final class WindowFrame { ...@@ -293,7 +293,7 @@ public final class WindowFrame {
Value v = bound.isVariable() ? values[bound.getExpressionIndex()] : bound.getValue().getValue(session); Value v = bound.isVariable() ? values[bound.getExpressionIndex()] : bound.getValue().getValue(session);
int value = v.getInt(); int value = v.getInt();
if (v == ValueNull.INSTANCE || value < 0) { if (v == ValueNull.INSTANCE || value < 0) {
throw DbException.getInvalidValueException("unsigned range", v.getTraceSQL()); throw DbException.get(ErrorCode.INVALID_PRECEDING_OR_FOLLOWING);
} }
return value; return value;
} }
...@@ -378,7 +378,7 @@ public final class WindowFrame { ...@@ -378,7 +378,7 @@ public final class WindowFrame {
private static Value getValueOffset(WindowFrameBound bound, Value[] values, Session session) { private static Value getValueOffset(WindowFrameBound bound, Value[] values, Session session) {
Value value = bound.isVariable() ? values[bound.getExpressionIndex()] : bound.getValue().getValue(session); Value value = bound.isVariable() ? values[bound.getExpressionIndex()] : bound.getValue().getValue(session);
if (value == ValueNull.INSTANCE || value.getSignum() < 0) { if (value == ValueNull.INSTANCE || value.getSignum() < 0) {
throw DbException.getInvalidValueException("unsigned range", value.getTraceSQL()); throw DbException.get(ErrorCode.INVALID_PRECEDING_OR_FOLLOWING);
} }
return value; return value;
} }
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=Nelze zpracovat konstantu {0} {1} 22007=Nelze zpracovat konstantu {0} {1}
22012=Dělení nulou: {0} 22012=Dělení nulou: {0}
22013=#Invalid preceding of following size in window function
22018=Chyba při převodu dat {0} 22018=Chyba při převodu dat {0}
22025=Chyba v LIKE escapování: {0} 22025=Chyba v LIKE escapování: {0}
22030=#Value not permitted for column {0}: {1} 22030=#Value not permitted for column {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=Numerischer Wert ausserhalb des Bereichs: {0} in Feld {1} 22004=Numerischer Wert ausserhalb des Bereichs: {0} in Feld {1}
22007=Kann {0} {1} nicht umwandeln 22007=Kann {0} {1} nicht umwandeln
22012=Division durch 0: {0} 22012=Division durch 0: {0}
22013=#Invalid preceding of following size in window function
22018=Datenumwandlungsfehler beim Umwandeln von {0} 22018=Datenumwandlungsfehler beim Umwandeln von {0}
22025=Fehler in LIKE ESCAPE: {0} 22025=Fehler in LIKE ESCAPE: {0}
22030=Wert nicht erlaubt für Feld {0}: {1} 22030=Wert nicht erlaubt für Feld {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=Numeric value out of range: {0} in column {1} 22004=Numeric value out of range: {0} in column {1}
22007=Cannot parse {0} constant {1} 22007=Cannot parse {0} constant {1}
22012=Division by zero: {0} 22012=Division by zero: {0}
22013=Invalid preceding of following size in window function
22018=Data conversion error converting {0} 22018=Data conversion error converting {0}
22025=Error in LIKE ESCAPE: {0} 22025=Error in LIKE ESCAPE: {0}
22030=Value not permitted for column {0}: {1} 22030=Value not permitted for column {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=Imposible interpretar la constante {0} {1} 22007=Imposible interpretar la constante {0} {1}
22012=División por cero: {0} 22012=División por cero: {0}
22013=#Invalid preceding of following size in window function
22018=Conversión de datos fallida, convirtiendo {0} 22018=Conversión de datos fallida, convirtiendo {0}
22025=Error en LIKE ESCAPE: {0} 22025=Error en LIKE ESCAPE: {0}
22030=Valor no permitido para la columna {0}: {1} 22030=Valor no permitido para la columna {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=Impossible d''analyser {0} constante {1} 22007=Impossible d''analyser {0} constante {1}
22012=Division par zéro: {0} 22012=Division par zéro: {0}
22013=#Invalid preceding of following size in window function
22018=Erreur lors de la conversion de données {0} 22018=Erreur lors de la conversion de données {0}
22025=Erreur dans LIKE ESCAPE: {0} 22025=Erreur dans LIKE ESCAPE: {0}
22030=Valeur non permise pour la colonne {0}: {1} 22030=Valeur non permise pour la colonne {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007={0} 定数 {1} を解析できません 22007={0} 定数 {1} を解析できません
22012=ゼロで除算しました: {0} 22012=ゼロで除算しました: {0}
22013=#Invalid preceding of following size in window function
22018=データ変換中にエラーが発生しました {0} 22018=データ変換中にエラーが発生しました {0}
22025=LIKE ESCAPE にエラーがあります: {0} 22025=LIKE ESCAPE にエラーがあります: {0}
22030=#Value not permitted for column {0}: {1} 22030=#Value not permitted for column {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=Nie można odczytać {0} jako {1} 22007=Nie można odczytać {0} jako {1}
22012=Dzielenie przez zero: {0} 22012=Dzielenie przez zero: {0}
22013=#Invalid preceding of following size in window function
22018=Błąd konwersji danych {0} 22018=Błąd konwersji danych {0}
22025=Błąd w LIKE ESCAPE: {0} 22025=Błąd w LIKE ESCAPE: {0}
22030=#Value not permitted for column {0}: {1} 22030=#Value not permitted for column {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=Não é possível converter {1} para {0} 22007=Não é possível converter {1} para {0}
22012=Divisão por zero: {0} 22012=Divisão por zero: {0}
22013=#Invalid preceding of following size in window function
22018=Erro na conversão de dado, convertendo {0} 22018=Erro na conversão de dado, convertendo {0}
22025=Erro em LIKE ESCAPE: {0} 22025=Erro em LIKE ESCAPE: {0}
22030=#Value not permitted for column {0}: {1} 22030=#Value not permitted for column {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=Численное значение вне допустимого диапазона: {0} в столбце {1} 22004=Численное значение вне допустимого диапазона: {0} в столбце {1}
22007=Невозможно преобразование строки {1} в тип {0} 22007=Невозможно преобразование строки {1} в тип {0}
22012=Деление на ноль: {0} 22012=Деление на ноль: {0}
22013=Недопустимое значение preceding или following в оконной функции
22018=Ошибка преобразования данных при конвертации {0} 22018=Ошибка преобразования данных при конвертации {0}
22025=Ошибка в LIKE ESCAPE: {0} 22025=Ошибка в LIKE ESCAPE: {0}
22030=Недопустимое значение для столбца {0}: {1} 22030=Недопустимое значение для столбца {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=Nemožem rozobrať {0} konštantu {1} 22007=Nemožem rozobrať {0} konštantu {1}
22012=Delenie nulou: {0} 22012=Delenie nulou: {0}
22013=#Invalid preceding of following size in window function
22018=Chyba konverzie dát pre {0} 22018=Chyba konverzie dát pre {0}
22025=Chyba v LIKE ESCAPE: {0} 22025=Chyba v LIKE ESCAPE: {0}
22030=#Value not permitted for column {0}: {1} 22030=#Value not permitted for column {0}: {1}
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
22004=#Numeric value out of range: {0} in column {1} 22004=#Numeric value out of range: {0} in column {1}
22007=不能解析字段 {0} 的数值 :{1} 22007=不能解析字段 {0} 的数值 :{1}
22012=除数为零: {0} 22012=除数为零: {0}
22013=#Invalid preceding of following size in window function
22018=转换数据{0}期间出现转换错误 22018=转换数据{0}期间出现转换错误
22025=LIKE ESCAPE(转义符)存在错误: {0} 22025=LIKE ESCAPE(转义符)存在错误: {0}
22030=#Value not permitted for column {0}: {1} 22030=#Value not permitted for column {0}: {1}
......
...@@ -345,7 +345,7 @@ SELECT *, ...@@ -345,7 +345,7 @@ SELECT *,
> rows: 8 > rows: 8
SELECT *, ARRAY_AGG(ID) OVER (ORDER BY VALUE ROWS -1 PRECEDING) FROM TEST; SELECT *, ARRAY_AGG(ID) OVER (ORDER BY VALUE ROWS -1 PRECEDING) FROM TEST;
> exception INVALID_VALUE_2 > exception INVALID_PRECEDING_OR_FOLLOWING
SELECT *, ARRAY_AGG(ID) OVER (ORDER BY ID ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) FROM TEST FETCH FIRST 4 ROWS ONLY; SELECT *, ARRAY_AGG(ID) OVER (ORDER BY ID ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) FROM TEST FETCH FIRST 4 ROWS ONLY;
> ID VALUE ARRAY_AGG(ID) OVER (ORDER BY ID ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) > ID VALUE ARRAY_AGG(ID) OVER (ORDER BY ID ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING)
......
...@@ -110,10 +110,10 @@ SELECT ROW_NUMBER() OVER (ORDER BY CATEGORY), SUM(ID) FROM TEST GROUP BY CATEGOR ...@@ -110,10 +110,10 @@ SELECT ROW_NUMBER() OVER (ORDER BY CATEGORY), SUM(ID) FROM TEST GROUP BY CATEGOR
> rows: 1 > rows: 1
SELECT SUM(ID) OVER (ORDER BY ID ROWS NULL PRECEDING) P FROM TEST; SELECT SUM(ID) OVER (ORDER BY ID ROWS NULL PRECEDING) P FROM TEST;
> exception INVALID_VALUE_2 > exception INVALID_PRECEDING_OR_FOLLOWING
SELECT SUM(ID) OVER (ORDER BY ID RANGE NULL PRECEDING) P FROM TEST; SELECT SUM(ID) OVER (ORDER BY ID RANGE NULL PRECEDING) P FROM TEST;
> exception INVALID_VALUE_2 > exception INVALID_PRECEDING_OR_FOLLOWING
SELECT ARRAY_AGG(ID) OVER (ORDER BY V NULLS FIRST RANGE BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING) A, SELECT ARRAY_AGG(ID) OVER (ORDER BY V NULLS FIRST RANGE BETWEEN 1 PRECEDING AND UNBOUNDED FOLLOWING) A,
ID, V FROM VALUES (1, 1), (2, NULL), (3, 2) T(ID, V) ORDER BY V NULLS FIRST; ID, V FROM VALUES (1, 1), (2, NULL), (3, 2) T(ID, V) ORDER BY V NULLS FIRST;
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论