@@ -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