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 > >>>> > >>> > >> >