Skip to content

Commit 7a49c3a

Browse files
kyleconroyclaude
andcommitted
fix(postgresql): restore parseRelationFromNodes for column type resolution
The convertTypeName function populates extra fields (Names, ArrayBounds, Typmods) on the TypeName struct which breaks the catalog's type equality check used for ALTER TYPE RENAME operations. This change: - Reverts to using parseRelationFromNodes + rel.TypeName() which only populates Catalog, Schema, Name fields needed for type resolution - Updates ColumnDef.Format to use IsArray field for array formatting since TypeName.ArrayBounds is no longer set 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <[email protected]>
1 parent 8194d94 commit 7a49c3a

File tree

2 files changed

+11
-1
lines changed

2 files changed

+11
-1
lines changed

internal/engine/postgresql/parse.go

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,11 @@ func translate(node *nodes.Node) (ast.Node, error) {
431431
for _, elt := range n.TableElts {
432432
switch item := elt.Node.(type) {
433433
case *nodes.Node_ColumnDef:
434+
rel, err := parseRelationFromNodes(item.ColumnDef.TypeName.Names)
435+
if err != nil {
436+
return nil, err
437+
}
438+
434439
primary := false
435440
for _, con := range item.ColumnDef.Constraints {
436441
if constraint, ok := con.Node.(*nodes.Node_Constraint); ok {
@@ -440,7 +445,7 @@ func translate(node *nodes.Node) (ast.Node, error) {
440445

441446
create.Cols = append(create.Cols, &ast.ColumnDef{
442447
Colname: item.ColumnDef.Colname,
443-
TypeName: convertTypeName(item.ColumnDef.TypeName),
448+
TypeName: rel.TypeName(),
444449
IsNotNull: isNotNull(item.ColumnDef) || primaryKey[item.ColumnDef.Colname],
445450
IsArray: isArray(item.ColumnDef.TypeName),
446451
ArrayDims: len(item.ColumnDef.TypeName.ArrayBounds),

internal/sql/ast/column_def.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ func (n *ColumnDef) Format(buf *TrackedBuffer) {
3939
buf.WriteString(n.Colname)
4040
buf.WriteString(" ")
4141
buf.astFormat(n.TypeName)
42+
// Use IsArray from ColumnDef since TypeName.ArrayBounds may not be set
43+
// (for type resolution compatibility)
44+
if n.IsArray && !items(n.TypeName.ArrayBounds) {
45+
buf.WriteString("[]")
46+
}
4247
if n.PrimaryKey {
4348
buf.WriteString(" PRIMARY KEY")
4449
} else if n.IsNotNull {

0 commit comments

Comments
 (0)