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, 評(píng)論 - 3, 引用 - 0
          數(shù)據(jù)加載中……

          通過數(shù)據(jù)字典校驗(yàn)xml

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

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

                  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"
                      }
                  } //通過數(shù)據(jù)字典,校驗(yàn)字段名稱

                  checkTableRelation(tablelist1,tableDef,dbtable1)
              }
          }

          /**
           * 反向校驗(yàn)
           */
          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" ; //校驗(yàn)少表的情況
              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" //校驗(yàn)少字段的情況
                  }
              }
          }
          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"  //校驗(yàn)主鍵唯一
                  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} "
                        //校驗(yàn)外鍵約束
                       }
                    }
                  }
              }
          }

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


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 黄石市| 都江堰市| 镇沅| 清丰县| 宁晋县| 若尔盖县| 娱乐| 赣州市| 余干县| 瑞昌市| 昭平县| 西昌市| 临高县| 大新县| 德保县| 延津县| 高密市| 卓资县| 扎赉特旗| 莎车县| 苍梧县| 治县。| 广灵县| 桐梓县| 繁峙县| 兴义市| 芜湖县| 师宗县| 嘉荫县| 买车| 旌德县| 阿克| 朝阳市| 兴化市| 德州市| 广汉市| 福贡县| 都匀市| 巴塘县| 湘阴县| 新干县|