gudusoft.gsqlparser
Interface IMetaDatabase


public interface IMetaDatabase

In order to link column to table correctly without connecting to database, we need to provide a class which implements IMetaDatabase to TGSqlParser. this class tells TGSqlParser the relation ship between column and table.

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
 


Method Summary
 boolean checkColumn(java.lang.String schema, java.lang.String table, java.lang.String column)
          Implement this function to link column to table
 

Method Detail

checkColumn

boolean checkColumn(java.lang.String schema,
                    java.lang.String table,
                    java.lang.String column)
Implement this function to link column to table

Parameters:
schema -
table -
column -
Returns: