export_test.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package sqlexport
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/danfragoso/pizzasql-next/pkg/storage"
  6. "github.com/danfragoso/pizzasql-next/pkg/testkv"
  7. )
  8. // A schema dump must keep a non-constant default as SQL text; emitting the
  9. // value evaluated at export time would freeze it.
  10. func TestExportPreservesDefaultExpression(t *testing.T) {
  11. kv := testkv.New(t)
  12. pool := kv.Pool(4)
  13. t.Cleanup(func() { pool.Close() })
  14. schemaManager := storage.NewSchemaManager(pool, "testdb")
  15. tableManager := storage.NewTableManager(pool, schemaManager, "testdb")
  16. if err := schemaManager.CreateTable(&storage.Schema{
  17. Name: "events",
  18. Columns: []storage.Column{
  19. {Name: "id", Type: "INTEGER", Nullable: false, PrimaryKey: true},
  20. },
  21. }); err != nil {
  22. t.Fatalf("create table: %v", err)
  23. }
  24. // The table is empty, so the schema manager needs no row evaluator for the
  25. // rewrite and the column can be declared with an expression default.
  26. if err := schemaManager.AddColumn("events", storage.Column{
  27. Name: "created_at",
  28. Type: "TIMESTAMP",
  29. Nullable: true,
  30. DefaultExpr: "CURRENT_TIMESTAMP",
  31. }, nil); err != nil {
  32. t.Fatalf("add column: %v", err)
  33. }
  34. dump, err := ExportDatabase(schemaManager, tableManager, ExportOptions{Tables: []string{"events"}})
  35. if err != nil {
  36. t.Fatalf("export: %v", err)
  37. }
  38. if !strings.Contains(dump, "DEFAULT CURRENT_TIMESTAMP") {
  39. t.Fatalf("dump lost the default expression:\n%s", dump)
  40. }
  41. }