mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-05 16:15:56 +00:00
- had to make sure we don't snapshot until directive is fully applied on a computer... otherwise there's races between loading the files and truncating the write log. - added a dirty bit to resources and a bool return to incrementing the write log... don't snapshot if it returns false because that means there's been no writes. (but make sure you close the storage transaction!) - added the actually snapshotting routine which just fires every <timeout> and serially snapshots everything. - tweaked some logging - added ability to get all tables in an org/db or literally all. I think I just needed the "literally all", but it was natural to allow it to be scoped to org or DB as well.
61 lines
2.3 KiB
Go
61 lines
2.3 KiB
Go
// Package schemar provides the core Schemar interface.
|
|
package schemar
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/molecula/featurebase/v3/dax"
|
|
)
|
|
|
|
type Schemar interface {
|
|
CreateTable(context.Context, *dax.QualifiedTable) error
|
|
DropTable(context.Context, dax.QualifiedTableID) error
|
|
CreateField(context.Context, dax.QualifiedTableID, *dax.Field) error
|
|
DropField(context.Context, dax.QualifiedTableID, dax.FieldName) error
|
|
Table(context.Context, dax.QualifiedTableID) (*dax.QualifiedTable, error)
|
|
|
|
// Tables returns a list of tables. If the qualifiers DatabaseID
|
|
// is empty, all tables in the org will be returned. If the
|
|
// OrganizationID is empty, all tables will be returned. If both
|
|
// are populated, only tables in that databse will be returned. If
|
|
// greater than zero table IDs are passed in the third argument,
|
|
// only tables matching those IDs will be returned.
|
|
Tables(context.Context, dax.TableQualifier, ...dax.TableID) ([]*dax.QualifiedTable, error)
|
|
|
|
// TableID is a reverse-lookup method to get the TableID for a given
|
|
// qualified TableName.
|
|
TableID(context.Context, dax.TableQualifier, dax.TableName) (dax.QualifiedTableID, error)
|
|
}
|
|
|
|
//////////////////////////////////////////////
|
|
|
|
// Ensure type implements interface.
|
|
var _ Schemar = &NopSchemar{}
|
|
|
|
// NopSchemar is a no-op implementation of the Schemar interface.
|
|
type NopSchemar struct{}
|
|
|
|
func NewNopSchemar() *NopSchemar {
|
|
return &NopSchemar{}
|
|
}
|
|
|
|
func (s *NopSchemar) CreateTable(ctx context.Context, qtbl *dax.QualifiedTable) error { return nil }
|
|
func (s *NopSchemar) DropTable(ctx context.Context, qtid dax.QualifiedTableID) error {
|
|
return nil
|
|
}
|
|
func (s *NopSchemar) CreateField(ctx context.Context, qtid dax.QualifiedTableID, fld *dax.Field) error {
|
|
return nil
|
|
}
|
|
func (s *NopSchemar) DropField(ctx context.Context, qtid dax.QualifiedTableID, fld dax.FieldName) error {
|
|
return nil
|
|
}
|
|
func (s *NopSchemar) Table(ctx context.Context, qtid dax.QualifiedTableID) (*dax.QualifiedTable, error) {
|
|
return nil, nil
|
|
}
|
|
func (s *NopSchemar) Tables(ctx context.Context, qual dax.TableQualifier, ids ...dax.TableID) ([]*dax.QualifiedTable, error) {
|
|
return []*dax.QualifiedTable{}, nil
|
|
}
|
|
|
|
func (s *NopSchemar) TableID(context.Context, dax.TableQualifier, dax.TableName) (dax.QualifiedTableID, error) {
|
|
return dax.QualifiedTableID{}, nil
|
|
}
|