<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語句替換成當前的表名/字段名
    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 閱讀(231) 評論(0)  編輯  收藏 所屬分類: 工作日志
    主站蜘蛛池模板: 拔擦拔擦8x华人免费久久| 久久亚洲高清综合| 国产精品成人亚洲| 亚洲最大av无码网址| 久久免费公开视频| 最新亚洲春色Av无码专区| 免费a级毛片无码a∨性按摩| 久久免费高清视频| 久久精品国产亚洲AV| 亚洲成Av人片乱码色午夜| 毛片免费观看的视频| 国内精品99亚洲免费高清| 亚洲人妖女同在线播放| 亚洲国产精品成人| 久久天天躁狠狠躁夜夜免费观看 | 亚洲一区二区三区播放在线| 日产国产精品亚洲系列| 精品无码人妻一区二区免费蜜桃| 亚洲va中文字幕| 亚洲国产一区国产亚洲| 免费a级毛片永久免费| 99爱视频99爱在线观看免费| 香港一级毛片免费看| 亚洲国产高清视频在线观看| 久久精品国产亚洲5555| 美女被免费视频网站a国产| 午夜精品射精入后重之免费观看| 国产成人亚洲精品播放器下载 | 毛片a级毛片免费观看品善网| 岛国岛国免费V片在线观看| 亚洲精品GV天堂无码男同| 亚洲福利视频网址| 国产亚洲精品资源在线26u| 国产成人免费福利网站| 4hu四虎最新免费地址| 99在线视频免费观看| 美女被爆羞羞网站免费| 亚洲熟妇丰满xxxxx| 亚洲国产成人精品不卡青青草原| 四虎影在线永久免费观看| 无码人妻一区二区三区免费|