buildJoinTableExpressionTree returns an expression tree of JoinTableExprs with |tableExprs| as the leaf nodes. If |tableExprs| is empty or nil, then nil is returned.
(ctx *Context, tableExprs vitess.TableExprs)
| 96 | // buildJoinTableExpressionTree returns an expression tree of JoinTableExprs with |tableExprs| as the |
| 97 | // leaf nodes. If |tableExprs| is empty or nil, then nil is returned. |
| 98 | func buildJoinTableExpressionTree(ctx *Context, tableExprs vitess.TableExprs) vitess.TableExpr { |
| 99 | switch len(tableExprs) { |
| 100 | case 0: |
| 101 | return nil |
| 102 | case 1: |
| 103 | return tableExprs[0] |
| 104 | case 2: |
| 105 | return &vitess.JoinTableExpr{ |
| 106 | Join: vitess.JoinStr, |
| 107 | LeftExpr: tableExprs[0], |
| 108 | RightExpr: tableExprs[1], |
| 109 | } |
| 110 | default: |
| 111 | subtree := buildJoinTableExpressionTree(ctx, tableExprs[0:2]) |
| 112 | return buildJoinTableExpressionTree(ctx, append(tableExprs[2:], subtree)) |
| 113 | } |
| 114 | } |