Simplify CreateTable and CreateIndex signatures

This commit is contained in:
Asdine El Hrychy
2019-11-01 15:14:52 +01:00
parent 3edd813b7e
commit e5ad58de93
3 changed files with 51 additions and 44 deletions

View File

@@ -141,7 +141,7 @@ func (stmt createTableStmt) Run(tx *Tx, args []driver.NamedValue) (Result, error
return res, errors.New("missing table name")
}
_, err := tx.CreateTable(stmt.tableName, nil)
err := tx.CreateTable(stmt.tableName, nil)
if stmt.ifNotExists && err == ErrTableAlreadyExists {
err = nil
}
@@ -181,7 +181,7 @@ func (stmt createIndexStmt) Run(tx *Tx, args []driver.NamedValue) (Result, error
return res, errors.New("missing field name")
}
_, err := tx.CreateIndex(index.Options{
err := tx.CreateIndex(index.Options{
Unique: stmt.unique,
IndexName: stmt.indexName,
TableName: stmt.tableName,

29
db.go
View File

@@ -259,21 +259,21 @@ type TableConfig struct {
// CreateTable creates a table with the given name.
// If it already exists, returns ErrTableAlreadyExists.
func (tx Tx) CreateTable(name string, cfg *TableConfig) (*Table, error) {
func (tx Tx) CreateTable(name string, cfg *TableConfig) error {
if cfg == nil {
cfg = new(TableConfig)
}
err := tx.tcfgStore.Insert(name, *cfg)
if err != nil {
return nil, err
return err
}
err = tx.tx.CreateStore(name)
if err != nil {
return nil, errors.Wrapf(err, "failed to create table %q", name)
return errors.Wrapf(err, "failed to create table %q", name)
}
return tx.GetTable(name)
return nil
}
// GetTable returns a table by name. The table instance is only valid for the lifetime of the transaction.
@@ -320,25 +320,25 @@ func buildIndexName(name string) string {
// CreateIndex creates an index with the given name.
// If it already exists, returns ErrTableAlreadyExists.
func (tx Tx) CreateIndex(opts index.Options) (*Index, error) {
func (tx Tx) CreateIndex(opts index.Options) error {
it, err := tx.GetTable(indexStoreName)
if err != nil {
return nil, err
return err
}
_, err = tx.GetTable(opts.TableName)
if err != nil {
return nil, err
return err
}
idxName := buildIndexName(opts.IndexName)
_, err = it.GetRecord([]byte(idxName))
if err == nil {
return nil, ErrIndexAlreadyExists
return ErrIndexAlreadyExists
}
if err != ErrRecordNotFound {
return nil, err
return err
}
idxOpts := indexOptions{
@@ -349,17 +349,8 @@ func (tx Tx) CreateIndex(opts index.Options) (*Index, error) {
}
_, err = it.Insert(&idxOpts)
if err != nil {
return nil, err
}
return &Index{
Index: index.New(tx.tx, opts),
IndexName: idxOpts.IndexName,
TableName: idxOpts.TableName,
FieldName: idxOpts.FieldName,
Unique: idxOpts.Unique,
}, nil
return err
}
// GetIndex returns an index by name.

View File

@@ -141,7 +141,9 @@ func newTestDB(t testing.TB) (*genji.Tx, func()) {
func newTestTable(t testing.TB) (*genji.Table, func()) {
tx, fn := newTestDB(t)
tb, err := tx.CreateTable("test", nil)
err := tx.CreateTable("test", nil)
require.NoError(t, err)
tb, err := tx.GetTable("test")
require.NoError(t, err)
return tb, fn
@@ -152,13 +154,15 @@ func TestTxCreateIndex(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
_, err := tx.CreateTable("test", nil)
err := tx.CreateTable("test", nil)
require.NoError(t, err)
idx, err := tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
})
require.NoError(t, err)
idx, err := tx.GetIndex("idxFoo")
require.NoError(t, err)
require.NotNil(t, idx)
})
@@ -166,15 +170,15 @@ func TestTxCreateIndex(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
_, err := tx.CreateTable("test", nil)
err := tx.CreateTable("test", nil)
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
})
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
})
require.Equal(t, genji.ErrIndexAlreadyExists, err)
@@ -184,7 +188,7 @@ func TestTxCreateIndex(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
_, err := tx.CreateIndex(index.Options{
err := tx.CreateIndex(index.Options{
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
})
require.Equal(t, genji.ErrTableNotFound, err)
@@ -196,10 +200,10 @@ func TestTxDropIndex(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
_, err := tx.CreateTable("test", nil)
err := tx.CreateTable("test", nil)
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
})
require.NoError(t, err)
@@ -223,7 +227,9 @@ func TestTxDropIndex(t *testing.T) {
func TestTxReIndex(t *testing.T) {
newTestTableFn := func(t *testing.T) (*genji.Tx, *genji.Table, func()) {
tx, cleanup := newTestDB(t)
tb, err := tx.CreateTable("test", nil)
err := tx.CreateTable("test", nil)
require.NoError(t, err)
tb, err := tx.GetTable("test")
require.NoError(t, err)
for i := 0; i < 10; i++ {
@@ -234,13 +240,13 @@ func TestTxReIndex(t *testing.T) {
require.NoError(t, err)
}
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "a",
TableName: "test",
FieldName: "a",
})
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "b",
TableName: "test",
FieldName: "b",
@@ -303,9 +309,14 @@ func TestReIndexAll(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
tb1, err := tx.CreateTable("test1", nil)
err := tx.CreateTable("test1", nil)
require.NoError(t, err)
tb2, err := tx.CreateTable("test2", nil)
tb1, err := tx.GetTable("test1")
require.NoError(t, err)
err = tx.CreateTable("test2", nil)
require.NoError(t, err)
tb2, err := tx.GetTable("test2")
require.NoError(t, err)
for i := 0; i < 10; i++ {
@@ -321,13 +332,13 @@ func TestReIndexAll(t *testing.T) {
require.NoError(t, err)
}
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "t1a",
TableName: "test1",
FieldName: "a",
})
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "t2a",
TableName: "test2",
FieldName: "a",
@@ -554,13 +565,15 @@ func TestTableInsert(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
_, err := tx.CreateTable("test", nil)
err := tx.CreateTable("test", nil)
require.NoError(t, err)
idx, err := tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
})
require.NoError(t, err)
idx, err := tx.GetIndex("idxFoo")
require.NoError(t, err)
tb, err := tx.GetTable("test")
require.NoError(t, err)
@@ -737,26 +750,29 @@ func TestTableIndexes(t *testing.T) {
tx, cleanup := newTestDB(t)
defer cleanup()
tb, err := tx.CreateTable("test1", nil)
err := tx.CreateTable("test1", nil)
require.NoError(t, err)
_, err = tx.CreateTable("test2", nil)
tb, err := tx.GetTable("test1")
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateTable("test2", nil)
require.NoError(t, err)
err = tx.CreateIndex(index.Options{
Unique: true,
IndexName: "idx1a",
TableName: "test1",
FieldName: "a",
})
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
Unique: false,
IndexName: "idx1b",
TableName: "test1",
FieldName: "b",
})
require.NoError(t, err)
_, err = tx.CreateIndex(index.Options{
err = tx.CreateIndex(index.Options{
Unique: false,
IndexName: "ifx2a",
TableName: "test2",