Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add support for exclusion constraints in create_table operation #624

Merged
merged 71 commits into from
Jan 28, 2025
Merged
Changes from 1 commit
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
5908c19
mi folyik itt gyongyoson?
kvch Jan 9, 2025
c9ef10d
update generated file
kvch Jan 9, 2025
03b3952
first batch
kvch Jan 9, 2025
f84b9a7
more updates
kvch Jan 10, 2025
296731e
validation
kvch Jan 10, 2025
766ddbc
add table constraint
kvch Jan 10, 2025
965f28f
minor fixes
kvch Jan 10, 2025
abd6aed
add missing fixes
kvch Jan 10, 2025
b1dba4a
moreeee
kvch Jan 10, 2025
a0e918c
add default values
kvch Jan 10, 2025
1ef47fd
uppercase
kvch Jan 10, 2025
253e436
add validation test
kvch Jan 10, 2025
fd54808
rm messages
kvch Jan 13, 2025
b088ffd
deparse storage params
kvch Jan 13, 2025
e0acc68
init check constraints
kvch Jan 13, 2025
90c548d
Merge remote-tracking branch 'upstream/main' into feature-add-table-c…
kvch Jan 13, 2025
dab75c2
add deparsing
kvch Jan 13, 2025
cb7b922
add docs
kvch Jan 13, 2025
00bb93f
inimini
kvch Jan 13, 2025
cf25acc
even more
kvch Jan 13, 2025
f33c2ea
rm unnecessary test
kvch Jan 14, 2025
8f9ecf6
update pr
kvch Jan 14, 2025
f187b8b
fmt
kvch Jan 14, 2025
1e527e7
add missing updates
kvch Jan 14, 2025
f292e82
initialize primary key constraint
kvch Jan 14, 2025
f432d75
Merge remote-tracking branch 'upstream/main' into feature-add-table-c…
kvch Jan 16, 2025
d788e69
add jsonschema tests
kvch Jan 16, 2025
3e54252
rm duplicate
kvch Jan 16, 2025
da60072
edit comments
kvch Jan 16, 2025
981df44
add support for foreign key constraints
kvch Jan 16, 2025
40dc814
add tests
kvch Jan 16, 2025
cbf5043
add e2e
kvch Jan 16, 2025
b63d0e0
update test
kvch Jan 16, 2025
fcfdd15
Merge remote-tracking branch 'upstream/main' into feature-add-table-c…
kvch Jan 17, 2025
f0913a3
add example
kvch Jan 17, 2025
c82f830
minor fix
kvch Jan 17, 2025
385e7d5
add jsonschema tests
kvch Jan 17, 2025
37393e9
update test
kvch Jan 17, 2025
be2830c
fix table name
kvch Jan 17, 2025
1e0d403
pass match_type to schema.foreignkey
kvch Jan 20, 2025
c30e0c5
Merge remote-tracking branch 'upstream/main' into feature-add-table-c…
kvch Jan 21, 2025
d6f9cf7
Address review notes and add new attribute
kvch Jan 21, 2025
1a9eb26
Document new option on_delete_set_columns
kvch Jan 21, 2025
0ee70ea
Add more assertions to e2e test
kvch Jan 21, 2025
b47ade4
fix
kvch Jan 21, 2025
eb3965d
adjust expected
kvch Jan 21, 2025
115af43
mr
kvch Jan 21, 2025
ed04cdf
improve validation
kvch Jan 21, 2025
1da339a
add missing file
kvch Jan 21, 2025
2a76649
support setting columns
kvch Jan 22, 2025
6e03cb5
skip new tests
kvch Jan 22, 2025
b30a1b5
mivan?
kvch Jan 22, 2025
3b0d39e
put support in the correct place
kvch Jan 22, 2025
312cf21
init
kvch Jan 22, 2025
ea0e487
Merge remote-tracking branch 'upstream/main' into feature-add-table-c…
kvch Jan 23, 2025
51ce6a5
add exclude constraint
kvch Jan 24, 2025
6c448e7
even more
kvch Jan 24, 2025
8e060ce
fix test
kvch Jan 24, 2025
2c387fb
add missing extension
kvch Jan 24, 2025
a141333
always extension
kvch Jan 24, 2025
c1e11ce
install extension
kvch Jan 24, 2025
e57c361
most jo lesz?
kvch Jan 24, 2025
5bf85b6
miert
kvch Jan 24, 2025
e30a35e
clean
kvch Jan 24, 2025
7004ff5
move
kvch Jan 24, 2025
d9e51b5
update dep
kvch Jan 24, 2025
76122d2
more
kvch Jan 24, 2025
3a90684
rm extension
kvch Jan 27, 2025
1d301bb
fix name
kvch Jan 27, 2025
b943ed5
rename example table
kvch Jan 27, 2025
9e5d6a4
really fix example
kvch Jan 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
add deparsing
kvch committed Jan 13, 2025
commit dab75c2a8d6a7cd75fb0e2e7afa83dded4aebaa7
10 changes: 7 additions & 3 deletions pkg/sql2pgroll/create_table.go
Original file line number Diff line number Diff line change
@@ -203,13 +203,19 @@ func convertColumnDef(tableName string, col *pgq.ColumnDef) (*migrations.Column,
func convertConstraint(c *pgq.Constraint) (*migrations.Constraint, error) {
var constraintType migrations.ConstraintType
var nullsNotDistinct bool
var checkExpr string
var err error

switch c.Contype {
case pgq.ConstrType_CONSTR_UNIQUE:
constraintType = migrations.ConstraintTypeUnique
nullsNotDistinct = c.NullsNotDistinct
case pgq.ConstrType_CONSTR_CHECK:
constraintType = migrations.ConstraintTypeCheck
checkExpr, err = pgq.DeparseExpr(c.GetRawExpr())
if err != nil {
return nil, fmt.Errorf("deparsing check expression: %w", err)
}
default:
return nil, nil
}
@@ -225,7 +231,6 @@ func convertConstraint(c *pgq.Constraint) (*migrations.Constraint, error) {
}

var storageParams string
var err error
if len(c.GetOptions()) > 0 {
storageParams, err = pgq.DeparseRelOptions(c.GetOptions())
if err != nil {
@@ -243,8 +248,6 @@ func convertConstraint(c *pgq.Constraint) (*migrations.Constraint, error) {
}
}

// TODO deparse CHECK expression

return &migrations.Constraint{
Name: c.Conname,
Type: constraintType,
@@ -254,6 +257,7 @@ func convertConstraint(c *pgq.Constraint) (*migrations.Constraint, error) {
Deferrable: c.Deferrable,
InitiallyDeferred: c.Initdeferred,
IndexParameters: indexParameters,
Check: checkExpr,
}, nil
}

6 changes: 2 additions & 4 deletions pkg/sql2pgroll/create_table_test.go
Original file line number Diff line number Diff line change
@@ -173,11 +173,11 @@ func TestConvertCreateTableStatements(t *testing.T) {
expectedOp: expect.CreateTableOp23,
},
{
sql: "CREATE TABLE foo(b text, c text, CHECK (b=c))",
sql: "CREATE TABLE foo(a int, CHECK (a>0))",
expectedOp: expect.CreateTableOp24,
},
{
sql: "CREATE TABLE foo(b text, c text, CHECK (b=c) NO INHERIT INITIALLY IMMEDIATE)",
sql: "CREATE TABLE foo(b text, c text, CHECK (b=c) NO INHERIT)",
expectedOp: expect.CreateTableOp25,
},
}
@@ -247,10 +247,8 @@ func TestUnconvertableCreateTableStatements(t *testing.T) {
"CREATE TABLE foo(a text COLLATE en_US)",

// Table constraints, named and unnamed, are not supported
"CREATE TABLE foo(a int, CONSTRAINT foo_check CHECK (a > 0))",
"CREATE TABLE foo(a int, CONSTRAINT foo_pk PRIMARY KEY (a))",
"CREATE TABLE foo(a int, CONSTRAINT foo_fk FOREIGN KEY (a) REFERENCES bar(b))",
"CREATE TABLE foo(a int, CHECK (a > 0))",
"CREATE TABLE foo(a int, PRIMARY KEY (a))",
"CREATE TABLE foo(a int, FOREIGN KEY (a) REFERENCES bar(b))",

17 changes: 7 additions & 10 deletions pkg/sql2pgroll/expect/create_table.go
Original file line number Diff line number Diff line change
@@ -359,20 +359,16 @@ var CreateTableOp24 = &migrations.OpCreateTable{
Name: "foo",
Columns: []migrations.Column{
{
Name: "b",
Type: "text",
Nullable: true,
},
{
Name: "c",
Type: "text",
Name: "a",
Type: "int",
Nullable: true,
},
},
Constraints: []migrations.Constraint{
{
Type: migrations.ConstraintTypeCheck,
Columns: []string{"b", "c"},
Check: "a > 0",
Columns: []string{},
NullsNotDistinct: false,
Deferrable: false,
InitiallyDeferred: false,
@@ -398,10 +394,11 @@ var CreateTableOp25 = &migrations.OpCreateTable{
Constraints: []migrations.Constraint{
{
Type: migrations.ConstraintTypeCheck,
Columns: []string{"b", "c"},
Check: "b = c",
Columns: []string{},
NullsNotDistinct: false,
Deferrable: false,
InitiallyDeferred: true,
InitiallyDeferred: false,
NoInherit: true,
},
},