github.com/matrixorigin/matrixone@v0.7.0/pkg/sql/plan/function/builtin/multi/split_part_test.go (about) 1 // Copyright 2021 - 2022 Matrix Origin 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 // See the License for the specific language governing permissions and 13 // limitations under the License. 14 15 package multi 16 17 import ( 18 "testing" 19 20 "github.com/matrixorigin/matrixone/pkg/container/types" 21 "github.com/matrixorigin/matrixone/pkg/container/vector" 22 "github.com/matrixorigin/matrixone/pkg/testutil" 23 "github.com/matrixorigin/matrixone/pkg/vm/process" 24 "github.com/stretchr/testify/require" 25 ) 26 27 func TestSplitPart(t *testing.T) { 28 var ( 29 proc = testutil.NewProc() 30 mp = testutil.TestUtilMp 31 v1Scalar = testutil.NewStringVector(1, types.T_varchar.ToType(), mp, false, []string{"a,b,c"}) 32 v1 = testutil.NewStringVector(10, types.T_varchar.ToType(), mp, false, []string{"a,b,c", "a,b,c", "a,b,c", "a,b,c", "a,b,c", "a,b,c", "a,b,c", "a,b,c", "a,b,c", "a,b,c"}) 33 v2Scalar = testutil.NewStringVector(1, types.T_varchar.ToType(), mp, false, []string{","}) 34 v2 = testutil.NewStringVector(10, types.T_varchar.ToType(), mp, false, []string{",", ",", ",", ",", ",", ",", ",", ",", ",", ","}) 35 v3Scalar = testutil.NewUInt32Vector(1, types.T_uint32.ToType(), mp, false, []uint32{1}) 36 v3 = testutil.NewUInt32Vector(10, types.T_uint32.ToType(), mp, false, []uint32{1, 1, 1, 1, 1, 1, 1, 1, 1, 1}) 37 v1ScalarNull = testutil.NewStringVector(1, types.T_varchar.ToType(), mp, true, []string{"a,b,c"}) 38 v2ScalarNull = testutil.NewStringVector(1, types.T_varchar.ToType(), mp, true, []string{","}) 39 v3ScalarNull = testutil.NewUInt32Vector(1, types.T_uint32.ToType(), mp, true, []uint32{1}) 40 ) 41 v1Scalar.MakeScalar(1) 42 v2Scalar.MakeScalar(1) 43 v3Scalar.MakeScalar(1) 44 v1ScalarNull.MakeScalar(1) 45 v1ScalarNull.Nsp.Set(0) 46 v2ScalarNull.MakeScalar(1) 47 v2ScalarNull.Nsp.Set(0) 48 v3ScalarNull.MakeScalar(1) 49 v3ScalarNull.Nsp.Set(0) 50 _, err := testSplitPart([]*vector.Vector{v1, v2, v3}, proc) 51 require.NoError(t, err) 52 _, err = testSplitPart([]*vector.Vector{v1, v2, v3Scalar}, proc) 53 require.NoError(t, err) 54 _, err = testSplitPart([]*vector.Vector{v1, v2Scalar, v3}, proc) 55 require.NoError(t, err) 56 _, err = testSplitPart([]*vector.Vector{v1, v2Scalar, v3Scalar}, proc) 57 require.NoError(t, err) 58 _, err = testSplitPart([]*vector.Vector{v1Scalar, v2, v3}, proc) 59 require.NoError(t, err) 60 _, err = testSplitPart([]*vector.Vector{v1Scalar, v2, v3Scalar}, proc) 61 require.NoError(t, err) 62 _, err = testSplitPart([]*vector.Vector{v1Scalar, v2Scalar, v3}, proc) 63 require.NoError(t, err) 64 _, err = testSplitPart([]*vector.Vector{v1Scalar, v2Scalar, v3Scalar}, proc) 65 require.NoError(t, err) 66 _, err = testSplitPart([]*vector.Vector{v1ScalarNull, v2, v3}, proc) 67 require.NoError(t, err) 68 _, err = testSplitPart([]*vector.Vector{v1ScalarNull, v2, v3Scalar}, proc) 69 require.NoError(t, err) 70 _, err = testSplitPart([]*vector.Vector{v1ScalarNull, v2Scalar, v3}, proc) 71 require.NoError(t, err) 72 _, err = testSplitPart([]*vector.Vector{v1ScalarNull, v2Scalar, v3Scalar}, proc) 73 require.NoError(t, err) 74 _, err = testSplitPart([]*vector.Vector{v1, v2ScalarNull, v3}, proc) 75 require.NoError(t, err) 76 _, err = testSplitPart([]*vector.Vector{v1, v2ScalarNull, v3Scalar}, proc) 77 require.NoError(t, err) 78 _, err = testSplitPart([]*vector.Vector{v1, v2, v3ScalarNull}, proc) 79 require.NoError(t, err) 80 _, err = testSplitPart([]*vector.Vector{v1ScalarNull, v2ScalarNull, v3ScalarNull}, proc) 81 require.NoError(t, err) 82 83 // error case 84 vector.AppendString(v1, []string{"a,b,c"}, mp) 85 vector.AppendString(v2, []string{","}, mp) 86 vector.AppendFixed(v3, []uint32{0}, mp) 87 _, err = testSplitPart([]*vector.Vector{v1, v2, v3}, proc) 88 require.Error(t, err) 89 } 90 91 func testSplitPart(vec []*vector.Vector, proc *process.Process) (*vector.Vector, error) { 92 return SplitPart(vec, proc) 93 }