mirror of
https://github.com/chaisql/chai.git
synced 2025-10-14 19:57:25 +08:00
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
package statement_test
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/genjidb/genji"
|
|
"github.com/genjidb/genji/document"
|
|
"github.com/genjidb/genji/internal/testutil"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestDropTable(t *testing.T) {
|
|
db, err := genji.Open(":memory:")
|
|
require.NoError(t, err)
|
|
defer db.Close()
|
|
|
|
err = db.Exec("CREATE TABLE test1; CREATE TABLE test2; CREATE TABLE test3")
|
|
require.NoError(t, err)
|
|
|
|
err = db.Exec("DROP TABLE test1")
|
|
require.NoError(t, err)
|
|
|
|
err = db.Exec("DROP TABLE IF EXISTS test1")
|
|
require.NoError(t, err)
|
|
|
|
// Dropping a table that doesn't exist without "IF EXISTS"
|
|
// should return an error.
|
|
err = db.Exec("DROP TABLE test1")
|
|
require.Error(t, err)
|
|
|
|
// Assert that only the table `test1` has been dropped.
|
|
res, err := db.Query("SELECT table_name FROM __genji_tables")
|
|
require.NoError(t, err)
|
|
var tables []string
|
|
err = res.Iterate(func(d document.Document) error {
|
|
v, err := d.GetByField("table_name")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
tables = append(tables, v.V.(string))
|
|
return nil
|
|
})
|
|
require.NoError(t, err)
|
|
require.NoError(t, res.Close())
|
|
|
|
require.Len(t, tables, 2)
|
|
|
|
// Dropping a read-only table should fail.
|
|
err = db.Exec("DROP TABLE __genji_tables")
|
|
require.Error(t, err)
|
|
}
|
|
|
|
func TestDropIndex(t *testing.T) {
|
|
_, tx, cleanup := testutil.NewTestTx(t)
|
|
defer cleanup()
|
|
|
|
testutil.MustExec(t, tx, `
|
|
CREATE TABLE test1(foo text); CREATE INDEX idx_test1_foo ON test1(foo);
|
|
CREATE TABLE test2(bar text); CREATE INDEX idx_test2_bar ON test2(bar);
|
|
`)
|
|
|
|
testutil.MustExec(t, tx, "DROP INDEX idx_test2_bar")
|
|
|
|
// Assert that the good index has been dropped.
|
|
indexes := tx.Catalog.ListIndexes("")
|
|
require.Len(t, indexes, 1)
|
|
require.Equal(t, "idx_test1_foo", indexes[0])
|
|
}
|