22 |
import weakref |
import weakref |
23 |
from sqlite import connect |
from sqlite import connect |
24 |
|
|
25 |
|
from base import TitledObject |
26 |
|
|
27 |
import table |
import table |
28 |
|
|
29 |
sql_type_map = { |
sql_type_map = { |
291 |
raise NotImplementedError |
raise NotImplementedError |
292 |
|
|
293 |
|
|
294 |
class TransientTable(TransientTableBase): |
class TransientTable(TitledObject, TransientTableBase): |
295 |
|
|
296 |
"""A Table in a transient DB that starts as the copy of a Thuban Table.""" |
"""A Table in a transient DB that starts as the copy of a Thuban Table.""" |
297 |
|
|
302 |
interface. |
interface. |
303 |
""" |
""" |
304 |
TransientTableBase.__init__(self, transient_db) |
TransientTableBase.__init__(self, transient_db) |
305 |
self.title = table.Title() |
TitledObject.__init__(self, table.Title()) |
306 |
self.create(table) |
self.create(table) |
307 |
|
|
|
def Title(self): |
|
|
"""Return the title of the table. |
|
|
|
|
|
The title is the same as that of the original table |
|
|
""" |
|
|
return self.title |
|
|
|
|
308 |
def create(self, table): |
def create(self, table): |
309 |
columns = [] |
columns = [] |
310 |
for col in table.Columns(): |
for col in table.Columns(): |
336 |
|
|
337 |
|
|
338 |
|
|
339 |
class TransientJoinedTable(TransientTableBase): |
class TransientJoinedTable(TitledObject, TransientTableBase): |
340 |
|
|
341 |
"""A Table in the transient DB that contains a join of two tables""" |
"""A Table in the transient DB that contains a join of two tables""" |
342 |
|
|
367 |
else: |
else: |
368 |
self.right_field = self.left_field |
self.right_field = self.left_field |
369 |
self.outer_join = outer_join |
self.outer_join = outer_join |
|
self.create() |
|
370 |
|
|
371 |
def Title(self): |
title = "Join of %(left)s and %(right)s" \ |
372 |
"""Return the title of the joined table""" |
% {"left": self.left_table.Title(), |
373 |
return "Join of %(left)s and %(right)s" \ |
"right": self.right_table.Title()} |
374 |
% {"left": self.left_table.Title(), |
TitledObject.__init__(self, title) |
375 |
"right": self.right_table.Title()} |
|
376 |
|
self.create() |
377 |
|
|
378 |
def create(self): |
def create(self): |
379 |
"""Internal: Create the table with the joined data""" |
"""Internal: Create the table with the joined data""" |
417 |
return self.dependencies |
return self.dependencies |
418 |
|
|
419 |
|
|
420 |
class AutoTransientTable(table.OldTableInterfaceMixin): |
class AutoTransientTable(TitledObject, table.OldTableInterfaceMixin): |
421 |
|
|
422 |
"""Table that copies data to a transient table on demand. |
"""Table that copies data to a transient table on demand. |
423 |
|
|
426 |
""" |
""" |
427 |
|
|
428 |
def __init__(self, transient_db, table): |
def __init__(self, transient_db, table): |
429 |
|
TitledObject.__init__(self, table.Title()) |
430 |
self.transient_db = transient_db |
self.transient_db = transient_db |
431 |
self.table = table |
self.table = table |
432 |
self.t_table = None |
self.t_table = None |
433 |
|
|
|
def Title(self): |
|
|
"""Return the title of the table. |
|
|
|
|
|
The title is the same as that of the original table. |
|
|
""" |
|
|
return self.table.Title() |
|
|
|
|
434 |
def Columns(self): |
def Columns(self): |
435 |
return self.table.Columns() |
return self.table.Columns() |
436 |
|
|