NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

dbutil.py (2749B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\carbon\common\script\util\dbutil.py
      2 from collections import defaultdict
      3 
      4 def SQLStringify(data):
      5     if isinstance(data, str) or isinstance(data, unicode):
      6         return "'" + data.replace("'", "''") + "'"
      7     if data is None:
      8         return 'NULL'
      9     if isinstance(data, bool):
     10         if data:
     11             return '1'
     12         else:
     13             return '0'
     14     else:
     15         return str(data)
     16 
     17 
     18 def TuplesToCSVStrings(tuplelist, numLists, maxOutputLength = 4000):
     19     if len(tuplelist) == 0:
     20         return (tuple([ '' for i in xrange(numLists) ]), tuplelist)
     21     maxstringlen = 0
     22     workingSet = tuplelist
     23     remains = []
     24     for i, t in enumerate(tuplelist):
     25         strlen = 0
     26         for e in t:
     27             if len(str(e)) > strlen:
     28                 strlen = len(str(e))
     29 
     30         maxstringlen += strlen + 1
     31         if maxstringlen >= maxOutputLength:
     32             workingSet = tuplelist[:i]
     33             remains = tuplelist[i:]
     34             break
     35 
     36     retstrings = []
     37     for i in range(numLists):
     38         values = [ v[i] for v in workingSet ]
     39         retstrings.append(','.join([ str(v) for v in values ]))
     40 
     41     return (tuple(retstrings), remains)
     42 
     43 
     44 def ExecuteProcInBlocks(proc, **kwargs):
     45     nonListArgs = dict()
     46     listArgs = dict()
     47     listLength = 0
     48     listName = None
     49     for name, value in kwargs.iteritems():
     50         if isinstance(value, (list, tuple)):
     51             listArgs[name] = value
     52             listLength = len(value)
     53             listName = name
     54         else:
     55             nonListArgs[name] = value
     56 
     57     stringListArgs = defaultdict(list)
     58     lengthListArgs = defaultdict(int)
     59     for i in xrange(listLength):
     60         singleStringListArgs = dict()
     61         shouldFlush = False
     62         for name, l in listArgs.iteritems():
     63             singleStringListArgs[name] = str(l[i])
     64             if lengthListArgs[name] + len(singleStringListArgs[name]) >= 8000:
     65                 shouldFlush = True
     66 
     67         if shouldFlush:
     68             readyKwargs = dict()
     69             readyKwargs.update(nonListArgs)
     70             for name, value in stringListArgs.iteritems():
     71                 readyKwargs[name] = ','.join(value)
     72 
     73             proc(**readyKwargs)
     74             stringListArgs = defaultdict(list)
     75             lengthListArgs = defaultdict(int)
     76         for name, value in singleStringListArgs.iteritems():
     77             stringListArgs[name].append(value)
     78             lengthListArgs[name] += len(value) + 1
     79 
     80     if listName is not None and len(stringListArgs[listName]) > 0:
     81         readyKwargs = dict()
     82         readyKwargs.update(nonListArgs)
     83         for name, value in stringListArgs.iteritems():
     84             readyKwargs[name] = ','.join(value)
     85 
     86         proc(**readyKwargs)