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")
|
return res, errors.New("missing table name")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := tx.CreateTable(stmt.tableName, nil)
|
err := tx.CreateTable(stmt.tableName, nil)
|
||||||
if stmt.ifNotExists && err == ErrTableAlreadyExists {
|
if stmt.ifNotExists && err == ErrTableAlreadyExists {
|
||||||
err = nil
|
err = nil
|
||||||
}
|
}
|
||||||
@@ -181,7 +181,7 @@ func (stmt createIndexStmt) Run(tx *Tx, args []driver.NamedValue) (Result, error
|
|||||||
return res, errors.New("missing field name")
|
return res, errors.New("missing field name")
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := tx.CreateIndex(index.Options{
|
err := tx.CreateIndex(index.Options{
|
||||||
Unique: stmt.unique,
|
Unique: stmt.unique,
|
||||||
IndexName: stmt.indexName,
|
IndexName: stmt.indexName,
|
||||||
TableName: stmt.tableName,
|
TableName: stmt.tableName,
|
||||||
|
29
db.go
29
db.go
@@ -259,21 +259,21 @@ type TableConfig struct {
|
|||||||
|
|
||||||
// CreateTable creates a table with the given name.
|
// CreateTable creates a table with the given name.
|
||||||
// If it already exists, returns ErrTableAlreadyExists.
|
// 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 {
|
if cfg == nil {
|
||||||
cfg = new(TableConfig)
|
cfg = new(TableConfig)
|
||||||
}
|
}
|
||||||
err := tx.tcfgStore.Insert(name, *cfg)
|
err := tx.tcfgStore.Insert(name, *cfg)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
err = tx.tx.CreateStore(name)
|
err = tx.tx.CreateStore(name)
|
||||||
if err != nil {
|
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.
|
// 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.
|
// CreateIndex creates an index with the given name.
|
||||||
// If it already exists, returns ErrTableAlreadyExists.
|
// 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)
|
it, err := tx.GetTable(indexStoreName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = tx.GetTable(opts.TableName)
|
_, err = tx.GetTable(opts.TableName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
idxName := buildIndexName(opts.IndexName)
|
idxName := buildIndexName(opts.IndexName)
|
||||||
|
|
||||||
_, err = it.GetRecord([]byte(idxName))
|
_, err = it.GetRecord([]byte(idxName))
|
||||||
if err == nil {
|
if err == nil {
|
||||||
return nil, ErrIndexAlreadyExists
|
return ErrIndexAlreadyExists
|
||||||
}
|
}
|
||||||
if err != ErrRecordNotFound {
|
if err != ErrRecordNotFound {
|
||||||
return nil, err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
idxOpts := indexOptions{
|
idxOpts := indexOptions{
|
||||||
@@ -349,17 +349,8 @@ func (tx Tx) CreateIndex(opts index.Options) (*Index, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
_, err = it.Insert(&idxOpts)
|
_, err = it.Insert(&idxOpts)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return &Index{
|
return err
|
||||||
Index: index.New(tx.tx, opts),
|
|
||||||
IndexName: idxOpts.IndexName,
|
|
||||||
TableName: idxOpts.TableName,
|
|
||||||
FieldName: idxOpts.FieldName,
|
|
||||||
Unique: idxOpts.Unique,
|
|
||||||
}, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetIndex returns an index by name.
|
// 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()) {
|
func newTestTable(t testing.TB) (*genji.Table, func()) {
|
||||||
tx, fn := newTestDB(t)
|
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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
return tb, fn
|
return tb, fn
|
||||||
@@ -152,13 +154,15 @@ func TestTxCreateIndex(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
_, err := tx.CreateTable("test", nil)
|
err := tx.CreateTable("test", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
idx, err := tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
idx, err := tx.GetIndex("idxFoo")
|
||||||
|
require.NoError(t, err)
|
||||||
require.NotNil(t, idx)
|
require.NotNil(t, idx)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -166,15 +170,15 @@ func TestTxCreateIndex(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
_, err := tx.CreateTable("test", nil)
|
err := tx.CreateTable("test", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
||||||
})
|
})
|
||||||
require.Equal(t, genji.ErrIndexAlreadyExists, err)
|
require.Equal(t, genji.ErrIndexAlreadyExists, err)
|
||||||
@@ -184,7 +188,7 @@ func TestTxCreateIndex(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
_, err := tx.CreateIndex(index.Options{
|
err := tx.CreateIndex(index.Options{
|
||||||
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
||||||
})
|
})
|
||||||
require.Equal(t, genji.ErrTableNotFound, err)
|
require.Equal(t, genji.ErrTableNotFound, err)
|
||||||
@@ -196,10 +200,10 @@ func TestTxDropIndex(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
_, err := tx.CreateTable("test", nil)
|
err := tx.CreateTable("test", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -223,7 +227,9 @@ func TestTxDropIndex(t *testing.T) {
|
|||||||
func TestTxReIndex(t *testing.T) {
|
func TestTxReIndex(t *testing.T) {
|
||||||
newTestTableFn := func(t *testing.T) (*genji.Tx, *genji.Table, func()) {
|
newTestTableFn := func(t *testing.T) (*genji.Tx, *genji.Table, func()) {
|
||||||
tx, cleanup := newTestDB(t)
|
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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
@@ -234,13 +240,13 @@ func TestTxReIndex(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "a",
|
IndexName: "a",
|
||||||
TableName: "test",
|
TableName: "test",
|
||||||
FieldName: "a",
|
FieldName: "a",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "b",
|
IndexName: "b",
|
||||||
TableName: "test",
|
TableName: "test",
|
||||||
FieldName: "b",
|
FieldName: "b",
|
||||||
@@ -303,9 +309,14 @@ func TestReIndexAll(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
tb1, err := tx.CreateTable("test1", nil)
|
err := tx.CreateTable("test1", nil)
|
||||||
require.NoError(t, err)
|
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)
|
require.NoError(t, err)
|
||||||
|
|
||||||
for i := 0; i < 10; i++ {
|
for i := 0; i < 10; i++ {
|
||||||
@@ -321,13 +332,13 @@ func TestReIndexAll(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "t1a",
|
IndexName: "t1a",
|
||||||
TableName: "test1",
|
TableName: "test1",
|
||||||
FieldName: "a",
|
FieldName: "a",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "t2a",
|
IndexName: "t2a",
|
||||||
TableName: "test2",
|
TableName: "test2",
|
||||||
FieldName: "a",
|
FieldName: "a",
|
||||||
@@ -554,13 +565,15 @@ func TestTableInsert(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
_, err := tx.CreateTable("test", nil)
|
err := tx.CreateTable("test", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
idx, err := tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
IndexName: "idxFoo", TableName: "test", FieldName: "foo",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
idx, err := tx.GetIndex("idxFoo")
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
tb, err := tx.GetTable("test")
|
tb, err := tx.GetTable("test")
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -737,26 +750,29 @@ func TestTableIndexes(t *testing.T) {
|
|||||||
tx, cleanup := newTestDB(t)
|
tx, cleanup := newTestDB(t)
|
||||||
defer cleanup()
|
defer cleanup()
|
||||||
|
|
||||||
tb, err := tx.CreateTable("test1", nil)
|
err := tx.CreateTable("test1", nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = tx.CreateTable("test2", nil)
|
tb, err := tx.GetTable("test1")
|
||||||
require.NoError(t, err)
|
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,
|
Unique: true,
|
||||||
IndexName: "idx1a",
|
IndexName: "idx1a",
|
||||||
TableName: "test1",
|
TableName: "test1",
|
||||||
FieldName: "a",
|
FieldName: "a",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
Unique: false,
|
Unique: false,
|
||||||
IndexName: "idx1b",
|
IndexName: "idx1b",
|
||||||
TableName: "test1",
|
TableName: "test1",
|
||||||
FieldName: "b",
|
FieldName: "b",
|
||||||
})
|
})
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
_, err = tx.CreateIndex(index.Options{
|
err = tx.CreateIndex(index.Options{
|
||||||
Unique: false,
|
Unique: false,
|
||||||
IndexName: "ifx2a",
|
IndexName: "ifx2a",
|
||||||
TableName: "test2",
|
TableName: "test2",
|
||||||
|
Reference in New Issue
Block a user