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

Better error messages

上级 e0b3e410
...@@ -8,7 +8,7 @@ ...@@ -8,7 +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 22013=Invalid PRECEDING or FOLLOWING size in window function: {0}
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}
......
...@@ -140,7 +140,7 @@ public class ErrorCode { ...@@ -140,7 +140,7 @@ public class ErrorCode {
* FIRST_VALUE(N) OVER(ORDER BY N ROWS -1 PRECEDING) * FIRST_VALUE(N) OVER(ORDER BY N ROWS -1 PRECEDING)
* </pre> * </pre>
*/ */
public static final int INVALID_PRECEDING_OR_FOLLOWING = 22013; public static final int INVALID_PRECEDING_OR_FOLLOWING_1 = 22013;
/** /**
* The error with code <code>22018</code> is thrown when * The error with code <code>22018</code> is thrown when
......
...@@ -196,7 +196,7 @@ public abstract class DataAnalysisOperation extends Expression { ...@@ -196,7 +196,7 @@ public abstract class DataAnalysisOperation extends Expression {
private DbException getSingleSortKeyException() { private DbException getSingleSortKeyException() {
String sql = getSQL(); String sql = getSQL();
return DbException.getSyntaxError(sql, sql.length() - 1, "single sort key is required for RANGE units"); return DbException.getSyntaxError(sql, sql.length() - 1, "exactly one sort key is required for RANGE units");
} }
@Override @Override
......
...@@ -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.get(ErrorCode.INVALID_PRECEDING_OR_FOLLOWING); throw DbException.get(ErrorCode.INVALID_PRECEDING_OR_FOLLOWING_1, v.getTraceSQL());
} }
return value; return value;
} }
...@@ -368,7 +368,8 @@ public final class WindowFrame { ...@@ -368,7 +368,8 @@ public final class WindowFrame {
} }
break; break;
default: default:
throw DbException.getInvalidValueException("ORDER BY value for RANGE frame", currentValue.getTraceSQL()); throw DbException.getInvalidValueException("unsupported type of sort key for RANGE units",
currentValue.getTraceSQL());
} }
Value[] newRow = row.clone(); Value[] newRow = row.clone();
newRow[sortIndex] = newValue; newRow[sortIndex] = newValue;
...@@ -378,7 +379,7 @@ public final class WindowFrame { ...@@ -378,7 +379,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.get(ErrorCode.INVALID_PRECEDING_OR_FOLLOWING); throw DbException.get(ErrorCode.INVALID_PRECEDING_OR_FOLLOWING_1, value.getTraceSQL());
} }
return value; return value;
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +8,7 @@
22004=Численное значение вне допустимого диапазона: {0} в столбце {1} 22004=Численное значение вне допустимого диапазона: {0} в столбце {1}
22007=Невозможно преобразование строки {1} в тип {0} 22007=Невозможно преобразование строки {1} в тип {0}
22012=Деление на ноль: {0} 22012=Деление на ноль: {0}
22013=Недопустимое значение preceding или following в оконной функции 22013=Недопустимое значение PRECEDING или FOLLOWING в оконной функции: {0}
22018=Ошибка преобразования данных при конвертации {0} 22018=Ошибка преобразования данных при конвертации {0}
22025=Ошибка в LIKE ESCAPE: {0} 22025=Ошибка в LIKE ESCAPE: {0}
22030=Недопустимое значение для столбца {0}: {1} 22030=Недопустимое значение для столбца {0}: {1}
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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,7 +8,7 @@ ...@@ -8,7 +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 22013=#Invalid PRECEDING or FOLLOWING size in window function: {0}
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_PRECEDING_OR_FOLLOWING > exception INVALID_PRECEDING_OR_FOLLOWING_1
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_PRECEDING_OR_FOLLOWING > exception INVALID_PRECEDING_OR_FOLLOWING_1
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_PRECEDING_OR_FOLLOWING > exception INVALID_PRECEDING_OR_FOLLOWING_1
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 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论