diff --git a/go/vt/sqlparser/ast.go b/go/vt/sqlparser/ast.go index 00530116537..00a7495ab3c 100644 --- a/go/vt/sqlparser/ast.go +++ b/go/vt/sqlparser/ast.go @@ -2612,6 +2612,9 @@ type ColumnType struct { // The base type string Type string + // The base type if it has already been resolved + ResolvedType any + // Generic field options. Null BoolVal NotNull BoolVal @@ -2758,17 +2761,19 @@ func (ct *ColumnType) merge(other ColumnType) error { // Format returns a canonical string representation of the type and all relevant options func (ct *ColumnType) Format(buf *TrackedBuffer) { - buf.Myprintf("%s", ct.Type) - - if ct.Length != nil && ct.Scale != nil { - buf.Myprintf("(%v,%v)", ct.Length, ct.Scale) - - } else if ct.Length != nil { - buf.Myprintf("(%v)", ct.Length) - } + if stringer, ok := ct.ResolvedType.(fmt.Stringer); ok { + buf.WriteString(stringer.String()) + } else { + buf.Myprintf("%s", ct.Type) + if ct.Length != nil && ct.Scale != nil { + buf.Myprintf("(%v,%v)", ct.Length, ct.Scale) - if len(ct.EnumValues) > 0 { - buf.Myprintf("('%s')", strings.Join(ct.EnumValues, "', '")) + } else if ct.Length != nil { + buf.Myprintf("(%v)", ct.Length) + } + if len(ct.EnumValues) > 0 { + buf.Myprintf("('%s')", strings.Join(ct.EnumValues, "', '")) + } } opts := make([]string, 0, 16) @@ -7211,3 +7216,23 @@ func (node *SrsAttribute) Format(buf *TrackedBuffer) { buf.Myprintf("organization '%s' identified by %v\n", node.Organization, node.OrgID) buf.Myprintf("description '%s'", node.Description) } + +type DoltgresInjectedExpr struct { + Expression any +} + +var _ Expr = DoltgresInjectedExpr{} + +func (d DoltgresInjectedExpr) iExpr() {} + +func (d DoltgresInjectedExpr) replace(from, to Expr) bool { + return false +} + +func (d DoltgresInjectedExpr) Format(buf *TrackedBuffer) { + if stringer, ok := d.Expression.(fmt.Stringer); ok { + buf.WriteString(stringer.String()) + } else { + buf.WriteString("DoltgresInjectedExpr") + } +}