(e ast.SQLTableExpr, seq sem.Seq)
| 113 | } |
| 114 | |
| 115 | func (t *translator) sqlTableExpr(e ast.SQLTableExpr, seq sem.Seq) (sem.Seq, relScope) { |
| 116 | switch e := e.(type) { |
| 117 | case *ast.SQLFromItem: |
| 118 | if e.Ordinality != nil { |
| 119 | t.error(e.Ordinality, errors.New("WITH ORDINALITY clause is not yet supported")) |
| 120 | return seq, badTable |
| 121 | } |
| 122 | alias := e.Alias |
| 123 | switch input := e.Input.(type) { |
| 124 | case *ast.FromItem: |
| 125 | var table relTable |
| 126 | if c, name := t.maybeCTE(input.Source); c != nil { |
| 127 | if bad := t.hasFromParent(input, seq); bad != nil { |
| 128 | return bad, badTable |
| 129 | } |
| 130 | if len(input.Args) != 0 { |
| 131 | t.error(input, fmt.Errorf("CTE cannot use operator arguments")) |
| 132 | return seq, badTable |
| 133 | } |
| 134 | if alias == nil { |
| 135 | alias = c.Name |
| 136 | } |
| 137 | seq, table = t.fromCTE(input, c) |
| 138 | } else { |
| 139 | if _, ok := input.Source.(*ast.FromEval); !ok { |
| 140 | if bad := t.hasFromParent(e, seq); bad != nil { |
| 141 | return bad, badTable |
| 142 | } |
| 143 | } |
| 144 | var typ super.Type |
| 145 | seq, typ, name = t.fromSource(input.Source, input.Args, seq) |
| 146 | table = newTableFromType(typ, t.checker.unknown) |
| 147 | if _, ok := table.(*dynamicTable); !ok && alias == nil { |
| 148 | alias = &ast.TableAlias{Name: name, Loc: input.Loc} |
| 149 | } |
| 150 | } |
| 151 | if table == badTable { |
| 152 | return seq, badTable |
| 153 | } |
| 154 | seq, table, err := applyAlias(t.sctx, alias, table, seq) |
| 155 | if err != nil { |
| 156 | t.error(alias, err) |
| 157 | } |
| 158 | return seq, table |
| 159 | case *ast.SQLPipe: |
| 160 | seq, sch := t.sqlFromPipe(input, seq) |
| 161 | seq, sch, err := applyAlias(t.sctx, alias, sch, seq) |
| 162 | if err != nil { |
| 163 | t.error(alias, err) |
| 164 | } |
| 165 | return seq, sch |
| 166 | default: |
| 167 | panic(input) |
| 168 | } |
| 169 | case *ast.SQLJoin: |
| 170 | return t.sqlJoin(e, seq) |
| 171 | case *ast.SQLCrossJoin: |
| 172 | return t.sqlCrossJoin(e, seq) |
no test coverage detected