blob: 09f98e6036fc573d28afb92719040ef1f83a9a2e [file] [log] [blame]
ij> --
-- Licensed to the Apache Software Foundation (ASF) under one or more
-- contributor license agreements. See the NOTICE file distributed with
-- this work for additional information regarding copyright ownership.
-- The ASF licenses this file to You under the Apache License, Version 2.0
-- (the "License"); you may not use this file except in compliance with
-- the License. You may obtain a copy of the License at
--
-- http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--
--
-- test that we do not allow incorrect where <boolean> syntax
create table t1 (c11 int);
0 rows inserted/updated/deleted
ij> insert into t1 values (1);
1 row inserted/updated/deleted
ij> autocommit off;
ij> -- positive tests
-- In following test cases, where clause results in a boolean value
prepare p1 as 'select * from t1 where ?=1';
ij> execute p1 using 'values(1)';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where ? like ''2'' ';
ij> execute p1 using 'values(''a'')';
C11
-----------
ij> prepare p1 as 'select * from t1 where not ? > 1';
ij> execute p1 using 'values(1)';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where lower(?) = ''a''';
ij> execute p1 using 'values(''a'')';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where {fn length(?)} > 1';
ij> execute p1 using 'values(''a'')';
C11
-----------
ij> prepare p1 as 'select * from t1 where {fn locate(?,''a'',1)} = 1';
ij> execute p1 using 'values(''a'')';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where ? between 1 and 3';
ij> execute p1 using 'values(2)';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where ? in (1, ?)';
ij> execute p1 using 'values(2,1)';
C11
-----------
ij> prepare p1 as 'select * from t1 where ? is null';
ij> execute p1 using 'values(1)';
C11
-----------
ij> prepare p1 as 'select * from t1 where ? is not null';
ij> execute p1 using 'values(1)';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where ? <> ALL (values(1))';
ij> execute p1 using 'values(3)';
C11
-----------
1
ij> prepare p1 as 'select * from t1 where exists (select c11 from t1 where 1=?)';
ij> execute p1 using 'values(3)';
C11
-----------
ij> prepare p1 as 'select * from t1 where cast(? as int) = 1';
ij> execute p1 using 'values(1)';
C11
-----------
1
ij> -- negative tests
-- In following test cases, there is no way to ensure where with ? will result in a boolean value
prepare p1 as 'select * from t1 where c11';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'INTEGER' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where c11+1';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'INTEGER' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where 1';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'INTEGER' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where ?';
ERROR 42X19: The WHERE or HAVING clause or CHECK CONSTRAINT definition is an untyped parameter expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where ? for update';
ERROR 42X19: The WHERE or HAVING clause or CHECK CONSTRAINT definition is an untyped parameter expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where (?)';
ERROR 42X19: The WHERE or HAVING clause or CHECK CONSTRAINT definition is an untyped parameter expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where ? and 1=1';
ERROR 42X19: The WHERE or HAVING clause or CHECK CONSTRAINT definition is an untyped parameter expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where ? and 1=? or 2=2';
ERROR 42X19: The WHERE or HAVING clause or CHECK CONSTRAINT definition is an untyped parameter expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where not ?';
ERROR 42X36: The 'not' operator is not allowed to take a ? parameter as an operand.
ij> prepare p1 as 'select * from t1 where lower(?)';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'VARCHAR' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where lower(?) and 1=1';
ERROR 42Y94: An AND or OR has a non-boolean operand. The operands of AND and OR must evaluate to TRUE, FALSE, or UNKNOWN.
ij> prepare p1 as 'select * from t1 where {fn length(?)}';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'INTEGER' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where {fn locate(?,''a'',1)}';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'INTEGER' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where cast(? as int)';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'INTEGER' expression. It must be a BOOLEAN expression.
ij> prepare p1 as 'select * from t1 where (?||''1'')';
ERROR 42X19: The WHERE, WHEN or HAVING clause or CHECK CONSTRAINT definition is a 'LONG VARCHAR' expression. It must be a BOOLEAN expression.
ij>