@@ -116,14 +116,23 @@ func rewriteTypesInExpr(expr string, rewrites DescRewriteMap) (string, error) {
116
116
if err != nil {
117
117
return "" , err
118
118
}
119
+
119
120
ctx := tree .NewFmtCtx (tree .FmtSerializable )
120
121
ctx .SetIndexedTypeFormat (func (ctx * tree.FmtCtx , ref * tree.OIDTypeReference ) {
121
122
newRef := ref
122
- if rw , ok := rewrites [typedesc .UserDefinedTypeOIDToID (ref .OID )]; ok {
123
+ var id descpb.ID
124
+ id , err = typedesc .UserDefinedTypeOIDToID (ref .OID )
125
+ if err != nil {
126
+ return
127
+ }
128
+ if rw , ok := rewrites [id ]; ok {
123
129
newRef = & tree.OIDTypeReference {OID : typedesc .TypeIDToOID (rw .ID )}
124
130
}
125
131
ctx .WriteString (newRef .SQLString ())
126
132
})
133
+ if err != nil {
134
+ return "" , err
135
+ }
127
136
ctx .FormatNode (parsed )
128
137
return ctx .CloseAndGetString (), nil
129
138
}
@@ -348,11 +357,15 @@ func allocateDescriptorRewrites(
348
357
// Ensure that all referenced types are present.
349
358
if col .Type .UserDefined () {
350
359
// TODO (rohany): This can be turned into an option later.
351
- if _ , ok := typesByID [typedesc .GetTypeDescID (col .Type )]; ! ok {
360
+ id , err := typedesc .GetUserDefinedTypeDescID (col .Type )
361
+ if err != nil {
362
+ return nil , err
363
+ }
364
+ if _ , ok := typesByID [id ]; ! ok {
352
365
return nil , errors .Errorf (
353
366
"cannot restore table %q without referenced type %d" ,
354
367
table .Name ,
355
- typedesc . GetTypeDescID ( col . Type ) ,
368
+ id ,
356
369
)
357
370
}
358
371
}
@@ -1025,25 +1038,37 @@ func rewriteDatabaseDescs(databases []*dbdesc.Mutable, descriptorRewrites DescRe
1025
1038
1026
1039
// rewriteIDsInTypesT rewrites all ID's in the input types.T using the input
1027
1040
// ID rewrite mapping.
1028
- func rewriteIDsInTypesT (typ * types.T , descriptorRewrites DescRewriteMap ) {
1041
+ func rewriteIDsInTypesT (typ * types.T , descriptorRewrites DescRewriteMap ) error {
1029
1042
if ! typ .UserDefined () {
1030
- return
1043
+ return nil
1044
+ }
1045
+ tid , err := typedesc .GetUserDefinedTypeDescID (typ )
1046
+ if err != nil {
1047
+ return err
1031
1048
}
1032
1049
// Collect potential new OID values.
1033
1050
var newOID , newArrayOID oid.Oid
1034
- if rw , ok := descriptorRewrites [typedesc . GetTypeDescID ( typ ) ]; ok {
1051
+ if rw , ok := descriptorRewrites [tid ]; ok {
1035
1052
newOID = typedesc .TypeIDToOID (rw .ID )
1036
1053
}
1037
1054
if typ .Family () != types .ArrayFamily {
1038
- if rw , ok := descriptorRewrites [typedesc .GetArrayTypeDescID (typ )]; ok {
1055
+ tid , err = typedesc .GetUserDefinedArrayTypeDescID (typ )
1056
+ if err != nil {
1057
+ return err
1058
+ }
1059
+ if rw , ok := descriptorRewrites [tid ]; ok {
1039
1060
newArrayOID = typedesc .TypeIDToOID (rw .ID )
1040
1061
}
1041
1062
}
1042
1063
types .RemapUserDefinedTypeOIDs (typ , newOID , newArrayOID )
1043
1064
// If the type is an array, then we need to rewrite the element type as well.
1044
1065
if typ .Family () == types .ArrayFamily {
1045
- rewriteIDsInTypesT (typ .ArrayContents (), descriptorRewrites )
1066
+ if err := rewriteIDsInTypesT (typ .ArrayContents (), descriptorRewrites ); err != nil {
1067
+ return err
1068
+ }
1046
1069
}
1070
+
1071
+ return nil
1047
1072
}
1048
1073
1049
1074
// rewriteTypeDescs rewrites all ID's in the input slice of TypeDescriptors
@@ -1075,7 +1100,9 @@ func rewriteTypeDescs(types []*typedesc.Mutable, descriptorRewrites DescRewriteM
1075
1100
}
1076
1101
case descpb .TypeDescriptor_ALIAS :
1077
1102
// We need to rewrite any ID's present in the aliased types.T.
1078
- rewriteIDsInTypesT (typ .Alias , descriptorRewrites )
1103
+ if err := rewriteIDsInTypesT (typ .Alias , descriptorRewrites ); err != nil {
1104
+ return err
1105
+ }
1079
1106
default :
1080
1107
return errors .AssertionFailedf ("unknown type kind %s" , t .String ())
1081
1108
}
@@ -1285,7 +1312,9 @@ func RewriteTableDescs(
1285
1312
// rewriteCol is a closure that performs the ID rewrite logic on a column.
1286
1313
rewriteCol := func (col * descpb.ColumnDescriptor ) error {
1287
1314
// Rewrite the types.T's IDs present in the column.
1288
- rewriteIDsInTypesT (col .Type , descriptorRewrites )
1315
+ if err := rewriteIDsInTypesT (col .Type , descriptorRewrites ); err != nil {
1316
+ return err
1317
+ }
1289
1318
var newUsedSeqRefs []descpb.ID
1290
1319
for _ , seqID := range col .UsesSequenceIds {
1291
1320
if rewrite , ok := descriptorRewrites [seqID ]; ok {
0 commit comments