#!/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_sys_duplicate_partition_null.py # @date 2019-05-21 15:20:45 # @brief This file is a test file for palo duplicate key # ############################################################################# """ duplicate模型的分区键为Null,查询删除 """ from data import schema as DATA from lib import palo_config from lib import palo_client from lib import util LOG = palo_client.LOG L = palo_client.L config = palo_config.config def setup_module(): """ setUp """ pass def create_workspace(database_name): """create client and db, use db""" client = palo_client.get_client(config.fe_host, config.fe_query_port, user=config.fe_user, password=config.fe_password,http_port=config.fe_http_port) client.clean(database_name) client.create_database(database_name) client.use(database_name) return client def test_duplicate_partition_null(): """ { "title": "test_sys_duplicate_partition_a.test_duplicate_partition_null", "describe": "测试duplicate key的分区列为Null", "tag": "system,p1,fuzz" } """ """测试duplicate key的分区列为Null""" database_name, table_name, index_name = util.gen_num_format_name_list() LOG.info(L('', database_name=database_name, table_name=table_name, index_name=index_name)) client = create_workspace(database_name) partition_info = palo_client.PartitionInfo('k1', ['p1', 'p2', 'p3'], ['0', '100', '1000']) ret = client.create_table(table_name, column_list=DATA.int_column_no_agg_list, set_null=True, partition_info=partition_info, keys_desc='DUPLICATE KEY(k1)') assert ret, 'create table failed' sql = 'insert into %s values(null, 0, 0, 0, 0), (null, 1, 1, 1, 1)' % table_name ret = client.execute(sql) assert ret == (), ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) assert len(ret1) == 2, ret1 sql2 = 'select * from %s where k1 is null order by v1' % table_name ret2 = client.execute(sql2) assert len(ret2) == 2, ret2 util.check(ret1, ret2) client.clean(database_name) def test_duplicate_partition_null_delete(): """ { "title": "test_sys_duplicate_partition_a.test_duplicate_partition_null_delete", "describe": "测试duplicate key的分区列为Null", "tag": "system,p1,fuzz" } """ """测试duplicate key的分区列为Null""" database_name, table_name, index_name = util.gen_num_format_name_list() LOG.info(L('', database_name=database_name, table_name=table_name, index_name=index_name)) client = create_workspace(database_name) #create table partition_info = palo_client.PartitionInfo('k1', ['p1', 'p2', 'p3'], [0, 100, 1000]) print(partition_info) ret = client.create_table(table_name, column_list=DATA.int_column_no_agg_list, set_null=True, partition_info=partition_info, keys_desc='DUPLICATE KEY(k1)') assert ret, 'create table failed' # insert data & check sql = 'insert into %s values(null, 0, 0, 0, 0), (null, 1, 1, 1, 1)' % table_name ret = client.execute(sql) assert ret == (), ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) sql2 = 'select * from %s where k1 is null order by v1' % table_name ret2 = client.execute(sql2) util.check(ret1, ret2) assert len(ret1) == 2, ret1 # delete in partition p3 sql = 'DELETE FROM %s PARTITION p3 WHERE k1 is null' % table_name ret = client.execute(sql) assert ret == (), ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) util.check(ret1, ret2) # delete in partition p2 sql = 'DELETE FROM %s PARTITION p2 WHERE k1 is null' % table_name ret = client.execute(sql) assert ret == (), ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) util.check(ret1, ret2) # delete in partition p1 sql = 'DELETE FROM %s PARTITION p1 WHERE k1 is null' % table_name ret = client.execute(sql) assert ret == (), ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) assert ret1 == (), ret1 client.clean(database_name) def test_duplicate_partition_null_drop_p(): """ { "title": "test_sys_duplicate_partition_a.test_duplicate_partition_null_drop_p", "describe": "测试duplicate key的分区列为Null", "tag": "system,p1,fuzz" } """ """测试duplicate key的分区列为Null""" database_name, table_name, index_name = util.gen_num_format_name_list() LOG.info(L('', database_name=database_name, table_name=table_name, index_name=index_name)) client = create_workspace(database_name) # create table partition_info = palo_client.PartitionInfo('k1', ['p1', 'p2', 'p3'], ['0', '100', '1000']) ret = client.create_table(table_name, column_list=DATA.int_column_no_agg_list, set_null=True, partition_info=partition_info, keys_desc='DUPLICATE KEY(k1)') assert ret, 'create table failed' # insert data & check sql = 'insert into %s values(null, 0, 0, 0, 0), (null, 1, 1, 1, 1)' % table_name ret = client.execute(sql) assert ret == (), ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) sql2 = 'select * from %s where k1 is null order by v1' % table_name ret2 = client.execute(sql2) util.check(ret1, ret2) assert len(ret1) == 2, ret1 # drop partitoin p3 & check ret = client.drop_partition(table_name, partition_name='p3') assert ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) util.check(ret1, ret2) # drop partition p1 & check ret = client.drop_partition(table_name, partition_name='p1') assert ret sql1 = 'select * from %s order by v1' % table_name ret1 = client.execute(sql1) assert ret1 == (), ret1 # insert null data & check sql = 'insert into %s values(null, 0, 0, 0, 0), (null, 1, 1, 1, 1)' % table_name flag = None try: ret = client.execute(sql) flag = False except Exception as e: print(str(e)) # drop db client.clean(database_name) def teardown_module(): """tear down""" pass if __name__ == '__main__': setup_module() test_duplicate_partition_null_delete()