diff --git a/dbms/src/Columns/FilterDescription.cpp b/dbms/src/Columns/FilterDescription.cpp index 57da37f6a03..1d29cd97435 100644 --- a/dbms/src/Columns/FilterDescription.cpp +++ b/dbms/src/Columns/FilterDescription.cpp @@ -25,7 +25,20 @@ ConstantFilterDescription::ConstantFilterDescription(const IColumn & column) if (column.isColumnConst()) { - if (static_cast(column).getValue()) + const ColumnConst & column_const = static_cast(column); + const IColumn & column_nested = column_const.getDataColumn(); + + if (!typeid_cast(&column_nested)) + { + const ColumnNullable * column_nested_nullable = typeid_cast(&column_nested); + if (!column_nested_nullable || !typeid_cast(&column_nested_nullable->getNestedColumn())) + { + throw Exception("Illegal type " + column_nested.getName() + " of column for constant filter. Must be UInt8 or Nullable(UInt8).", + ErrorCodes::ILLEGAL_TYPE_OF_COLUMN_FOR_FILTER); + } + } + + if (column_const.getValue()) always_true = true; else always_false = true; diff --git a/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh b/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh index d20094b1e61..858016efd91 100755 --- a/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh +++ b/dbms/tests/queries/0_stateless/00385_storage_file_and_clickhouse-local_app.sh @@ -25,7 +25,7 @@ function pack_unpack_compare() ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.buf" ${CLICKHOUSE_CLIENT} --query "DROP TABLE IF EXISTS test.buf_file" - rm -f "${CLICKHOUSE_TMP}/$buf_file" stderr + rm -f "$buf_file" stderr echo $((res_orig - res_db_file)) $((res_orig - res_ch_local1)) $((res_orig - res_ch_local2)) } diff --git a/dbms/tests/queries/0_stateless/00540_bad_data_types.reference b/dbms/tests/queries/0_stateless/00540_bad_data_types.reference index 2b578b5fc5c..a598a35471e 100644 --- a/dbms/tests/queries/0_stateless/00540_bad_data_types.reference +++ b/dbms/tests/queries/0_stateless/00540_bad_data_types.reference @@ -1 +1,4 @@ 0000-00-00 00:00:00 + +0 +0 diff --git a/dbms/tests/queries/0_stateless/00540_bad_data_types.sh b/dbms/tests/queries/0_stateless/00540_bad_data_types.sh index 88437230919..245a0abe0fa 100755 --- a/dbms/tests/queries/0_stateless/00540_bad_data_types.sh +++ b/dbms/tests/queries/0_stateless/00540_bad_data_types.sh @@ -10,3 +10,15 @@ $CLICKHOUSE_CLIENT --query="SELECT CAST(0 AS Tuple)" 2>/dev/null || true; $CLICKHOUSE_CLIENT --query="SELECT CAST(0 AS FixedString)" 2>/dev/null || true; $CLICKHOUSE_CLIENT --query="SELECT CAST(0 AS Enum)" 2>/dev/null || true; $CLICKHOUSE_CLIENT --query="SELECT CAST(0 AS DateTime)"; + +echo + +($CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE toString(dummy)" 2>/dev/null && echo "Expected failure") || true; +($CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE toString(1)" 2>/dev/null && echo "Expected failure") || true; +($CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE 256" 2>/dev/null && echo "Expected failure") || true; +($CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE -1" 2>/dev/null && echo "Expected failure") || true; +($CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE CAST(256 AS Nullable(UInt16))" 2>/dev/null && echo "Expected failure") || true; + +$CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE CAST(NULL AS Nullable(UInt8))" +$CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE 255" +$CLICKHOUSE_CLIENT --query="SELECT * FROM system.one WHERE CAST(255 AS Nullable(UInt8))"