github.com/matrixorigin/matrixone@v0.7.0/pkg/sql/plan/function/builtin/binary/todate_test.go (about) 1 // Copyright 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 binary 16 17 import ( 18 "testing" 19 20 "github.com/matrixorigin/matrixone/pkg/container/nulls" 21 "github.com/matrixorigin/matrixone/pkg/container/vector" 22 "github.com/matrixorigin/matrixone/pkg/testutil" 23 "github.com/stretchr/testify/require" 24 ) 25 26 func TestToDate(t *testing.T) { 27 inputVec0 := testutil.MakeVarcharVector([]string{"20200103", "20190102", ""}, []uint64{2}) 28 inputVec1 := testutil.MakeScalarVarchar("YYYYMMDD", 3) 29 inputVecs := []*vector.Vector{inputVec0, inputVec1} 30 proc := testutil.NewProc() 31 outputVec, err := ToDate(inputVecs, proc) 32 require.NoError(t, err) 33 require.Equal(t, []string{"2020-01-03", "2019-01-02"}, vector.GetStrVectorValues(outputVec)[:2]) 34 require.True(t, nulls.Contains(outputVec.Nsp, 2)) 35 36 inputVec0 = testutil.MakeVarcharVector([]string{"01032020", "01022019", ""}, []uint64{2}) 37 inputVec1 = testutil.MakeScalarVarchar("MMDDYYYY", 3) 38 inputVecs = []*vector.Vector{inputVec0, inputVec1} 39 proc = testutil.NewProc() 40 outputVec, err = ToDate(inputVecs, proc) 41 require.NoError(t, err) 42 require.Equal(t, []string{"2020-01-03", "2019-01-02"}, vector.GetStrVectorValues(outputVec)[:2]) 43 require.True(t, nulls.Contains(outputVec.Nsp, 2)) 44 45 inputVec0 = testutil.MakeVarcharVector([]string{"03012020", "02012019", ""}, []uint64{2}) 46 inputVec1 = testutil.MakeScalarVarchar("DDMMYYYY", 3) 47 inputVecs = []*vector.Vector{inputVec0, inputVec1} 48 proc = testutil.NewProc() 49 outputVec, err = ToDate(inputVecs, proc) 50 require.NoError(t, err) 51 require.Equal(t, []string{"2020-01-03", "2019-01-02"}, vector.GetStrVectorValues(outputVec)[:2]) 52 require.True(t, nulls.Contains(outputVec.Nsp, 2)) 53 54 inputVec0 = testutil.MakeVarcharVector([]string{"01-03-2020", "01-02-2019", ""}, []uint64{2}) 55 inputVec1 = testutil.MakeScalarVarchar("MM-DD-YYYY", 3) 56 inputVecs = []*vector.Vector{inputVec0, inputVec1} 57 proc = testutil.NewProc() 58 outputVec, err = ToDate(inputVecs, proc) 59 require.NoError(t, err) 60 require.Equal(t, []string{"2020-01-03", "2019-01-02"}, vector.GetStrVectorValues(outputVec)[:2]) 61 require.True(t, nulls.Contains(outputVec.Nsp, 2)) 62 63 inputVec0 = testutil.MakeVarcharVector([]string{"03-01-2020", "02-01-2019", ""}, []uint64{2}) 64 inputVec1 = testutil.MakeScalarVarchar("DD-MM-YYYY", 3) 65 inputVecs = []*vector.Vector{inputVec0, inputVec1} 66 proc = testutil.NewProc() 67 outputVec, err = ToDate(inputVecs, proc) 68 require.NoError(t, err) 69 require.Equal(t, []string{"2020-01-03", "2019-01-02"}, vector.GetStrVectorValues(outputVec)[:2]) 70 require.True(t, nulls.Contains(outputVec.Nsp, 2)) 71 72 inputVec0 = testutil.MakeVarcharVector([]string{"32-01-2020", "02-01-2019", ""}, []uint64{2}) 73 inputVec1 = testutil.MakeScalarVarchar("DD-MM-YYYY", 3) 74 inputVecs = []*vector.Vector{inputVec0, inputVec1} 75 proc = testutil.NewProc() 76 _, err = ToDate(inputVecs, proc) 77 require.Error(t, err) 78 79 inputVec0 = testutil.MakeVarcharVector([]string{"03-01-2020", "02-01-2019", ""}, []uint64{2}) 80 inputVec1 = testutil.MakeScalarVarchar("DD-DD-YYYY", 3) 81 inputVecs = []*vector.Vector{inputVec0, inputVec1} 82 proc = testutil.NewProc() 83 _, err = ToDate(inputVecs, proc) 84 require.Error(t, err) 85 86 inputVec0 = testutil.MakeVarcharVector([]string{"03-01-2020", "02-01-2019", ""}, []uint64{2}) 87 inputVec1 = testutil.MakeScalarVarchar("YYYY", 3) 88 inputVecs = []*vector.Vector{inputVec0, inputVec1} 89 proc = testutil.NewProc() 90 _, err = ToDate(inputVecs, proc) 91 require.Error(t, err) 92 93 inputVec0 = testutil.MakeVarcharVector([]string{"03-01-2020", "02-01-2019", ""}, []uint64{2}) 94 inputVec1 = testutil.MakeScalarVarchar("YYYY", 3) 95 inputVecs = []*vector.Vector{inputVec0, inputVec1} 96 proc = testutil.NewProc() 97 _, err = ToDate(inputVecs, proc) 98 require.Error(t, err) 99 }