github.com/cockroachdb/cockroach@v20.2.0-alpha.1+incompatible/pkg/sql/opt/optbuilder/name_resolution_test.go (about)

     1  // Copyright 2018 The Cockroach Authors.
     2  //
     3  // Use of this software is governed by the Business Source License
     4  // included in the file licenses/BSL.txt.
     5  //
     6  // As of the Change Date specified in that file, in accordance with
     7  // the Business Source License, use of this software will be governed
     8  // by the Apache License, Version 2.0, included in the file
     9  // licenses/APL.txt.
    10  
    11  package optbuilder
    12  
    13  import (
    14  	"fmt"
    15  	"testing"
    16  
    17  	"github.com/cockroachdb/cockroach/pkg/sql/sem/tree"
    18  	"github.com/cockroachdb/cockroach/pkg/testutils/sqlutils"
    19  )
    20  
    21  var _ sqlutils.ColumnItemResolverTester = &scope{}
    22  
    23  // GetColumnItemResolver is part of the sqlutils.ColumnItemResolverTester
    24  // interface.
    25  func (s *scope) GetColumnItemResolver() tree.ColumnItemResolver {
    26  	return s
    27  }
    28  
    29  // AddTable is part of the sqlutils.ColumnItemResolverTester interface.
    30  func (s *scope) AddTable(tabName tree.TableName, colNames []tree.Name) {
    31  	for _, col := range colNames {
    32  		s.cols = append(s.cols, scopeColumn{name: col, table: tabName})
    33  	}
    34  }
    35  
    36  // ResolveQualifiedStarTestResults is part of the
    37  // sqlutils.ColumnItemResolverTester interface.
    38  func (s *scope) ResolveQualifiedStarTestResults(
    39  	srcName *tree.TableName, srcMeta tree.ColumnSourceMeta,
    40  ) (string, string, error) {
    41  	s, ok := srcMeta.(*scope)
    42  	if !ok {
    43  		return "", "", fmt.Errorf("resolver did not return *scope, found %T instead", srcMeta)
    44  	}
    45  	nl := make(tree.NameList, 0, len(s.cols))
    46  	for i := range s.cols {
    47  		col := s.cols[i]
    48  		if col.table == *srcName && !col.hidden {
    49  			nl = append(nl, col.name)
    50  		}
    51  	}
    52  	return srcName.String(), nl.String(), nil
    53  }
    54  
    55  // ResolveColumnItemTestResults is part of the
    56  // sqlutils.ColumnItemResolverTester interface.
    57  func (s *scope) ResolveColumnItemTestResults(colRes tree.ColumnResolutionResult) (string, error) {
    58  	col, ok := colRes.(*scopeColumn)
    59  	if !ok {
    60  		return "", fmt.Errorf("resolver did not return *scopeColumn, found %T instead", colRes)
    61  	}
    62  	return fmt.Sprintf("%s.%s", col.table.String(), col.name), nil
    63  }
    64  
    65  func TestResolveQualifiedStar(t *testing.T) {
    66  	s := &scope{}
    67  	sqlutils.RunResolveQualifiedStarTest(t, s)
    68  }
    69  
    70  func TestResolveColumnItem(t *testing.T) {
    71  	s := &scope{}
    72  	sqlutils.RunResolveColumnItemTest(t, s)
    73  }