github.com/matrixorigin/matrixone@v0.7.0/pkg/vectorize/extract/extract_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 extract 16 17 import ( 18 "testing" 19 20 "github.com/matrixorigin/matrixone/pkg/container/types" 21 "github.com/stretchr/testify/require" 22 ) 23 24 func TestExtractFromDate(t *testing.T) { 25 a0, _ := types.ParseDateCast("2020-01-02") 26 a1, _ := types.ParseDateCast("2021-03-04") 27 inputs := make([]types.Date, 2) 28 inputs[0] = a0 29 inputs[1] = a1 30 results := make([]uint32, 2) 31 output, err := ExtractFromDate("year", inputs, results) 32 require.NoError(t, err) 33 require.Equal(t, []uint32{2020, 2021}, output) 34 35 a0, _ = types.ParseDateCast("2020-01-02") 36 a1, _ = types.ParseDateCast("2021-03-04") 37 inputs = make([]types.Date, 2) 38 inputs[0] = a0 39 inputs[1] = a1 40 results = make([]uint32, 2) 41 output, err = ExtractFromDate("month", inputs, results) 42 require.NoError(t, err) 43 require.Equal(t, []uint32{01, 03}, output) 44 45 a0, _ = types.ParseDateCast("2020-01-02") 46 a1, _ = types.ParseDateCast("2021-03-04") 47 inputs = make([]types.Date, 2) 48 inputs[0] = a0 49 inputs[1] = a1 50 results = make([]uint32, 2) 51 output, err = ExtractFromDate("year_month", inputs, results) 52 require.NoError(t, err) 53 require.Equal(t, []uint32{202001, 202103}, output) 54 55 a0, _ = types.ParseDateCast("2020-01-02") 56 a1, _ = types.ParseDateCast("2021-03-04") 57 inputs = make([]types.Date, 2) 58 inputs[0] = a0 59 inputs[1] = a1 60 results = make([]uint32, 2) 61 output, err = ExtractFromDate("quarter", inputs, results) 62 require.NoError(t, err) 63 require.Equal(t, []uint32{1, 1}, output) 64 } 65 66 func TestExtractFromDateTime(t *testing.T) { 67 a0, _ := types.ParseDatetime("2020-01-02 11:12:13.123456", 6) 68 a1, _ := types.ParseDatetime("1234-01-02 11:12:13.123456", 6) 69 inputs := make([]types.Datetime, 2) 70 inputs[0] = a0 71 inputs[1] = a1 72 resultValues := make([]string, 2) 73 output, err := ExtractFromDatetime("microsecond", inputs, resultValues) 74 require.NoError(t, err) 75 require.Equal(t, []string{"123456", "123456"}, output) 76 77 output, err = ExtractFromDatetime("second", inputs, resultValues) 78 require.NoError(t, err) 79 require.Equal(t, []string{"13", "13"}, output) 80 81 output, err = ExtractFromDatetime("minute", inputs, resultValues) 82 require.NoError(t, err) 83 require.Equal(t, []string{"12", "12"}, output) 84 85 output, err = ExtractFromDatetime("hour", inputs, resultValues) 86 require.NoError(t, err) 87 require.Equal(t, []string{"11", "11"}, output) 88 89 output, err = ExtractFromDatetime("day", inputs, resultValues) 90 require.NoError(t, err) 91 require.Equal(t, []string{"02", "02"}, output) 92 93 output, err = ExtractFromDatetime("week", inputs, resultValues) 94 require.NoError(t, err) 95 require.Equal(t, []string{"01", "01"}, output) 96 97 output, err = ExtractFromDatetime("month", inputs, resultValues) 98 require.NoError(t, err) 99 require.Equal(t, []string{"01", "01"}, output) 100 101 output, err = ExtractFromDatetime("quarter", inputs, resultValues) 102 require.NoError(t, err) 103 require.Equal(t, []string{"1", "1"}, output) 104 105 output, err = ExtractFromDatetime("year", inputs, resultValues) 106 require.NoError(t, err) 107 require.Equal(t, []string{"2020", "1234"}, output) 108 109 output, err = ExtractFromDatetime("second_microsecond", inputs, resultValues) 110 require.NoError(t, err) 111 require.Equal(t, []string{"13.123456", "13.123456"}, output) 112 113 output, err = ExtractFromDatetime("minute_microsecond", inputs, resultValues) 114 require.NoError(t, err) 115 require.Equal(t, []string{"12:13.123456", "12:13.123456"}, output) 116 117 output, err = ExtractFromDatetime("minute_second", inputs, resultValues) 118 require.NoError(t, err) 119 require.Equal(t, []string{"12:13", "12:13"}, output) 120 121 output, err = ExtractFromDatetime("hour_microsecond", inputs, resultValues) 122 require.NoError(t, err) 123 require.Equal(t, []string{"11:12:13.123456", "11:12:13.123456"}, output) 124 125 output, err = ExtractFromDatetime("hour_second", inputs, resultValues) 126 require.NoError(t, err) 127 require.Equal(t, []string{"11:12:13", "11:12:13"}, output) 128 129 output, err = ExtractFromDatetime("hour_minute", inputs, resultValues) 130 require.NoError(t, err) 131 require.Equal(t, []string{"11:12", "11:12"}, output) 132 133 output, err = ExtractFromDatetime("day_microsecond", inputs, resultValues) 134 require.NoError(t, err) 135 require.Equal(t, []string{"02 11:12:13.123456", "02 11:12:13.123456"}, output) 136 137 output, err = ExtractFromDatetime("day_second", inputs, resultValues) 138 require.NoError(t, err) 139 require.Equal(t, []string{"02 11:12:13", "02 11:12:13"}, output) 140 141 output, err = ExtractFromDatetime("day_minute", inputs, resultValues) 142 require.NoError(t, err) 143 require.Equal(t, []string{"02 11:12", "02 11:12"}, output) 144 145 output, err = ExtractFromDatetime("day_hour", inputs, resultValues) 146 require.NoError(t, err) 147 require.Equal(t, []string{"02 11", "02 11"}, output) 148 149 output, err = ExtractFromDatetime("year_month", inputs, resultValues) 150 require.NoError(t, err) 151 require.Equal(t, []string{"202001", "123401"}, output) 152 }