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 閱讀(841) 評論(0)  編輯  收藏 所屬分類: 工作日志
          主站蜘蛛池模板: 敦化市| 汕头市| 平陆县| 翁源县| 翁牛特旗| 饶阳县| 建宁县| 东乡族自治县| 马边| 额尔古纳市| 海城市| 天台县| 洛川县| 威宁| 东光县| 阿鲁科尔沁旗| 东安县| 保山市| 通海县| 全州县| 徐闻县| 济阳县| 滨海县| 蓝田县| 寿光市| 景东| 郁南县| 阜新市| 岗巴县| 泰州市| 新竹县| 南平市| 赤水市| 准格尔旗| 赤壁市| 贺兰县| 页游| 砀山县| 桃江县| 纳雍县| 固阳县|