posts - 18,  comments - 0,  trackbacks - 0
一、问题描述:
   原来的别名模型对象AliasModel用来存放所有别名,这样无法区别是表别名还是字段别名,设置英文别名时,如果存在表别名,则字段将变成"表 AS 表英文别名.字段",如表中文别名(传票对照表)对应的英文别名为(CNF_TABLE)时,字段“AI_94传票对照表.省/市代号”的英文会变成
CNF as CNF_TABLE.CNF01。这是错误的。

二、修改内容:
 1、增加表别名模型对象TableAliasModel。
 2、修改语法文件的TreeParser,当遍历语法树中发现表别名时,则创建TableAliasModel对象,并加入到model中。
   table_name returns [TableModel model]
   {AliasModel a; model=null; TableAliasModel ta;}
      : t:ID
         {model=new TableModel(t.getText());}
      // | #("as" t1:ID a=alias)
      // {model=new TableModel(t1.getText()); model.setAlias(a);}
      // | #("作为" t2:ID a = alias)
      // {model = new TableModel(t2.getText()); model.setAlias(a);}
      | #("as" t1:ID ta = tableAlias)
         {model = new TableModel(t1.getText()); model.setAlias(ta);}
      | #("作为" t2:ID ta = tableAlias)
         {model = new TableModel(t2.getText()); model.setAlias(ta);}
       ;
   
   tableAlias returns [TableAliasModel model]
   {model=null;}
   : a1:QUOTED_STRING
   {model = new TableAliasModel(a1.getText());}
   | a2:ID
   {model = new TableAliasModel(a2.getText());}
   ; 
 3、修改了TableModel的getChString()和getEnString()方法,改成从TableAliasModel获取中英文别名信息。
 4、修改了FieldModel的getEnString()方法,在取得tableEnName时,判断是否存在别名,如果存在,则取英文别名。
    String ret = fieldEnName;
    //如果存在英文表名
    if (tableEnName != null && tableEnName.length() > 0){
      String[] tableEnNameArr = tableEnName.split(" as ");
      //如果英文表名中存在别名(CNF AS CNF2007),则英文表名为英文别名CNF2007
      if (tableEnNameArr != null && tableEnNameArr.length > 0 && tableEnNameArr.length == 2){
        if (tableEnNameArr[1] != null && !tableEnNameArr[1].equals(""))
          tableEnName = tableEnNameArr[1].trim();
      }
      ret = tableEnName + "." + ret;
    }
    return ret;
三、调用方法:
   如果需要设置表的英文别名时,必须在t.addDbTable("AI_94传票对照表", "CNF"); t.addDbField("AI_94传票对照表", "省/市代号", "CNF01")之前进行设置,否则无效。
   QueryModel[] tableAliasModelArr = t.getQueryModel().getModelsFromAllChildrenByClass(TableAliasModel.class);
   for (int i = 0; i < tableAliasModelArr.length; i++){
      System.out.println(tableAliasModelArr[i].getChString());
      TableAliasModel aliasModel = (TableAliasModel) tableAliasModelArr[i];
      aliasModel.setEnAlias("CNF20070101");
      System.out.println(tableAliasModelArr[i].getEnString());
   }
 

posted on 2007-04-03 11:33 LORD BLOG 阅读(824) 评论(0)  编辑  收藏 所属分类: 工作日志

只有注册用户登录后才能发表评论。


网站导航: