280 |
result.append(row[0]) |
result.append(row[0]) |
281 |
return result |
return result |
282 |
|
|
283 |
|
def Dependencies(self): |
284 |
|
"""Placeholder for a method in a derived class. |
285 |
|
|
286 |
|
Return a sequence with the tables and other data objects that |
287 |
|
self depends on. |
288 |
|
""" |
289 |
|
raise NotImplementedError |
290 |
|
|
291 |
|
|
292 |
class TransientTable(TransientTableBase): |
class TransientTable(TransientTableBase): |
293 |
|
|
300 |
interface. |
interface. |
301 |
""" |
""" |
302 |
TransientTableBase.__init__(self, transient_db) |
TransientTableBase.__init__(self, transient_db) |
303 |
|
self.title = table.Title() |
304 |
self.create(table) |
self.create(table) |
305 |
|
|
306 |
|
def Title(self): |
307 |
|
"""Return the title of the table. |
308 |
|
|
309 |
|
The title is the same as that of the original table |
310 |
|
""" |
311 |
|
return self.title |
312 |
|
|
313 |
def create(self, table): |
def create(self, table): |
314 |
columns = [] |
columns = [] |
315 |
for col in table.Columns(): |
for col in table.Columns(): |
363 |
names of the input tables without having to create prefixes. |
names of the input tables without having to create prefixes. |
364 |
""" |
""" |
365 |
TransientTableBase.__init__(self, transient_db) |
TransientTableBase.__init__(self, transient_db) |
366 |
|
self.dependencies = (left_table, right_table) |
367 |
self.left_table = left_table.transient_table() |
self.left_table = left_table.transient_table() |
368 |
self.left_field = left_field |
self.left_field = left_field |
369 |
self.right_table = right_table.transient_table() |
self.right_table = right_table.transient_table() |
373 |
self.right_field = self.left_field |
self.right_field = self.left_field |
374 |
self.create() |
self.create() |
375 |
|
|
376 |
|
def Title(self): |
377 |
|
"""Return the title of the joined table""" |
378 |
|
return "Join of %(left)s and %(right)s" \ |
379 |
|
% {"left": self.left_table.Title(), |
380 |
|
"right": self.right_table.Title()} |
381 |
|
|
382 |
def create(self): |
def create(self): |
383 |
"""Internal: Create the table with the joined data""" |
"""Internal: Create the table with the joined data""" |
384 |
self.tablename = self.db.new_table_name() |
self.tablename = self.db.new_table_name() |
411 |
self.orig_to_internal[self.right_field])) |
self.orig_to_internal[self.right_field])) |
412 |
self.db.execute(stmt) |
self.db.execute(stmt) |
413 |
|
|
414 |
|
def Dependencies(self): |
415 |
|
"""Return a tuple with the two tables the join depends on.""" |
416 |
|
return self.dependencies |
417 |
|
|
418 |
|
|
419 |
class AutoTransientTable(table.OldTableInterfaceMixin): |
class AutoTransientTable(table.OldTableInterfaceMixin): |
420 |
|
|
429 |
self.table = table |
self.table = table |
430 |
self.t_table = None |
self.t_table = None |
431 |
|
|
432 |
|
def Title(self): |
433 |
|
"""Return the title of the table. |
434 |
|
|
435 |
|
The title is the same as that of the original table. |
436 |
|
""" |
437 |
|
return self.table.Title() |
438 |
|
|
439 |
def Columns(self): |
def Columns(self): |
440 |
return self.table.Columns() |
return self.table.Columns() |
441 |
|
|
499 |
# Make sure to use the column object of the transient table. The |
# Make sure to use the column object of the transient table. The |
500 |
# left argument is always a column object so we can just ask the |
# left argument is always a column object so we can just ask the |
501 |
# t_table for the right object. |
# t_table for the right object. |
502 |
return self.t_table.SimpleQuery(self.t_table.Column(left.name), |
if hasattr(right, "name"): |
503 |
comparison, right) |
return self.t_table.SimpleQuery(self.t_table.Column(left.name), |
504 |
|
comparison, |
505 |
|
self.t_table.Column(right.name)) |
506 |
|
else: |
507 |
|
return self.t_table.SimpleQuery(self.t_table.Column(left.name), |
508 |
|
comparison, right) |
509 |
|
|
510 |
|
def Dependencies(self): |
511 |
|
"""Return a tuple containing the original table""" |
512 |
|
return (self.table,) |