blob: 256ef26434b1f367b5c6772a4a674540c5bb7683 [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.
"""
file : test_query_largeint.py
test largeint datatype, and no change to mysql comparing data
"""
import sys
import time
sys.path.append("../lib/")
from palo_qe_client import QueryBase
sys.path.append("../../../lib/")
import palo_logger
LOG = palo_logger.Logger.getLogger()
L = palo_logger.StructedLogMessage
table_name = "test"
join_name = "baseall"
largeint_name = "largeint_s"
def setup_module():
"""
init config
"""
global runner
runner = QueryExecuter()
# init largeint table and data
init()
time.sleep(10)
def init():
"""init largeint table"""
schema = 'create table %s.largeint_s(k1 tinyint, k2 smallint, k3 bigint, \
k4 largeint, k5 decimal(9,3), k6 char(5), k10 date, k11 datetime, k7 varchar(20), \
k8 double max, k9 float sum) engine=olap distributed by hash(k1) buckets 5 \
properties("storage_type"="column")' % runner.query_db
mysql_schema = 'create table %s.largeint_s(k1 tinyint, k2 smallint, k3 bigint, \
k4 bigint, k5 decimal(9,3), k6 char(5), k10 date, k11 datetime, k7 varchar(20), \
k8 double, k9 float)' % runner.query_db
data = 'insert into %s select * from %s' % (largeint_name, table_name)
try:
runner.query_palo.do_sql('drop table if exists %s' % largeint_name)
runner.query_palo.do_sql(schema)
runner.query_palo.do_sql(data)
runner.wait_end()
except Exception as e:
import traceback
traceback.print_exc()
print(str(e))
LOG.error(L('err', error=e))
assert 0 == 1, "largeint init error"
class QueryExecuter(QueryBase):
def __init__(self):
self.get_clients()
def wait_end(self):
"""wait for test_query_qa db load"""
sql = "SHOW PROC '/dbs'"
LOG.info(L('palo sql', palo_sql=sql))
database_list = self.query_palo.do_sql(sql)
database_id = None
for database in database_list:
db_name = self.query_db
if self.query_user.find('@') == -1:
cluster_name = 'default_cluster'
else:
tmp_list = self.query_user.split('@')
cluster_name = tmp_list[1]
name = '%s:%s' % (cluster_name, db_name)
if database[1] == db_name or database[1] == name:
database_id = database[0]
ret = True
state = None
while ret and database_id:
sql = 'SHOW PROC "/jobs/%s/load"' % database_id
LOG.info(L('palo sql', palo_sql=sql))
job_list = self.query_palo.do_sql(sql)
LOG.info(L('palo result', palo_result=job_list[0]))
state = job_list[0][2]
print(state)
if state == "FINISHED" or state == "CANCELLED":
ret = False
time.sleep(1)
assert state == "FINISHED"
def test_largeint_datatype():
"""
{
"title": "test_query_largeint.test_largeint_datatype",
"describe": "cast test",
"tag": "function,p1"
}
"""
"""cast test"""
line1 = 'select cast(k1 as largeint), cast(k2 as largeint), cast(k3 as largeint) from %s \
order by 1, 2, 3' % largeint_name
line2 = 'select cast(k1 as signed), cast(k2 as signed), cast(k3 as signed) from %s \
order by 1, 2, 3' % table_name
runner.check2(line1, line2)
line1 = 'select cast(k10 as largeint), cast(k11 as largeint) from %s order by 1, 2' \
% largeint_name
line2 = 'select cast(k10 as unsigned), cast(k11 as unsigned) from %s order by 1, 2' \
% table_name
runner.check2(line1, line2)
line1 = 'select cast(k4 as bigint), cast(k4 as string) from %s order by 1, 2' % largeint_name
line2 = 'select cast(k4 as signed), cast(k4 as char) from %s order by 1, 2' % table_name
runner.check2(line1, line2)
def test_largeint_math_operate():
"""
{
"title": "test_query_largeint.test_largeint_math_operate",
"describe": "+ - * / ^ and numeric function",
"tag": "function,p1"
}
"""
"""+ - * / ^ and numeric function"""
line1 = 'select k4 - 0.0, k4 + 0, k4 * 0.8, k4 / k1 from %s order by 1, 2, 3, 4' % largeint_name
line2 = 'select k4 - 0.0, k4 + 0, k4 * 0.8, k4 / k1 from %s order by 1, 2, 3, 4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where (k4) > 0 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where (k4) > 0 order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where (k4) <= 0 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where (k4) <= 0 order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where (k4) >= 0 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where (k4) >= 0 order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where (k4 / k3) > 0 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where (k4 / k3) > 0 order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where (k4 ^ k4) > 0 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where (k4 ^ k4) > 0 order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k4, bin(k4), hex(k4), least(k1, k2, k3, k4), greatest(k1, k2, k3, k4) from %s \
order by 1, 2, 3, 4, 5' % largeint_name
line2 = 'select k4, bin(k4), hex(k4), least(k1, k2, k3, k4), greatest(k1, k2, k3, k4) from %s \
order by 1, 2, 3, 4, 5' % table_name
runner.check2(line1, line2)
line1 = 'select ln(k4), log10(k4) from %s where k4 > 0 order by 1, 2' % largeint_name
line2 = 'select ln(k4), log10(k4) from %s where k4 > 0 order by 1, 2' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where k4 in (-9223372036854775807, 9223372036854775807) \
order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where k4 in (-9223372036854775807, 9223372036854775807) \
order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where k4 > k3 and k4 < k1 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where k4 > k3 and k4 < k1 order by k1, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k1, k4 from %s where k4 <= k3 or k4 >= k1 order by k1, k4' % largeint_name
line2 = 'select k1, k4 from %s where k4 <= k3 or k4 >= k1 order by k1, k4' % table_name
runner.check2(line1, line2)
def test_largeint_basic():
"""
{
"title": "test_query_largeint.test_largeint_basic",
"describe": "basic union/join/order/group/having",
"tag": "function,p1"
}
"""
"""basic union/join/order/group/having"""
line1 = 'select k1, k4 from %s union all (select k2, k4 from %s) order by k1, k4 limit 65536' \
% (largeint_name, largeint_name)
line2 = 'select k1, k4 from %s union all (select k2, k4 from %s) order by k1, k4 limit 65536' \
% (table_name, table_name)
runner.check2(line1, line2)
line1 = 'select k2, k4 from %s where k1 = 0 union distinct (select k2, k3 from baseall) \
order by k2, k4' % largeint_name
line2 = 'select k2, k4 from %s where k1 = 0 union distinct (select k2, k3 from baseall) \
order by k2, k4' % table_name
runner.check2(line1, line2)
line1 = 'select k2, k4 from %s where k1 = 1 union (select 0, 0) order by k2, k4' \
% largeint_name
line2 = 'select k2, k4 from %s where k1 = 1 union (select 0, 0) order by k2, k4' \
% table_name
runner.check2(line1, line2)
line1 = 'select * from %s a join %s b on a.k4 = b.k4 where a.k4 > 0 order by a.k1, \
a.k2, a.k3, a.k4, b.k1, b.k2, b.k3, b.k4' % (largeint_name, join_name)
line2 = 'select * from %s a join %s b on a.k4 = b.k4 where a.k4 > 0 order by a.k1, \
a.k2, a.k3, a.k4, b.k1, b.k2, b.k3, b.k4' % (table_name, join_name)
runner.check2(line1, line2)
line1 = 'select * from %s a right outer join %s b on a.k4 = b.k4 where a.k4 > 0 \
order by a.k1, a.k2, a.k3, a.k4, b.k1, b.k2, b.k3, b.k4' \
% (largeint_name, largeint_name)
line2 = 'select * from %s a right outer join %s b on a.k4 = b.k4 where a.k4 > 0 \
order by a.k1, a.k2, a.k3, a.k4, b.k1, b.k2, b.k3, b.k4' % (table_name, table_name)
runner.check2(line1, line2)
line1 = 'select max(k1), k4 from %s group by k4 order by 1, 2' % largeint_name
line2 = 'select max(k1), k4 from %s group by k4 order by 1, 2' % table_name
runner.check2(line1, line2)
line1 = 'select max(k4), k1 from %s group by k1 order by 1, 2' % largeint_name
line2 = 'select max(k4), k1 from %s group by k1 order by 1, 2' % table_name
runner.check2(line1, line2)
line1 = 'select max(k1), k4 from %s group by k4 having k4 > 0 order by 1, 2' % largeint_name
line2 = 'select max(k1), k4 from %s group by k4 having k4 > 0 order by 1, 2' % table_name
runner.check2(line1, line2)
def test_largeint_bug():
"""
{
"title": "test_query_largeint.test_largeint_bug",
"describe": "bugs",
"tag": "function,p1"
}
"""
line = 'drop view if exists l_view'
runner.checkok(line)
line = 'create view l_view as select k1 x, k4 y from %s' % largeint_name
runner.checkok(line)
line = 'select * from l_view t1 full outer join l_view t3 on t1.y = t3.x order by t1.x limit 10'
runner.checkok(line)
line = 'select count(*) from %s where 10000 in (k4)' % largeint_name
runner.checkok(line)
line = '(select k4 from %s) union distinct (select 4)' % largeint_name
runner.checkok(line)
def teardown_module():
"""
end
"""
print("End")
# mysql_cursor.close()
# mysql_con.close()
if __name__ == '__main__':
setup_module()
test_largeint_basic()
teardown_module()