osdir.com

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Generic Map type (_MAP) and select star (*)


Hi Stamatis,

Thanks for your reply. It makes more sense now.

I have one more question though. Do you know what is recommended way to
retrieve original projection names (in converter) when using map types :
```sql
select _MAP['a'], _MAP['b'] from table order by _MAP['c']
```

`getRowType.fieldList` Is translated to RelDataType(s) where original field
names are lost

```
0 = {RelDataTypeFieldImpl@12260} "_MAP" -> "(VARCHAR, ANY) MAP"
1 = {RelDataTypeFieldImpl@12261} "EXPR$1" -> "ANY"
2 = {RelDataTypeFieldImpl@12262} "EXPR$2" -> "ANY"
3 = {RelDataTypeFieldImpl@12263} "EXPR$3" -> "ANY"
```
I presume some implementation of RexVisitor ?

Regards,
Andrei.

On Thu, Oct 4, 2018 at 6:09 PM Stamatis Zampetakis <zabetak@xxxxxxxxx>
wrote:

> Hi Andrei,
>
> As you correctly noticed the extra projection column comes from the ORDER
> BY clause.
>
> In order to understand why have a look at the Javadoc of RelRoot class (
>
> https://github.com/apache/calcite/blob/c39bfaa02a06ac91575076a6e74f29863923f5eb/core/src/main/java/org/apache/calcite/rel/RelRoot.java#L37
> ).
>
> If you want to understand how RelRoot is used the best way would be to
> start from the creation of the object in CalcitePrepareImpl class.(
>
> https://github.com/apache/calcite/blob/c39bfaa02a06ac91575076a6e74f29863923f5eb/core/src/main/java/org/apache/calcite/prepare/CalcitePrepareImpl.java#L1113
> )
>
> Best,
> Stamatis
>
>
> Στις Πέμ, 4 Οκτ 2018 στις 9:19 μ.μ., ο/η Andrei Sereda <andrei@xxxxxxxxx>
> έγραψε:
>
> > but just a minor point that when you post links to specific lines of
> code,
> > it’s helpful if that link is to a specific revision
> >
> > Sure will do.
> >
> > Doing some more debugging it seems that projections are “imported” from
> > order
> > by clause :
> >
> > select * from elastic.zips order by _MAP['state'], _MAP['city']
> >
> >  Projects (3) : [$0, ITEM($0, 'state'), ITEM($0, 'city')]
> >
> > On Thu, Oct 4, 2018 at 2:53 PM Michael Mior mmior@xxxxxxxxxx
> > <http://mailto:mmior@xxxxxxxxxx> wrote:
> > >
> >
> > Unfortunately I don’t have an answer, but just a minor point that when
> you
> > post links to specific lines of code, it’s helpful if that link is to a
> > specific revision. You can press the “y” shortcut to get this link
> (pasted
> > below).
> >
> >
> >
> https://github.com/apache/calcite/blob/c39bfaa02a06ac91575076a6e74f29863923f5eb/elasticsearch/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchProject.java#L67
> >
> > —
> > Michael Mior
> > mmior@xxxxxxxxxx
> >
> > Le jeu. 4 oct. 2018 à 14:47, Andrei Sereda andrei@xxxxxxxxx
> > <http://mailto:andrei@xxxxxxxxx> a écrit :
> >
> > Hello,
> >
> > I would like to understand how exactly generic map type (_MAP) works
> > with select
> >
> >    - expression. Say I have the following query (on document database) :
> >
> > — first query: 2 projectionsselect * from elastic.zips order by
> > _MAP[‘state’] — second query: single projectionselect _MAP[‘state’]
> > from elastic.zips order by _MAP[‘state’]
> >
> > For first query (select *) I’m getting 2 projections (inside
> > ElasticsearchProject
> > <
> >
> >
> https://github.com/apache/calcite/blob/master/elasticsearch/src/main/java/org/apache/calcite/adapter/elasticsearch/ElasticsearchProject.java#L67
> >
> > )
> > for some reason
> >
> > 0 = {RexInputRef@12207} “[image: 0]0”
> > type = {MapSqlType@12211} “(VARCHAR, ANY) MAP”
> > digest = “[image: 0]0, ‘state’)”
> > op = {SqlItemOperator@12213} “ITEM”
> > operands = {RegularImmutableList@12214} size = 2
> > type = {BasicSqlType@12215} “ANY”
> > digest = “ITEM($0, ‘state’)”
> >
> > For second query and when using views there is no such issue.
> >
> > My question is how to correctly identify select * when rowType is map (
> > MapSqlType
> > <
> >
> >
> https://github.com/apache/calcite/blob/master/core/src/main/java/org/apache/calcite/sql/type/MapSqlType.java
> >
> > )?
> >
> > Thank you,
> > Andrei.
> >
>