github.com/matrixorigin/matrixone@v0.7.0/pkg/vm/engine/tae/tables/indexwrapper/zmnode_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 indexwrapper 16 17 import ( 18 "context" 19 "fmt" 20 "path" 21 "testing" 22 23 "github.com/matrixorigin/matrixone/pkg/common/mpool" 24 "github.com/matrixorigin/matrixone/pkg/container/batch" 25 "github.com/matrixorigin/matrixone/pkg/container/types" 26 "github.com/matrixorigin/matrixone/pkg/defines" 27 "github.com/matrixorigin/matrixone/pkg/fileservice" 28 "github.com/matrixorigin/matrixone/pkg/objectio" 29 "github.com/matrixorigin/matrixone/pkg/testutil" 30 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/common" 31 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/containers" 32 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/testutils" 33 "github.com/stretchr/testify/assert" 34 "github.com/stretchr/testify/require" 35 ) 36 37 const ( 38 ModuleName = "IndexWrapper" 39 ) 40 41 func TestBlockZoneMapIndex(t *testing.T) { 42 defer testutils.AfterTest(t)() 43 var err error 44 // var res bool 45 dir := testutils.InitTestEnv(ModuleName, t) 46 dir = path.Join(dir, "/local") 47 id := 1 48 name := fmt.Sprintf("%d.blk", id) 49 bat := newBatch() 50 c := fileservice.Config{ 51 Name: defines.LocalFileServiceName, 52 Backend: "DISK", 53 DataDir: dir, 54 } 55 service, err := fileservice.NewFileService(c) 56 assert.Nil(t, err) 57 58 objectWriter, err := objectio.NewObjectWriter(name, service) 59 assert.Nil(t, err) 60 /*fd*/ _, err = objectWriter.Write(bat) 61 assert.Nil(t, err) 62 blocks, err := objectWriter.WriteEnd(context.Background()) 63 assert.Nil(t, err) 64 assert.Equal(t, 1, len(blocks)) 65 cType := common.Plain 66 typ := types.Type{Oid: types.T_int32} 67 pkColIdx := uint16(0) 68 interIdx := uint16(0) 69 // var visibility *roaring.Bitmap 70 71 writer := NewZMWriter() 72 err = writer.Init(objectWriter, blocks[0], cType, pkColIdx, interIdx) 73 require.NoError(t, err) 74 75 keys := containers.MockVector2(typ, 1000, 0) 76 err = writer.AddValues(keys) 77 require.NoError(t, err) 78 79 _, err = writer.Finalize() 80 require.NoError(t, err) 81 t.Log(writer.String()) 82 83 // col, err := fd.GetColumn(0) 84 // assert.Nil(t, err) 85 // reader := NewZMReader(col, typ) 86 // require.NoError(t, err) 87 88 // res = reader.Contains(int32(500)) 89 // require.True(t, res) 90 91 // res = reader.Contains(int32(1000)) 92 // require.False(t, res) 93 94 // keys = containers.MockVector2(typ, 100, 1000) 95 // visibility, res = reader.ContainsAny(keys) 96 // require.False(t, res) 97 // require.Equal(t, uint64(0), visibility.GetCardinality()) 98 99 // keys = containers.MockVector2(typ, 100, 0) 100 // visibility, res = reader.ContainsAny(keys) 101 // require.True(t, res) 102 // require.Equal(t, uint64(100), visibility.GetCardinality()) 103 } 104 105 func newBatch() *batch.Batch { 106 mp := mpool.MustNewZero() 107 types := []types.Type{ 108 {Oid: types.T_int32}, 109 {Oid: types.T_int16}, 110 {Oid: types.T_int32}, 111 {Oid: types.T_int64}, 112 {Oid: types.T_uint16}, 113 {Oid: types.T_uint32}, 114 {Oid: types.T_uint8}, 115 {Oid: types.T_uint64}, 116 } 117 return testutil.NewBatch(types, false, int(40000*2), mp) 118 }