Interestingly, it turns out this only happens when I re-use a RelBuilder than I’ve used for a bunch of other operations, even though I call clear() on it. When I use a fresh new RelBuilder, I’m able to select from a multi-values values call.
I’ll look into it some more and file a bug report if it turns out to be easily reproducible. > On Oct 1, 2017, at 5:32 PM, Marc Prud'hommeaux <[email protected]> wrote: > > > > I notice that if I create inline values using: > > RelBuilder.values(Iterable<? extends List<RexLiteral>> tupleList, RelDataType > rowType) > > I lose the field names that I put in the RelDataType, and the fields are > named "EXPR$0”, “EXPR$1”, ... > > This is also seen if I create a Rel from the SQL string "SELECT X.A FROM > (VALUES 1) AS X(A)” via Planner.parse, Planner.validate, then Planner.rel, > whose JSON representation winds up looking like: > > { > "rels": [ > { > "id": "0", > "relOp": "LogicalValues", > "type": [ > { > "type": "INTEGER", > "nullable": false, > "name": "EXPR$0" > } > ], > "tuples": [ > [ > 1 > ] > ], > "inputs": [] > }, > { > "id": "1", > "relOp": "LogicalProject" > } > ] > } > > However, in sqlline, I can perform the same query: > > 0: jdbc:calcite:model=inline:{"version":1.0,"> SELECT X.A FROM (VALUES 1) AS > X(A); > +------------+ > | A | > +------------+ > | 1 | > +------------+ > 1 row selected (0.02 seconds) > > and the column name “A” is preserved. > > Is there some mechanism for retaining the column name when using > RelBuilder.values() other than putting the column name in the RelDataType? > > > > >
