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)