Changeset 69
- Timestamp:
- 04/04/05 22:14:45
- Files:
-
- trunk/storage/db.py (modified) (13 diffs)
- trunk/storage/sockets.py (modified) (1 diff)
- trunk/storage/storeado.py (modified) (2 diffs)
- trunk/storage/zoo_fixture.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/storage/db.py
r68 r69 248 248 coerce_decimal_Decimal = tostr 249 249 250 def pickle(self, value):250 def do_pickle(self, value): 251 251 return self.coerce_str(pickle.dumps(value)) 252 252 253 coerce_dict = pickle253 coerce_dict = do_pickle 254 254 255 255 coerce_fixedpoint_FixedPoint = tostr … … 257 257 coerce_int = tostr 258 258 259 coerce_list = pickle259 coerce_list = do_pickle 260 260 261 261 coerce_long = tostr … … 266 266 return "'" + value + "'" 267 267 268 coerce_tuple = pickle268 coerce_tuple = do_pickle 269 269 270 270 coerce_unicode = coerce_str … … 309 309 unit._properties[key] = value 310 310 311 def pickle(self, value, coltype):311 def do_pickle(self, value, coltype): 312 312 # Coerce to str for pickle.loads restriction. 313 313 value = str(value) … … 340 340 return decimal.Decimal(str(value)) 341 341 342 coerce_dict = pickle342 coerce_dict = do_pickle 343 343 344 344 def coerce_fixedpoint_FixedPoint(self, value, coltype): … … 351 351 return int(value) 352 352 353 coerce_list = pickle353 coerce_list = do_pickle 354 354 355 355 def coerce_long(self, value, coltype): … … 359 359 return str(value) 360 360 361 coerce_tuple = pickle361 coerce_tuple = do_pickle 362 362 363 363 def coerce_unicode(self, value, coltype): … … 391 391 392 392 # Stack sentinels 393 table_arg = object() 394 kw_arg = object() 393 class Sentinel(object): 394 395 def __init__(self, name): 396 self.name = name 397 398 def __repr__(self): 399 return 'Stack Sentinel: %s' % self.name 400 401 table_arg = Sentinel('Table Arg') 402 kw_arg = Sentinel('Keyword Arg') 395 403 # cannot_represent exists so that a portion of an Expression can be 396 404 # labeled imperfect. For example, the function dejavu.iscurrentweek … … 398 406 # the Expression) will be recalled; they can then be compared in 399 407 # expr.evaluate(unit). 400 cannot_represent = object()408 cannot_represent = Sentinel('Cannot Repr') 401 409 402 410 … … 505 513 def visit_CALL_FUNCTION(self, lo, hi): 506 514 kwargs = {} 507 for i in range(hi):515 for i in xrange(hi): 508 516 val = self.stack.pop() 509 517 key = self.stack.pop() … … 512 520 513 521 args = [] 514 for i in range(lo):522 for i in xrange(lo): 515 523 arg = self.stack.pop() 516 524 args.append(arg) … … 539 547 return 540 548 541 if self.stack: 542 self.stack[-1] = cannot_represent 543 else: 544 self.stack = [cannot_represent] 549 self.stack.append(cannot_represent) 545 550 self.imperfect = True 546 551 … … 870 875 def execute(self, query, conn=None): 871 876 """execute(query, conn=None) -> result set.""" 872 ## try:873 877 if conn is None: 874 878 conn = self.connection() 875 879 return conn.query(query.encode('utf8')) 876 ## except Exception, x:877 ## x.args += (query,)878 ## # Dereference the connection so that release() is called back.879 ## conn = None880 ## raise x881 880 882 881 def fetch(self, query, conn=None): trunk/storage/sockets.py
r68 r69 87 87 """ 88 88 conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 89 ## conn.settimeout(self.timeout) 89 # Not sure if we should have a timeout or not-- 90 # some users getting "Address already in use" errors..? 91 conn.settimeout(self.timeout) 90 92 ## conn.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 91 93 conn.connect((self.host, self.port)) trunk/storage/storeado.py
r68 r69 181 181 / 86400.0) 182 182 183 def pickle(self, value):183 def do_pickle(self, value): 184 184 # We must not use a pickle format other than 0, because binary 185 185 # strings are not safe for all DB string fields. 186 186 return pickle.dumps(value) 187 187 188 coerce_dict = pickle188 coerce_dict = do_pickle 189 189 190 190 def coerce_fixedpoint_FixedPoint(self, value): … … 196 196 coerce_int = noop 197 197 198 coerce_list = pickle198 coerce_list = do_pickle 199 199 200 200 coerce_long = noop 201 201 coerce_str = noop 202 202 203 coerce_tuple = pickle203 coerce_tuple = do_pickle 204 204 205 205 coerce_unicode = noop trunk/storage/zoo_fixture.py
r68 r69 241 241 self.assertEqual(matches(lambda x: 'p' in x.Name 242 242 and x.Name.count('e') > 1), 3) 243 243 244 244 # Test wildcards in LIKE. 245 245 box.flush_all() 246 246 units = box.recall(zoo.Zoo, logic.Expression(lambda x: "_" in x.Name)) 247 self.assertEqual(len([x for x in units]), 1) 248 249 # This broke in MSAccess (storeado) in April 2005, due to a bug in 250 # db.SQLDecompiler.visit_CALL_FUNCTION (append TOS, not replace!). 251 box.flush_all() 252 e = logic.Expression(lambda x, **kw: x.LastEscape != None 253 and x.LastEscape >= datetime.date(kw['Year'], 12, 1) 254 and x.LastEscape < datetime.date(kw['Year'], 12, 31) 255 ) 256 e.bind_args(Year=2004) 257 units = box.recall(zoo.Animal, e) 247 258 self.assertEqual(len([x for x in units]), 1) 248 259
