fix(merge,pgsql): treat serial types as their base integer in diffs, unquote bare keyword defaults
Merge conflict detection compared bigserial (DBML) against bigint (live PostgreSQL read of an existing serial column) as incompatible types, since serial is sugar over an integer column plus a sequence default and PostgreSQL always reports back the underlying integer type. Add SerialUnderlyingType and use it when comparing column types for conflicts. QuoteDefaultValue also wrapped bare keyword expressions like CURRENT_DATE in string quotes because they contain no parentheses, unlike function-call defaults such as now(). Recognize known bare keyword defaults and leave them unquoted across CREATE TABLE, ALTER TABLE ADD COLUMN, and ALTER COLUMN SET DEFAULT generation.
This commit is contained in:
@@ -41,6 +41,24 @@ func TestQuoteDefaultValue(t *testing.T) {
|
||||
sqlType: "timestamptz",
|
||||
want: "now()",
|
||||
},
|
||||
{
|
||||
name: "bare keyword default CURRENT_DATE is not quoted",
|
||||
value: "CURRENT_DATE",
|
||||
sqlType: "date",
|
||||
want: "CURRENT_DATE",
|
||||
},
|
||||
{
|
||||
name: "bare keyword default is case insensitive",
|
||||
value: "current_timestamp",
|
||||
sqlType: "timestamptz",
|
||||
want: "current_timestamp",
|
||||
},
|
||||
{
|
||||
name: "bare keyword default localtime is not quoted",
|
||||
value: "LOCALTIME",
|
||||
sqlType: "time",
|
||||
want: "LOCALTIME",
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
|
||||
Reference in New Issue
Block a user