public interface IMetaDatabase
Take this SQL for example:
SELECT Quantity,b.Time,c.Description FROM (SELECT ID2,Time FROM bTab) b INNER JOIN aTab a on a.ID=b.ID INNER JOIN cTab c on a.ID=c.ID
General SQL Parser can build relationship between column: ID2 and table: bTable correctly without metadata information from database because there is only one table in from clause. But it can't judge column: Quantity belong to table: aTab or cTab, since no table alias was prefixed to column: Quantity. If no metadata provided, General SQL Parser will link column: Quantity to the first valid table (here it is aTab)
If we create a class metaDB implements IMetaDatabase,then TGSqlParser.setMetaDatabase(new metaDB()), General SQL Parser can take this advantage to create a correct relationship between column and tables. Here is a sample of metaDB, you should create your own metaDB class with meta information from database.
public class metaDB implements IMetaDatabase {
String columns[][] = {
{"dbo","aTab","Quantity1"},
{"dbo","bTab","Quantity2"},
{"dbo","cTab","Quantity"}
};
public boolean checkColumn(String schema, String table, String column){
boolean bSchema,bTable,bColumn,bRet = false;
for (int i=0; i<columns.length;i++){
if (schema == null){
bSchema = true;
}else{
bSchema = columns[i][0].equalsIgnoreCase(schema);
}
if (!bSchema) continue;
bTable = columns[i][1].equalsIgnoreCase(table);
if (!bTable) continue;
bColumn = columns[i][2].equalsIgnoreCase(column);
if (!bColumn) continue;
bRet =true;
break;
}
return bRet;
}
}
After TGSqlParser.setMetaDatabase(new metaDB()), General SQL parser can generate this result for you:
atab.id btab.id btab.time ctab.description ctab.id ctab.quantity
| Modifier and Type | Method and Description |
|---|---|
boolean |
checkColumn(String server,
String database,
String schema,
String table,
String column)
Implement this function to link column to table
|
Copyright © 2019. All rights reserved.