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  }