<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 大石頭 閱讀(398) 評論(0)  編輯  收藏


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


    網站導航:
     
    主站蜘蛛池模板: 亚洲伊人久久成综合人影院| 无码中文在线二区免费| 亚洲人妻av伦理| 高h视频在线免费观看| 四虎永久在线免费观看| 麻豆亚洲AV成人无码久久精品| 免费人成视频在线| 国产亚洲精品免费| 伊人婷婷综合缴情亚洲五月| 亚洲AV中文无码乱人伦在线视色| 亚洲天堂2016| 久久久久久国产精品免费免费| ass亚洲**毛茸茸pics| 久久这里只有精品国产免费10| 亚洲av片在线观看| 亚洲VA综合VA国产产VA中| 男女一边摸一边做爽的免费视频| 亚洲色婷婷六月亚洲婷婷6月| 久久免费精品视频| 亚洲人xxx日本人18| 国产免费私拍一区二区三区| ssswww日本免费网站片| 亚洲va久久久噜噜噜久久男同| 最近中文字幕大全免费视频| 亚洲精品456人成在线| 免费v片视频在线观看视频| a级毛片视频免费观看| 亚洲日韩乱码中文无码蜜桃臀 | 亚洲AV无码一区二区乱子伦| 中国videos性高清免费| 亚洲欧洲成人精品香蕉网| 美女内射毛片在线看免费人动物| 亚洲午夜成人精品无码色欲| 亚洲精品在线视频| 18禁美女裸体免费网站| 国产亚洲精品2021自在线| 亚洲精品高清国产一久久| 日本人的色道www免费一区| 成人爽a毛片免费| 亚洲AV综合色区无码一二三区| 亚洲午夜无码久久久久|