Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
136217: sql: reduce allocations in `(*schemaResolver).LookupObject` r=mgartner a=mgartner

Previously, the `PrefixAnd*` functions had parameters with the interface
type `tree.ObjectName`, causing the corresponding arguments to escape to
the heap. Now the functions parameters are the concrete types
`*tree.TableName` and `*tree.TypeName`, reducing allocations at
callsites.

Informs cockroachdb#105867

Release note: None


Co-authored-by: Marcus Gartner <[email protected]>
  • Loading branch information
craig[bot] and mgartner committed Nov 26, 2024
2 parents a9f6a2e + 7c4bfba commit c697820
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 9 deletions.
8 changes: 4 additions & 4 deletions pkg/sql/catalog/descs/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ func getObjectPrefix(

// PrefixAndType looks up an immutable type descriptor by its full name.
func PrefixAndType(
ctx context.Context, g ByNameGetter, name tree.ObjectName,
ctx context.Context, g ByNameGetter, name *tree.TypeName,
) (catalog.ResolvedObjectPrefix, catalog.TypeDescriptor, error) {
p, err := getObjectPrefix(ctx, g, name.Catalog(), name.Schema())
if err != nil || p.Schema == nil {
Expand All @@ -112,7 +112,7 @@ func PrefixAndType(

// PrefixAndMutableType looks up a mutable type descriptor by its full name.
func PrefixAndMutableType(
ctx context.Context, g MutableByNameGetter, name tree.ObjectName,
ctx context.Context, g MutableByNameGetter, name *tree.TypeName,
) (catalog.ResolvedObjectPrefix, *typedesc.Mutable, error) {
p, err := getObjectPrefix(ctx, ByNameGetter(g), name.Catalog(), name.Schema())
if err != nil || p.Schema == nil {
Expand All @@ -124,7 +124,7 @@ func PrefixAndMutableType(

// PrefixAndTable looks up an immutable table descriptor by its full name.
func PrefixAndTable(
ctx context.Context, g ByNameGetter, name tree.ObjectName,
ctx context.Context, g ByNameGetter, name *tree.TableName,
) (catalog.ResolvedObjectPrefix, catalog.TableDescriptor, error) {
p, err := getObjectPrefix(ctx, g, name.Catalog(), name.Schema())
if err != nil || p.Schema == nil {
Expand All @@ -136,7 +136,7 @@ func PrefixAndTable(

// PrefixAndMutableTable looks up a mutable table descriptor by its full name.
func PrefixAndMutableTable(
ctx context.Context, g MutableByNameGetter, name tree.ObjectName,
ctx context.Context, g MutableByNameGetter, name *tree.TableName,
) (catalog.ResolvedObjectPrefix, *tabledesc.Mutable, error) {
p, err := getObjectPrefix(ctx, ByNameGetter(g), name.Catalog(), name.Schema())
if err != nil || p.Schema == nil {
Expand Down
13 changes: 8 additions & 5 deletions pkg/sql/schema_resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,17 +162,20 @@ func (sr *schemaResolver) LookupObject(
b = b.WithOffline()
}
g := b.MaybeGet()
tn := tree.MakeQualifiedTypeName(dbName, scName, obName)
switch flags.DesiredObjectKind {
case tree.TableObject:
prefix, desc, err = descs.PrefixAndTable(ctx, g, &tn)
tn := tree.NewTableNameWithSchema(tree.Name(dbName), tree.Name(scName), tree.Name(obName))
prefix, desc, err = descs.PrefixAndTable(ctx, g, tn)
case tree.TypeObject:
prefix, desc, err = descs.PrefixAndType(ctx, g, &tn)
tn := tree.NewQualifiedTypeName(dbName, scName, obName)
prefix, desc, err = descs.PrefixAndType(ctx, g, tn)
case tree.AnyObject:
prefix, desc, err = descs.PrefixAndTable(ctx, g, &tn)
tn := tree.NewTableNameWithSchema(tree.Name(dbName), tree.Name(scName), tree.Name(obName))
prefix, desc, err = descs.PrefixAndTable(ctx, g, tn)
if err != nil {
if sqlerrors.IsUndefinedRelationError(err) || errors.Is(err, catalog.ErrDescriptorWrongType) {
prefix, desc, err = descs.PrefixAndType(ctx, g, &tn)
tn := tree.NewQualifiedTypeName(dbName, scName, obName)
prefix, desc, err = descs.PrefixAndType(ctx, g, tn)
}
}
default:
Expand Down

0 comments on commit c697820

Please sign in to comment.