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