// 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. #include "vec/columns/column_object.h" #include #include #include namespace doris::vectorized { class ColumnObjectTest : public ::testing::Test {}; // TEST TEST_F(ColumnObjectTest, test_pop_back) { ColumnObject::Subcolumn subcolumn(0, true /* is_nullable */, false /* is_root */); Field field_int(123); Field field_string("hello"); subcolumn.insert(field_int); subcolumn.insert(field_string); subcolumn.pop_back(1); EXPECT_EQ(subcolumn.size(), 1); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int8)"); subcolumn.pop_back(1); EXPECT_EQ(subcolumn.size(), 0); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nothing"); } TEST_F(ColumnObjectTest, test_pop_back_multiple_types) { ColumnObject::Subcolumn subcolumn(0, true /* is_nullable */, false /* is_root */); Field field_int8(42); subcolumn.insert(field_int8); EXPECT_EQ(subcolumn.size(), 1); EXPECT_EQ(subcolumn.data_types.size(), 1); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int8)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int8)"); Field field_int16(12345); subcolumn.insert(field_int16); EXPECT_EQ(subcolumn.size(), 2); EXPECT_EQ(subcolumn.data_types.size(), 2); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int8)"); EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(Int16)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int16)"); Field field_int32(1234567); subcolumn.insert(field_int32); EXPECT_EQ(subcolumn.size(), 3); EXPECT_EQ(subcolumn.data_types.size(), 3); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int8)"); EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(Int16)"); EXPECT_EQ(subcolumn.data_types[2]->get_name(), "Nullable(Int32)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int32)"); subcolumn.pop_back(1); EXPECT_EQ(subcolumn.size(), 2); EXPECT_EQ(subcolumn.data_types.size(), 2); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int8)"); EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(Int16)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int16)"); subcolumn.pop_back(1); EXPECT_EQ(subcolumn.size(), 1); EXPECT_EQ(subcolumn.data_types.size(), 1); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int8)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int8)"); subcolumn.pop_back(1); EXPECT_EQ(subcolumn.size(), 0); EXPECT_EQ(subcolumn.data_types.size(), 0); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nothing"); subcolumn.insert(field_int32); EXPECT_EQ(subcolumn.size(), 1); EXPECT_EQ(subcolumn.data_types.size(), 1); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int32)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int32)"); subcolumn.insert(field_int16); EXPECT_EQ(subcolumn.size(), 2); EXPECT_EQ(subcolumn.data_types.size(), 1); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int32)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int32)"); subcolumn.insert(field_int8); EXPECT_EQ(subcolumn.size(), 3); EXPECT_EQ(subcolumn.data_types.size(), 1); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int32)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int32)"); subcolumn.pop_back(1); EXPECT_EQ(subcolumn.size(), 2); EXPECT_EQ(subcolumn.data_types.size(), 1); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int32)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(Int32)"); Field field_string("hello"); subcolumn.insert(field_string); EXPECT_EQ(subcolumn.size(), 3); EXPECT_EQ(subcolumn.data_types.size(), 2); EXPECT_EQ(subcolumn.data_types[0]->get_name(), "Nullable(Int32)"); EXPECT_EQ(subcolumn.data_types[1]->get_name(), "Nullable(JSONB)"); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nullable(JSONB)"); subcolumn.pop_back(3); EXPECT_EQ(subcolumn.size(), 0); EXPECT_EQ(subcolumn.data_types.size(), 0); EXPECT_EQ(subcolumn.get_least_common_type()->get_name(), "Nothing"); } } // namespace doris::vectorized