blob: b2071809e5ed36bc8c79ffe10aa4e8ed17683e90 [file]
#!/bin/env python
# -*- coding: utf-8 -*-
# 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.
import sys
sys.path.append("../lib/")
from palo_qe_client import QueryBase
table_name = "test"
join_name = "baseall"
def setup_module():
"""
init config
"""
global runner
runner = QueryBase()
def test_query_between():
"""
{
"title": "test_query_predicates.test_query_between",
"describe": "between",
"tag": "function,p0"
}
"""
"""
between
"""
line = "select if(k1 between 1 and 2, 2, 0) as wj from %s order by wj" % (table_name)
runner.check(line)
line = "select k1 from %s where k1 between 3 and 4 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k2 from %s where k2 between 1980 and 1990 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k3 from %s where k3 between 1000 and 2000 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k4 from %s where k4 between -100000000 and 0 \
order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k6 from %s where lower(k6) between 'f' and 'false' \
order by k1, k2, k3, k4" % (join_name)
runner.check(line)
line = "select k7 from %s where lower(k7) between 'a' and 'g' order by k1, k2, k3, k4"\
% (table_name)
runner.check(line)
line = "select k8 from %s where k8 between -2 and 0 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k10 from %s where k10 between \"2015-04-02 00:00:00\" \
and \"9999-12-31 12:12:12\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k11 from %s where k11 between \"2015-04-02 00:00:00\" \
and \"9999-12-31 12:12:12\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k10 from %s where k10 between \"2015-04-02\" \
and \"9999-12-31\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k9 from %s where k9 between -1 and 6.333 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k5 from %s where k5 between 0 and 1243.5 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
def test_query_cmp():
"""
{
"title": "test_query_predicates.test_query_cmp",
"describe": "query contains where, where contains =, like, <>, <, <=, >, >=, !=",
"tag": "function,p0"
}
"""
"""
query contains where
where contains =, like, <>, <, <=, >, >=, !=
"""
line = "select k1 from %s where k1 < 4 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k2 from %s where k2 < 1990 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k3 from %s where k3 < 2000 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k4 from %s where k4 < 0 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k5 from %s where k5 < 1243.5 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select lower(k6) from %s where lower(k6) < 'false' order by lower(k6)" % (join_name)
runner.check(line)
line = "select lower(k7) from %s where lower(k7) < 'g' order by lower(k7)" % (join_name)
runner.check(line)
line = "select k8 from %s where k8 < 0 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k9 from %s where k9 < 6.333 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1 from %s where k1 <> 4 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k2 from %s where k2 <> 1989 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k3 from %s where k3 <> 1001 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k4 from %s where k4 <> -11011903 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k5 from %s where k5 <> 1243.5 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k6 from %s where k6 <> 'false' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k7 from %s where k7 <> 'f' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k8 from %s where k8 <> 0 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k8 from %s where k8 <> 0.1 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k9 from %s where k9 <> 6.333 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k9 from %s where k9 <> -365 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1 from %s where k1 != 4 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k2 from %s where k2 != 1989 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k3 from %s where k3 != 1001 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k4 from %s where k4 != -11011903 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k5 from %s where k5 != 1243.5 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k6 from %s where k6 != 'false' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k7 from %s where k7 != 'f' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k8 from %s where k8 != 0 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k8 from %s where k8 != 0.1 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k9 from %s where k9 != 6.333 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k9 from %s where k9 != -365 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k1<10000000000000000000000000 \
order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k5=123.123000001" % (table_name)
runner.check(line)
line = "select * from %s where k1=1 or k1>=10 and k6=\"true\" order by k1, k2, k3, k4"\
% (table_name)
runner.check(line)
def test_query_in():
"""
{
"title": "test_query_predicates.test_query_in",
"describe": "test for query function in",
"tag": "function,p0"
}
"""
"""
test for query function in
"""
line = "select * from %s where k1 in (1, -1, 5, 0.1, 3.000) order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where k6 in (\"true\") order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k7 in (\"wangjuoo4\") order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k7 in (\"wjj\") order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k8 in (1, -1, 0.100, 0) order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k9 in (-365, 100) order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k5 in \
(123.123, 1243.5, 100, -654,6540, \"0\", \"-0.1230\") \
order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from test where k4 in \
(-9016414291091581975, -1, 100000000000000000000000000000000000) order by k1, k2, k3, k4"
runner.check(line)
line = "select * from %s where k1 not in (1, -1, 5, 0.1, 3.000) order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where k6 not in (\"true\") order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k7 not in (\"wangjuoo4\") order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where k7 not in (\"wjj\") order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k8 not in (1, -1, 0.100, 0) order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where k9 not in (-365, 100) order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k5 not in \
(123.123, 1243.5, 100, -654,6540, \"0\", \"-0.1230\") \
order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from test where k4 not in \
(-9016414291091581975, -1, 100000000000000000000000000000000000) order by k1, k2, k3, k4"
runner.check(line)
line = "select NULL in (1, 2, 3)"
runner.check(line)
line = "select NULL in (1, NULL, 3)"
runner.check(line)
line = "select 1 in (2, NULL, 1)"
runner.check(line)
line = "select 1 in (1, NULL, 2)"
runner.check(line)
line = "select 1 in (2, NULL, 3)"
runner.check(line)
line = "select 1 in (2, 3, 4)"
runner.check(line)
line = "select NULL not in (1, 2, 3)"
runner.check(line)
line = "select NULL not in (1, NULL, 3)"
runner.check(line)
line = "select 1 not in (2, NULL, 1)"
runner.check(line)
line = "select 1 not in (1, NULL, 2)"
runner.check(line)
line = "select 1 not in (2, NULL, 3)"
runner.check(line)
line = "select 1 not in (2, 3, 4)"
runner.check(line)
line = "select * from %s where k1 in (1,2,3,4) and k1 in (1)" % join_name
runner.check(line)
line = "select * from (select 'jj' as kk1, sum(k2) from baseall where k10 = '2015-04-02' group by kk1)tt " \
"where kk1 in ('jj')"
runner.check(line)
line = "select * from (select 'jj' as kk1, sum(k2) from baseall where k10 = '2015-04-02' group by kk1)tt " \
"where kk1 = 'jj'"
runner.check(line)
def test_query_like():
"""
{
"title": "test_query_predicates.test_query_like",
"describe": "test for function like",
"tag": "function,p0"
}
"""
"""
test for function like
"""
line = "select * from %s where k6 like \"%%\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
#todo "%%"
line = "select * from %s where k6 like \"____\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) like \"%%lnv%%\" order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) like \"%%lnv%%\" order by k1, k2, k3, k4"\
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) like \"wangjuoo4\" order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where lower(k6) like \"%%t_u%%\" order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where k6 not like \"%%\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k6 not like \"____\" order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not like \"%%lnv%%\" order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not like \"%%lnv%%\" order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not like \"wangjuoo4\" \
order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k6) not like \"%%t_u%%\" order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = 'select "abcd%%1" like "abcd%", "abcd%%1" not like "abcd%"'
runner.check(line)
line = 'select "abcd%%1" like "abcd%1", "abcd%%1" not like "abcd%1"'
runner.check(line)
line = 'select "abcd%%1" like "abcd%1%", "abcd%%1" not like "abcd%1%"'
runner.check(line)
line = 'select "abcd%%1" like "abcd\%%", "abcd%%1" not like "abcd\%%"'
runner.check(line)
line = 'select "abcd%%1" like "abcd\%\%%", "abcd%%1" not like "abcd\%\%%"'
runner.check(line)
line = 'select "abcd%%1" like "abcd\%\%1", "abcd%%1" not like "abcd\%\%1"'
runner.check(line)
line = 'select "abcd%%1" like "abcd\%\%\1%", "abcd%%1" not like "abcd\%\%\1%"'
runner.check(line)
line = 'select "abcd%%1" like "abcd_%1", "abcd%%1" not like "abcd_%1"'
runner.check(line)
line = 'select "abcd%%1" like "abcd_\%1", "abcd%%1" not like "abcd_\%1"'
runner.check(line)
line = 'select "abcd%%1" like "abcd__1", "abcd%%1" not like "abcd__1"'
runner.check(line)
line = 'select "abcd%%1" like "abcd_%_", "abcd%%1" not like "abcd_%_"'
runner.check(line)
line = 'select "abcd%%1" like "abcd\_%1", "abcd%%1" not like "abcd\_%1"'
runner.check(line)
def test_query_operate():
"""
{
"title": "test_query_predicates.test_query_operate",
"describe": "test for +,-,*,/",
"tag": "function,p0"
}
"""
"""
test for +,-,*,/
"""
line = "select k1, k4 div k1, k4 div k2, k4 div k3, k4 div k4 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k1+ '1', k5,100000*k5 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1,k5,k2*k5 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1,k5,k8*k5,k5*k9,k2*k9,k2*k8 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k5*0.1, k8*0.1, k9*0.1 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k2*(-0.1), k3*(-0.1), k4*(-0.1), \
k5*(-0.1), k8*(-0.1), k9*(-0.1) from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k5*(9223372036854775807/100), k8*9223372036854775807, \
k9*9223372036854775807 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k2/9223372036854775807, k3/9223372036854775807, \
k4/9223372036854775807,k5/9223372036854775807, \
k8/9223372036854775807,k9/9223372036854775807 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k5+9223372036854775807/100, k8+9223372036854775807, \
k9+9223372036854775807 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k5-9223372036854775807/100, k8-9223372036854775807, \
k9-9223372036854775807 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k5/0.000001, k8/0.000001, \
k9/0.000001 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k1*0.1, k2*0.1, k3*0.1, k4*0.1, k5*0.1, k8*0.1, k9*0.1 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k1/10, k2/10, k3/10, k4/10, k5/10, k8/10, k9/10 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k1-0.1, k2-0.1, k3-0.1, k4-0.1, k5-0.1, k8-0.1, k9-0.1 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1, k1+0.1, k2+0.1, k3+0.1, k4+0.1, k5+0.1, k8+0.1, k9+0.1 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1+10, k2+10.0, k3+1.6, k4*1, k5-6, k8-234.66, k9-0 \
from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where k1+k9<0 order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1*k2*k3*k5 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1*k2*k3*k5*k8*k9 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select k1*10000/k4/k8/k9 from %s order by k1, k2, k3, k4" % (table_name)
runner.check(line)
for i in (1, 2, 3, 5, 8, 9):
for j in (1, 2, 3, 5, 8, 9):
line = "select k%s*k%s, k%s+k%s, k%s-k%s, k%s/k%s from %s \
where abs(k%s)<9223372036854775807 and k%s<>0 and\
abs(k%s)<922337203685477580 order by k1, k2, k3, k4"%\
(i, j, i, j, i, j, i, j, table_name, i, j, j)
runner.check(line)
line = "select 1.1*1.1 + k2 from %s order by 1 limit 10" % (table_name)
runner.check(line)
line = "select 1.1*1.1 + k5 from %s order by 1 limit 10" % (table_name)
runner.check(line)
line = "select 1.1*1.1+1.1"
runner.check(line)
def test_query_reg():
"""
{
"title": "test_query_predicates.test_query_reg",
"describe": "test for function reg",
"tag": "function,p0"
}
"""
"""
test for function reg
"""
line = "select * from %s where lower(k7) regexp'.*o4$' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) regexp'[yun]+nk' order by k1, k2, k3, k4"\
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) regexp'wang(juoo|yu)[0-9]+$' order by k1, k2, k3, k4"\
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) regexp'^[a-z]+[0-9]?$' \
order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) regexp'^[a-z]+[0-9]+[a-z]+$' order by k1, k2, k3, k4"\
% (table_name)
runner.check(line)
line = "select * from %s where lower(k7) regexp'^[a-o]+[0-9]+[a-z]?$' order by k1, k2, k3, k4" \
% (table_name)
runner.check(line)
line = "select count(*) from %s where k1<10 and lower(k6) regexp '^t'" % (table_name)
runner.check(line)
def test_query_not_reg():
"""
{
"title": "test_query_predicates.test_query_not_reg",
"describe": "test for function not regexp",
"tag": "function,p0"
}
"""
line = "select * from %s where lower(k7) not regexp'.*o4$' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not regexp'[yun]+nk' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not regexp'wang(juoo|yu)[0-9]+$' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not regexp'^[a-z]+[0-9]?$' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not regexp'^[a-z]+[0-9]+[a-z]+$' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select * from %s where lower(k7) not regexp'^[a-o]+[0-9]+[a-z]?$' order by k1, k2, k3, k4" % (table_name)
runner.check(line)
line = "select count(*) from %s where k1<10 and lower(k6) not regexp '^t'" % (table_name)
runner.check(line)
def test_query_and_or_xor_mod():
"""
{
"title": "test_query_predicates.test_query_and_or_xor_mod",
"describe": "&, |, ^, %",
"tag": "function,p0"
}
"""
"""
&, |, ^, %
"""
#fushu unable
for i in range(1, 6):
line = "select k%s %%2 from %s order by k1, k2, k3, k4" % (i, table_name)
runner.check(line)
line = "select k%s %%-2 from %s order by k1, k2, k3, k4" % (i, table_name)
runner.check(line)
if (i != 5):
line = "select k%s %%0 from %s order by k1, k2, k3, k4" % (i, table_name)
runner.check(line)
line = "select k%s %%2.1 from %s order by k1, k2, k3, k4" % (i, table_name)
runner.check(line)
line = "select k%s %%-2.1 from %s order by k1, k2, k3, k4" % (i, table_name)
runner.check(line)
for i in range(1, 5):
for j in range(1, 5):
line = "select k%s^k%s from %s where k%s>=0 and k%s>=0 order by k1, k2, k3, k4"\
% (i, j, table_name, i, j)
runner.check(line)
line = "select k%s|k%s from %s where k%s>=0 and k%s>=0 order by k1, k2, k3, k4" \
% (i, j, table_name, i, j)
runner.check(line)
line = "select k%s&k%s from %s where k%s>=0 and k%s>=0 order by k1, k2, k3, k4" \
% (i, j, table_name, i, j)
runner.check(line)
"""
line = "select k%s, ~k%s from %s where k%s>=0 and k%s>=0 order by k1, k2, k3, k4" \
% (i, j, table_name, i, j)
runner.check(line)
"""
line = "select k8, k9, k8%%k9, k9%%NULL, NULL%%k9 from %s order by 1, 2" % (table_name)
runner.check(line)
line = 'select * from baseall where (k1 = 1) or (k1 = 1 and k2 = 2)'
runner.check(line)
def test_query_case():
"""
{
"title": "test_query_predicates.test_query_case",
"describe": "query for case",
"tag": "function,p0"
}
"""
"""
query for case
"""
'''
line = "select (case\
when k6='true' or k6='false' then\
(select k10 from %s where %s.k1 = %s.k1 order by k1 limit 1)\
when k7 like '%%w%%' then\
(select k10 from %s where %s.k1 = %s.k1 order by k1 limit 1)\
else\
(select k10 from %s where %s.k1 = 0 and %s.k1 <> 0 order by k1 limit 1)\
end) as wj from %s order by wj"\
% (join_name, join_name, table_name, \
join_name, join_name, table_name,\
join_name, join_name, join_name, table_name)
runner.check(line)
'''
line = "select 'number', count(*) from %s group by\
case\
when k1=10 then 'zero'\
when k1>10 then '+'\
when k1<10 then '-' end order by 1, 2" % (join_name)
runner.check(line)
line = "select case when k1=0 then 'zero'\
when k1>0 then '+'\
when k1<0 then '-' end as wj,\
count(*) from %s\
group by\
case when k1=0 then 'zero'\
when k1>0 then '+'\
when k1<0 then '-' end\
order by\
case when k1=0 then 'zero'\
when k1>0 then '+'\
when k1<0 then '-' end" % (table_name)
runner.check(line)
line = "select a.k1, case\
when b.wj is not null and b.k1>0 then 'wangj'\
when b.wj is null then b.wj\
end as wjtest\
from (select k1, k2, case when k6='true' then 'ok' end as wj\
from %s) as b \
join %s as a where a.k1=b.k1 and a.k2=b.k2 order by k1, wjtest "\
% (table_name, join_name)
runner.check(line)
line = "select case when k1<0 then 'zhengshu' when k10='1989-03-21' then 'birthday' \
when k2<0 then 'fu' when k7 like '%%wang%%' then 'wang' else 'other' end \
as wj from %s order by wj" % (table_name)
runner.check(line)
line = "select case k6 when 'true' then 1 when 'false' then -1 else 0 end \
as wj from %s order by wj" % (table_name)
runner.check(line)
line = "select k1, case k1 when 1 then 'one' when 2 then 'two' \
end as wj from %s order by k1, wj" % (table_name)
runner.check(line)
line = "select k1, case when k2<0 then -1 when k2=0 then 0 when k2>0 then 1 end \
as wj from %s order by k1, wj" % (table_name)
runner.check(line)
def test_query_if():
"""
{
"title": "test_query_predicates.test_query_if",
"describe": "if/nullif/ifnull",
"tag": "function,p0"
}
"""
"""if/nullif/ifnull"""
line = 'select if(null, -1, 10) a, if(null, "hello", "worlk") b'
runner.check(line)
line = 'select if(k1 > 5, true, false) a from baseall order by k1'
runner.check(line)
line = 'select if(k1, 10, -1) a from baseall order by k1'
# runner.check(line)
line = 'select if(length(k6) >= 5, true, false) a from baseall order by k1'
runner.check(line)
line = 'select if(k6 like "fa%", -1, 10) a from baseall order by k6'
runner.check(line)
line = 'select if(k6 like "%e", "hello", "world") a from baseall order by k6'
runner.check(line)
line = 'select if(k6, -1, 0) a from baseall order by k6'
# runner.check(line)
line = 'select ifnull(b.k1, -1) k1 from baseall a left join bigtable b on a.k1 = b.k1 + 5 \
order by a.k1'
runner.check(line)
line = 'select ifnull(b.k6, "hll") k1 from baseall a left join bigtable b on a.k1 = b.k1 + 5 \
order by k1'
runner.check(line)
line = 'select ifnull(b.k10, "2017-06-06") k1 from baseall a left join bigtable b on \
a.k1 = b.k1 + 5 order by k1'
# runner.check(line)
line = 'select ifnull(b.k10, cast("2017-06-06" as date)) k1 from baseall a left join bigtable \
b on a.k1 = b.k1 + 5 order by k1'
runner.check(line)
line = 'select ifnull(b.k1, "-1") k1 from baseall a left join bigtable b on a.k1 = b.k1 + 5 \
order by a.k1'
# runner.check(line)
line = 'select ifnull(b.k6, 1001) k1 from baseall a left join bigtable b on a.k1 = b.k1 + 5 \
order by k1'
# runner.check(line)
line = 'select nullif(k1, 100) k1 from baseall order by k1'
runner.check(line)
line = 'select nullif(k6, "false") k from baseall order by k1'
runner.check(line)
line = 'select cast(nullif(k10, cast("2012-03-14" as date)) as date) from baseall order by k1'
runner.check(line)
line = 'select cast(nullif(k11, cast("2000-01-01 00:00:00" as datetime)) as datetime) from baseall order by k1'
runner.check(line)
line = 'select nullif(b.k1, null) k1 from baseall a left join bigtable b on a.k1 = b.k1 \
order by k1'
runner.check(line)
def test_query_ifnull():
"""
{
"title": "test_query_predicates.test_query_ifnull",
"describe": "ifnull test case",
"tag": "function,p0,fuzz"
}
"""
"""ifnull test case"""
line = "select ifnull(null,2,3)"
runner.checkwrong(line)
line = "select ifnull(1234567890123456789012345678901234567890,2)"
runner.checkwrong(line)
line = "select ifnull(123456789.5678901234567890,2),\
ifnull('1234567890123456789012345678901234567890',2)"
runner.check(line)
line = "select IFNULL('hello', 'doris'), IFNULL(NULL,0)"
runner.check(line)
line = "select ifnull('null',2), ifnull('NULL',2), ifnull('null','2019-09-09 00:00:00'),\
ifnull(NULL, concat('NUL', 'LL'))"
runner.check(line)
for index in range(1, 12):
if index in [7, 10]:
continue
line = "select ifnull(k%s, NULL) from %s order by k%s" % (index, join_name, index)
runner.check(line)
line = "select ifnull(NULL, k%s) from %s order by k%s" % (index, join_name, index)
runner.check(line)
##操作符
line = "select ifnull('null',2+3*5), ifnull(NULL,concat(1,2)), ifnull(NULL, ifnull(1,3)),\
ifnull(NULL,NULL) <=> NULL"
runner.check(line)
#不支持子查询,mysql支持
line = "select concat((select k2 from baseall order by k2 limit 1), 2)"
runner.checkwrong(line)
##表达式
line = "select ifnull(length('null'), 2), ifnull(concat(NULL, 0), 2), ifnull('1.0' + '3.3','2019-09-09 00:00:00'),\
ifnull(ltrim(' NULL'), concat('NUL', 'LL'))"
runner.check(line)
line = "select ifnull(2+3, 2), ifnull((3*1 > 1 || 1>0), 2), ifnull((3*1 > 1 or 1>0), 2),\
ifnull(upper('null'), concat('NUL', 'LL'))"
runner.check(line)
line = "select ifnull(date(substring('2020-02-09', 1, 1024)), null)"
runner.check(line)
def test_colsesce():
"""
{
"title": "test_query_predicates.test_colsesce",
"describe": "colsesce(e1, e2, e3...) if there is null, return null, or return e1",
"tag": "function,p0"
}
"""
"""colsesce(e1, e2, e3...) 返回第一个不是Null的"""
for k in range(1, 12):
line = 'select k1, coalesce(k%s) from %s order by 1' % (k, join_name)
runner.check(line)
line = 'select k1, coalesce(k%s, k%s) from %s order by 1' % (k, k, join_name)
runner.check(line)
line = 'select k1, coalesce(k%s, null) from %s order by 1' % (k, join_name)
runner.check(line)
line = 'select k1, coalesce(null, k%s) from %s order by 1' % (k, join_name)
runner.check(line)
line = 'select coalesce(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11, null) from %s order by 1' % table_name
runner.check(line)
line = 'select coalesce(k1, k2, k3, k4, k5, k6, k7, k8, k9, k10, k11) from %s order by 1' % table_name
runner.check(line)
line = 'select * from (select coalesce("string", "")) a'
runner.check(line)
line = 'select * from %s where coalesce(k1, k2) in (1, null) order by 1, 2, 3, 4' % join_name
runner.check(line)
line = 'select * from %s where coalesce(k1, null) in (1, null) order by 1, 2, 3, 4, 5, 6' % table_name
runner.check(line)
line = 'select coalesce(1, null)'
runner.check(line)
def test_query_divide_mod_zero():
"""
{
"title": "test_query_predicates.test_query_divide_mod_zero",
"describe": "test for decimal value divide,mod zero,result should be NULL, github issue #6049",
"tag": "function,p0"
}
"""
line = "select 10.2 / 0.0, 10.2 / 0, 10.2 % 0.0, 10.2 % 0"
runner.check(line)
line = "select 0.0 / 0.0, 0.0 / 0, 0.0 % 0.0, 0.0 % 0"
runner.check(line)
line = "select -10.2 / 0.0, -10.2 / 0, -10.2 % 0.0, -10.2 % 0"
runner.check(line)
line = "select k5 / 0, k8 / 0, k9 / 0 from %s order by k1,k2,k3,k4" % table_name
runner.check(line)
line = "select k5 %% 0, k8 %% 0, k9 %% 0 from %s order by k1,k2,k3,k4" % table_name
runner.check(line)
def teardown_module():
"""
end
"""
print("End")
# mysql_cursor.close()
# mysql_con.close()
if __name__ == "__main__":
print("test")
setup_module()
test_query_ifnull()