github.com/matrixorigin/matrixone@v0.7.0/pkg/vm/engine/tae/moengine/database.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 moengine 16 17 import ( 18 "context" 19 "fmt" 20 21 "github.com/matrixorigin/matrixone/pkg/vm/engine" 22 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/catalog" 23 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/iface/handle" 24 "github.com/matrixorigin/matrixone/pkg/vm/engine/tae/options" 25 ) 26 27 var ( 28 _ engine.Database = (*txnDatabase)(nil) 29 _ Database = (*txnDatabase)(nil) 30 ) 31 32 func newDatabase(h handle.Database) *txnDatabase { 33 return &txnDatabase{ 34 handle: h, 35 } 36 } 37 38 func (db *txnDatabase) Relations(_ context.Context) ([]string, error) { 39 var names []string 40 41 it := db.handle.MakeRelationIt() 42 for it.Valid() { 43 names = append(names, it.GetRelation().GetMeta().(*catalog.TableEntry).GetSchema().Name) 44 it.Next() 45 } 46 return names, nil 47 } 48 49 func (db *txnDatabase) RelationNames(_ context.Context) ([]string, error) { 50 var names []string 51 52 it := db.handle.MakeRelationIt() 53 for it.Valid() { 54 names = append(names, it.GetRelation().GetMeta().(*catalog.TableEntry).GetSchema().Name) 55 it.Next() 56 } 57 return names, nil 58 } 59 60 func (db *txnDatabase) Relation(_ context.Context, name string) (engine.Relation, error) { 61 var err error 62 var rel engine.Relation 63 64 h, err := db.handle.GetRelationByName(name) 65 if err != nil { 66 return nil, err 67 } 68 if isSysRelation(name) { 69 rel = newSysRelation(h) 70 return rel, nil 71 } 72 rel = newRelation(h) 73 return rel, nil 74 } 75 76 func (db *txnDatabase) GetRelation(_ context.Context, name string) (Relation, error) { 77 var err error 78 var rel Relation 79 80 h, err := db.handle.GetRelationByName(name) 81 if err != nil { 82 return nil, err 83 } 84 if isSysRelation(name) { 85 rel = newSysRelation(h) 86 return rel, nil 87 } 88 rel = newRelation(h) 89 return rel, nil 90 } 91 92 func (db *txnDatabase) GetRelationByID(_ context.Context, id uint64) (Relation, error) { 93 var err error 94 var rel Relation 95 96 h, err := db.handle.GetRelationByID(id) 97 if err != nil { 98 return nil, err 99 } 100 if isSysRelationId(id) { 101 rel = newSysRelation(h) 102 return rel, nil 103 } 104 rel = newRelation(h) 105 return rel, nil 106 } 107 108 func (db *txnDatabase) GetDatabaseId(ctx context.Context) string { 109 return fmt.Sprintf("%d", db.GetDatabaseID(ctx)) 110 } 111 112 func (db *txnDatabase) Create(_ context.Context, name string, defs []engine.TableDef) error { 113 schema, err := DefsToSchema(name, defs) 114 if err != nil { 115 return err 116 } 117 schema.BlockMaxRows = 40000 118 schema.SegmentMaxBlocks = 20 119 _, err = db.handle.CreateRelation(schema) 120 return err 121 } 122 123 func (db *txnDatabase) Truncate(_ context.Context, name string) (uint64, error) { 124 _, err := db.handle.TruncateByName(name) 125 return 0, err 126 } 127 128 func (db *txnDatabase) TruncateRelationWithID(_ context.Context, name string, id uint64) error { 129 _, err := db.handle.TruncateWithID(name, id) 130 return err 131 } 132 133 func (db *txnDatabase) TruncateRelationByID(_ context.Context, id uint64, newId uint64) error { 134 _, err := db.handle.TruncateByID(id, newId) 135 return err 136 } 137 138 func (db *txnDatabase) CreateRelation(_ context.Context, name string, defs []engine.TableDef) error { 139 schema, err := DefsToSchema(name, defs) 140 if err != nil { 141 return err 142 } 143 schema.BlockMaxRows = options.DefaultBlockMaxRows 144 schema.SegmentMaxBlocks = options.DefaultBlocksPerSegment 145 _, err = db.handle.CreateRelation(schema) 146 return err 147 } 148 149 func (db *txnDatabase) CreateRelationWithID(_ context.Context, name string, 150 id uint64, defs []engine.TableDef) error { 151 schema, err := DefsToSchema(name, defs) 152 if err != nil { 153 return err 154 } 155 schema.BlockMaxRows = options.DefaultBlockMaxRows 156 schema.SegmentMaxBlocks = options.DefaultBlocksPerSegment 157 _, err = db.handle.CreateRelationWithID(schema, id) 158 return err 159 } 160 161 func (db *txnDatabase) Delete(_ context.Context, name string) error { 162 _, err := db.handle.DropRelationByName(name) 163 return err 164 } 165 166 func (db *txnDatabase) DropRelation(_ context.Context, name string) error { 167 _, err := db.handle.DropRelationByName(name) 168 return err 169 } 170 171 func (db *txnDatabase) DropRelationByID(_ context.Context, id uint64) error { 172 _, err := db.handle.DropRelationByID(id) 173 return err 174 } 175 176 func (db *txnDatabase) GetDatabaseID(_ context.Context) uint64 { 177 return db.handle.GetID() 178 }