@@ -132,7 +132,7 @@ type Metadata struct {
132
132
// objectRefsByName stores each unique name that the query uses to reference
133
133
// each object. It is needed because changes to the search path may change
134
134
// which object a given name refers to; for example, switching the database.
135
- objectRefsByName map [cat.StableID ][] * tree.UnresolvedObjectName
135
+ objectRefsByName map [cat.StableID ]tree.UnresolvedObjectNameSet
136
136
137
137
// privileges stores the privileges needed to access each object that the
138
138
// query depends on.
@@ -204,7 +204,7 @@ func (md *Metadata) Init() {
204
204
205
205
objectRefsByName := md .objectRefsByName
206
206
if objectRefsByName == nil {
207
- objectRefsByName = make (map [cat.StableID ][] * tree.UnresolvedObjectName )
207
+ objectRefsByName = make (map [cat.StableID ]tree.UnresolvedObjectNameSet )
208
208
}
209
209
for id := range md .objectRefsByName {
210
210
delete (md .objectRefsByName , id )
@@ -306,10 +306,12 @@ func (md *Metadata) CopyFrom(from *Metadata, copyScalarFn func(Expr) Expr) {
306
306
307
307
for id , names := range from .objectRefsByName {
308
308
if md .objectRefsByName == nil {
309
- md .objectRefsByName = make (map [cat.StableID ][]* tree.UnresolvedObjectName )
309
+ md .objectRefsByName = make (map [cat.StableID ]tree.UnresolvedObjectNameSet )
310
+ }
311
+ newNames := tree .MakeUnresolvedObjectNameSet (names .Len ())
312
+ for i , n := 0 , names .Len (); i < n ; i ++ {
313
+ newNames .Add (names .Get (i ))
310
314
}
311
- newNames := make ([]* tree.UnresolvedObjectName , len (names ))
312
- copy (newNames , names )
313
315
md .objectRefsByName [id ] = newNames
314
316
}
315
317
@@ -371,7 +373,9 @@ func (md *Metadata) AddDependency(name MDDepName, ds cat.DataSource, priv privil
371
373
md .privileges [id ] = md .privileges [id ] | (1 << priv )
372
374
if name .byID == 0 {
373
375
// This data source was referenced by name.
374
- md .objectRefsByName [id ] = append (md .objectRefsByName [id ], name .byName .ToUnresolvedObjectName ())
376
+ names := md .objectRefsByName [id ]
377
+ names .Add (name .byName .ToUnresolvedObjectName ())
378
+ md .objectRefsByName [id ] = names
375
379
}
376
380
}
377
381
@@ -465,8 +469,8 @@ func (md *Metadata) CheckDependencies(
465
469
var toCheck cat.DataSource
466
470
if names , ok := md .objectRefsByName [id ]; ok {
467
471
// The data source was referenced by name at least once.
468
- for _ , name := range names {
469
- tableName := name .ToTableName ()
472
+ for i , n := 0 , names . Len (); i < n ; i ++ {
473
+ tableName := names . Get ( i ) .ToTableName ()
470
474
toCheck , _ , err = optCatalog .ResolveDataSource (ctx , cat.Flags {}, & tableName )
471
475
if err != nil || ! dataSource .Equals (toCheck ) {
472
476
return false , maybeSwallowMetadataResolveErr (err )
@@ -485,8 +489,8 @@ func (md *Metadata) CheckDependencies(
485
489
for _ , typ := range md .AllUserDefinedTypes () {
486
490
id := cat .StableID (catid .UserDefinedOIDToID (typ .Oid ()))
487
491
if names , ok := md .objectRefsByName [id ]; ok {
488
- for _ , name := range names {
489
- toCheck , err := optCatalog .ResolveType (ctx , name )
492
+ for i , n := 0 , names . Len (); i < n ; i ++ {
493
+ toCheck , err := optCatalog .ResolveType (ctx , names . Get ( i ) )
490
494
if err != nil || typ .Oid () != toCheck .Oid () ||
491
495
typ .TypeMeta .Version != toCheck .TypeMeta .Version {
492
496
return false , maybeSwallowMetadataResolveErr (err )
@@ -505,7 +509,8 @@ func (md *Metadata) CheckDependencies(
505
509
for id , dep := range md .routineDeps {
506
510
overload := dep .overload
507
511
if names , ok := md .objectRefsByName [id ]; ok {
508
- for _ , name := range names {
512
+ for i , n := 0 , names .Len (); i < n ; i ++ {
513
+ name := names .Get (i )
509
514
definition , err := optCatalog .ResolveFunction (
510
515
ctx , tree .MakeUnresolvedFunctionName (name .ToUnresolvedName ()),
511
516
& evalCtx .SessionData ().SearchPath ,
@@ -677,7 +682,9 @@ func (md *Metadata) AddUserDefinedType(typ *types.T, name *tree.UnresolvedObject
677
682
}
678
683
if name != nil {
679
684
id := cat .StableID (catid .UserDefinedOIDToID (typ .Oid ()))
680
- md .objectRefsByName [id ] = append (md .objectRefsByName [id ], name )
685
+ names := md .objectRefsByName [id ]
686
+ names .Add (name )
687
+ md .objectRefsByName [id ] = names
681
688
}
682
689
}
683
690
@@ -707,7 +714,9 @@ func (md *Metadata) AddUserDefinedRoutine(
707
714
invocationTypes : invocationTypes ,
708
715
}
709
716
if name != nil {
710
- md .objectRefsByName [id ] = append (md .objectRefsByName [id ], name )
717
+ names := md .objectRefsByName [id ]
718
+ names .Add (name )
719
+ md .objectRefsByName [id ] = names
711
720
}
712
721
}
713
722
@@ -1171,7 +1180,7 @@ func (md *Metadata) TestingRoutineDepsEqual(other *Metadata) bool {
1171
1180
}
1172
1181
1173
1182
// TestingObjectRefsByName exposes the objectRefsByName for testing.
1174
- func (md * Metadata ) TestingObjectRefsByName () map [cat.StableID ][] * tree.UnresolvedObjectName {
1183
+ func (md * Metadata ) TestingObjectRefsByName () map [cat.StableID ]tree.UnresolvedObjectNameSet {
1175
1184
return md .objectRefsByName
1176
1185
}
1177
1186
0 commit comments