<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 18,  comments - 0,  trackbacks - 0
    問題描述:
          編譯器現在的表合并只允許兩張表,客戶提出需要增加多表間的合并。
    處理過程:
          1、首先是對多表合并的驗證部分進行了修改,原代碼如下:
             
    tableUnion
        : (
    "t_union"^|"表合并"^) table_name COMMA! table_name
        ;
             修改后代碼如下:  
    tableUnion
        :    (
    "t_union"^|"表合并"^) table_lists
        ;

    table_lists
        :    table_name (COMMA
    ^ table_name)+
        ;
        (COMMA^ table_name)+ 表示至少需一個table_name的正閉包子規則,在語法定義中第一次用到,原來的都是( ...)*閉包子規則。
        2、修改抽象語法樹遍歷代碼,并將表合并模型對象TableUnionModel原來的addTableModel1(TableModel tableModel)、addTableModel2(TableModel tableModel)方法去掉,增加addTableListModel(TableListModel tableListModel)方法,所有的表模型對象TableModel 先存儲在表列表模型對象中 TableListModel ,再將TableListModel 增加到TableUnionModel中。
    :    #("表合并" tableModel1 = table_name tableModel2 = table_name)
            {
                union.addTableModel1(tableModel1);
                union.addTableModel2(tableModel2);
                model 
    = union;
            }

    改成
    :    #(
    "表合并" t1 = tableUnionList)
            {
                union.addTableListModel(t1);
                model 
    = union;
            }
    tableUnionList的抽象語法樹遍歷代碼如下:

    tableUnionList returns [TableListModel model]
    {
        model 
    = new TableListModel();
        TableModel t;
        TableListModel m1, m2;
        
    }

        :     #(COMMA m1
    =tableUnionList m2=tableUnionList)
            
    {model.addChild(m1); model.addChild(m2);}
        
    |    t = table_name
            
    {model.addTable(t);}
        ;
       3、修改了TableUnionModel代碼,獲取中英文SQL語句均可對多張表操作,代碼如下:
     1/**
     2   * 獲取格式化后的中文SQL語句
     3   */

     4  public String getChString() {
     5    QueryModel[] tableModelArr = getModelsFromAllChildrenByClass(TableModel.class);
     6    
     7    String ret = UNION_CN_NAME;
     8    for (int i = 0; i < tableModelArr.length; i++){
     9      ret += ((TableModel) tableModelArr[i]).getTableName();
    10      if (i < tableModelArr.length - 1)
    11        ret += "";
    12    }

    13    return ret;
    14  }

     1/**
     2   * 獲取可執行的英文SQL語句(如果要插入的表名不為空,則可進行插入記錄操作)
     3   * @param intoTableName 要插入的表名
     4   * @return String 可執行的英文SQL語句
     5   */

     6  public String getExecuteEnString(String intoTableName) {
     7    String rValue = "";
     8    QueryModel[] tableModelArr = getModelsFromAllChildrenByClass(TableModel.class);
     9    for (int i = 0; i < tableModelArr.length; i++){
    10      DbTableModel _dbTableModel = getDbTableModel();
    11      TableModel tableModel = (TableModel) tableModelArr[i];
    12      String enFieldStr = _dbTableModel.getFieldsEnStr(tableModel.getChString());
    13      if (intoTableName == null || intoTableName.equals(""|| intoTableName.length() == 0){
    14          //如果合并的表名為第二張及之后,則需增加"UNION ALL"
    15          if (i > 0)
    16              rValue += unionAll;
    17          
    18          //將SQL語句替換成當前的表名/字段名
    19        rValue += StringUtil.replace(unionStr,
    20                new String[]{"_FIELDS_""_FROM_TABLE_NAME_"},
    21                new String[]{enFieldStr, tableModel.getEnString()}
    22            );
    23      }
    else{
    24          //獲取要插入的臨時表英文SQL語句
    25          if (i == 0){
    26              rValue = StringUtil.replace(unionIntoStr,
    27                      new String[]{"_INTO_TABLE_NAME_""_FIELDS_"},
    28                      new String[]{intoTableName, enFieldStr}
    29                  );
    30          }

    31          
    32          //如果合并的表名為第二張及之后,則需增加"UNION ALL"
    33          if (i > 0)
    34              rValue += unionAll;
    35          
    36          //將SQL語句替換成當前的表名/字段名
    37        rValue += StringUtil.replace(unionStr,
    38                new String[]{"_FIELDS_""_FROM_TABLE_NAME_"},
    39                new String[]{enFieldStr, tableModel.getEnString()}
    40            );
    41        
    42      }

    43    }

    44    return rValue;
    45  }


    posted on 2007-05-16 14:49 LORD BLOG 閱讀(236) 評論(0)  編輯  收藏 所屬分類: 工作日志
    主站蜘蛛池模板: 国产成人精品一区二区三区免费| 亚洲jjzzjjzz在线观看| 国产精品亚洲精品久久精品| 免费看国产精品3a黄的视频| 亚洲色图激情文学| 中文字幕无码免费久久99 | 亚洲国产精品VA在线看黑人| 人妖系列免费网站观看| 亚洲美女在线国产| 9久久免费国产精品特黄| 亚洲尤码不卡AV麻豆| 免费91麻豆精品国产自产在线观看 | 亚洲色欲色欲www| 女人18毛片水最多免费观看 | 国产99久久久国产精免费 | AV在线亚洲男人的天堂| 中国一级全黄的免费观看| 亚洲AV无码乱码在线观看富二代| 精品熟女少妇av免费久久| 亚洲国产成人精品无码区在线秒播 | 国产午夜影视大全免费观看| 全黄A免费一级毛片| 亚洲精品中文字幕乱码三区| 13一14周岁毛片免费| 亚洲精品无码人妻无码 | 亚洲国产精品自在在线观看| 亚洲视频免费在线看| 亚洲色偷偷综合亚洲AV伊人蜜桃 | 成人免费av一区二区三区| 亚洲精品免费视频| 免费高清在线爱做视频| j8又粗又长又硬又爽免费视频| 久久国产精品亚洲综合| 亚洲av麻豆aⅴ无码电影| 国产免费AV片在线观看播放| 蜜芽亚洲av无码精品色午夜| 免费看无码特级毛片| 亚洲乱码中文论理电影| 亚洲国产V高清在线观看| 最近免费中文字幕mv电影| 日韩欧美亚洲国产精品字幕久久久|