<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
    問題描述:
          編譯器現(xiàn)在的表合并只允許兩張表,客戶提出需要增加多表間的合并。
    處理過程:
          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的正閉包子規(guī)則,在語法定義中第一次用到,原來的都是( ...)*閉包子規(guī)則
        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   * 獲取可執(zhí)行的英文SQL語句(如果要插入的表名不為空,則可進行插入記錄操作)
     3   * @param intoTableName 要插入的表名
     4   * @return String 可執(zhí)行的英文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語句替換成當(dāng)前的表名/字段名
    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語句替換成當(dāng)前的表名/字段名
    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 閱讀(229) 評論(0)  編輯  收藏 所屬分類: 工作日志
    主站蜘蛛池模板: 三上悠亚亚洲一区高清| 成人人免费夜夜视频观看| 亚洲精品乱码久久久久久按摩| 亚洲第一第二第三第四第五第六| 国产免费AV片在线播放唯爱网| 1区1区3区4区产品亚洲 | 亚洲JIZZJIZZ妇女| 精品国产免费观看一区| 亚洲成AV人片在WWW| 日韩a级毛片免费观看| 另类图片亚洲校园小说区| 五月婷婷亚洲综合| 国产精品成人免费观看| 亚洲精品午夜无码电影网| 免费h视频在线观看| 亚洲AV无码1区2区久久| 美丽的姑娘免费观看在线播放| 亚洲成年人免费网站| 国产美女无遮挡免费视频网站 | 又黄又爽无遮挡免费视频| 十八禁的黄污污免费网站| 亚洲无人区一区二区三区| 精品亚洲永久免费精品| 亚洲欧洲日韩在线电影| 全免费a级毛片免费**视频| 免费无码午夜福利片69| 亚洲av无码专区在线播放| 男男AV纯肉无码免费播放无码| 偷自拍亚洲视频在线观看| 久久精品亚洲综合| 最近2019中文免费字幕| 和老外3p爽粗大免费视频| 亚洲a视频在线观看| 亚洲福利精品电影在线观看| 久久99精品免费视频| 亚洲国产精品日韩av不卡在线| 亚洲综合精品网站在线观看| 久久久久久曰本AV免费免费| 精品久久久久久亚洲中文字幕| 久久九九亚洲精品| 免费视频淫片aa毛片|