github.com/matrixorigin/matrixone@v0.7.0/pkg/testutil/util_new.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 testutil 16 17 import ( 18 "context" 19 "math/rand" 20 "strconv" 21 "time" 22 "unsafe" 23 24 "github.com/matrixorigin/matrixone/pkg/common/moerr" 25 "github.com/matrixorigin/matrixone/pkg/common/mpool" 26 "github.com/matrixorigin/matrixone/pkg/container/batch" 27 "github.com/matrixorigin/matrixone/pkg/container/nulls" 28 "github.com/matrixorigin/matrixone/pkg/container/types" 29 "github.com/matrixorigin/matrixone/pkg/container/vector" 30 "github.com/matrixorigin/matrixone/pkg/defines" 31 "github.com/matrixorigin/matrixone/pkg/fileservice" 32 "github.com/matrixorigin/matrixone/pkg/pb/timestamp" 33 "github.com/matrixorigin/matrixone/pkg/vm/process" 34 ) 35 36 func NewProcess() *process.Process { 37 mp := mpool.MustNewZero() 38 return NewProcessWithMPool(mp) 39 } 40 41 func NewProcessWithMPool(mp *mpool.MPool) *process.Process { 42 proc := process.New( 43 context.Background(), 44 mp, 45 nil, // no txn client can be set 46 nil, // no txn operator can be set 47 NewFS(), 48 nil, // no get cluster details func can be set 49 ) 50 proc.Lim.Size = 1 << 20 51 proc.Lim.BatchRows = 1 << 20 52 proc.Lim.BatchSize = 1 << 20 53 proc.Lim.ReaderSize = 1 << 20 54 proc.SessionInfo.TimeZone = time.Local 55 return proc 56 } 57 58 var NewProc = NewProcess 59 60 func NewFS() *fileservice.FileServices { 61 local, err := fileservice.NewMemoryFS(defines.LocalFileServiceName) 62 if err != nil { 63 panic(err) 64 } 65 s3, err := fileservice.NewMemoryFS(defines.SharedFileServiceName) 66 if err != nil { 67 panic(err) 68 } 69 etl, err := fileservice.NewMemoryFS(defines.ETLFileServiceName) 70 if err != nil { 71 panic(err) 72 } 73 fs, err := fileservice.NewFileServices( 74 "local", 75 local, 76 s3, 77 etl, 78 ) 79 if err != nil { 80 panic(err) 81 } 82 return fs 83 } 84 85 func NewBatch(ts []types.Type, random bool, n int, m *mpool.MPool) *batch.Batch { 86 bat := batch.NewWithSize(len(ts)) 87 bat.InitZsOne(n) 88 for i := range bat.Vecs { 89 bat.Vecs[i] = NewVector(n, ts[i], m, random, nil) 90 nulls.New(bat.Vecs[i].Nsp, n) 91 } 92 return bat 93 } 94 95 func NewBatchWithNulls(ts []types.Type, random bool, n int, m *mpool.MPool) *batch.Batch { 96 bat := batch.NewWithSize(len(ts)) 97 bat.InitZsOne(n) 98 for i := range bat.Vecs { 99 bat.Vecs[i] = NewVector(n, ts[i], m, random, nil) 100 nulls.New(bat.Vecs[i].Nsp, n) 101 nsp := bat.Vecs[i].GetNulls() 102 for j := 0; j < n; j++ { 103 if j%2 == 0 { 104 nsp.Set(uint64(j)) 105 } 106 } 107 } 108 return bat 109 } 110 111 func NewBatchWithVectors(vs []*vector.Vector, zs []int64) *batch.Batch { 112 bat := batch.NewWithSize(len(vs)) 113 if len(vs) > 0 { 114 l := vector.Length(vs[0]) 115 if zs == nil { 116 zs = MakeBatchZs(l, false) 117 } 118 bat.Zs = append([]int64{}, zs...) 119 bat.Vecs = vs 120 } 121 return bat 122 } 123 124 func NewVector(n int, typ types.Type, m *mpool.MPool, random bool, Values interface{}) *vector.Vector { 125 switch typ.Oid { 126 case types.T_bool: 127 if vs, ok := Values.([]bool); ok { 128 return NewBoolVector(n, typ, m, random, vs) 129 } 130 return NewBoolVector(n, typ, m, random, nil) 131 case types.T_int8: 132 if vs, ok := Values.([]int8); ok { 133 return NewInt8Vector(n, typ, m, random, vs) 134 } 135 return NewInt8Vector(n, typ, m, random, nil) 136 case types.T_int16: 137 if vs, ok := Values.([]int16); ok { 138 return NewInt16Vector(n, typ, m, random, vs) 139 } 140 return NewInt16Vector(n, typ, m, random, nil) 141 case types.T_int32: 142 if vs, ok := Values.([]int32); ok { 143 return NewInt32Vector(n, typ, m, random, vs) 144 } 145 return NewInt32Vector(n, typ, m, random, nil) 146 case types.T_int64: 147 if vs, ok := Values.([]int64); ok { 148 return NewInt64Vector(n, typ, m, random, vs) 149 } 150 return NewInt64Vector(n, typ, m, random, nil) 151 case types.T_uint8: 152 if vs, ok := Values.([]uint8); ok { 153 return NewUInt8Vector(n, typ, m, random, vs) 154 } 155 return NewUInt8Vector(n, typ, m, random, nil) 156 case types.T_uint16: 157 if vs, ok := Values.([]uint16); ok { 158 return NewUInt16Vector(n, typ, m, random, vs) 159 } 160 return NewUInt16Vector(n, typ, m, random, nil) 161 case types.T_uint32: 162 if vs, ok := Values.([]uint32); ok { 163 return NewUInt32Vector(n, typ, m, random, vs) 164 } 165 return NewUInt32Vector(n, typ, m, random, nil) 166 case types.T_uint64: 167 if vs, ok := Values.([]uint64); ok { 168 return NewUInt64Vector(n, typ, m, random, vs) 169 } 170 return NewUInt64Vector(n, typ, m, random, nil) 171 case types.T_float32: 172 if vs, ok := Values.([]float32); ok { 173 return NewFloat32Vector(n, typ, m, random, vs) 174 } 175 return NewFloat32Vector(n, typ, m, random, nil) 176 case types.T_float64: 177 if vs, ok := Values.([]float64); ok { 178 return NewFloat64Vector(n, typ, m, random, vs) 179 } 180 return NewFloat64Vector(n, typ, m, random, nil) 181 case types.T_date: 182 if vs, ok := Values.([]string); ok { 183 return NewDateVector(n, typ, m, random, vs) 184 } 185 return NewDateVector(n, typ, m, random, nil) 186 case types.T_time: 187 if vs, ok := Values.([]string); ok { 188 return NewTimeVector(n, typ, m, random, vs) 189 } 190 return NewTimeVector(n, typ, m, random, nil) 191 case types.T_datetime: 192 if vs, ok := Values.([]string); ok { 193 return NewDatetimeVector(n, typ, m, random, vs) 194 } 195 return NewDatetimeVector(n, typ, m, random, nil) 196 case types.T_timestamp: 197 if vs, ok := Values.([]string); ok { 198 return NewTimestampVector(n, typ, m, random, vs) 199 } 200 return NewTimestampVector(n, typ, m, random, nil) 201 case types.T_decimal64: 202 if vs, ok := Values.([]types.Decimal64); ok { 203 return NewDecimal64Vector(n, typ, m, random, vs) 204 } 205 return NewDecimal64Vector(n, typ, m, random, nil) 206 case types.T_decimal128: 207 if vs, ok := Values.([]types.Decimal128); ok { 208 return NewDecimal128Vector(n, typ, m, random, vs) 209 } 210 return NewDecimal128Vector(n, typ, m, random, nil) 211 case types.T_char, types.T_varchar, types.T_blob, types.T_text: 212 if vs, ok := Values.([]string); ok { 213 return NewStringVector(n, typ, m, random, vs) 214 } 215 return NewStringVector(n, typ, m, random, nil) 216 case types.T_json: 217 if vs, ok := Values.([]string); ok { 218 return NewJsonVector(n, typ, m, random, vs) 219 } 220 return NewJsonVector(n, typ, m, random, nil) 221 case types.T_TS: 222 if vs, ok := Values.([]types.TS); ok { 223 return NewTsVector(n, typ, m, random, vs) 224 } 225 return NewTsVector(n, typ, m, random, nil) 226 case types.T_Rowid: 227 if vs, ok := Values.([]types.Rowid); ok { 228 return NewRowidVector(n, typ, m, random, vs) 229 } 230 return NewRowidVector(n, typ, m, random, nil) 231 default: 232 panic(moerr.NewInternalErrorNoCtx("unsupport vector's type '%v", typ)) 233 } 234 } 235 236 func NewTsVector(n int, typ types.Type, m *mpool.MPool, _ bool, vs []types.TS) *vector.Vector { 237 vec := vector.New(typ) 238 if vs != nil { 239 for i := range vs { 240 if err := vec.Append(vs[i], false, m); err != nil { 241 vec.Free(m) 242 return nil 243 } 244 } 245 return vec 246 } 247 for i := 0; i < n; i++ { 248 var t timestamp.Timestamp 249 250 t.PhysicalTime = int64(i) 251 if err := vec.Append(types.TimestampToTS(t), false, m); err != nil { 252 vec.Free(m) 253 return nil 254 } 255 } 256 return vec 257 } 258 259 func NewRowidVector(n int, typ types.Type, m *mpool.MPool, _ bool, vs []types.Rowid) *vector.Vector { 260 vec := vector.New(typ) 261 if vs != nil { 262 for i := range vs { 263 if err := vec.Append(vs[i], false, m); err != nil { 264 vec.Free(m) 265 return nil 266 } 267 } 268 return vec 269 } 270 for i := 0; i < n; i++ { 271 var rowId [2]int64 272 273 rowId[1] = int64(i) 274 if err := vec.Append(*(*types.Rowid)(unsafe.Pointer(&rowId[0])), false, m); err != nil { 275 vec.Free(m) 276 return nil 277 } 278 } 279 return vec 280 } 281 282 func NewJsonVector(n int, typ types.Type, m *mpool.MPool, _ bool, vs []string) *vector.Vector { 283 vec := vector.New(typ) 284 if vs != nil { 285 for _, v := range vs { 286 json, err := types.ParseStringToByteJson(v) 287 if err != nil { 288 vec.Free(m) 289 return nil 290 } 291 jbytes, err := json.Marshal() 292 if err != nil { 293 vec.Free(m) 294 return nil 295 } 296 if err := vec.Append(jbytes, false, m); err != nil { 297 vec.Free(m) 298 return nil 299 } 300 } 301 return vec 302 } 303 for i := 0; i < n; i++ { 304 json, _ := types.ParseStringToByteJson(`{"a":1}`) 305 jbytes, _ := json.Marshal() 306 if err := vec.Append(jbytes, false, m); err != nil { 307 vec.Free(m) 308 return nil 309 } 310 } 311 return vec 312 } 313 314 func NewBoolVector(n int, typ types.Type, m *mpool.MPool, _ bool, vs []bool) *vector.Vector { 315 vec := vector.New(typ) 316 if vs != nil { 317 for i := range vs { 318 if err := vec.Append(vs[i], false, m); err != nil { 319 vec.Free(m) 320 return nil 321 } 322 } 323 return vec 324 } 325 for i := 0; i < n; i++ { 326 if err := vec.Append(bool(i%2 == 0), false, m); err != nil { 327 vec.Free(m) 328 return nil 329 } 330 } 331 return vec 332 } 333 334 func NewInt8Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []int8) *vector.Vector { 335 vec := vector.New(typ) 336 if vs != nil { 337 for i := range vs { 338 if err := vec.Append(vs[i], false, m); err != nil { 339 vec.Free(m) 340 return nil 341 } 342 } 343 return vec 344 } 345 for i := 0; i < n; i++ { 346 v := i 347 if random { 348 v = rand.Int() 349 } 350 if err := vec.Append(int8(v), false, m); err != nil { 351 vec.Free(m) 352 return nil 353 } 354 } 355 return vec 356 } 357 358 func NewInt16Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []int16) *vector.Vector { 359 vec := vector.New(typ) 360 if vs != nil { 361 for i := range vs { 362 if err := vec.Append(vs[i], false, m); err != nil { 363 vec.Free(m) 364 return nil 365 } 366 } 367 return vec 368 } 369 for i := 0; i < n; i++ { 370 v := i 371 if random { 372 v = rand.Int() 373 } 374 if err := vec.Append(int16(v), false, m); err != nil { 375 vec.Free(m) 376 return nil 377 } 378 } 379 return vec 380 } 381 382 func NewInt32Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []int32) *vector.Vector { 383 vec := vector.New(typ) 384 if vs != nil { 385 for i := range vs { 386 if err := vec.Append(vs[i], false, m); err != nil { 387 vec.Free(m) 388 return nil 389 } 390 } 391 return vec 392 } 393 for i := 0; i < n; i++ { 394 v := i 395 if random { 396 v = rand.Int() 397 } 398 if err := vec.Append(int32(v), false, m); err != nil { 399 vec.Free(m) 400 return nil 401 } 402 } 403 return vec 404 } 405 406 func NewInt64Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []int64) *vector.Vector { 407 vec := vector.New(typ) 408 if vs != nil { 409 for i := range vs { 410 if err := vec.Append(vs[i], false, m); err != nil { 411 vec.Free(m) 412 return nil 413 } 414 } 415 return vec 416 } 417 for i := 0; i < n; i++ { 418 v := i 419 if random { 420 v = rand.Int() 421 } 422 if err := vec.Append(int64(v), false, m); err != nil { 423 vec.Free(m) 424 return nil 425 } 426 } 427 return vec 428 } 429 430 func NewUInt8Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []uint8) *vector.Vector { 431 vec := vector.New(typ) 432 if vs != nil { 433 for i := range vs { 434 if err := vec.Append(vs[i], false, m); err != nil { 435 vec.Free(m) 436 return nil 437 } 438 } 439 return vec 440 } 441 for i := 0; i < n; i++ { 442 v := i 443 if random { 444 v = rand.Int() 445 } 446 if err := vec.Append(uint8(v), false, m); err != nil { 447 vec.Free(m) 448 return nil 449 } 450 } 451 return vec 452 } 453 454 func NewUInt16Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []uint16) *vector.Vector { 455 vec := vector.New(typ) 456 if vs != nil { 457 for i := range vs { 458 if err := vec.Append(vs[i], false, m); err != nil { 459 vec.Free(m) 460 return nil 461 } 462 } 463 return vec 464 } 465 for i := 0; i < n; i++ { 466 v := i 467 if random { 468 v = rand.Int() 469 } 470 if err := vec.Append(uint16(v), false, m); err != nil { 471 vec.Free(m) 472 return nil 473 } 474 } 475 return vec 476 } 477 478 func NewUInt32Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []uint32) *vector.Vector { 479 vec := vector.New(typ) 480 if vs != nil { 481 for i := range vs { 482 if err := vec.Append(vs[i], false, m); err != nil { 483 vec.Free(m) 484 return nil 485 } 486 } 487 return vec 488 } 489 for i := 0; i < n; i++ { 490 v := i 491 if random { 492 v = rand.Int() 493 } 494 if err := vec.Append(uint32(v), false, m); err != nil { 495 vec.Free(m) 496 return nil 497 } 498 } 499 return vec 500 } 501 502 func NewUInt64Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []uint64) *vector.Vector { 503 vec := vector.New(typ) 504 if vs != nil { 505 for i := range vs { 506 if err := vec.Append(vs[i], false, m); err != nil { 507 vec.Free(m) 508 return nil 509 } 510 } 511 return vec 512 } 513 for i := 0; i < n; i++ { 514 v := i 515 if random { 516 v = rand.Int() 517 } 518 if err := vec.Append(uint64(v), false, m); err != nil { 519 vec.Free(m) 520 return nil 521 } 522 } 523 return vec 524 } 525 526 func NewFloat32Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []float32) *vector.Vector { 527 vec := vector.New(typ) 528 if vs != nil { 529 for i := range vs { 530 if err := vec.Append(vs[i], false, m); err != nil { 531 vec.Free(m) 532 return nil 533 } 534 } 535 return vec 536 } 537 for i := 0; i < n; i++ { 538 v := float32(i) 539 if random { 540 v = rand.Float32() 541 } 542 if err := vec.Append(float32(v), false, m); err != nil { 543 vec.Free(m) 544 return nil 545 } 546 } 547 return vec 548 } 549 550 func NewFloat64Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []float64) *vector.Vector { 551 vec := vector.New(typ) 552 if vs != nil { 553 for i := range vs { 554 if err := vec.Append(vs[i], false, m); err != nil { 555 vec.Free(m) 556 return nil 557 } 558 } 559 return vec 560 } 561 for i := 0; i < n; i++ { 562 v := float64(i) 563 if random { 564 v = rand.Float64() 565 } 566 if err := vec.Append(float64(v), false, m); err != nil { 567 vec.Free(m) 568 return nil 569 } 570 } 571 return vec 572 } 573 574 func NewDecimal64Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []types.Decimal64) *vector.Vector { 575 vec := vector.New(typ) 576 if vs != nil { 577 for i := range vs { 578 if err := vec.Append(vs[i], false, m); err != nil { 579 vec.Free(m) 580 return nil 581 } 582 } 583 return vec 584 } 585 for i := 0; i < n; i++ { 586 v := i 587 if random { 588 v = rand.Int() 589 } 590 d, _ := types.InitDecimal64(int64(v), 64, 0) 591 if err := vec.Append(d, false, m); err != nil { 592 593 vec.Free(m) 594 return nil 595 } 596 } 597 return vec 598 } 599 600 func NewDecimal128Vector(n int, typ types.Type, m *mpool.MPool, random bool, vs []types.Decimal128) *vector.Vector { 601 vec := vector.New(typ) 602 if vs != nil { 603 for i := range vs { 604 if err := vec.Append(vs[i], false, m); err != nil { 605 vec.Free(m) 606 return nil 607 } 608 } 609 return vec 610 } 611 for i := 0; i < n; i++ { 612 v := i 613 if random { 614 v = rand.Int() 615 } 616 d, _ := types.InitDecimal128(int64(v), 64, 0) 617 if err := vec.Append(d, false, m); err != nil { 618 vec.Free(m) 619 return nil 620 } 621 } 622 return vec 623 } 624 625 func NewDateVector(n int, typ types.Type, m *mpool.MPool, random bool, vs []string) *vector.Vector { 626 vec := vector.New(typ) 627 if vs != nil { 628 for i := range vs { 629 d, err := types.ParseDateCast(vs[i]) 630 if err != nil { 631 return nil 632 } 633 if err := vec.Append(d, false, m); err != nil { 634 vec.Free(m) 635 return nil 636 } 637 } 638 return vec 639 } 640 for i := 0; i < n; i++ { 641 v := i 642 if random { 643 v = rand.Int() 644 } 645 if err := vec.Append(types.Date(v), false, m); err != nil { 646 vec.Free(m) 647 return nil 648 } 649 } 650 return vec 651 } 652 653 func NewTimeVector(n int, typ types.Type, m *mpool.MPool, random bool, vs []string) *vector.Vector { 654 vec := vector.New(typ) 655 if vs != nil { 656 for i := range vs { 657 d, err := types.ParseTime(vs[i], 6) 658 if err != nil { 659 return nil 660 } 661 if err := vec.Append(d, false, m); err != nil { 662 vec.Free(m) 663 return nil 664 } 665 } 666 return vec 667 } 668 for i := 0; i < n; i++ { 669 v := i 670 if random { 671 v = rand.Int() 672 } 673 if err := vec.Append(types.Time(v), false, m); err != nil { 674 vec.Free(m) 675 return nil 676 } 677 } 678 return vec 679 } 680 681 func NewDatetimeVector(n int, typ types.Type, m *mpool.MPool, random bool, vs []string) *vector.Vector { 682 vec := vector.New(typ) 683 if vs != nil { 684 for i := range vs { 685 d, err := types.ParseDatetime(vs[i], 6) 686 if err != nil { 687 return nil 688 } 689 if err := vec.Append(d, false, m); err != nil { 690 vec.Free(m) 691 return nil 692 } 693 } 694 return vec 695 } 696 for i := 0; i < n; i++ { 697 v := i 698 if random { 699 v = rand.Int() 700 } 701 if err := vec.Append(types.Datetime(v), false, m); err != nil { 702 vec.Free(m) 703 return nil 704 } 705 } 706 return vec 707 } 708 709 func NewTimestampVector(n int, typ types.Type, m *mpool.MPool, random bool, vs []string) *vector.Vector { 710 vec := vector.New(typ) 711 if vs != nil { 712 for i := range vs { 713 d, err := types.ParseTimestamp(time.Local, vs[i], 6) 714 if err != nil { 715 return nil 716 } 717 if err := vec.Append(d, false, m); err != nil { 718 vec.Free(m) 719 return nil 720 } 721 } 722 return vec 723 } 724 for i := 0; i < n; i++ { 725 v := i 726 if random { 727 v = rand.Int() 728 } 729 if err := vec.Append(types.Timestamp(v), false, m); err != nil { 730 vec.Free(m) 731 return nil 732 } 733 } 734 return vec 735 } 736 737 func NewStringVector(n int, typ types.Type, m *mpool.MPool, random bool, vs []string) *vector.Vector { 738 vec := vector.New(typ) 739 if vs != nil { 740 for i := range vs { 741 if err := vec.Append([]byte(vs[i]), false, m); err != nil { 742 vec.Free(m) 743 return nil 744 } 745 } 746 return vec 747 } 748 for i := 0; i < n; i++ { 749 v := i 750 if random { 751 v = rand.Int() 752 } 753 if err := vec.Append([]byte(strconv.Itoa(v)), false, m); err != nil { 754 vec.Free(m) 755 return nil 756 } 757 } 758 return vec 759 }