Skip to content

Commit

Permalink
fix: linting, test
Browse files Browse the repository at this point in the history
  • Loading branch information
PadenZach committed Sep 22, 2024
1 parent e1ff0a4 commit 4c0242a
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 29 deletions.
15 changes: 8 additions & 7 deletions pkg/driver/duckdb/duckdb.go
Original file line number Diff line number Diff line change
Expand Up @@ -108,11 +108,10 @@ func (drv *Driver) DropDatabase() error {
}

func (drv *Driver) schemaMigrationsDump(db *sql.DB) ([]byte, error) {
migrationsTable := drv.quotedMigrationsTableName()

migrationsTable := drv.quotedMigrationsTableName() // Use the quoted table name
// load applied migrations
migrations, err := dbutil.QueryColumn(db,
fmt.Sprintf("select format('\"{}\"', version) from %s order by version asc", migrationsTable))
fmt.Sprintf("select format('{}', version) from %s order by version asc", migrationsTable))
if err != nil {
return nil, err
}
Expand All @@ -123,9 +122,11 @@ func (drv *Driver) schemaMigrationsDump(db *sql.DB) ([]byte, error) {

if len(migrations) > 0 {
buf.WriteString(
fmt.Sprintf("INSERT INTO %s (version) VALUES\n (", migrationsTable) +
strings.Join(migrations, "),\n (") +
");\n")
fmt.Sprintf("INSERT INTO %s (version) VALUES\n ('", migrationsTable) +
strings.Join(migrations, "'),\n ('") +
"');\n")
} else {
return nil, nil
}

return buf.Bytes(), nil
Expand All @@ -134,7 +135,7 @@ func (drv *Driver) schemaMigrationsDump(db *sql.DB) ([]byte, error) {
// DumpSchema returns the current database schema
func (drv *Driver) DumpSchema(db *sql.DB) ([]byte, error) {
queryString := `SELECT sql FROM (
SELECT COALESCE(sql, format('CREATE SCHEMA {}', schema_name)) AS sql from duckdb_schemas() where internal=false
SELECT COALESCE(sql, format('CREATE SCHEMA {};', schema_name)) AS sql from duckdb_schemas() where internal=false
UNION ALL
SELECT sql from duckdb_sequences()
UNION ALL
Expand Down
40 changes: 18 additions & 22 deletions pkg/driver/duckdb/duckdb_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -166,18 +166,6 @@ func TestDuckDBCreateDropDatabase(t *testing.T) {
require.Equal(t, true, os.IsNotExist(err))
}

// TODO: Does not work!
// === RUN TestDuckDBDumpSchema
// Dropping: dbmate_test.duckdb
// Creating: dbmate_test.duckdb
//
// duckdb_test.go:186:
// Error Trace: /Users/zpaden/workspace/dbmate/pkg/driver/duckdb/duckdb_test.go:186
// Error: Received unexpected error:
// Parser Error: syntax error at or near "AUTOINCREMENT"
// Test: TestDuckDBDumpSchema
//
// --- FAIL: TestDuckDBDumpSchema (0.02s)
func TestDuckDBDumpSchema(t *testing.T) {
drv := testDuckDBDriver(t)
drv.migrationsTableName = "test_migrations"
Expand All @@ -198,23 +186,31 @@ func TestDuckDBDumpSchema(t *testing.T) {
_, err = db.Exec("CREATE TABLE t (id INTEGER PRIMARY KEY)")
require.NoError(t, err)

// create a schema
_, err = db.Exec("CREATE SCHEMA foo")
require.NoError(t, err)

// Create a view
_, err = db.Exec("CREATE VIEW v AS SELECT * FROM t LIMIT 0")
require.NoError(t, err)
// Create a Sequence
_, err = db.Exec("CREATE SEQUENCE my_seq")
require.NoError(t, err)

// DumpSchema should return schema
schema, err := drv.DumpSchema(db)
require.NoError(t, err)

require.Contains(t, string(schema), "CREATE TABLE t (id INTEGER PRIMARY KEY)")
require.Contains(t, string(schema), "CREATE TABLE IF NOT EXISTS \"test_migrations\"")
require.Contains(t, string(schema), ");\n-- Dbmate schema migrations\n"+
// CREATE SCHEMA foo
require.Contains(t, string(schema), "CREATE SCHEMA foo;")
require.Contains(t, string(schema), "CREATE TABLE t(id INTEGER PRIMARY KEY);")
require.Contains(t, string(schema), "CREATE TABLE test_migrations")
require.Contains(t, string(schema), "CREATE SEQUENCE my_seq INCREMENT BY 1 MINVALUE 1 MAXVALUE 9223372036854775807 START 1 NO CYCLE")
require.Contains(t, string(schema), "CREATE VIEW v AS SELECT * FROM t LIMIT 0")
require.Contains(t, string(schema), "\n-- Dbmate schema migrations\n"+
"INSERT INTO \"test_migrations\" (version) VALUES\n"+
" ('abc1'),\n"+
" ('abc2');\n")

// DumpSchema should return error if command fails
drv.databaseURL = dbtest.MustParseURL(t, ".")
schema, err = drv.DumpSchema(db)
require.Nil(t, schema)
require.Error(t, err)
require.EqualError(t, err, "Error: unable to open database \"/.\": unable to open database file")
}

func TestDuckDBDatabaseExists(t *testing.T) {
Expand Down

0 comments on commit 4c0242a

Please # to comment.