mirror of
https://github.com/chaisql/chai.git
synced 2025-10-06 16:18:14 +08:00
Simplify CreateTable and CreateIndex signatures
This commit is contained in:
@@ -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
29
db.go
@@ -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.
|
||||
|
62
db_test.go
62
db_test.go
@@ -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",
|
||||
|
Reference in New Issue
Block a user