Skip to content
Merged
5 changes: 4 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ If you want to make changes yourself, follow these steps:
2. Make your changes
3. Test your changes
```bash
docker build -t pg-schema-diff-test-runner -f ./build/Dockerfile.test --build-arg POSTGRES_PACKAGE=postgresql{14, 15} .
# builds image running tests with the postgresql14 image (can also omit `build-arg` because postgresql14 is the default)
docker build -t pg-schema-diff-test-runner -f ./build/Dockerfile.test --build-arg POSTGRES_PACKAGE=postgresql14 .
# builds image running tests with the postgresql15 image.
docker build -t pg-schema-diff-test-runner -f ./build/Dockerfile.test --build-arg POSTGRES_PACKAGE=postgresql15 .
```
3. Submit a [pull request](https://help.github.com/articles/creating-a-pull-request-from-a-fork/)

Expand Down
210 changes: 105 additions & 105 deletions internal/migration_acceptance_tests/backwards_compat_cases_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,80 +7,80 @@ var backCompatAcceptanceTestCases = []acceptanceTestCase{
name: "Drop partitioned table, Add partitioned table with local keys",
oldSchemaDDL: []string{
`
-- Create a table in a different schema to validate it is being ignored (no delete operation).
-- Create a table in a different schema to validate it is being ignored (no delete operation).
CREATE SCHEMA schema_filtered_1;
CREATE TABLE schema_filtered_1.foo();

CREATE TABLE foobar(
id INT,
bar SERIAL NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (foo, id),
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);

CREATE TABLE foobar_1 PARTITION of foobar(
fizz NOT NULL
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');

-- partitioned indexes
CREATE INDEX foobar_normal_idx ON foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON foobar(foo, fizz);
-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);

CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);

CREATE TABLE fizz(
);
CREATE TABLE schema_filtered_1.foo();

CREATE TABLE foobar(
id INT,
bar SERIAL NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (foo, id),
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);

CREATE TABLE foobar_1 PARTITION of foobar(
fizz NOT NULL
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');

-- partitioned indexes
CREATE INDEX foobar_normal_idx ON foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON foobar(foo, fizz);
-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);

CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);

CREATE TABLE fizz(
);
`,
},
newSchemaDDL: []string{
`
CREATE TABLE new_foobar(
id INT,
bar TIMESTAMPTZ NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);

CREATE TABLE foobar_1 PARTITION of new_foobar(
fizz NOT NULL,
PRIMARY KEY (foo, bar)
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');

-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON new_foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON new_foobar(foo, fizz);

CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES new_foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);

CREATE TABLE fizz(
);
CREATE TABLE new_foobar(
id INT,
bar TIMESTAMPTZ NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);

CREATE TABLE foobar_1 PARTITION of new_foobar(
fizz NOT NULL,
PRIMARY KEY (foo, bar)
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');

-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON new_foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON new_foobar(foo, fizz);

CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES new_foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);

CREATE TABLE fizz(
);
`,
},
expectedHazardTypes: []diff.MigrationHazardType{
Expand All @@ -89,43 +89,43 @@ var backCompatAcceptanceTestCases = []acceptanceTestCase{
},

expectedDBSchemaDDL: []string{`
-- Create a table in a different schema to validate it is being ignored (no delete operation).
-- Create a table in a different schema to validate it is being ignored (no delete operation).
CREATE SCHEMA schema_filtered_1;
CREATE TABLE schema_filtered_1.foo();

CREATE TABLE new_foobar(
id INT,
bar TIMESTAMPTZ NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);

CREATE TABLE foobar_1 PARTITION of new_foobar(
fizz NOT NULL,
PRIMARY KEY (foo, bar)
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');

-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON new_foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON new_foobar(foo, fizz);

CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES new_foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);

CREATE TABLE fizz(
);
CREATE TABLE schema_filtered_1.foo();

CREATE TABLE new_foobar(
id INT,
bar TIMESTAMPTZ NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);

CREATE TABLE foobar_1 PARTITION of new_foobar(
fizz NOT NULL,
PRIMARY KEY (foo, bar)
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');

-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON new_foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON new_foobar(foo, fizz);

CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES new_foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);

CREATE TABLE fizz(
);
`},

// Ensure that we're maintaining backwards compatibility with the old generate plan func
Expand Down
Loading