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

Add and use ErrorCode.INVALID_PRECEDING_OR_FOLLOWING

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