unittest/gunit/dd_info_schema_native_func-t.cc (126 lines of code) (raw):

/* Copyright (c) 2016, 2017 Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ // First include (the generated) my_config.h, to get correct platform defines. #include "my_config.h" #include <gtest/gtest.h> #include "test_utils.h" #include "item_func.h" #include "item_timefunc.h" #include "parse_tree_helpers.h" namespace dd_info_schema_native_func { using my_testing::Server_initializer; /* Test fixture for testing native functions introduced for the INFORMATION_SCHEMA. */ class ISNativeFuncTest : public ::testing::Test { protected: virtual void SetUp() { initializer.SetUp(); } virtual void TearDown() { initializer.TearDown(); } THD *thd() { return initializer.thd(); } Server_initializer initializer; }; // Test case to verify native functions with all NULL arguments. TEST_F(ISNativeFuncTest, AllNullArguments) { Item *item= nullptr; Item_null *null= new (thd()->mem_root)Item_null(); PT_item_list *null_list= new (thd()->mem_root)PT_item_list; auto prepare_null_list= [](PT_item_list *null_list, Item_null *null, int cnt) { for(int i= 0; i < cnt; i++) null_list->push_front(null); return null_list; }; #define NULL_ARG null #define TWO_NULL_ARGS NULL_ARG, NULL_ARG #define THREE_NULL_ARGS TWO_NULL_ARGS, NULL_ARG #define FOUR_NULL_ARGS THREE_NULL_ARGS, NULL_ARG #define FIVE_NULL_ARGS FOUR_NULL_ARGS, NULL_ARG #define CREATE_ITEM(X, ARGS) item= new (thd()->mem_root)X(POS(), ARGS) // INTERNAL_TABLE_ROWS(NULL, NULL, NULL, NULL, NULL); CREATE_ITEM(Item_func_internal_table_rows, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_AVG_ROW_LENGTH(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_avg_row_length, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_DATA_LENGTH(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_data_length, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_MAX_DATA_LENGTH(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_max_data_length, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_INDEX_LENGTH(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_index_length, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_DATA_FREE(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_data_free, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_AUTO_INCREMENT(NULL, NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_auto_increment, prepare_null_list(null_list, null, 6)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_UPDATE_TIME(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_update_time, prepare_null_list(null_list, null, 5)); MYSQL_TIME ldate; item->get_date(&ldate, 0); EXPECT_EQ(1, item->null_value); // INTERNAL_CHECK_TIME(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_check_time, prepare_null_list(null_list, null, 5)); item->get_date(&ldate, 0); EXPECT_EQ(1, item->null_value); // INTERNAL_CHECKSUM(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_checksum, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_DD_CHAR_LENGTH(NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_dd_char_length, FOUR_NULL_ARGS); item->val_int(); EXPECT_EQ(1, item->null_value); // INTERNAL_GET_VIEW_WARNING_OR_ERROR(NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_get_view_warning_or_error, prepare_null_list(null_list, null, 4)); // null_value is not set in this function. So verifying only val_int() return // value. EXPECT_EQ(0, item->val_int()); // INTERNAL_GET_COMMENT_OR_ERROR(NULL, NULL, NULL, NULL, NULL) String str; CREATE_ITEM(Item_func_internal_get_comment_or_error, prepare_null_list(null_list, null, 5)); item->val_str(&str); EXPECT_EQ(1, item->null_value); // INTERNAL_INDEX_COLUMN_CARDINALITY(NULL, NULL, NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_internal_index_column_cardinality, prepare_null_list(null_list, null, 8)); item->val_int(); EXPECT_EQ(1, item->null_value); // GET_DD_INDEX_SUB_PART_LENGTH(NULL, NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_get_dd_index_sub_part_length, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // GET_DD_COLUMN_PRIVILEGES(NULL, NULL, NULL) CREATE_ITEM(Item_func_get_dd_column_privileges, THREE_NULL_ARGS); // Empty string value is returned in this case. EXPECT_EQ(static_cast<size_t>(0), (item->val_str(&str))->length()); // INTERNAL_KEYS_DISABLED(NULL) CREATE_ITEM(Item_func_internal_keys_disabled, NULL_ARG); EXPECT_EQ(0, item->val_int()); // CAN_ACCESS_DATABASE(NULL) CREATE_ITEM(Item_func_can_access_database, NULL_ARG); item->val_int(); EXPECT_EQ(1, item->null_value); // CAN_ACCESS_TABLE(NULL, NULL) CREATE_ITEM(Item_func_can_access_table, TWO_NULL_ARGS); item->val_int(); EXPECT_EQ(1, item->null_value); // CAN_ACCESS_VIEW(NULL, NULL, NULL, NULL) CREATE_ITEM(Item_func_can_access_view, FOUR_NULL_ARGS); item->val_int(); EXPECT_EQ(1, item->null_value); // CAN_ACCESS_COLUMN(NULL, NULL, NULL) CREATE_ITEM(Item_func_can_access_column, THREE_NULL_ARGS); item->val_int(); EXPECT_EQ(1, item->null_value); // CAN_ACCESS_TRIGGER(NULL, NULL, NULL) CREATE_ITEM(Item_func_can_access_trigger, TWO_NULL_ARGS); item->val_int(); EXPECT_EQ(1, item->null_value); // CAN_ACCESS_ROUTINE(NULL, NULL, NULL) CREATE_ITEM(Item_func_can_access_routine, prepare_null_list(null_list, null, 5)); item->val_int(); EXPECT_EQ(1, item->null_value); // CAN_ACCESS_EVENT(NULL, NULL, NULL) CREATE_ITEM(Item_func_can_access_event, NULL_ARG); item->val_int(); EXPECT_EQ(1, item->null_value); // GET_DD_CREATE_OPTIONS(NULL, NULL) CREATE_ITEM(Item_func_get_dd_create_options, TWO_NULL_ARGS); // Empty string value is returned in this case. EXPECT_EQ(static_cast<size_t>(0), (item->val_str(&str))->length()); } } //namespace