If you have to traverse the whole AST/Rel tree to find original columns,
this thread discussed that before:
https://lists.apache.org/thread.html/11b66dd7f389f0b6e6bce54ad2d7b49a8a0bdd3be4784c441bfafb81%40%3Cdev.calcite.apache.org%3E



-Rui

On Wed, Feb 19, 2020 at 7:16 AM Seliverstov Igor <gvvinbl...@gmail.com>
wrote:

> This case each NID column is a calculated value - origin erases.
>
> You may try to infer origin walking through SQL AST recursively
>
> I can’t come up with another way.
>
> Regards,
> Igor
>
> > 19 февр. 2020 г., в 15:02, JiaTao Tao <taojia...@gmail.com> написал(а):
> >
> > Thanks a lot
> >
> > But I found if the select is from the subquery, `getFieldOrigins`
> returns null, because you can not find the table(see in the pic.).
> >         String sql = "SELECT T1.NAME <http://t1.name/>,\n"
> >             + "       T1.NID,\n"
> >             + "       T2.NID,\n"
> >             + "       T2.COMPANY\n"
> >             + "FROM\n"
> >             + "  (SELECT (U.ID <http://u.id/> +100) AS NID,\n"
> >             + "          U.NAME <http://u.name/> AS NAME\n"
> >             + "   FROM USERS U) T1\n"
> >             + "JOIN\n"
> >             + "  (SELECT (J.ID <http://j.id/> +100) AS NID,\n"
> >             + "          J.COMPANY\n"
> >             + "   FROM JOBS J) T2 ON T1.NID = T2.NID";
> >
> >
> > Regards!
> > Aron Tao
> >
> >
> > Seliverstov Igor <gvvinbl...@gmail.com <mailto:gvvinbl...@gmail.com>>
> 于2020年2月19日周三 下午5:38写道:
> > Aron Tao,
> >
> > I think you need the next two methods:
> >
> > org.apache.calcite.sql.validate.SqlValidatorImpl#getFieldOrigins
> > java.sql.ResultSetMetaData#getTableName
> >
> > Regards,
> > Igor
> >
> > > 19 февр. 2020 г., в 10:29, JiaTao Tao <taojia...@gmail.com <mailto:
> taojia...@gmail.com>> написал(а):
> > >
> > > Hi
> > > Thanks a lot.
> > > Can you give more details, say which method/field?
> > >
> > > Regards!
> > >
> > > Aron Tao
> > >
> > >
> > > Seliverstov Igor <gvvinbl...@gmail.com <mailto:gvvinbl...@gmail.com>>
> 于2020年2月19日周三 下午2:31写道:
> > >
> > >> You can use their origins (says where a column came from).
> > >>
> > >> It's accessable from SqlValidatorImpl or jdbc result set
> > >>
> > >> ср, 19 февр. 2020 г., 9:25 JiaTao Tao <t...@apache.org <mailto:
> t...@apache.org>>:
> > >>
> > >>> What I really need is to collect every part of the SQL, Which
> columns are
> > >>> used as filters, which are used as projection(Columns on the source
> > >>> table), But
> > >>> the existence of nested subqueries complicates the issue.
> > >>>
> > >>>
> > >>> Regards!
> > >>>
> > >>> Aron Tao
> > >>>
> > >>>
> > >>> JiaTao Tao <t...@apache.org <mailto:t...@apache.org>> 于2020年2月19日周三
> 下午2:17写道:
> > >>>
> > >>>> SQL like this:
> > >>>> ```
> > >>>> SELECT T1.NID,
> > >>>>       T1.NAME <http://t1.name/>,
> > >>>>       T2.COMPANY
> > >>>> FROM
> > >>>>  (SELECT (U.ID <http://u.id/> +100) AS NID,
> > >>>>          U.NAME <http://u.name/> AS NAME
> > >>>>   FROM USERS U) T1
> > >>>> JOIN
> > >>>>  (SELECT (J.ID <http://j.id/> +100) AS NID,
> > >>>>          J.COMPANY
> > >>>>   FROM JOBS J) T2 ON T1.NID = T2.NID
> > >>>> ```
> > >>>> What I wanted is that T1.NID comes from USER.ID <http://user.id/>,
> T1.NAME <http://t1.name/> comes from
> > >>>> USER.NAME <http://user.name/>.
> > >>>>
> > >>>> Has anyone done similar work? Is there a ready-made example to refer
> > >> to?
> > >>>>
> > >>>>
> > >>>> Regards!
> > >>>>
> > >>>> Aron Tao
> > >>>>
> > >>>
> > >>
> >
>
>

Reply via email to