github.com/matrixorigin/matrixone@v1.2.0/pkg/container/vector/vector_test.go (about) 1 // Copyright 2021 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 vector 16 17 import ( 18 "testing" 19 20 "github.com/matrixorigin/matrixone/pkg/common/mpool" 21 "github.com/matrixorigin/matrixone/pkg/container/types" 22 "github.com/stretchr/testify/require" 23 ) 24 25 func TestLength(t *testing.T) { 26 mp := mpool.MustNewZero() 27 vec := NewVec(types.T_int8.ToType()) 28 err := AppendFixedList(vec, []int8{0, 1, 2}, nil, mp) 29 require.NoError(t, err) 30 require.Equal(t, 3, vec.Length()) 31 vec.SetLength(2) 32 require.Equal(t, 2, vec.Length()) 33 vec.Free(mp) 34 require.Equal(t, int64(0), mp.CurrNB()) 35 36 { 37 //Array Float32 38 mp := mpool.MustNewZero() 39 vec := NewVec(types.New(types.T_array_float32, 3, 0)) 40 err := AppendArrayList[float32](vec, [][]float32{{1, 2, 3}, {4, 5, 6}}, nil, mp) 41 require.NoError(t, err) 42 require.Equal(t, 2, vec.Length()) 43 vec.Free(mp) 44 require.Equal(t, int64(0), mp.CurrNB()) 45 } 46 { 47 //Array Float64 48 mp := mpool.MustNewZero() 49 vec := NewVec(types.New(types.T_array_float64, 3, 0)) 50 err := AppendArrayList[float64](vec, [][]float64{{1, 2, 3}, {4, 5, 6}}, nil, mp) 51 require.NoError(t, err) 52 require.Equal(t, 2, vec.Length()) 53 vec.Free(mp) 54 require.Equal(t, int64(0), mp.CurrNB()) 55 } 56 } 57 58 func TestSize(t *testing.T) { 59 mp := mpool.MustNewZero() 60 vec := NewVec(types.T_int8.ToType()) 61 require.Equal(t, 0, vec.Size()) 62 vec.Free(mp) 63 require.Equal(t, int64(0), mp.CurrNB()) 64 { 65 //Array Float32 66 mp := mpool.MustNewZero() 67 vec := NewVec(types.New(types.T_array_float32, 4, 0)) 68 require.Equal(t, 0, vec.Size()) 69 vec.Free(mp) 70 require.Equal(t, int64(0), mp.CurrNB()) 71 } 72 { 73 //Array Float64 74 mp := mpool.MustNewZero() 75 vec := NewVec(types.New(types.T_array_float64, 4, 0)) 76 require.Equal(t, 0, vec.Size()) 77 vec.Free(mp) 78 require.Equal(t, int64(0), mp.CurrNB()) 79 } 80 } 81 82 func TestGetUnionOneFunction(t *testing.T) { 83 { // test const vector 84 mp := mpool.MustNewZero() 85 v := NewVec(types.T_int8.ToType()) 86 w := NewVec(types.T_int8.ToType()) 87 err := AppendFixed(w, int8(0), false, mp) 88 require.NoError(t, err) 89 uf := GetUnionOneFunction(*w.GetType(), mp) 90 err = uf(v, w, 0) 91 require.NoError(t, err) 92 w.Free(mp) 93 v.Free(mp) 94 require.Equal(t, int64(0), mp.CurrNB()) 95 } 96 { // test const vector 97 mp := mpool.MustNewZero() 98 v := NewVec(types.T_varchar.ToType()) 99 w := NewVec(types.T_varchar.ToType()) 100 err := AppendBytes(w, []byte("x"), false, mp) 101 require.NoError(t, err) 102 uf := GetUnionOneFunction(*w.GetType(), mp) 103 err = uf(v, w, 0) 104 require.NoError(t, err) 105 w.Free(mp) 106 v.Free(mp) 107 require.Equal(t, int64(0), mp.CurrNB()) 108 } 109 { // test const Array Float32 vector 110 mp := mpool.MustNewZero() 111 v := NewVec(types.New(types.T_array_float32, 4, 0)) 112 w := NewVec(types.New(types.T_array_float32, 4, 0)) 113 err := AppendArrayList[float32](w, [][]float32{{1, 2, 3, 0}, {4, 5, 6, 0}}, nil, mp) 114 require.NoError(t, err) 115 uf := GetUnionOneFunction(*w.GetType(), mp) 116 err = uf(v, w, 0) 117 require.NoError(t, err) 118 w.Free(mp) 119 v.Free(mp) 120 require.Equal(t, int64(0), mp.CurrNB()) 121 122 } 123 { // test const Array Float64 vector 124 mp := mpool.MustNewZero() 125 v := NewVec(types.New(types.T_array_float64, 4, 0)) 126 w := NewVec(types.New(types.T_array_float64, 4, 0)) 127 err := AppendArrayList[float64](w, [][]float64{{1, 2, 3, 0}, {4, 5, 6, 0}}, nil, mp) 128 require.NoError(t, err) 129 uf := GetUnionOneFunction(*w.GetType(), mp) 130 err = uf(v, w, 0) 131 require.NoError(t, err) 132 w.Free(mp) 133 v.Free(mp) 134 require.Equal(t, int64(0), mp.CurrNB()) 135 } 136 { // test bit vector 137 mp := mpool.MustNewZero() 138 v := NewVec(types.New(types.T_bit, 10, 0)) 139 w := NewVec(types.New(types.T_bit, 10, 0)) 140 err := AppendFixedList[uint64](w, []uint64{1, 2, 3, 4}, nil, mp) 141 require.NoError(t, err) 142 uf := GetUnionOneFunction(*w.GetType(), mp) 143 err = uf(v, w, 0) 144 require.NoError(t, err) 145 require.Equal(t, 1, v.Length()) 146 vs := MustFixedCol[uint64](v) 147 require.Equal(t, uint64(1), vs[0]) 148 149 w.Free(mp) 150 v.Free(mp) 151 require.Equal(t, int64(0), mp.CurrNB()) 152 } 153 } 154 155 func TestConst(t *testing.T) { 156 mp := mpool.MustNewZero() 157 vec := NewConstNull(types.T_int8.ToType(), 1, mp) 158 require.Equal(t, true, vec.IsConst()) 159 vec.Free(mp) 160 require.Equal(t, int64(0), mp.CurrNB()) 161 } 162 163 /* 164 func TestWindowWithNulls(t *testing.T) { 165 v0 := NewVec(types.T_int8.ToType()) 166 mp := mpool.MustNewZero() 167 168 _ = AppendFixed(v0, int8(0), false, mp) 169 _ = AppendFixed(v0, int8(1), false, mp) 170 _ = AppendFixed(v0, int8(2), false, mp) 171 _ = AppendFixed(v0, int8(-1), true, mp) // v0[3] = null 172 _ = AppendFixed(v0, int8(6), false, mp) 173 _ = AppendFixed(v0, int8(-1), true, mp) // v0[5] = null 174 _ = AppendFixed(v0, int8(-1), true, mp) // v0[6] = null 175 _ = AppendFixed(v0, int8(6), false, mp) 176 _ = AppendFixed(v0, int8(7), false, mp) 177 _ = AppendFixed(v0, int8(8), false, mp) 178 179 require.Equal(t, []uint64{3, 5, 6}, v0.GetNulls().Np.ToArray()) 180 181 start, end := 1, 7 182 v0Window := NewVec(types.T_int8.ToType()) 183 //v0Window = Window(v0, start, end, v0Window) 184 require.Equal(t, MustFixedCol[int8](v0)[start:end], MustFixedCol[int8](v0Window)) 185 require.Equal(t, []uint64{2, 4, 5}, v0Window.GetNulls().Np.ToArray()) 186 187 //t.Log(v0.String()) 188 //t.Log(v0Window.String()) 189 } 190 */ 191 192 func TestAppend(t *testing.T) { 193 mp := mpool.MustNewZero() 194 vec := NewVec(types.T_int8.ToType()) 195 err := AppendFixed(vec, int8(0), false, mp) 196 require.NoError(t, err) 197 err = AppendFixed(vec, int8(0), true, mp) 198 require.NoError(t, err) 199 err = AppendFixedList(vec, []int8{0, 1, 2}, nil, mp) 200 require.NoError(t, err) 201 vec.Free(mp) 202 require.Equal(t, int64(0), mp.CurrNB()) 203 204 { 205 // Array Float32 206 mp := mpool.MustNewZero() 207 vec := NewVec(types.New(types.T_array_float32, 4, 0)) 208 err := AppendArray[float32](vec, []float32{1, 2, 3, 0}, false, mp) 209 require.NoError(t, err) 210 require.Equal(t, 1, vec.Length()) 211 err = AppendArray[float32](vec, []float32{2, 4, 5, 6}, true, mp) 212 require.NoError(t, err) 213 require.Equal(t, 2, vec.Length()) 214 err = AppendArrayList[float32](vec, [][]float32{{4, 4, 4, 6}, {2, 5, 5, 3}}, nil, mp) 215 require.NoError(t, err) 216 require.Equal(t, 4, vec.Length()) 217 vec.Free(mp) 218 require.Equal(t, int64(0), mp.CurrNB()) 219 } 220 { 221 // Array Float64 222 mp := mpool.MustNewZero() 223 vec := NewVec(types.New(types.T_array_float64, 4, 0)) 224 err := AppendArray[float64](vec, []float64{1, 2, 3, 0}, false, mp) 225 require.NoError(t, err) 226 require.Equal(t, 1, vec.Length()) 227 err = AppendArray[float64](vec, []float64{2, 4, 5, 6}, true, mp) 228 require.NoError(t, err) 229 require.Equal(t, 2, vec.Length()) 230 err = AppendArrayList[float64](vec, [][]float64{{4, 4, 4, 6}, {2, 5, 5, 3}}, nil, mp) 231 require.NoError(t, err) 232 require.Equal(t, 4, vec.Length()) 233 vec.Free(mp) 234 require.Equal(t, int64(0), mp.CurrNB()) 235 } 236 } 237 238 func TestAppendBytes(t *testing.T) { 239 mp := mpool.MustNewZero() 240 vec := NewVec(types.T_varchar.ToType()) 241 err := AppendBytes(vec, []byte("x"), false, mp) 242 require.NoError(t, err) 243 err = AppendBytes(vec, nil, true, mp) 244 require.NoError(t, err) 245 err = AppendBytesList(vec, [][]byte{[]byte("x"), []byte("y")}, nil, mp) 246 require.NoError(t, err) 247 vs, data := MustVarlenaRawData(vec) 248 for _, v := range vs { 249 v.GetByteSlice(data) 250 } 251 vec.Free(mp) 252 require.Equal(t, int64(0), mp.CurrNB()) 253 } 254 255 func TestAppendArray(t *testing.T) { 256 { 257 // Array Float32 258 mp := mpool.MustNewZero() 259 vec := NewVec(types.T_array_float32.ToType()) 260 err := AppendArray[float32](vec, []float32{1, 1, 1}, false, mp) 261 require.NoError(t, err) 262 err = AppendArray[float32](vec, nil, true, mp) 263 require.NoError(t, err) 264 err = AppendArrayList[float32](vec, [][]float32{{2, 2, 2}, {3, 3, 3}}, nil, mp) 265 require.NoError(t, err) 266 vs, data := MustVarlenaRawData(vec) 267 for _, v := range vs { 268 types.GetArray[float32](&v, data) 269 } 270 vec.Free(mp) 271 require.Equal(t, int64(0), mp.CurrNB()) 272 } 273 { 274 // Array Float64 275 mp := mpool.MustNewZero() 276 vec := NewVec(types.T_array_float64.ToType()) 277 err := AppendArray[float64](vec, []float64{1, 1, 1}, false, mp) 278 require.NoError(t, err) 279 err = AppendArray[float64](vec, nil, true, mp) 280 require.NoError(t, err) 281 err = AppendArrayList[float64](vec, [][]float64{{2, 2, 2}, {3, 3, 3}}, nil, mp) 282 require.NoError(t, err) 283 vs, data := MustVarlenaRawData(vec) 284 for _, v := range vs { 285 types.GetArray[float64](&v, data) 286 } 287 vec.Free(mp) 288 require.Equal(t, int64(0), mp.CurrNB()) 289 } 290 } 291 292 func TestDup(t *testing.T) { 293 mp := mpool.MustNewZero() 294 v := NewVec(types.T_int8.ToType()) 295 err := AppendFixedList(v, []int8{0, 1, 2}, nil, mp) 296 require.NoError(t, err) 297 w, err := v.Dup(mp) 298 require.NoError(t, err) 299 vs := MustFixedCol[int8](v) 300 ws := MustFixedCol[int8](w) 301 require.Equal(t, vs, ws) 302 v.Free(mp) 303 w.Free(mp) 304 require.Equal(t, int64(0), mp.CurrNB()) 305 } 306 307 func TestShrink(t *testing.T) { 308 mp := mpool.MustNewZero() 309 { // Array Float32 310 v := NewVec(types.T_array_float32.ToType()) 311 err := AppendArrayList[float32](v, [][]float32{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}, nil, mp) 312 require.NoError(t, err) 313 v.Shrink([]int64{1, 2}, false) 314 require.Equal(t, [][]float32{{2, 2, 2}, {3, 3, 3}}, MustArrayCol[float32](v)) 315 v.Free(mp) 316 require.Equal(t, int64(0), mp.CurrNB()) 317 } 318 { // Array Float64 319 v := NewVec(types.T_array_float64.ToType()) 320 err := AppendArrayList[float64](v, [][]float64{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}}, nil, mp) 321 require.NoError(t, err) 322 v.Shrink([]int64{1, 2}, false) 323 require.Equal(t, [][]float64{{2, 2, 2}, {3, 3, 3}}, MustArrayCol[float64](v)) 324 v.Free(mp) 325 require.Equal(t, int64(0), mp.CurrNB()) 326 } 327 { // bool 328 v := NewVec(types.T_bool.ToType()) 329 err := AppendFixedList(v, []bool{true, false, true, false}, nil, mp) 330 require.NoError(t, err) 331 v.Shrink([]int64{1, 2}, false) 332 vs := MustFixedCol[bool](v) 333 require.Equal(t, []bool{false, true}, vs) 334 v.Free(mp) 335 require.Equal(t, int64(0), mp.CurrNB()) 336 } 337 { // int8 338 v := NewVec(types.T_int8.ToType()) 339 err := AppendFixedList(v, []int8{1, 2, 3, 4}, nil, mp) 340 require.NoError(t, err) 341 v.Shrink([]int64{1, 2}, false) 342 vs := MustFixedCol[int8](v) 343 require.Equal(t, []int8{2, 3}, vs) 344 v.Free(mp) 345 require.Equal(t, int64(0), mp.CurrNB()) 346 } 347 { // int16 348 v := NewVec(types.T_int16.ToType()) 349 err := AppendFixedList(v, []int16{1, 2, 3, 4}, nil, mp) 350 require.NoError(t, err) 351 v.Shrink([]int64{0, 3}, false) 352 vs := MustFixedCol[int16](v) 353 require.Equal(t, []int16{1, 4}, vs) 354 v.Free(mp) 355 require.Equal(t, int64(0), mp.CurrNB()) 356 } 357 { // int32 358 v := NewVec(types.T_int32.ToType()) 359 err := AppendFixedList(v, []int32{1, 2, 3, 4}, nil, mp) 360 require.NoError(t, err) 361 v.Shrink([]int64{1, 2}, false) 362 vs := MustFixedCol[int32](v) 363 require.Equal(t, []int32{2, 3}, vs) 364 v.Free(mp) 365 require.Equal(t, int64(0), mp.CurrNB()) 366 } 367 { // int64 368 v := NewVec(types.T_int64.ToType()) 369 err := AppendFixedList(v, []int64{1, 2, 3, 4}, nil, mp) 370 require.NoError(t, err) 371 v.Shrink([]int64{1, 2}, false) 372 vs := MustFixedCol[int64](v) 373 require.Equal(t, []int64{2, 3}, vs) 374 v.Free(mp) 375 require.Equal(t, int64(0), mp.CurrNB()) 376 } 377 { // uint8 378 v := NewVec(types.T_uint8.ToType()) 379 err := AppendFixedList(v, []uint8{1, 2, 3, 4}, nil, mp) 380 require.NoError(t, err) 381 v.Shrink([]int64{1, 2}, false) 382 vs := MustFixedCol[uint8](v) 383 require.Equal(t, []uint8{2, 3}, vs) 384 v.Free(mp) 385 require.Equal(t, int64(0), mp.CurrNB()) 386 } 387 { // uint16 388 v := NewVec(types.T_uint16.ToType()) 389 err := AppendFixedList(v, []uint16{1, 2, 3, 4}, nil, mp) 390 require.NoError(t, err) 391 v.Shrink([]int64{0, 3}, false) 392 vs := MustFixedCol[uint16](v) 393 require.Equal(t, []uint16{1, 4}, vs) 394 v.Free(mp) 395 require.Equal(t, int64(0), mp.CurrNB()) 396 } 397 { // uint32 398 v := NewVec(types.T_uint32.ToType()) 399 err := AppendFixedList(v, []uint32{1, 2, 3, 4}, nil, mp) 400 require.NoError(t, err) 401 v.Shrink([]int64{1, 2}, false) 402 vs := MustFixedCol[uint32](v) 403 require.Equal(t, []uint32{2, 3}, vs) 404 v.Free(mp) 405 require.Equal(t, int64(0), mp.CurrNB()) 406 } 407 { // uint64 408 v := NewVec(types.T_uint64.ToType()) 409 err := AppendFixedList(v, []uint64{1, 2, 3, 4}, nil, mp) 410 require.NoError(t, err) 411 v.Shrink([]int64{1, 2}, false) 412 vs := MustFixedCol[uint64](v) 413 require.Equal(t, []uint64{2, 3}, vs) 414 v.Free(mp) 415 require.Equal(t, int64(0), mp.CurrNB()) 416 } 417 { // float32 418 v := NewVec(types.T_float32.ToType()) 419 err := AppendFixedList(v, []float32{1, 2, 3, 4}, nil, mp) 420 require.NoError(t, err) 421 v.Shrink([]int64{1, 2}, false) 422 vs := MustFixedCol[float32](v) 423 require.Equal(t, []float32{2, 3}, vs) 424 v.Free(mp) 425 require.Equal(t, int64(0), mp.CurrNB()) 426 } 427 { // float64 428 v := NewVec(types.T_float64.ToType()) 429 err := AppendFixedList(v, []float64{1, 2, 3, 4}, nil, mp) 430 require.NoError(t, err) 431 v.Shrink([]int64{1, 2}, false) 432 vs := MustFixedCol[float64](v) 433 require.Equal(t, []float64{2, 3}, vs) 434 v.Free(mp) 435 require.Equal(t, int64(0), mp.CurrNB()) 436 } 437 { // text 438 v := NewVec(types.T_text.ToType()) 439 err := AppendBytesList(v, [][]byte{[]byte("1"), []byte("2"), []byte("3"), []byte("4")}, nil, mp) 440 require.NoError(t, err) 441 v.Shrink([]int64{1, 2}, false) 442 vs := MustStrCol(v) 443 require.Equal(t, []string{"2", "3"}, vs) 444 require.Equal(t, [][]byte{[]byte("2"), []byte("3")}, MustBytesCol(v)) 445 v.Free(mp) 446 require.Equal(t, int64(0), mp.CurrNB()) 447 } 448 { // date 449 v := NewVec(types.T_date.ToType()) 450 err := AppendFixedList(v, []types.Date{1, 2, 3, 4}, nil, mp) 451 require.NoError(t, err) 452 v.Shrink([]int64{1, 2}, false) 453 vs := MustFixedCol[types.Date](v) 454 require.Equal(t, []types.Date{2, 3}, vs) 455 v.Free(mp) 456 require.Equal(t, int64(0), mp.CurrNB()) 457 } 458 { // datetime 459 v := NewVec(types.T_datetime.ToType()) 460 err := AppendFixedList(v, []types.Datetime{1, 2, 3, 4}, nil, mp) 461 require.NoError(t, err) 462 v.Shrink([]int64{1, 2}, false) 463 vs := MustFixedCol[types.Datetime](v) 464 require.Equal(t, []types.Datetime{2, 3}, vs) 465 v.Free(mp) 466 require.Equal(t, int64(0), mp.CurrNB()) 467 } 468 { // time 469 v := NewVec(types.T_time.ToType()) 470 err := AppendFixedList(v, []types.Time{1, 2, 3, 4}, nil, mp) 471 require.NoError(t, err) 472 v.Shrink([]int64{1, 2}, false) 473 vs := MustFixedCol[types.Time](v) 474 require.Equal(t, []types.Time{2, 3}, vs) 475 v.Free(mp) 476 require.Equal(t, int64(0), mp.CurrNB()) 477 } 478 { // timestamp 479 v := NewVec(types.T_timestamp.ToType()) 480 err := AppendFixedList(v, []types.Timestamp{1, 2, 3, 4}, nil, mp) 481 require.NoError(t, err) 482 v.Shrink([]int64{1, 2}, false) 483 vs := MustFixedCol[types.Timestamp](v) 484 require.Equal(t, []types.Timestamp{2, 3}, vs) 485 v.Free(mp) 486 require.Equal(t, int64(0), mp.CurrNB()) 487 } 488 { // decimal64 489 vs := make([]types.Decimal64, 4) 490 v := NewVec(types.T_decimal64.ToType()) 491 err := AppendFixedList(v, vs, nil, mp) 492 require.NoError(t, err) 493 v.Shrink([]int64{1, 2}, false) 494 require.Equal(t, vs[1:3], MustFixedCol[types.Decimal64](v)) 495 v.Free(mp) 496 require.Equal(t, int64(0), mp.CurrNB()) 497 } 498 { // decimal128 499 vs := make([]types.Decimal128, 4) 500 v := NewVec(types.T_decimal128.ToType()) 501 err := AppendFixedList(v, vs, nil, mp) 502 require.NoError(t, err) 503 v.Shrink([]int64{1, 2}, false) 504 require.Equal(t, vs[1:3], MustFixedCol[types.Decimal128](v)) 505 v.Free(mp) 506 require.Equal(t, int64(0), mp.CurrNB()) 507 } 508 { // uuid 509 vs := make([]types.Uuid, 4) 510 v := NewVec(types.T_uuid.ToType()) 511 err := AppendFixedList(v, vs, nil, mp) 512 require.NoError(t, err) 513 v.Shrink([]int64{1, 2}, false) 514 require.Equal(t, vs[1:3], MustFixedCol[types.Uuid](v)) 515 v.Free(mp) 516 require.Equal(t, int64(0), mp.CurrNB()) 517 } 518 { // ts 519 vs := make([]types.TS, 4) 520 v := NewVec(types.T_TS.ToType()) 521 err := AppendFixedList(v, vs, nil, mp) 522 require.NoError(t, err) 523 v.Shrink([]int64{1, 2}, false) 524 require.Equal(t, vs[1:3], MustFixedCol[types.TS](v)) 525 v.Free(mp) 526 require.Equal(t, int64(0), mp.CurrNB()) 527 } 528 { // rowid 529 vs := make([]types.Rowid, 4) 530 v := NewVec(types.T_Rowid.ToType()) 531 err := AppendFixedList(v, vs, nil, mp) 532 require.NoError(t, err) 533 v.Shrink([]int64{1, 2}, false) 534 require.Equal(t, vs[1:3], MustFixedCol[types.Rowid](v)) 535 v.Free(mp) 536 require.Equal(t, int64(0), mp.CurrNB()) 537 } 538 { // blockid 539 vs := make([]types.Blockid, 4) 540 v := NewVec(types.T_Blockid.ToType()) 541 err := AppendFixedList(v, vs, nil, mp) 542 require.NoError(t, err) 543 v.Shrink([]int64{1, 2}, false) 544 require.Equal(t, vs[1:3], MustFixedCol[types.Blockid](v)) 545 v.Free(mp) 546 require.Equal(t, int64(0), mp.CurrNB()) 547 } 548 { // bit 549 v := NewVec(types.T_bit.ToType()) 550 err := AppendFixedList(v, []uint64{1, 2, 3, 4}, nil, mp) 551 require.NoError(t, err) 552 v.Shrink([]int64{1, 2}, false) 553 vs := MustFixedCol[uint64](v) 554 require.Equal(t, []uint64{2, 3}, vs) 555 v.Free(mp) 556 require.Equal(t, int64(0), mp.CurrNB()) 557 } 558 } 559 560 func TestShuffle(t *testing.T) { 561 mp := mpool.MustNewZero() 562 563 { // Array Float32 564 v := NewVec(types.T_array_float32.ToType()) 565 err := AppendArrayList[float32](v, [][]float32{{1, 1}, {2, 2}, {3, 3}}, nil, mp) 566 require.NoError(t, err) 567 v.Shuffle([]int64{1, 2}, mp) 568 require.Equal(t, [][]float32{{2, 2}, {3, 3}}, MustArrayCol[float32](v)) 569 require.Equal(t, "[2, 2] [3, 3]-[]", v.String()) 570 v.Free(mp) 571 require.Equal(t, int64(0), mp.CurrNB()) 572 } 573 { // Array Float64 574 v := NewVec(types.T_array_float64.ToType()) 575 err := AppendArrayList[float64](v, [][]float64{{1, 1}, {2, 2}, {3, 3}}, nil, mp) 576 require.NoError(t, err) 577 v.Shuffle([]int64{1, 2}, mp) 578 require.Equal(t, [][]float64{{2, 2}, {3, 3}}, MustArrayCol[float64](v)) 579 require.Equal(t, "[2, 2] [3, 3]-[]", v.String()) 580 v.Free(mp) 581 require.Equal(t, int64(0), mp.CurrNB()) 582 } 583 { // bool 584 v := NewVec(types.T_bool.ToType()) 585 err := AppendFixedList(v, []bool{true, false, true, false}, nil, mp) 586 require.NoError(t, err) 587 v.Shuffle([]int64{2, 1}, mp) 588 vs := MustFixedCol[bool](v) 589 require.Equal(t, []bool{true, false}, vs) 590 require.Equal(t, "[true false]", v.String()) 591 v.Free(mp) 592 require.Equal(t, int64(0), mp.CurrNB()) 593 } 594 { // int8 595 v := NewVec(types.T_int8.ToType()) 596 err := AppendFixedList(v, []int8{1, 2, 3, 4}, nil, mp) 597 require.NoError(t, err) 598 v.Shuffle([]int64{1, 2}, mp) 599 vs := MustFixedCol[int8](v) 600 require.Equal(t, []int8{2, 3}, vs) 601 require.Equal(t, "[2 3]", v.String()) 602 v.Free(mp) 603 require.Equal(t, int64(0), mp.CurrNB()) 604 } 605 { // int16 606 v := NewVec(types.T_int16.ToType()) 607 err := AppendFixedList(v, []int16{1, 2, 3, 4}, nil, mp) 608 require.NoError(t, err) 609 v.Shuffle([]int64{0, 3}, mp) 610 vs := MustFixedCol[int16](v) 611 require.Equal(t, []int16{1, 4}, vs) 612 require.Equal(t, "[1 4]", v.String()) 613 v.Free(mp) 614 require.Equal(t, int64(0), mp.CurrNB()) 615 } 616 { // int32 617 v := NewVec(types.T_int32.ToType()) 618 err := AppendFixedList(v, []int32{1, 2, 3, 4}, nil, mp) 619 require.NoError(t, err) 620 v.Shuffle([]int64{1, 2}, mp) 621 vs := MustFixedCol[int32](v) 622 require.Equal(t, []int32{2, 3}, vs) 623 require.Equal(t, "[2 3]", v.String()) 624 v.Free(mp) 625 require.Equal(t, int64(0), mp.CurrNB()) 626 } 627 { // int64 628 v := NewVec(types.T_int64.ToType()) 629 err := AppendFixedList(v, []int64{1, 2, 3, 4}, nil, mp) 630 require.NoError(t, err) 631 v.Shuffle([]int64{1, 2}, mp) 632 vs := MustFixedCol[int64](v) 633 require.Equal(t, []int64{2, 3}, vs) 634 require.Equal(t, "[2 3]", v.String()) 635 v.Free(mp) 636 require.Equal(t, int64(0), mp.CurrNB()) 637 } 638 { // uint8 639 v := NewVec(types.T_uint8.ToType()) 640 err := AppendFixedList(v, []uint8{1, 2, 3, 4}, nil, mp) 641 require.NoError(t, err) 642 v.Shuffle([]int64{1, 2}, mp) 643 vs := MustFixedCol[uint8](v) 644 require.Equal(t, []uint8{2, 3}, vs) 645 require.Equal(t, "[2 3]", v.String()) 646 v.Free(mp) 647 require.Equal(t, int64(0), mp.CurrNB()) 648 } 649 { // uint16 650 v := NewVec(types.T_uint16.ToType()) 651 err := AppendFixedList(v, []uint16{1, 2, 3, 4}, nil, mp) 652 require.NoError(t, err) 653 v.Shuffle([]int64{0, 3}, mp) 654 vs := MustFixedCol[uint16](v) 655 require.Equal(t, []uint16{1, 4}, vs) 656 require.Equal(t, "[1 4]", v.String()) 657 v.Free(mp) 658 require.Equal(t, int64(0), mp.CurrNB()) 659 } 660 { // uint32 661 v := NewVec(types.T_uint32.ToType()) 662 err := AppendFixedList(v, []uint32{1, 2, 3, 4}, nil, mp) 663 require.NoError(t, err) 664 v.Shuffle([]int64{1, 2}, mp) 665 vs := MustFixedCol[uint32](v) 666 require.Equal(t, []uint32{2, 3}, vs) 667 require.Equal(t, "[2 3]", v.String()) 668 v.Free(mp) 669 require.Equal(t, int64(0), mp.CurrNB()) 670 } 671 { // uint64 672 v := NewVec(types.T_uint64.ToType()) 673 err := AppendFixedList(v, []uint64{1, 2, 3, 4}, nil, mp) 674 require.NoError(t, err) 675 v.Shuffle([]int64{1, 2}, mp) 676 vs := MustFixedCol[uint64](v) 677 require.Equal(t, []uint64{2, 3}, vs) 678 require.Equal(t, "[2 3]", v.String()) 679 v.Free(mp) 680 require.Equal(t, int64(0), mp.CurrNB()) 681 } 682 { // float32 683 v := NewVec(types.T_float32.ToType()) 684 err := AppendFixedList(v, []float32{1, 2, 3, 4}, nil, mp) 685 require.NoError(t, err) 686 v.Shuffle([]int64{1, 2}, mp) 687 vs := MustFixedCol[float32](v) 688 require.Equal(t, []float32{2, 3}, vs) 689 require.Equal(t, "[2 3]", v.String()) 690 v.Free(mp) 691 require.Equal(t, int64(0), mp.CurrNB()) 692 } 693 { // float64 694 v := NewVec(types.T_float64.ToType()) 695 err := AppendFixedList(v, []float64{1, 2, 3, 4}, nil, mp) 696 require.NoError(t, err) 697 v.Shuffle([]int64{1, 2}, mp) 698 vs := MustFixedCol[float64](v) 699 require.Equal(t, []float64{2, 3}, vs) 700 require.Equal(t, "[2 3]", v.String()) 701 v.Free(mp) 702 require.Equal(t, int64(0), mp.CurrNB()) 703 } 704 { // text 705 v := NewVec(types.T_text.ToType()) 706 err := AppendBytesList(v, [][]byte{[]byte("1"), []byte("2"), []byte("3"), []byte("4")}, nil, mp) 707 require.NoError(t, err) 708 v.Shuffle([]int64{1, 2}, mp) 709 vs := MustStrCol(v) 710 require.Equal(t, []string{"2", "3"}, vs) 711 require.Equal(t, [][]byte{[]byte("2"), []byte("3")}, MustBytesCol(v)) 712 require.Equal(t, "[2 3]", v.String()) 713 v.Free(mp) 714 require.Equal(t, int64(0), mp.CurrNB()) 715 } 716 { // date 717 v := NewVec(types.T_date.ToType()) 718 err := AppendFixedList(v, []types.Date{1, 2, 3, 4}, nil, mp) 719 require.NoError(t, err) 720 v.Shuffle([]int64{1, 2}, mp) 721 vs := MustFixedCol[types.Date](v) 722 require.Equal(t, []types.Date{2, 3}, vs) 723 require.Equal(t, "[0001-01-03 0001-01-04]", v.String()) 724 v.Free(mp) 725 require.Equal(t, int64(0), mp.CurrNB()) 726 } 727 { // datetime 728 v := NewVec(types.T_datetime.ToType()) 729 err := AppendFixedList(v, []types.Datetime{1, 2, 3, 4}, nil, mp) 730 require.NoError(t, err) 731 v.Shuffle([]int64{1, 2}, mp) 732 vs := MustFixedCol[types.Datetime](v) 733 require.Equal(t, []types.Datetime{2, 3}, vs) 734 require.Equal(t, "[0001-01-01 00:00:00 0001-01-01 00:00:00]", v.String()) 735 v.Free(mp) 736 require.Equal(t, int64(0), mp.CurrNB()) 737 } 738 { // time 739 v := NewVec(types.T_time.ToType()) 740 err := AppendFixedList(v, []types.Time{1, 2, 3, 4}, nil, mp) 741 require.NoError(t, err) 742 v.Shuffle([]int64{1, 2}, mp) 743 vs := MustFixedCol[types.Time](v) 744 require.Equal(t, []types.Time{2, 3}, vs) 745 require.Equal(t, "[00:00:00 00:00:00]", v.String()) 746 v.Free(mp) 747 require.Equal(t, int64(0), mp.CurrNB()) 748 } 749 { // timestamp 750 v := NewVec(types.T_timestamp.ToType()) 751 err := AppendFixedList(v, []types.Timestamp{1, 2, 3, 4}, nil, mp) 752 require.NoError(t, err) 753 v.Shuffle([]int64{1, 2}, mp) 754 vs := MustFixedCol[types.Timestamp](v) 755 require.Equal(t, []types.Timestamp{2, 3}, vs) 756 require.Equal(t, "[0001-01-01 00:00:00.000002 UTC 0001-01-01 00:00:00.000003 UTC]", v.String()) 757 v.Free(mp) 758 require.Equal(t, int64(0), mp.CurrNB()) 759 } 760 { // decimal64 761 vs := make([]types.Decimal64, 4) 762 v := NewVec(types.T_decimal64.ToType()) 763 err := AppendFixedList(v, vs, nil, mp) 764 require.NoError(t, err) 765 v.Shuffle([]int64{1, 2}, mp) 766 require.Equal(t, vs[1:3], MustFixedCol[types.Decimal64](v)) 767 require.Equal(t, "[0 0]", v.String()) 768 v.Free(mp) 769 require.Equal(t, int64(0), mp.CurrNB()) 770 } 771 { // decimal128 772 vs := make([]types.Decimal128, 4) 773 v := NewVec(types.T_decimal128.ToType()) 774 err := AppendFixedList(v, vs, nil, mp) 775 require.NoError(t, err) 776 v.Shuffle([]int64{1, 2}, mp) 777 require.Equal(t, vs[1:3], MustFixedCol[types.Decimal128](v)) 778 require.Equal(t, "[{0 0} {0 0}]", v.String()) 779 v.Free(mp) 780 require.Equal(t, int64(0), mp.CurrNB()) 781 } 782 { // uuid 783 vs := make([]types.Uuid, 4) 784 v := NewVec(types.T_uuid.ToType()) 785 err := AppendFixedList(v, vs, nil, mp) 786 require.NoError(t, err) 787 v.Shuffle([]int64{1, 2}, mp) 788 require.Equal(t, vs[1:3], MustFixedCol[types.Uuid](v)) 789 require.Equal(t, "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]", v.String()) 790 v.Free(mp) 791 require.Equal(t, int64(0), mp.CurrNB()) 792 } 793 { // ts 794 vs := make([]types.TS, 4) 795 v := NewVec(types.T_TS.ToType()) 796 err := AppendFixedList(v, vs, nil, mp) 797 require.NoError(t, err) 798 v.Shuffle([]int64{1, 2}, mp) 799 require.Equal(t, vs[1:3], MustFixedCol[types.TS](v)) 800 require.Equal(t, "[[0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0]]", v.String()) 801 v.Free(mp) 802 require.Equal(t, int64(0), mp.CurrNB()) 803 } 804 { // rowid 805 vs := make([]types.Rowid, 4) 806 v := NewVec(types.T_Rowid.ToType()) 807 err := AppendFixedList(v, vs, nil, mp) 808 require.NoError(t, err) 809 v.Shuffle([]int64{1, 2}, mp) 810 require.Equal(t, vs[1:3], MustFixedCol[types.Rowid](v)) 811 require.Equal(t, "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]", v.String()) 812 v.Free(mp) 813 require.Equal(t, int64(0), mp.CurrNB()) 814 } 815 { // blockid 816 vs := make([]types.Blockid, 4) 817 v := NewVec(types.T_Blockid.ToType()) 818 err := AppendFixedList(v, vs, nil, mp) 819 require.NoError(t, err) 820 v.Shuffle([]int64{1, 2}, mp) 821 require.Equal(t, vs[1:3], MustFixedCol[types.Blockid](v)) 822 require.Equal(t, "[[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]]", v.String()) 823 v.Free(mp) 824 require.Equal(t, int64(0), mp.CurrNB()) 825 } 826 { // bit 827 v := NewVec(types.T_bit.ToType()) 828 err := AppendFixedList(v, []uint64{1, 2, 3, 4}, nil, mp) 829 require.NoError(t, err) 830 err = v.Shuffle([]int64{1, 2}, mp) 831 require.NoError(t, err) 832 vs := MustFixedCol[uint64](v) 833 require.Equal(t, []uint64{2, 3}, vs) 834 require.Equal(t, "[2 3]", v.String()) 835 v.Free(mp) 836 require.Equal(t, int64(0), mp.CurrNB()) 837 } 838 } 839 840 func TestCopy(t *testing.T) { 841 mp := mpool.MustNewZero() 842 { // fixed 843 v := NewVec(types.T_int8.ToType()) 844 AppendFixedList(v, []int8{0, 0, 1, 0}, nil, mp) 845 w := NewVec(types.T_int8.ToType()) 846 AppendFixedList(w, []int8{0, 0, 0, 0}, nil, mp) 847 err := v.Copy(w, 2, 0, mp) 848 require.NoError(t, err) 849 require.Equal(t, MustFixedCol[int8](v), MustFixedCol[int8](w)) 850 v.Free(mp) 851 w.Free(mp) 852 require.Equal(t, int64(0), mp.CurrNB()) 853 } 854 { // bit 855 v := NewVec(types.T_bit.ToType()) 856 err := AppendFixedList(v, []uint64{0, 0, 1, 0}, nil, mp) 857 require.NoError(t, err) 858 w := NewVec(types.T_bit.ToType()) 859 err = AppendFixedList(w, []uint64{0, 0, 0, 0}, nil, mp) 860 require.NoError(t, err) 861 err = v.Copy(w, 2, 0, mp) 862 require.NoError(t, err) 863 require.Equal(t, MustFixedCol[uint64](v), MustFixedCol[uint64](w)) 864 v.Free(mp) 865 w.Free(mp) 866 require.Equal(t, int64(0), mp.CurrNB()) 867 } 868 { // Array Float32 869 v := NewVec(types.New(types.T_array_float32, 10, 0)) 870 AppendArrayList[float32](v, [][]float32{{0, 0}, {0, 0}, {1, 1}, {0, 0}}, nil, mp) 871 w := NewVec(types.New(types.T_array_float32, 10, 0)) 872 AppendArrayList[float32](w, [][]float32{{0, 0}, {0, 0}, {0, 0}, {0, 0}}, nil, mp) 873 err := v.Copy(w, 2, 0, mp) 874 require.NoError(t, err) 875 require.Equal(t, MustArrayCol[float32](v), MustArrayCol[float32](w)) 876 v.Free(mp) 877 w.Free(mp) 878 require.Equal(t, int64(0), mp.CurrNB()) 879 } 880 { // Array Float64 881 v := NewVec(types.New(types.T_array_float64, 10, 0)) 882 AppendArrayList[float64](v, [][]float64{{0, 0}, {0, 0}, {1, 1}, {0, 0}}, nil, mp) 883 w := NewVec(types.New(types.T_array_float64, 10, 0)) 884 AppendArrayList[float64](w, [][]float64{{0, 0}, {0, 0}, {0, 0}, {0, 0}}, nil, mp) 885 err := v.Copy(w, 2, 0, mp) 886 require.NoError(t, err) 887 require.Equal(t, MustArrayCol[float32](v), MustArrayCol[float32](w)) 888 v.Free(mp) 889 w.Free(mp) 890 require.Equal(t, int64(0), mp.CurrNB()) 891 } 892 { // string 893 v := NewVec(types.New(types.T_char, 10, 0)) 894 AppendBytesList(v, [][]byte{ 895 []byte("hello"), 896 []byte("hello"), 897 []byte("nihao"), 898 []byte("hello"), 899 }, nil, mp) 900 w := NewVec(types.New(types.T_char, 10, 0)) 901 AppendBytesList(w, [][]byte{ 902 []byte("hello"), 903 []byte("hello"), 904 []byte("hello"), 905 []byte("hello"), 906 }, nil, mp) 907 err := v.Copy(w, 2, 0, mp) 908 require.NoError(t, err) 909 require.Equal(t, MustStrCol(v), MustStrCol(w)) 910 v.Free(mp) 911 w.Free(mp) 912 require.Equal(t, int64(0), mp.CurrNB()) 913 } 914 } 915 916 func TestCloneWindow(t *testing.T) { 917 mp := mpool.MustNewZero() 918 v1 := NewConstNull(types.T_int32.ToType(), 10, mp) 919 defer v1.Free(mp) 920 v2, err := v1.CloneWindow(3, 5, mp) 921 defer v2.Free(mp) 922 require.NoError(t, err) 923 require.True(t, v2.IsConstNull()) 924 require.Equal(t, 2, v2.Length()) 925 926 v3, _ := NewConstFixed[int32](types.T_int32.ToType(), 10, 20, mp) 927 defer v3.Free(mp) 928 v4, err := v3.CloneWindow(3, 5, mp) 929 defer v4.Free(mp) 930 require.NoError(t, err) 931 require.True(t, v4.IsConst()) 932 require.Equal(t, 2, v4.Length()) 933 require.Equal(t, int32(10), GetFixedAt[int32](v4, 0)) 934 require.Equal(t, int32(10), GetFixedAt[int32](v4, 1)) 935 } 936 937 func TestCloneWindowWithMpNil(t *testing.T) { 938 mp := mpool.MustNewZero() 939 vec1 := NewVec(types.T_int32.ToType()) 940 AppendFixed(vec1, int32(1), false, mp) 941 AppendFixed(vec1, int32(2), true, mp) 942 AppendFixed(vec1, int32(3), false, mp) 943 require.False(t, vec1.NeedDup()) 944 945 vec2, err := vec1.CloneWindow(0, vec1.Length(), nil) 946 require.NoError(t, err) 947 vec1.Free(mp) 948 949 t.Log(vec2.String()) 950 require.True(t, vec2.NeedDup()) 951 require.Equal(t, int32(1), GetFixedAt[int32](vec2, 0)) 952 require.True(t, vec2.GetNulls().Contains(uint64(1))) 953 require.Equal(t, int32(3), GetFixedAt[int32](vec2, 2)) 954 955 vec3 := NewVec(types.T_char.ToType()) 956 AppendBytes(vec3, []byte("h"), false, mp) 957 AppendBytes(vec3, []byte("xx"), true, mp) 958 AppendBytes(vec3, []byte("uuu"), false, mp) 959 require.False(t, vec3.NeedDup()) 960 961 vec4, err := vec3.CloneWindow(0, vec3.Length(), nil) 962 require.NoError(t, err) 963 vec3.Free(mp) 964 965 require.True(t, vec4.NeedDup()) 966 require.Equal(t, 1, len(vec4.GetBytesAt(0))) 967 require.Equal(t, 3, len(vec4.GetBytesAt(2))) 968 require.True(t, vec4.GetNulls().Contains(uint64(1))) 969 970 { //Array Float32 971 mp := mpool.MustNewZero() 972 vec5 := NewVec(types.New(types.T_array_float32, 2, 0)) 973 AppendArray[float32](vec5, []float32{1, 1}, false, mp) 974 AppendArray[float32](vec5, []float32{2, 2}, true, mp) 975 AppendArray[float32](vec5, []float32{3, 3}, false, mp) 976 require.False(t, vec5.NeedDup()) 977 978 vec6, err := vec5.CloneWindow(0, vec5.Length(), nil) 979 require.NoError(t, err) 980 vec5.Free(mp) 981 982 t.Log(vec6.String()) 983 require.True(t, vec6.NeedDup()) 984 require.Equal(t, []float32{1, 1}, GetArrayAt[float32](vec6, 0)) 985 require.True(t, vec6.GetNulls().Contains(uint64(1))) 986 require.Equal(t, []float32{3, 3}, GetArrayAt[float32](vec6, 2)) 987 } 988 { //Array Float64 989 mp := mpool.MustNewZero() 990 vec5 := NewVec(types.New(types.T_array_float64, 2, 0)) 991 AppendArray(vec5, []float64{1, 1}, false, mp) 992 AppendArray(vec5, []float64{2, 2}, true, mp) 993 AppendArray(vec5, []float64{3, 3}, false, mp) 994 require.False(t, vec5.NeedDup()) 995 996 vec6, err := vec5.CloneWindow(0, vec5.Length(), nil) 997 require.NoError(t, err) 998 vec5.Free(mp) 999 1000 t.Log(vec6.String()) 1001 require.True(t, vec6.NeedDup()) 1002 require.Equal(t, []float64{1, 1}, GetArrayAt[float64](vec6, 0)) 1003 require.True(t, vec6.GetNulls().Contains(uint64(1))) 1004 require.Equal(t, []float64{3, 3}, GetArrayAt[float64](vec6, 2)) 1005 } 1006 } 1007 1008 /* 1009 func TestUnionOne(t *testing.T) { 1010 mp := mpool.MustNewZero() 1011 { // bool 1012 v := NewVector(types.T_bool.ToType()) 1013 err := v.PreExtend(10, mp) 1014 require.NoError(t, err) 1015 err = AppendList(v, []bool{true, false, true, false}, nil, mp) 1016 require.NoError(t, err) 1017 w := NewVector(types.T_bool.ToType()) 1018 w.UnionOne(v, 0, false, mp) 1019 require.Equal(t, MustFixedCol[bool](v)[:1], MustFixedCol[bool](w)) 1020 w.UnionOne(v, 0, true, mp) 1021 v.Free(mp) 1022 w.Free(mp) 1023 require.Equal(t, int64(0), mp.CurrNB()) 1024 } 1025 { // int8 1026 v := NewVector(types.T_int8.ToType()) 1027 err := v.PreExtend(10, mp) 1028 require.NoError(t, err) 1029 err = AppendList(v, []int8{1, 2, 3, 4}, nil, mp) 1030 require.NoError(t, err) 1031 w := NewVector(types.T_int8.ToType()) 1032 w.UnionOne(v, 0, false, mp) 1033 require.Equal(t, MustFixedCol[int8](v)[:1], MustFixedCol[int8](w)) 1034 w.UnionOne(v, 0, true, mp) 1035 v.Free(mp) 1036 w.Free(mp) 1037 require.Equal(t, int64(0), mp.CurrNB()) 1038 } 1039 { // int16 1040 v := NewVector(types.T_int16.ToType()) 1041 err := v.PreExtend(10, mp) 1042 require.NoError(t, err) 1043 err = AppendList(v, []int16{1, 2, 3, 4}, nil, mp) 1044 require.NoError(t, err) 1045 w := NewVector(types.T_int16.ToType()) 1046 w.UnionOne(v, 0, false, mp) 1047 require.Equal(t, MustFixedCol[int16](v)[:1], MustFixedCol[int16](w)) 1048 w.UnionOne(v, 0, true, mp) 1049 v.Free(mp) 1050 w.Free(mp) 1051 require.Equal(t, int64(0), mp.CurrNB()) 1052 } 1053 { // int32 1054 v := NewVector(types.T_int32.ToType()) 1055 err := v.PreExtend(10, mp) 1056 require.NoError(t, err) 1057 err = AppendList(v, []int32{1, 2, 3, 4}, nil, mp) 1058 require.NoError(t, err) 1059 w := NewVector(types.T_int32.ToType()) 1060 w.UnionOne(v, 0, false, mp) 1061 require.Equal(t, MustFixedCol[int32](v)[:1], MustFixedCol[int32](w)) 1062 w.UnionOne(v, 0, true, mp) 1063 v.Free(mp) 1064 w.Free(mp) 1065 require.Equal(t, int64(0), mp.CurrNB()) 1066 } 1067 { // int64 1068 v := NewVector(types.T_int64.ToType()) 1069 err := v.PreExtend(10, mp) 1070 require.NoError(t, err) 1071 err = AppendList(v, []int64{1, 2, 3, 4}, nil, mp) 1072 require.NoError(t, err) 1073 w := NewVector(types.T_int64.ToType()) 1074 w.UnionOne(v, 0, false, mp) 1075 require.Equal(t, MustFixedCol[int64](v)[:1], MustFixedCol[int64](w)) 1076 w.UnionOne(v, 0, true, mp) 1077 v.Free(mp) 1078 w.Free(mp) 1079 require.Equal(t, int64(0), mp.CurrNB()) 1080 } 1081 { // uint8 1082 v := NewVector(types.T_uint8.ToType()) 1083 err := v.PreExtend(10, mp) 1084 require.NoError(t, err) 1085 err = AppendList(v, []uint8{1, 2, 3, 4}, nil, mp) 1086 require.NoError(t, err) 1087 w := NewVector(types.T_uint8.ToType()) 1088 w.UnionOne(v, 0, false, mp) 1089 require.Equal(t, MustFixedCol[uint8](v)[:1], MustFixedCol[uint8](w)) 1090 w.UnionOne(v, 0, true, mp) 1091 v.Free(mp) 1092 w.Free(mp) 1093 require.Equal(t, int64(0), mp.CurrNB()) 1094 } 1095 { // uint16 1096 v := NewVector(types.T_uint16.ToType()) 1097 err := v.PreExtend(10, mp) 1098 require.NoError(t, err) 1099 err = AppendList(v, []uint16{1, 2, 3, 4}, nil, mp) 1100 require.NoError(t, err) 1101 w := NewVector(types.T_uint16.ToType()) 1102 w.UnionOne(v, 0, false, mp) 1103 require.Equal(t, MustFixedCol[uint16](v)[:1], MustFixedCol[uint16](w)) 1104 w.UnionOne(v, 0, true, mp) 1105 v.Free(mp) 1106 w.Free(mp) 1107 require.Equal(t, int64(0), mp.CurrNB()) 1108 } 1109 { // uint32 1110 v := NewVector(types.T_uint32.ToType()) 1111 err := v.PreExtend(10, mp) 1112 require.NoError(t, err) 1113 err = AppendList(v, []uint32{1, 2, 3, 4}, nil, mp) 1114 require.NoError(t, err) 1115 w := NewVector(types.T_uint32.ToType()) 1116 w.UnionOne(v, 0, false, mp) 1117 require.Equal(t, MustFixedCol[uint32](v)[:1], MustFixedCol[uint32](w)) 1118 w.UnionOne(v, 0, true, mp) 1119 v.Free(mp) 1120 w.Free(mp) 1121 require.Equal(t, int64(0), mp.CurrNB()) 1122 } 1123 { // uint64 1124 v := NewVector(types.T_uint64.ToType()) 1125 err := v.PreExtend(10, mp) 1126 require.NoError(t, err) 1127 err = AppendList(v, []uint64{1, 2, 3, 4}, nil, mp) 1128 require.NoError(t, err) 1129 w := NewVector(types.T_uint64.ToType()) 1130 w.UnionOne(v, 0, false, mp) 1131 require.Equal(t, MustFixedCol[uint64](v)[:1], MustFixedCol[uint64](w)) 1132 w.UnionOne(v, 0, true, mp) 1133 v.Free(mp) 1134 w.Free(mp) 1135 require.Equal(t, int64(0), mp.CurrNB()) 1136 } 1137 { // float32 1138 v := NewVector(types.T_float32.ToType()) 1139 err := v.PreExtend(10, mp) 1140 require.NoError(t, err) 1141 err = AppendList(v, []float32{1, 2, 3, 4}, nil, mp) 1142 require.NoError(t, err) 1143 w := NewVector(types.T_float32.ToType()) 1144 w.UnionOne(v, 0, false, mp) 1145 require.Equal(t, MustFixedCol[float32](v)[:1], MustFixedCol[float32](w)) 1146 w.UnionOne(v, 0, true, mp) 1147 v.Free(mp) 1148 w.Free(mp) 1149 require.Equal(t, int64(0), mp.CurrNB()) 1150 } 1151 { // float64 1152 v := NewVector(types.T_float64.ToType()) 1153 err := v.PreExtend(10, mp) 1154 require.NoError(t, err) 1155 err = AppendList(v, []float64{1, 2, 3, 4}, nil, mp) 1156 require.NoError(t, err) 1157 w := NewVector(types.T_float64.ToType()) 1158 w.UnionOne(v, 0, false, mp) 1159 require.Equal(t, MustFixedCol[float64](v)[:1], MustFixedCol[float64](w)) 1160 w.UnionOne(v, 0, true, mp) 1161 v.Free(mp) 1162 w.Free(mp) 1163 require.Equal(t, int64(0), mp.CurrNB()) 1164 } 1165 { // text 1166 v := NewVector(types.T_text.ToType()) 1167 err := v.PreExtend(10, mp) 1168 require.NoError(t, err) 1169 err = AppendBytesList(v, [][]byte{[]byte("1"), []byte("2"), []byte("3"), []byte("4")}, nil, mp) 1170 require.NoError(t, err) 1171 w := NewVector(types.T_text.ToType()) 1172 w.UnionOne(v, 0, false, mp) 1173 require.Equal(t, MustStrCols(v)[:1], MustStrCols(w)) 1174 w.UnionOne(v, 0, true, mp) 1175 v.Free(mp) 1176 w.Free(mp) 1177 require.Equal(t, int64(0), mp.CurrNB()) 1178 } 1179 { // date 1180 v := NewVector(types.T_date.ToType()) 1181 err := v.PreExtend(10, mp) 1182 require.NoError(t, err) 1183 err = AppendList(v, []types.Date{1, 2, 3, 4}, nil, mp) 1184 require.NoError(t, err) 1185 w := NewVector(types.T_date.ToType()) 1186 w.UnionOne(v, 0, false, mp) 1187 require.Equal(t, MustFixedCol[types.Date](v)[:1], MustFixedCol[types.Date](w)) 1188 w.UnionOne(v, 0, true, mp) 1189 v.Free(mp) 1190 w.Free(mp) 1191 require.Equal(t, int64(0), mp.CurrNB()) 1192 } 1193 { // datetime 1194 v := NewVector(types.T_datetime.ToType()) 1195 err := v.PreExtend(10, mp) 1196 require.NoError(t, err) 1197 err = AppendList(v, []types.Datetime{1, 2, 3, 4}, nil, mp) 1198 require.NoError(t, err) 1199 w := NewVector(types.T_datetime.ToType()) 1200 w.UnionOne(v, 0, false, mp) 1201 require.Equal(t, MustFixedCol[types.Datetime](v)[:1], MustFixedCol[types.Datetime](w)) 1202 w.UnionOne(v, 0, true, mp) 1203 v.Free(mp) 1204 w.Free(mp) 1205 require.Equal(t, int64(0), mp.CurrNB()) 1206 } 1207 { // time 1208 v := NewVector(types.T_time.ToType()) 1209 err := v.PreExtend(10, mp) 1210 require.NoError(t, err) 1211 err = AppendList(v, []types.Time{1, 2, 3, 4}, nil, mp) 1212 require.NoError(t, err) 1213 w := NewVector(types.T_time.ToType()) 1214 w.UnionOne(v, 0, false, mp) 1215 require.Equal(t, MustFixedCol[types.Time](v)[:1], MustFixedCol[types.Time](w)) 1216 w.UnionOne(v, 0, true, mp) 1217 v.Free(mp) 1218 w.Free(mp) 1219 require.Equal(t, int64(0), mp.CurrNB()) 1220 } 1221 { // timestamp 1222 v := NewVector(types.T_timestamp.ToType()) 1223 err := v.PreExtend(10, mp) 1224 require.NoError(t, err) 1225 err = AppendList(v, []types.Timestamp{1, 2, 3, 4}, nil, mp) 1226 require.NoError(t, err) 1227 w := NewVector(types.T_timestamp.ToType()) 1228 w.UnionOne(v, 0, false, mp) 1229 require.Equal(t, MustFixedCol[types.Timestamp](v)[:1], MustFixedCol[types.Timestamp](w)) 1230 w.UnionOne(v, 0, true, mp) 1231 v.Free(mp) 1232 w.Free(mp) 1233 require.Equal(t, int64(0), mp.CurrNB()) 1234 } 1235 { // decimal64 1236 vs := make([]types.Decimal64, 4) 1237 v := NewVector(types.T_decimal64.ToType()) 1238 err := v.PreExtend(10, mp) 1239 require.NoError(t, err) 1240 err = AppendList(v, vs, nil, mp) 1241 require.NoError(t, err) 1242 w := NewVector(types.T_decimal64.ToType()) 1243 w.UnionOne(v, 0, false, mp) 1244 require.Equal(t, MustFixedCol[types.Decimal64](v)[:1], MustFixedCol[types.Decimal64](w)) 1245 w.UnionOne(v, 0, true, mp) 1246 v.Free(mp) 1247 w.Free(mp) 1248 require.Equal(t, int64(0), mp.CurrNB()) 1249 } 1250 { // decimal128 1251 vs := make([]types.Decimal128, 4) 1252 v := NewVector(types.T_decimal128.ToType()) 1253 err := v.PreExtend(10, mp) 1254 require.NoError(t, err) 1255 err = AppendList(v, vs, nil, mp) 1256 require.NoError(t, err) 1257 w := NewVector(types.T_decimal128.ToType()) 1258 w.UnionOne(v, 0, false, mp) 1259 require.Equal(t, MustFixedCol[types.Decimal128](v)[:1], MustFixedCol[types.Decimal128](w)) 1260 w.UnionOne(v, 0, true, mp) 1261 v.Free(mp) 1262 w.Free(mp) 1263 require.Equal(t, int64(0), mp.CurrNB()) 1264 } 1265 { // uuid 1266 vs := make([]types.Uuid, 4) 1267 v := NewVector(types.T_uuid.ToType()) 1268 err := v.PreExtend(10, mp) 1269 require.NoError(t, err) 1270 err = AppendList(v, vs, nil, mp) 1271 require.NoError(t, err) 1272 w := NewVector(types.T_uuid.ToType()) 1273 w.UnionOne(v, 0, false, mp) 1274 require.Equal(t, MustFixedCol[types.Uuid](v)[:1], MustFixedCol[types.Uuid](w)) 1275 w.UnionOne(v, 0, true, mp) 1276 v.Free(mp) 1277 w.Free(mp) 1278 require.Equal(t, int64(0), mp.CurrNB()) 1279 } 1280 { // ts 1281 vs := make([]types.TS, 4) 1282 v := NewVector(types.T_TS.ToType()) 1283 err := v.PreExtend(10, mp) 1284 require.NoError(t, err) 1285 err = AppendList(v, vs, nil, mp) 1286 require.NoError(t, err) 1287 w := NewVector(types.T_TS.ToType()) 1288 w.UnionOne(v, 0, false, mp) 1289 require.Equal(t, MustFixedCol[types.TS](v)[:1], MustFixedCol[types.TS](w)) 1290 w.UnionOne(v, 0, true, mp) 1291 v.Free(mp) 1292 w.Free(mp) 1293 require.Equal(t, int64(0), mp.CurrNB()) 1294 } 1295 { // rowid 1296 vs := make([]types.Rowid, 4) 1297 v := NewVector(types.T_Rowid.ToType()) 1298 err := v.PreExtend(10, mp) 1299 require.NoError(t, err) 1300 err = AppendList(v, vs, nil, mp) 1301 require.NoError(t, err) 1302 w := NewVector(types.T_Rowid.ToType()) 1303 w.UnionOne(v, 0, false, mp) 1304 require.Equal(t, MustFixedCol[types.Rowid](v)[:1], MustFixedCol[types.Rowid](w)) 1305 w.UnionOne(v, 0, true, mp) 1306 v.Free(mp) 1307 w.Free(mp) 1308 require.Equal(t, int64(0), mp.CurrNB()) 1309 } 1310 } 1311 */ 1312 1313 func TestMarshalAndUnMarshal(t *testing.T) { 1314 mp := mpool.MustNewZero() 1315 v := NewVec(types.T_int8.ToType()) 1316 err := AppendFixedList(v, []int8{0, 1, 2}, nil, mp) 1317 require.NoError(t, err) 1318 data, err := v.MarshalBinary() 1319 require.NoError(t, err) 1320 w := new(Vector) 1321 err = w.UnmarshalBinary(data) 1322 require.NoError(t, err) 1323 require.Equal(t, MustFixedCol[int8](v), MustFixedCol[int8](w)) 1324 w = new(Vector) 1325 err = w.UnmarshalBinaryWithCopy(data, mp) 1326 require.NoError(t, err) 1327 require.Equal(t, MustFixedCol[int8](v), MustFixedCol[int8](w)) 1328 require.NoError(t, err) 1329 v.Free(mp) 1330 w.Free(mp) 1331 require.Equal(t, int64(0), mp.CurrNB()) 1332 } 1333 1334 func TestStrMarshalAndUnMarshal(t *testing.T) { 1335 mp := mpool.MustNewZero() 1336 v := NewVec(types.T_text.ToType()) 1337 err := AppendBytesList(v, [][]byte{[]byte("x"), []byte("y")}, nil, mp) 1338 require.NoError(t, err) 1339 data, err := v.MarshalBinary() 1340 require.NoError(t, err) 1341 w := new(Vector) 1342 err = w.UnmarshalBinary(data) 1343 require.NoError(t, err) 1344 require.Equal(t, MustStrCol(v), MustStrCol(w)) 1345 w = new(Vector) 1346 err = w.UnmarshalBinaryWithCopy(data, mp) 1347 require.NoError(t, err) 1348 require.Equal(t, MustStrCol(v), MustStrCol(w)) 1349 v.Free(mp) 1350 w.Free(mp) 1351 require.Equal(t, int64(0), mp.CurrNB()) 1352 } 1353 1354 func TestArrayMarshalAndUnMarshal(t *testing.T) { 1355 1356 { 1357 // Array Float32 1358 mp := mpool.MustNewZero() 1359 v := NewVec(types.New(types.T_array_float32, 2, 0)) 1360 err := AppendArrayList(v, [][]float32{{0, 0}, {1, 1}, {2, 2}}, nil, mp) 1361 require.NoError(t, err) 1362 data, err := v.MarshalBinary() 1363 require.NoError(t, err) 1364 w := new(Vector) 1365 err = w.UnmarshalBinary(data) 1366 require.NoError(t, err) 1367 require.Equal(t, MustArrayCol[float32](v), MustArrayCol[float32](w)) 1368 w = new(Vector) 1369 err = w.UnmarshalBinaryWithCopy(data, mp) 1370 require.NoError(t, err) 1371 require.Equal(t, MustArrayCol[float32](v), MustArrayCol[float32](w)) 1372 require.NoError(t, err) 1373 v.Free(mp) 1374 w.Free(mp) 1375 require.Equal(t, int64(0), mp.CurrNB()) 1376 } 1377 1378 { 1379 // Array Float64 1380 mp := mpool.MustNewZero() 1381 v := NewVec(types.New(types.T_array_float64, 2, 0)) 1382 err := AppendArrayList(v, [][]float64{{0, 0}, {1, 1}, {2, 2}}, nil, mp) 1383 require.NoError(t, err) 1384 data, err := v.MarshalBinary() 1385 require.NoError(t, err) 1386 w := new(Vector) 1387 err = w.UnmarshalBinary(data) 1388 require.NoError(t, err) 1389 require.Equal(t, MustArrayCol[float64](v), MustArrayCol[float64](w)) 1390 w = new(Vector) 1391 err = w.UnmarshalBinaryWithCopy(data, mp) 1392 require.NoError(t, err) 1393 require.Equal(t, MustArrayCol[float64](v), MustArrayCol[float64](w)) 1394 require.NoError(t, err) 1395 v.Free(mp) 1396 w.Free(mp) 1397 require.Equal(t, int64(0), mp.CurrNB()) 1398 } 1399 } 1400 1401 func TestWindowWith(t *testing.T) { 1402 mp := mpool.MustNewZero() 1403 vec1 := NewVec(types.T_int32.ToType()) 1404 AppendFixed(vec1, int32(1), false, mp) 1405 AppendFixed(vec1, int32(2), true, mp) 1406 AppendFixed(vec1, int32(3), false, mp) 1407 require.False(t, vec1.NeedDup()) 1408 1409 vec2, err := vec1.Window(0, vec1.Length()) 1410 require.NoError(t, err) 1411 1412 t.Log(vec2.String()) 1413 require.True(t, vec2.NeedDup()) 1414 require.Equal(t, int32(1), GetFixedAt[int32](vec2, 0)) 1415 require.True(t, vec2.GetNulls().Contains(uint64(1))) 1416 require.Equal(t, int32(3), GetFixedAt[int32](vec2, 2)) 1417 vec2.Free(mp) 1418 1419 vec6, err := vec1.Window(1, vec1.Length()) 1420 require.NoError(t, err) 1421 1422 t.Log(vec6.String()) 1423 require.True(t, vec6.NeedDup()) 1424 require.True(t, vec6.GetNulls().Contains(uint64(0))) 1425 require.Equal(t, int32(3), GetFixedAt[int32](vec6, 1)) 1426 vec6.Free(mp) 1427 1428 require.False(t, vec1.NeedDup()) 1429 require.Equal(t, int32(1), GetFixedAt[int32](vec1, 0)) 1430 require.True(t, vec1.GetNulls().Contains(uint64(1))) 1431 require.Equal(t, int32(3), GetFixedAt[int32](vec1, 2)) 1432 vec1.Free(mp) 1433 1434 vec3 := NewVec(types.T_char.ToType()) 1435 AppendBytes(vec3, []byte("h"), false, mp) 1436 AppendBytes(vec3, []byte("xx"), true, mp) 1437 AppendBytes(vec3, []byte("uuu"), false, mp) 1438 require.False(t, vec3.NeedDup()) 1439 1440 vec4, err := vec3.Window(0, vec3.Length()) 1441 require.NoError(t, err) 1442 1443 require.True(t, vec4.NeedDup()) 1444 require.Equal(t, "h", string(vec4.GetBytesAt(0))) 1445 require.Equal(t, "uuu", string(vec4.GetBytesAt(2))) 1446 require.True(t, vec4.GetNulls().Contains(uint64(1))) 1447 vec4.Free(mp) 1448 1449 vec5, err := vec3.Window(1, vec3.Length()) 1450 require.NoError(t, err) 1451 1452 require.True(t, vec5.NeedDup()) 1453 require.Equal(t, "uuu", string(vec5.GetBytesAt(1))) 1454 require.True(t, vec5.GetNulls().Contains(uint64(0))) 1455 vec5.Free(mp) 1456 1457 require.False(t, vec3.NeedDup()) 1458 require.Equal(t, "h", string(vec3.GetBytesAt(0))) 1459 require.Equal(t, "uuu", string(vec3.GetBytesAt(2))) 1460 require.True(t, vec3.GetNulls().Contains(uint64(1))) 1461 vec3.Free(mp) 1462 1463 { 1464 //Array Float32 1465 1466 vec7 := NewVec(types.T_array_float32.ToType()) 1467 AppendArray(vec7, []float32{1, 1, 1}, false, mp) 1468 AppendArray(vec7, []float32{2, 2, 2}, true, mp) 1469 AppendArray(vec7, []float32{3, 3, 3}, false, mp) 1470 require.False(t, vec7.NeedDup()) 1471 1472 vec8, err := vec7.Window(0, vec7.Length()) 1473 require.NoError(t, err) 1474 1475 require.True(t, vec8.NeedDup()) 1476 require.Equal(t, []float32{1, 1, 1}, GetArrayAt[float32](vec8, 0)) 1477 require.Equal(t, []float32{3, 3, 3}, GetArrayAt[float32](vec8, 2)) 1478 require.True(t, vec8.GetNulls().Contains(uint64(1))) 1479 vec8.Free(mp) 1480 1481 vec9, err := vec7.Window(1, vec7.Length()) 1482 require.NoError(t, err) 1483 1484 require.True(t, vec9.NeedDup()) 1485 require.Equal(t, []float32{3, 3, 3}, GetArrayAt[float32](vec9, 1)) 1486 require.True(t, vec9.GetNulls().Contains(uint64(0))) 1487 vec9.Free(mp) 1488 1489 require.False(t, vec7.NeedDup()) 1490 require.Equal(t, []float32{1, 1, 1}, GetArrayAt[float32](vec7, 0)) 1491 require.Equal(t, []float32{3, 3, 3}, GetArrayAt[float32](vec7, 2)) 1492 require.True(t, vec7.GetNulls().Contains(uint64(1))) 1493 vec7.Free(mp) 1494 } 1495 1496 { 1497 //Array Float64 1498 1499 vec7 := NewVec(types.T_array_float64.ToType()) 1500 AppendArray(vec7, []float64{1, 1, 1}, false, mp) 1501 AppendArray(vec7, []float64{2, 2, 2}, true, mp) 1502 AppendArray(vec7, []float64{3, 3, 3}, false, mp) 1503 require.False(t, vec7.NeedDup()) 1504 1505 vec8, err := vec7.Window(0, vec7.Length()) 1506 require.NoError(t, err) 1507 1508 require.True(t, vec8.NeedDup()) 1509 require.Equal(t, []float64{1, 1, 1}, GetArrayAt[float64](vec8, 0)) 1510 require.Equal(t, []float64{3, 3, 3}, GetArrayAt[float64](vec8, 2)) 1511 require.True(t, vec8.GetNulls().Contains(uint64(1))) 1512 vec8.Free(mp) 1513 1514 vec9, err := vec7.Window(1, vec7.Length()) 1515 require.NoError(t, err) 1516 1517 require.True(t, vec9.NeedDup()) 1518 require.Equal(t, []float64{3, 3, 3}, GetArrayAt[float64](vec9, 1)) 1519 require.True(t, vec9.GetNulls().Contains(uint64(0))) 1520 vec9.Free(mp) 1521 1522 require.False(t, vec7.NeedDup()) 1523 require.Equal(t, []float64{1, 1, 1}, GetArrayAt[float64](vec7, 0)) 1524 require.Equal(t, []float64{3, 3, 3}, GetArrayAt[float64](vec7, 2)) 1525 require.True(t, vec7.GetNulls().Contains(uint64(1))) 1526 vec7.Free(mp) 1527 } 1528 } 1529 1530 func TestSetFunction(t *testing.T) { 1531 mp := mpool.MustNewZero() 1532 { // bool 1533 v := NewVec(types.T_bool.ToType()) 1534 w := NewConstNull(types.T_bool.ToType(), 0, mp) 1535 err := AppendFixedList(v, []bool{true, false, true, false}, nil, mp) 1536 require.NoError(t, err) 1537 sf := GetConstSetFunction(types.T_bool.ToType(), mp) 1538 err = sf(w, v, 1, 1) 1539 require.NoError(t, err) 1540 ws := MustFixedCol[bool](w) 1541 require.Equal(t, []bool{false}, ws) 1542 v.Free(mp) 1543 w.Free(mp) 1544 require.Equal(t, int64(0), mp.CurrNB()) 1545 } 1546 { // bit 1547 v := NewVec(types.T_bit.ToType()) 1548 w := NewConstNull(types.T_uint64.ToType(), 0, mp) 1549 err := AppendFixedList(v, []uint64{1, 2, 3, 4}, nil, mp) 1550 require.NoError(t, err) 1551 sf := GetConstSetFunction(types.T_uint64.ToType(), mp) 1552 err = sf(w, v, 1, 1) 1553 require.NoError(t, err) 1554 ws := MustFixedCol[uint64](w) 1555 require.Equal(t, []uint64{2}, ws) 1556 v.Free(mp) 1557 w.Free(mp) 1558 require.Equal(t, int64(0), mp.CurrNB()) 1559 } 1560 { // int8 1561 v := NewVec(types.T_int8.ToType()) 1562 w := NewConstNull(types.T_int8.ToType(), 0, mp) 1563 err := AppendFixedList(v, []int8{1, 2, 3, 4}, nil, mp) 1564 require.NoError(t, err) 1565 sf := GetConstSetFunction(types.T_int8.ToType(), mp) 1566 err = sf(w, v, 1, 1) 1567 require.NoError(t, err) 1568 ws := MustFixedCol[int8](w) 1569 require.Equal(t, []int8{2}, ws) 1570 v.Free(mp) 1571 w.Free(mp) 1572 require.Equal(t, int64(0), mp.CurrNB()) 1573 } 1574 { // int16 1575 v := NewVec(types.T_int16.ToType()) 1576 w := NewConstNull(types.T_int16.ToType(), 0, mp) 1577 err := AppendFixedList(v, []int16{1, 2, 3, 4}, nil, mp) 1578 require.NoError(t, err) 1579 sf := GetConstSetFunction(types.T_int16.ToType(), mp) 1580 err = sf(w, v, 1, 1) 1581 require.NoError(t, err) 1582 ws := MustFixedCol[int16](w) 1583 require.Equal(t, []int16{2}, ws) 1584 v.Free(mp) 1585 w.Free(mp) 1586 require.Equal(t, int64(0), mp.CurrNB()) 1587 } 1588 { // int32 1589 v := NewVec(types.T_int32.ToType()) 1590 w := NewConstNull(types.T_int32.ToType(), 0, mp) 1591 err := AppendFixedList(v, []int32{1, 2, 3, 4}, nil, mp) 1592 require.NoError(t, err) 1593 sf := GetConstSetFunction(types.T_int32.ToType(), mp) 1594 err = sf(w, v, 1, 1) 1595 require.NoError(t, err) 1596 ws := MustFixedCol[int32](w) 1597 require.Equal(t, []int32{2}, ws) 1598 v.Free(mp) 1599 w.Free(mp) 1600 require.Equal(t, int64(0), mp.CurrNB()) 1601 } 1602 { // int64 1603 v := NewVec(types.T_int64.ToType()) 1604 w := NewConstNull(types.T_int64.ToType(), 0, mp) 1605 err := AppendFixedList(v, []int64{1, 2, 3, 4}, nil, mp) 1606 require.NoError(t, err) 1607 sf := GetConstSetFunction(types.T_int64.ToType(), mp) 1608 err = sf(w, v, 1, 1) 1609 require.NoError(t, err) 1610 ws := MustFixedCol[int64](w) 1611 require.Equal(t, []int64{2}, ws) 1612 v.Free(mp) 1613 w.Free(mp) 1614 require.Equal(t, int64(0), mp.CurrNB()) 1615 } 1616 { // uint8 1617 v := NewVec(types.T_uint8.ToType()) 1618 w := NewConstNull(types.T_uint8.ToType(), 0, mp) 1619 err := AppendFixedList(v, []uint8{1, 2, 3, 4}, nil, mp) 1620 require.NoError(t, err) 1621 sf := GetConstSetFunction(types.T_uint8.ToType(), mp) 1622 err = sf(w, v, 1, 1) 1623 require.NoError(t, err) 1624 ws := MustFixedCol[uint8](w) 1625 require.Equal(t, []uint8{2}, ws) 1626 v.Free(mp) 1627 w.Free(mp) 1628 require.Equal(t, int64(0), mp.CurrNB()) 1629 } 1630 { // uint16 1631 v := NewVec(types.T_uint16.ToType()) 1632 w := NewConstNull(types.T_uint16.ToType(), 0, mp) 1633 err := AppendFixedList(v, []uint16{1, 2, 3, 4}, nil, mp) 1634 require.NoError(t, err) 1635 sf := GetConstSetFunction(types.T_uint16.ToType(), mp) 1636 err = sf(w, v, 1, 1) 1637 require.NoError(t, err) 1638 ws := MustFixedCol[uint16](w) 1639 require.Equal(t, []uint16{2}, ws) 1640 v.Free(mp) 1641 w.Free(mp) 1642 require.Equal(t, int64(0), mp.CurrNB()) 1643 } 1644 { // uint32 1645 v := NewVec(types.T_uint32.ToType()) 1646 w := NewConstNull(types.T_uint32.ToType(), 0, mp) 1647 err := AppendFixedList(v, []uint32{1, 2, 3, 4}, nil, mp) 1648 require.NoError(t, err) 1649 sf := GetConstSetFunction(types.T_uint32.ToType(), mp) 1650 err = sf(w, v, 1, 1) 1651 require.NoError(t, err) 1652 ws := MustFixedCol[uint32](w) 1653 require.Equal(t, []uint32{2}, ws) 1654 v.Free(mp) 1655 w.Free(mp) 1656 require.Equal(t, int64(0), mp.CurrNB()) 1657 } 1658 { // uint64 1659 v := NewVec(types.T_uint64.ToType()) 1660 w := NewConstNull(types.T_uint64.ToType(), 0, mp) 1661 err := AppendFixedList(v, []uint64{1, 2, 3, 4}, nil, mp) 1662 require.NoError(t, err) 1663 sf := GetConstSetFunction(types.T_uint64.ToType(), mp) 1664 err = sf(w, v, 1, 1) 1665 require.NoError(t, err) 1666 ws := MustFixedCol[uint64](w) 1667 require.Equal(t, []uint64{2}, ws) 1668 v.Free(mp) 1669 w.Free(mp) 1670 require.Equal(t, int64(0), mp.CurrNB()) 1671 } 1672 { // float32 1673 v := NewVec(types.T_float32.ToType()) 1674 w := NewConstNull(types.T_float32.ToType(), 0, mp) 1675 err := AppendFixedList(v, []float32{1, 2, 3, 4}, nil, mp) 1676 require.NoError(t, err) 1677 sf := GetConstSetFunction(types.T_float32.ToType(), mp) 1678 err = sf(w, v, 1, 1) 1679 require.NoError(t, err) 1680 ws := MustFixedCol[float32](w) 1681 require.Equal(t, []float32{2}, ws) 1682 v.Free(mp) 1683 w.Free(mp) 1684 require.Equal(t, int64(0), mp.CurrNB()) 1685 } 1686 { // float64 1687 v := NewVec(types.T_float64.ToType()) 1688 w := NewConstNull(types.T_float64.ToType(), 0, mp) 1689 err := AppendFixedList(v, []float64{1, 2, 3, 4}, nil, mp) 1690 require.NoError(t, err) 1691 sf := GetConstSetFunction(types.T_float64.ToType(), mp) 1692 err = sf(w, v, 1, 1) 1693 require.NoError(t, err) 1694 ws := MustFixedCol[float64](w) 1695 require.Equal(t, []float64{2}, ws) 1696 v.Free(mp) 1697 w.Free(mp) 1698 require.Equal(t, int64(0), mp.CurrNB()) 1699 } 1700 { // text 1701 v := NewVec(types.T_text.ToType()) 1702 w := NewConstNull(types.T_text.ToType(), 0, mp) 1703 err := AppendBytesList(v, [][]byte{[]byte("1"), []byte("2"), []byte("3"), []byte("4")}, nil, mp) 1704 require.NoError(t, err) 1705 sf := GetConstSetFunction(types.T_text.ToType(), mp) 1706 err = sf(w, v, 1, 1) 1707 require.NoError(t, err) 1708 ws := MustStrCol(w) 1709 require.Equal(t, []string{"2"}, ws) 1710 v.Free(mp) 1711 w.Free(mp) 1712 require.Equal(t, int64(0), mp.CurrNB()) 1713 } 1714 { // Array Float32 1715 v := NewVec(types.T_array_float32.ToType()) 1716 w := NewConstNull(types.T_array_float32.ToType(), 0, mp) 1717 err := AppendArrayList(v, [][]float32{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}}, nil, mp) 1718 require.NoError(t, err) 1719 sf := GetConstSetFunction(types.T_array_float32.ToType(), mp) 1720 err = sf(w, v, 1, 1) 1721 require.NoError(t, err) 1722 ws := MustArrayCol[float32](w) 1723 require.Equal(t, [][]float32{{2, 2, 2}}, ws) 1724 v.Free(mp) 1725 w.Free(mp) 1726 require.Equal(t, int64(0), mp.CurrNB()) 1727 } 1728 { // Array Float64 1729 v := NewVec(types.T_array_float64.ToType()) 1730 w := NewConstNull(types.T_array_float64.ToType(), 0, mp) 1731 err := AppendArrayList(v, [][]float64{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}}, nil, mp) 1732 require.NoError(t, err) 1733 sf := GetConstSetFunction(types.T_array_float64.ToType(), mp) 1734 err = sf(w, v, 1, 1) 1735 require.NoError(t, err) 1736 ws := MustArrayCol[float64](w) 1737 require.Equal(t, [][]float64{{2, 2, 2}}, ws) 1738 v.Free(mp) 1739 w.Free(mp) 1740 require.Equal(t, int64(0), mp.CurrNB()) 1741 } 1742 } 1743 1744 func TestSetFunction2(t *testing.T) { 1745 // set vec to const value -> const null -> const value -> const null. 1746 // bool type 1747 { 1748 mp := mpool.MustNewZero() 1749 1750 w := NewConstNull(types.T_bool.ToType(), 0, mp) 1751 v := NewVec(types.T_bool.ToType()) 1752 err := AppendFixedList(v, []bool{true, false, true, false}, []bool{false, false, true, true}, mp) 1753 require.NoError(t, err) 1754 1755 sf := GetConstSetFunction(types.T_bool.ToType(), mp) 1756 // set to const value true 1757 { 1758 err = sf(w, v, 0, 1) 1759 require.NoError(t, err) 1760 ws := MustFixedCol[bool](w) 1761 require.Equal(t, []bool{true}, ws) 1762 } 1763 // set to const null 1764 { 1765 err = sf(w, v, 2, 1) 1766 require.NoError(t, err) 1767 require.True(t, w.IsConstNull()) 1768 } 1769 // set to const value false 1770 { 1771 err = sf(w, v, 1, 1) 1772 require.NoError(t, err) 1773 ws := MustFixedCol[bool](w) 1774 require.Equal(t, []bool{false}, ws) 1775 } 1776 // set to const null 1777 { 1778 err = sf(w, v, 3, 1) 1779 require.NoError(t, err) 1780 require.True(t, w.IsConstNull()) 1781 } 1782 v.Free(mp) 1783 w.Free(mp) 1784 require.Equal(t, int64(0), mp.CurrNB()) 1785 } 1786 1787 // byte type 1788 { 1789 mp := mpool.MustNewZero() 1790 1791 w := NewConstNull(types.T_varchar.ToType(), 0, mp) 1792 v := NewVec(types.T_varchar.ToType()) 1793 err := AppendBytesList(v, [][]byte{ 1794 []byte("a"), []byte("abcdefabcdefabcdefabcdef12345"), []byte("c"), []byte("d")}, 1795 []bool{false, false, true, true}, mp) 1796 require.NoError(t, err) 1797 1798 sf := GetConstSetFunction(types.T_varchar.ToType(), mp) 1799 // set to const value a 1800 { 1801 err = sf(w, v, 0, 1) 1802 require.NoError(t, err) 1803 ws := MustBytesCol(w) 1804 require.Equal(t, "a", string(ws[0])) 1805 } 1806 // set to const null 1807 { 1808 err = sf(w, v, 2, 1) 1809 require.NoError(t, err) 1810 require.True(t, w.IsConstNull()) 1811 } 1812 // set to const value b 1813 { 1814 err = sf(w, v, 1, 1) 1815 require.NoError(t, err) 1816 ws := MustBytesCol(w) 1817 require.Equal(t, "abcdefabcdefabcdefabcdef12345", string(ws[0])) 1818 } 1819 // set to const null 1820 { 1821 err = sf(w, v, 3, 1) 1822 require.NoError(t, err) 1823 require.True(t, w.IsConstNull()) 1824 } 1825 v.Free(mp) 1826 w.Free(mp) 1827 require.Equal(t, int64(0), mp.CurrNB()) 1828 } 1829 1830 // Array Float32 type 1831 { 1832 mp := mpool.MustNewZero() 1833 1834 w := NewConstNull(types.T_array_float32.ToType(), 0, mp) 1835 v := NewVec(types.T_array_float32.ToType()) 1836 err := AppendArrayList[float32](v, [][]float32{{1, 1, 1}, {2, 2, 2}, {3, 3, 3}, {4, 4, 4}}, []bool{false, false, true, true}, mp) 1837 require.NoError(t, err) 1838 1839 sf := GetConstSetFunction(types.T_array_float32.ToType(), mp) 1840 // set to const value a 1841 { 1842 err = sf(w, v, 0, 1) 1843 require.NoError(t, err) 1844 ws := MustArrayCol[float32](w) 1845 require.Equal(t, []float32{1, 1, 1}, ws[0]) 1846 } 1847 // set to const null 1848 { 1849 err = sf(w, v, 2, 1) 1850 require.NoError(t, err) 1851 require.True(t, w.IsConstNull()) 1852 } 1853 // set to const value b 1854 { 1855 err = sf(w, v, 1, 1) 1856 require.NoError(t, err) 1857 ws := MustArrayCol[float32](w) 1858 require.Equal(t, []float32{2, 2, 2}, ws[0]) 1859 } 1860 // set to const null 1861 { 1862 err = sf(w, v, 3, 1) 1863 require.NoError(t, err) 1864 require.True(t, w.IsConstNull()) 1865 } 1866 v.Free(mp) 1867 w.Free(mp) 1868 require.Equal(t, int64(0), mp.CurrNB()) 1869 } 1870 } 1871 1872 func BenchmarkUnmarshal(b *testing.B) { 1873 mp := mpool.MustNewZero() 1874 vec := NewVec(types.T_int8.ToType()) 1875 AppendAny(vec, int8(42), false, mp) 1876 data, err := vec.MarshalBinary() 1877 if err != nil { 1878 b.Fatal(err) 1879 } 1880 b.ResetTimer() 1881 for i := 0; i < b.N; i++ { 1882 err := vec.UnmarshalBinary(data) 1883 if err != nil { 1884 b.Fatal(err) 1885 } 1886 } 1887 } 1888 1889 func BenchmarkToTypedSlice(b *testing.B) { 1890 mp := mpool.MustNewZero() 1891 vec := NewVec(types.T_int8.ToType()) 1892 AppendAny(vec, int8(42), false, mp) 1893 var slice []int8 1894 b.ResetTimer() 1895 for i := 0; i < b.N; i++ { 1896 ToSlice(vec, &slice) 1897 } 1898 if slice[0] != 42 { 1899 b.Fatalf("got %v", slice) 1900 } 1901 } 1902 1903 func BenchmarkToFixedCol(b *testing.B) { 1904 mp := mpool.MustNewZero() 1905 vec := NewVec(types.T_int8.ToType()) 1906 AppendAny(vec, int8(42), false, mp) 1907 b.ResetTimer() 1908 var slice []int8 1909 for i := 0; i < b.N; i++ { 1910 ToFixedCol[int8](vec, &slice) 1911 } 1912 } 1913 1914 func BenchmarkMustFixedCol(b *testing.B) { 1915 mp := mpool.MustNewZero() 1916 vec := NewVec(types.T_int8.ToType()) 1917 AppendAny(vec, int8(42), false, mp) 1918 b.ResetTimer() 1919 for i := 0; i < b.N; i++ { 1920 MustFixedCol[int8](vec) 1921 } 1922 }