| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- package sqlexport
- import (
- "strings"
- "testing"
- "github.com/danfragoso/pizzasql-next/pkg/storage"
- "github.com/danfragoso/pizzasql-next/pkg/testkv"
- )
- // A schema dump must keep a non-constant default as SQL text; emitting the
- // value evaluated at export time would freeze it.
- func TestExportPreservesDefaultExpression(t *testing.T) {
- kv := testkv.New(t)
- pool := kv.Pool(4)
- t.Cleanup(func() { pool.Close() })
- schemaManager := storage.NewSchemaManager(pool, "testdb")
- tableManager := storage.NewTableManager(pool, schemaManager, "testdb")
- if err := schemaManager.CreateTable(&storage.Schema{
- Name: "events",
- Columns: []storage.Column{
- {Name: "id", Type: "INTEGER", Nullable: false, PrimaryKey: true},
- },
- }); err != nil {
- t.Fatalf("create table: %v", err)
- }
- // The table is empty, so the schema manager needs no row evaluator for the
- // rewrite and the column can be declared with an expression default.
- if err := schemaManager.AddColumn("events", storage.Column{
- Name: "created_at",
- Type: "TIMESTAMP",
- Nullable: true,
- DefaultExpr: "CURRENT_TIMESTAMP",
- }, nil, nil); err != nil {
- t.Fatalf("add column: %v", err)
- }
- dump, err := ExportDatabase(schemaManager, tableManager, ExportOptions{Tables: []string{"events"}})
- if err != nil {
- t.Fatalf("export: %v", err)
- }
- if !strings.Contains(dump, "DEFAULT CURRENT_TIMESTAMP") {
- t.Fatalf("dump lost the default expression:\n%s", dump)
- }
- }
- // A composite key must be dumped as one table-level constraint; emitting an
- // inline PRIMARY KEY on each key column would describe two keys.
- func TestExportCompositePrimaryKey(t *testing.T) {
- kv := testkv.New(t)
- pool := kv.Pool(4)
- t.Cleanup(func() { pool.Close() })
- schemaManager := storage.NewSchemaManager(pool, "testdb")
- tableManager := storage.NewTableManager(pool, schemaManager, "testdb")
- if err := schemaManager.CreateTable(&storage.Schema{
- Name: "pairs",
- PrimaryKeyColumns: []string{"a", "b"},
- Columns: []storage.Column{
- {Name: "a", Type: "TEXT", Nullable: false},
- {Name: "b", Type: "TEXT", Nullable: false},
- {Name: "v", Type: "TEXT", Nullable: true},
- },
- }); err != nil {
- t.Fatalf("create table: %v", err)
- }
- dump, err := ExportDatabase(schemaManager, tableManager, ExportOptions{Tables: []string{"pairs"}})
- if err != nil {
- t.Fatalf("export: %v", err)
- }
- if got := strings.Count(dump, "PRIMARY KEY"); got != 1 {
- t.Fatalf("dump has %d PRIMARY KEY clauses, want 1:\n%s", got, dump)
- }
- if !strings.Contains(dump, "PRIMARY KEY (a, b)") {
- t.Fatalf("dump lost the composite key:\n%s", dump)
- }
- }
|