// Copyright 2023 PingCAP, Inc. // // Licensed 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 #include #include #include #include namespace DB { namespace tests { class SubString : public DB::tests::FunctionTest { }; template class TestNullableSigned { public: static void operator()(SubString & sub_string) { ASSERT_COLUMN_EQ( createColumn>({"p.co", "ww.p", "pingcap", "com", ".com", "", "", "", {}, {}, {}}), sub_string.executeFunction( "substringUTF8", createColumn>( {"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com", "pingcap.com", "pingcap.com", "pingcap.com", "pingcap.com", {}, "pingcap", "pingcap"}), createColumn({-5, 1, 3, -3, 8, 2, -100, 0, 2, {}, -3}), createColumn({4, 4, 7, 4, 5, -5, 2, 3, 6, 4, {}}))); } }; template class TestSigned { public: static void operator()(SubString & sub_string) { ASSERT_COLUMN_EQ( createColumn>({"p.co", "ww.p", "pingcap", "com", ".com", "", "", "", {}}), sub_string.executeFunction( "substringUTF8", createColumn>( {"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com", "pingcap.com", "pingcap.com", "pingcap.com", "pingcap.com", {}}), createColumn({-5, 1, 3, -3, 8, 2, -100, 0, 2}), createColumn({4, 4, 7, 4, 5, -5, 2, 3, 6}))); } }; template class TestNullableUnsigned { public: static void operator()(SubString & sub_string) { ASSERT_COLUMN_EQ( createColumn>({"p.co", "ww.p", "pingcap", "com", ".com", "", "", {}, {}, {}}), sub_string.executeFunction( "substringUTF8", createColumn>( {"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com", "pingcap.com", "pingcap.com", "pingcap.com", {}, "pingcap", "pingcap"}), createColumn({11, 1, 3, 10, 8, 2, 0, 9, {}, 7}), createColumn({4, 4, 7, 4, 5, 0, 3, 6, 1, {}}))); } }; template class TestUnsigned { public: static void operator()(SubString & sub_string) { ASSERT_COLUMN_EQ( createColumn>({"p.co", "ww.p", "pingcap", "com", ".com", "", "", {}}), sub_string.executeFunction( "substringUTF8", createColumn>( {"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com", "pingcap.com", "pingcap.com", "pingcap.com", {}}), createColumn({11, 1, 3, 10, 8, 2, 0, 2}), createColumn({4, 4, 7, 4, 5, 0, 3, 1}))); } }; template class TestConstPos { public: static void operator()(SubString & sub_string) { ASSERT_COLUMN_EQ( createColumn>({"w", "ww", "w.p", ".pin"}), sub_string.executeFunction( "substringUTF8", createColumn>({"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com"}), createConstColumn(4, 1), createColumn({1, 2, 3, 4}))); } }; template class TestConstLength { public: static void operator()(SubString & sub_string) { ASSERT_COLUMN_EQ( createColumn>({"www.", "w.pi", "ping", "ngca"}), sub_string.executeFunction( "substringUTF8", createColumn>({"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com"}), createColumn({1, 2, 3, 4}), createConstColumn(4, 4))); } }; TEST_F(SubString, subStringUTF8Test) try { TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); TestTypePair::run(*this); // column, const, const ASSERT_COLUMN_EQ( createColumn>({"www.", "ww.p", "w.pi", ".pin"}), executeFunction( "substringUTF8", createColumn>({"www.pingcap.com", "ww.pingcap.com", "w.pingcap.com", ".pingcap.com"}), createConstColumn>(4, 1), createConstColumn>(4, 4))); // const, const, const ASSERT_COLUMN_EQ( createConstColumn(1, "www."), executeFunction( "substringUTF8", createConstColumn>(1, "www.pingcap.com"), createConstColumn>(1, 1), createConstColumn>(1, 4))); } CATCH } // namespace tests } // namespace DB