nodeSelectExprs handles tree.SelectExprs nodes.
(ctx *Context, node tree.SelectExprs)
| 181 | |
| 182 | // nodeSelectExprs handles tree.SelectExprs nodes. |
| 183 | func nodeSelectExprs(ctx *Context, node tree.SelectExprs) (vitess.SelectExprs, error) { |
| 184 | if len(node) == 0 { |
| 185 | return nil, nil |
| 186 | } |
| 187 | selectExprs := make(vitess.SelectExprs, len(node)) |
| 188 | for i := range node { |
| 189 | var err error |
| 190 | // Unaliased string literals use Postgres's ?column? placeholder as the column name. |
| 191 | // We use a unique indexed sentinel rather than "?column?" directly to avoid GMS's alias |
| 192 | // scope map conflating multiple unnamed columns in the same SELECT clause; the handler |
| 193 | // translates the sentinel back to "?column?" on the wire. |
| 194 | if _, isStrVal := node[i].Expr.(*tree.StrVal); isStrVal && node[i].As == "" { |
| 195 | node[i].As = tree.UnrestrictedName(fmt.Sprintf("%s%d", UnknownColSentinelPrefix, i)) |
| 196 | } |
| 197 | selectExprs[i], err = nodeSelectExpr(ctx, node[i]) |
| 198 | if err != nil { |
| 199 | return nil, err |
| 200 | } |
| 201 | } |
| 202 | return selectExprs, nil |
| 203 | } |
| 204 | |
| 205 | // nodeExprToSelectExpr handles tree.Expr nodes and returns the result as a vitess.SelectExpr. |
| 206 | func nodeExprToSelectExpr(ctx *Context, node tree.Expr) (vitess.SelectExpr, error) { |
no test coverage detected