Reputation: 1188
I have just started to explore JSqlparser. According to my understanding, I have modified the TablesNamesFinder to extract columns and tables and its working fine but a very small problem.
@Override
public void visit(Column col) {
Column c = col;
String cname = c.getFullyQualifiedName();
Table t = c.getTable();
System.out.println(t.getName());
}
This wont print table, for most of the cases it prints null and for very few cases it prints alias of the table but not the table. Is there anything I am forgetting?
Rest of the visits
@Override
public void visit(SelectExpressionItem exp){
exp.getExpression().accept(this);
}
@Override
public void visit(Table tableName) {
// System.out.println(tableName.getFullyQualifiedName());
}
@Override
public void visit(Select select) {
select.getSelectBody().accept(this);
}
Upvotes: 8
Views: 2532
Reputation: 9131
First of all your sourcecode is correct. You have to keep in mind:
JSqlParser is only a parser. So if you do something like
select col1 from table1
The parser generated object Column does not know its tablename. This is only the case if you write it fully qualified:
select table1.col1 from table1
Similar behaviour occurs with aliases. JSqlParser does not expand alias definitions.
Why? If you look at this example, which is a correct SQL:
select col1 from table1, table2
it becomes clear, that calculating the table the column belongs to needs the database schema itself.
Upvotes: 7