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

Function nodeExpr

server/ast/expr.go:89–872  ·  view source on GitHub ↗

nodeExpr handles tree.Expr nodes.

(ctx *Context, node tree.Expr)

Source from the content-addressed store, hash-verified

87
88// nodeExpr handles tree.Expr nodes.
89func nodeExpr(ctx *Context, node tree.Expr) (vitess.Expr, error) {
90 switch node := node.(type) {
91 case *tree.AllColumnsSelector:
92 return nil, errors.Errorf("table.* syntax is not yet supported in this context")
93 case *tree.AndExpr:
94 left, err := nodeExpr(ctx, node.Left)
95 if err != nil {
96 return nil, err
97 }
98 right, err := nodeExpr(ctx, node.Right)
99 if err != nil {
100 return nil, err
101 }
102 return &vitess.AndExpr{
103 Left: left,
104 Right: right,
105 }, nil
106 case *tree.AnnotateTypeExpr:
107 return nil, errors.Errorf("ANNOTATE_TYPE is not yet supported")
108 case *tree.Array:
109 unresolvedChildren := make([]vitess.Expr, len(node.Exprs))
110 var coercedType *pgtypes.DoltgresType
111 if node.HasResolvedType() {
112 _, resolvedType, err := nodeResolvableTypeReference(ctx, node.ResolvedType(), false)
113 if err != nil {
114 return nil, err
115 }
116 if resolvedType.IsArrayType() {
117 coercedType = resolvedType
118 } else {
119 return nil, errors.Errorf("array has invalid resolved type")
120 }
121 }
122 for i, arrayExpr := range node.Exprs {
123 var err error
124 unresolvedChildren[i], err = nodeExpr(ctx, arrayExpr)
125 if err != nil {
126 return nil, err
127 }
128 }
129 arrayExpr, err := pgexprs.NewArray(coercedType)
130 if err != nil {
131 return nil, err
132 }
133 return vitess.InjectedExpr{
134 Expression: arrayExpr,
135 Children: unresolvedChildren,
136 }, nil
137 case *tree.ArrayFlatten:
138 subquery, err := nodeExpr(ctx, node.Subquery)
139 if err != nil {
140 return nil, err
141 }
142 return vitess.InjectedExpr{
143 Expression: pgexprs.ArrayFlatten{},
144 Children: vitess.Exprs{subquery},
145 }, nil
146 case *tree.BinaryExpr:

Callers 15

nodeWhereFunction · 0.85
nodeSelectClauseFunction · 0.85
nodeCreateFunctionFunction · 0.85
nodeIndexElemListFunction · 0.85
nodeAlterSequenceFunction · 0.85
nodeCreateSequenceFunction · 0.85
nodeWindowDefFunction · 0.85
nodeCreateProcedureFunction · 0.85
nodeReturnFunction · 0.85
nodeTableExprFunction · 0.85
assignTableDefFunction · 0.85
nodeAlterTableSetDefaultFunction · 0.85

Calls 15

AsStringWithFlagsFunction · 0.92
CacheFunction · 0.92
NewOIDFunction · 0.92
TimeOfDayTypeAlias · 0.92
translateConvertTypeFunction · 0.85
nodeExprsToSelectExprsFunction · 0.85
nodeFuncExprFunction · 0.85
nodeExprToSelectExprFunction · 0.85
nodeSubqueryOrExistsFunction · 0.85
nodeExprsFunction · 0.85
unresolvedNameToColNameFunction · 0.85

Tested by

no test coverage detected