/[thuban]/branches/WIP-pyshapelib-bramz/Thuban/Model/transientdb.py
ViewVC logotype

Diff of /branches/WIP-pyshapelib-bramz/Thuban/Model/transientdb.py

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1328 by bh, Tue Jul 1 12:01:58 2003 UTC revision 1333 by frank, Tue Jul 1 15:41:08 2003 UTC
# Line 415  class TransientJoinedTable(TitledObject, Line 415  class TransientJoinedTable(TitledObject,
415          # column names are the same they will be mapped to the same          # column names are the same they will be mapped to the same
416          # internal name afterwards.          # internal name afterwards.
417          internal_left_col = self.left_table.orig_to_internal[self.left_field]          internal_left_col = self.left_table.orig_to_internal[self.left_field]
418          internal_right_col =self.right_table.orig_to_internal[self.right_field]          internal_right_col = self.right_table.orig_to_internal[self.right_field]
419    
420          # Coalesce the column information          # Coalesce the column information
421          visited = {}          visited = {}
422          columns = []          columns = []
423          for col in self.left_table.columns + self.right_table.columns:          newcolumns = []
424            for table, col in (
425                [ (self.left_table.tablename, c) for c in self.left_table.columns ]
426                + [ (self.right_table.tablename, c) for c in self.right_table.columns]):
427              if col.name in visited:              if col.name in visited:
428                  # We can't allow multiple columns with the same original                  if col.name == self.left_field:
429                  # name, so omit this one. FIXME: There should be a                      continue
430                  # better solution.                  else:
431                  continue                      # We can't allow multiple columns with the same original
432              columns.append(col)                      # name, so append '_' to this one until it is unique.
433                        # FIXME: There should be a better solution.
434                        while col.name in visited:
435                            col.name = col.name + '_'
436                columns.append((table, col))
437                newcol = ColumnReference(col.name, col.type,
438                                            "Col%03d" % (len(newcolumns)+1))
439                newcolumns.append(newcol)
440              visited[col.name] = 1              visited[col.name] = 1
441          TransientTableBase.create(self, columns)          TransientTableBase.create(self, newcolumns)
442    
443          # Copy the joined data to the table.          # Copy the joined data to the table.
444          internal_names = [col.internal_name for col in self.columns]          newinternal_names = [col.internal_name for col in self.columns]
445            internal_references = ["%s.%s" % (table, col.internal_name)
446                                                        for table, col in columns]
447          if self.outer_join:          if self.outer_join:
448              join_operator = 'LEFT OUTER JOIN'              join_operator = 'LEFT OUTER JOIN'
449          else:          else:
450              join_operator = 'JOIN'              join_operator = 'JOIN'
451          stmt = ("INSERT INTO %s (id, %s) SELECT %s.id, %s FROM %s"          stmt = ("INSERT INTO %s (id, %s) SELECT %s.id, %s FROM %s"
452                  " %s %s ON %s = %s;"                  " %s %s ON %s.%s = %s.%s;"
453                  % (self.tablename,                  % (self.tablename,
454                     ", ".join(internal_names),                     ", ".join(newinternal_names),
455                     self.left_table.tablename,                     self.left_table.tablename,
456                     ", ".join(internal_names),                     ", ".join(internal_references),
457                     self.left_table.tablename,                     self.left_table.tablename,
458                     join_operator,                     join_operator,
459                     self.right_table.tablename,                     self.right_table.tablename,
460                       self.left_table.tablename,
461                     internal_left_col,                     internal_left_col,
462                       self.right_table.tablename,
463                     internal_right_col))                     internal_right_col))
464          self.db.execute(stmt)          self.db.execute(stmt)
465    

Legend:
Removed from v.1328  
changed lines
  Added in v.1333

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26