<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成人| 69影院毛片免费观看视频在线| 亚洲中久无码不卡永久在线观看| 爱情岛亚洲论坛在线观看| 国产片免费福利片永久| 亚洲欧美日韩久久精品| 午夜dj免费在线观看| 亚洲欧洲国产综合AV无码久久| 成人免费在线视频| 久久精品国产亚洲AV未满十八| 国产成人一区二区三区免费视频| 亚洲第一第二第三第四第五第六| 日韩精品视频免费观看| 国产亚洲福利一区二区免费看 | 国产精品亚洲片在线va| 免费观看黄网站在线播放| 亚洲综合一区国产精品| 全免费a级毛片免费看不卡| 久久亚洲精品无码gv| 少妇亚洲免费精品| 好猛好深好爽好硬免费视频| 亚洲乱码日产一区三区| 无码国产精品一区二区免费模式| 亚洲视频在线观看一区| 日韩欧毛片免费视频| 亚洲欧洲精品成人久久曰| 亚洲第一区精品观看| 91精品成人免费国产| 亚洲第一永久在线观看| 丁香花在线观看免费观看| 婷婷亚洲综合一区二区| 久久久久无码专区亚洲av| 久久免费国产精品一区二区| 亚洲视频一区二区在线观看| AV片在线观看免费| 曰批全过程免费视频免费看| 亚洲中文字幕无码久久2017| 免费A级毛片无码A∨免费| 亚洲午夜无码久久久久软件| 亚洲?V乱码久久精品蜜桃| 日韩精品无码免费专区午夜|