db/SchemaSync_test.go

61 lines
1.5 KiB
Go
Raw Normal View History

package db_test
import (
"os"
"testing"
"apigo.cc/go/db"
_ "modernc.org/sqlite"
)
func TestSchemaSync(t *testing.T) {
dbPath := "test_schema.db"
dbInst := db.GetDB("sqlite://"+dbPath, nil)
defer os.Remove(dbPath)
defer dbInst.Exec("DROP TABLE IF EXISTS test_table")
defer dbInst.Exec("DROP TABLE IF EXISTS test_table_deleted")
schema := `== Default ==
test_table SD // Test table with shadow delete
id AI // ID
name v50 U
autoVersion ubi // Version
status ti // Status
`
err := dbInst.Sync(schema)
if err != nil {
t.Fatal("Sync error:", err)
}
dbInst.Insert("test_table", map[string]any{"name": "test", "status": 1})
dbInst.Delete("test_table", "id=?", 1)
res := dbInst.Query("SELECT COUNT(*) FROM test_table_deleted")
if res.IntOnR1C1() != 1 {
t.Fatal("Shadow delete failed")
}
}
func TestAutoDetectShadow(t *testing.T) {
dbPath := "auto_detect.db"
dbInst := db.GetDB("sqlite://"+dbPath, nil)
defer os.Remove(dbPath)
defer dbInst.Exec("DROP TABLE IF EXISTS test_auto")
defer dbInst.Exec("DROP TABLE IF EXISTS test_auto_deleted")
// Manually create tables, DO NOT call Sync
dbInst.Exec("CREATE TABLE test_auto (id INTEGER PRIMARY KEY)")
dbInst.Exec("CREATE TABLE test_auto_deleted (id INTEGER PRIMARY KEY)")
dbInst.Insert("test_auto", map[string]any{"id": 1})
// This should trigger auto-detection and perform a shadow delete
dbInst.Delete("test_auto", "id=?", 1)
res := dbInst.Query("SELECT COUNT(*) FROM test_auto_deleted")
if res.IntOnR1C1() != 1 {
t.Fatal("Auto-detect shadow delete failed")
}
}