MCPcopy Create free account
hub / github.com/dolthub/doltgresql / nodeAliasedTableExpr

Function nodeAliasedTableExpr

server/ast/aliased_table_expr.go:27–148  ·  view source on GitHub ↗

nodeAliasedTableExpr handles *tree.AliasedTableExpr nodes.

(ctx *Context, node *tree.AliasedTableExpr)

Source from the content-addressed store, hash-verified

25
26// nodeAliasedTableExpr handles *tree.AliasedTableExpr nodes.
27func nodeAliasedTableExpr(ctx *Context, node *tree.AliasedTableExpr) (*vitess.AliasedTableExpr, error) {
28 if node.Ordinality {
29 return nil, errors.Errorf("ordinality is not yet supported")
30 }
31 if node.IndexFlags != nil {
32 return nil, errors.Errorf("index flags are not yet supported")
33 }
34 var aliasExpr vitess.SimpleTableExpr
35 var authInfo vitess.AuthInformation
36
37 switch expr := node.Expr.(type) {
38 case *tree.TableName:
39 tableName, err := nodeTableName(ctx, expr)
40 if err != nil {
41 return nil, err
42 }
43 aliasExpr = tableName
44 authInfo = vitess.AuthInformation{
45 AuthType: ctx.Auth().PeekAuthType(),
46 TargetType: auth.AuthTargetType_TableIdentifiers,
47 TargetNames: []string{tableName.DbQualifier.String(), tableName.SchemaQualifier.String(), tableName.Name.String()},
48 }
49 case *tree.Subquery:
50 tableExpr, err := nodeTableExpr(ctx, expr)
51 if err != nil {
52 return nil, err
53 }
54
55 ate, ok := tableExpr.(*vitess.AliasedTableExpr)
56 if !ok {
57 return nil, errors.Errorf("expected *vitess.AliasedTableExpr, found %T", tableExpr)
58 }
59
60 var selectStmt vitess.SelectStatement
61 switch ate.Expr.(type) {
62 case *vitess.Subquery:
63 selectStmt = ate.Expr.(*vitess.Subquery).Select
64 default:
65 return nil, errors.Errorf("unhandled subquery table expression: `%T`", tableExpr)
66 }
67
68 // If the subquery is a VALUES statement, it should be represented more directly
69 innerSelect := selectStmt
70 if parentSelect, ok := innerSelect.(*vitess.ParenSelect); ok {
71 innerSelect = parentSelect.Select
72 }
73 if inSelect, ok := innerSelect.(*vitess.Select); ok {
74 if isTrivialSelectStar(inSelect) {
75 if aliasedTblExpr, ok := inSelect.From[0].(*vitess.AliasedTableExpr); ok {
76 if valuesStmt, ok := aliasedTblExpr.Expr.(*vitess.ValuesStatement); ok {
77 if len(node.As.Cols) > 0 {
78 columns := make([]vitess.ColIdent, len(node.As.Cols))
79 for i := range node.As.Cols {
80 columns[i] = vitess.NewColIdent(string(node.As.Cols[i]))
81 }
82 valuesStmt.Columns = columns
83 }
84 aliasExpr = valuesStmt

Callers 1

nodeTableExprFunction · 0.85

Calls 8

nodeTableNameFunction · 0.85
nodeTableExprFunction · 0.85
isTrivialSelectStarFunction · 0.85
nodeExprFunction · 0.85
PeekAuthTypeMethod · 0.80
AuthMethod · 0.80
ErrorfMethod · 0.65
StringMethod · 0.65

Tested by

no test coverage detected