Interface IMetaDatabase


public interface IMetaDatabase
Deprecated.
As of v2.0.3.1, please use TSQLEnv instead 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

    Modifier and Type
    Method
    Description
    boolean
    checkColumn(String server, String database, String schema, String table, String column)
    Deprecated.
    Implement this function to link column to table
  • Method Details

    • checkColumn

      boolean checkColumn(String server, String database, String schema, String table, String column)
      Deprecated.
      Implement this function to link column to table
      Parameters:
      server -
      database -
      schema -
      table -
      column -
      Returns: