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

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

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

    keep moving!

    We must not cease from exploration. And the end of all our exploring will be to arrive where we began and to know the place for the first time.
    隨筆 - 37, 文章 - 2, 評論 - 3, 引用 - 0
    數據加載中……

    通過數據字典校驗xml

    def tablelist1 = new XmlParser().parse(new File(".\\fullConfig1.xml"))
    def dbDef = new XmlParser().parse(new File("C:\\groovy\\DbDef.xml"))

    /**
     * 正向校驗
     */
    tablelist1.DBTABLE.each {dbtable1 ->
        def tableDef = dbDef.Table.find {"${it.@Name}" == "${dbtable1.@name}"}
        if (tableDef == null)
        println "${dbtable1.@name} is not exist in dbdef" ; //通過數據字典,校驗表個數
        else{
            if(dbtable1.DBRECORD.size() > new Integer(tableDef.@MaxRecNum))
            println "${dbtable1.@name} num is larger than ${tableDef.@MaxRecNum}"; //通過數據字典,校驗記錄個數

            dbtable1.DBRECORD.eachWithIndex{elem, i ->
                if(i==0)
                elem.FIELD.each{field ->
                    if(tableDef.Field.find{"${it.@Name}" == "${field.@name}"} == null)
                    println "can't find ${dbtable1.@name}:${field.@name}  in dbdef"
                }
            } //通過數據字典,校驗字段名稱

            checkTableRelation(tablelist1,tableDef,dbtable1)
        }
    }

    /**
     * 反向校驗
     */
    dbDef.Table.each{tableDef ->
        def tableData = tablelist1.DBTABLE.find {"${it.@name}" == "${tableDef.@Name}"}
        if (tableData == null)
        println "${tableDef.@Name} is not exist in data file" ; //校驗少表的情況
        else if(tableData.DBRECORD.size()>0){
            tableDef.Field.each{ fieldInfo ->
                if(tableData.DBRECORD[0].FIELD.find{"${it.@name}" == "${fieldInfo.@Name}"} == null)
                println "can't find ${tableDef.@Name}:${fieldInfo.@Name} in data file" //校驗少字段的情況
            }
        }
    }
    println 'finished'

     

    /**------------------------------------------------------------------------------------------------------------------*/

    def checkPriKeyRelation(tableDef,dbtable1,priKeyMap){
        def keyArray = []
        def key = priKeyMap
        dbtable1.DBRECORD.each{dbRecord ->
            def keyvalue  = ''
            key.each{ priKey ->
                def _field = dbRecord.FIELD.find{
                      "${priKey}" == "${it.@name}"
                }
                keyvalue += "${_field.@name}:${_field.@value} "
            }

            if(keyArray.contains(keyvalue))
              println "${dbtable1.@name}:${keyvalue} has exist"  //校驗主鍵唯一
            else
              keyArray << keyvalue
        }
    }

    def checkRefKeyRelation(fullData,dbtable1,tableDef,refKeyMap,priKeyMap){
        if(refKeyMap==null || refKeyMap.size()==0) return
       
        for(dbRecord in dbtable1.DBRECORD){
            def refKeyInfos = refKeyMap
            def prikeyInfo = priKeyMap
            refKeyMap.each{refInfo ->       
              if(fullData.DBTABLE.find{"${it.@name}" == "${refInfo.key}"}==null)
               println "ref table (${it.key}) is not founded "
              else
              {
               def localTable = "${tableDef.@Name}"
               def refTable = "${refInfo.key}"
               def fieldsInfo = refInfo.value
               def keyInfo = [:]
               fieldsInfo.each{localField ->
                   def fieldxml = dbRecord.FIELD.find{"${it.@name}" == "${localField[0]}"}
                  if(fieldxml == null)
                   println "${localField[0]} in ${tableDef.@Name} isn't found"
                else
                   keyInfo.put("${localField[1]}","${fieldxml.@value}")
               }
                 def dbRecords = fullData.DBTABLE.find{"${it.@name}" == "${refTable}"}.DBRECORD
                 def sign = false
                 for (_dbRecord in dbRecords){
                  def _sign = true
                  keyInfo.each{ attr->
                   if(_dbRecord.FIELD.find{"${it.@name}" == "${attr.key}" && "${it.@value}" == "${attr.value}"}==null){
                    _sign= false
                   }              
                  }
                    if(_sign) sign = true              
                 }
                
                 if(!sign){
                  println "can find : table Name ${dbtable1.@name} ref table ${refTable},value ${keyInfo} "
                  //校驗外鍵約束
                 }
              }
            }
        }
    }

    def checkTableRelation(fullData,tableDef,dbtable1){
        def priKeyMap = getPriKeyInfo(tableDef)
        def refKeyMap = getRefKeyInfo(tableDef)
        checkPriKeyRelation(tableDef,dbtable1,priKeyMap)
        checkRefKeyRelation(fullData,dbtable1,tableDef,refKeyMap,priKeyMap)
    }

    def getPriKeyInfo(tableDef){
     tableDef.PriKey.PKI.collect{"${it.@Field}"}
    }

    def getRefKeyInfo(tableDef){
        def refKeyMap = [:]
        for(refKey in tableDef.RefKey){
            def map= refKey.RKI.collect{["${it.@Field}","${it.@RefField}"]}
            if(!refKeyMap.containsKey("${refKey.@RefTable}")) refKeyMap.put("${refKey.@RefTable}",map)
        }
        return refKeyMap
    }

     

    posted on 2008-10-02 23:54 大石頭 閱讀(399) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 水蜜桃视频在线观看免费| 最近免费中文字幕大全免费版视频| 精品亚洲成A人在线观看青青| 美女视频黄频a免费观看| a在线视频免费观看| 国产精彩免费视频| 国产精品麻豆免费版| 久久久久亚洲精品无码网址 | 亚洲乱码一区二区三区国产精品| 亚洲色www永久网站| eeuss影院免费直达入口| 84pao国产成视频免费播放| 大香人蕉免费视频75| 亚洲精品成人网站在线观看 | 亚洲欧美成人综合久久久| 中文字幕在线视频免费观看| 妻子5免费完整高清电视| 国产L精品国产亚洲区久久| 亚洲天堂电影在线观看| 一区二区三区免费电影| 免费无遮挡无码视频网站| 亚洲爆乳精品无码一区二区三区 | 78成人精品电影在线播放日韩精品电影一区亚洲 | 亚洲最新永久在线观看| 香港经典a毛片免费观看看| 91精品免费高清在线| 亚洲视频在线一区二区| 亚洲欧洲日韩国产一区二区三区| 精品国产麻豆免费人成网站| 国产精品四虎在线观看免费| 91亚洲国产成人精品下载| fc2免费人成在线视频| 在线观看91精品国产不卡免费| 亚洲人成影院在线| GOGOGO免费观看国语| 国产大片91精品免费看3 | 精品久久久久亚洲| 中文字幕乱码免费视频| 久久99国产亚洲精品观看| 一本一道dvd在线观看免费视频 | 亚洲人成色99999在线观看|