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  }