/[papo]/gnue/common/src/dbdrivers/_dbsig/DBdriver.py
ViewVC logotype

Diff of /gnue/common/src/dbdrivers/_dbsig/DBdriver.py

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

revision 1.18.2.3 by apronotti, Wed Dec 11 20:41:20 2002 UTC revision 1.18.2.4 by apronotti, Fri May 9 22:23:09 2003 UTC
# Line 35  from gnue.common import GDataObjects, GD Line 35  from gnue.common import GDataObjects, GD
35  import string  import string
36  from gnue.common import GDebug  from gnue.common import GDebug
37  import types  import types
38    import sys
39    
40  class DBSIG_RecordSet(GDataObjects.RecordSet):  class DBSIG_RecordSet(GDataObjects.RecordSet):
41    
# Line 43  class DBSIG_RecordSet(GDataObjects.Recor Line 44  class DBSIG_RecordSet(GDataObjects.Recor
44        auxTable = string.split(string.replace(self._parent._dataObject.table,' ',''),',')        auxTable = string.split(string.replace(self._parent._dataObject.table,' ',''),',')
45      else:      else:
46        auxTable = string.split(string.replace(table,' ',''),',')        auxTable = string.split(string.replace(table,' ',''),',')
   
47      for table in auxTable:      for table in auxTable:
48        historyFields = ("_start_t","_end_t", table)        if table.endswith('_data'):
       statement = "SELECT %s, %s FROM %s WHERE (1 = 0)" % historyFields  
       try:  
         cursor = self._parent._dataObject._dataConnection.cursor()  
         cursor.execute(statement)  
         cursor.close()  
49          return 1          return 1
       except self._parent._dataObject._DatabaseError, err:  
         pass  
50      return 0      return 0
51            
52    def _postChanges(self):    def _postChanges(self,autoCommit=1):
53      if not self.isPending(): return      if not self.isPending(): return
54      auxTable = string.split(string.replace(self._parent._dataObject.table,' ',''),',')      auxTable = string.split(string.replace(self._parent._dataObject.table,' ',''),',')
55    
56      if self._haveHistory():      if self._haveHistory():
57        return self._postChangesWHist()        return self._postChangesWHist(autoCommit)
58    
59      statements = []      statements = []
60      if self._deleteFlag:      if self._deleteFlag:
# Line 87  class DBSIG_RecordSet(GDataObjects.Recor Line 80  class DBSIG_RecordSet(GDataObjects.Recor
80        else:        else:
81          statements.append(self._buildUpdateStatement(auxTable[0]))                    statements.append(self._buildUpdateStatement(auxTable[0]))          
82    
83      for statement in statements:      try:
84        GDebug.printMesg(5, "_postChanges: statement=%s" % statement)        for statement in statements:
85                  GDebug.printMesg(5, "_postChanges: statement=%s" % statement)
       try:  
86          #print "statement: %s" % statement          #print "statement: %s" % statement
         self._parent._update_cursor.execute("BEGIN")  
87          self._parent._update_cursor.execute(statement)          self._parent._update_cursor.execute(statement)
         self._parent._update_cursor.execute("COMMIT")  
88          # Set _initialData to be the just-now posted values          # Set _initialData to be the just-now posted values
89          if not self._deleteFlag:          if not self._deleteFlag:
90            self._initialData = {}            self._initialData = {}
91            self._initialData.update(self._fields)            self._initialData.update(self._fields)
92                            
93        except self._parent._dataObject._DatabaseError, err:      except self._parent._dataObject._DatabaseError, err:
94          GDebug.printMesg(1, "DBSIG_RecordSet._postChanges ERROR %s " % err)        GDebug.printMesg(1, "DBSIG_RecordSet._postChanges ERROR = %s " % err)
95          raise GDataObjects.ConnectionError, err        print >> sys.stderr, "DBSIG_RecordSet._postChanges ERROR = %s " % err
96                    if autoCommit:
97            self._parent._dataObject.rollback()
98          raise GDataObjects.ConnectionError(str(err))
99    
100        if autoCommit:
101          self._parent._dataObject.commit()
102        
103      self._updateFlag = 0      self._updateFlag = 0
104      self._insertFlag = 0      self._insertFlag = 0
105      self._deleteFlag = 0      self._deleteFlag = 0
106    
107        
108      return 1      return 1
109    
110    def _postChangesWHist(self):    def _postChangesWHist(self,autoCommit):
111      auxTable = string.split(string.replace(self._parent._dataObject.table,' ',''),',')      auxTable = string.split(string.replace(self._parent._dataObject.table,' ',''),',')
112      auxHTable = None      auxHTable = None
113      if hasattr(self._parent._dataObject,"historytable"):      if hasattr(self._parent._dataObject,"historytable"):
114        auxHTable = string.split(string.replace(self._parent._dataObject.historytable,' ',''),',')        auxHTable = string.split(string.replace(self._parent._dataObject.historytable,' ',''),',')
115      statements = []      statements = []
116      result = 1      try:
117      if self._deleteFlag:        if self._deleteFlag:
118        auxTable.reverse()          auxTable.reverse()
119        for table in auxTable:          for table in auxTable:
120          result = self._doDeleteStatementWHist(table)            self._doDeleteStatementWHist(table)
121          if not result: break        elif self._insertFlag:
122      elif self._insertFlag:          for table in auxTable:
123        for table in auxTable:            self._doInsertStatementWHist(table)
124          result = self._doInsertStatementWHist(table)        elif self._updateFlag:
125          if not result: break          if len(auxTable) > 1:
126      elif self._updateFlag:            for iterTable in auxHTable:
127        if len(auxTable) > 1:              self._doDeleteStatementWHist(iterTable)
128          for iterTable in auxHTable:              self._doInsertStatementWHist(iterTable)
129            result = self._doDeleteStatementWHist(iterTable)          else:
130            if not result: break            self._doDeleteStatementWHist(auxTable[0])
131            result = self._doInsertStatementWHist(iterTable)            self._doInsertStatementWHist(auxTable[0])
132            if not result: break      except self._parent._dataObject._DatabaseError, err:
133        else:        GDebug.printMesg(1, "DBSIG_RecordSet._postChangesWHist ERROR = %s " % err)
134          result = self._doDeleteStatementWHist(auxTable[0])        print >> sys.stderr, "DBSIG_RecordSet._postChangesWHist ERROR = %s " % err
135          if result: result = self._doInsertStatementWHist(auxTable[0])        if autoCommit:
136            self._parent._dataObject.rollback()
137          raise GDataObjects.ConnectionError(str(err))
138              
139        if autoCommit:
140          self._parent._dataObject.commit()
141    
           
142      # Set _initialData to be the just-now posted values      # Set _initialData to be the just-now posted values
143      if not self._deleteFlag:      if not self._deleteFlag:
144        self._initialData = {}        self._initialData = {}
# Line 147  class DBSIG_RecordSet(GDataObjects.Recor Line 148  class DBSIG_RecordSet(GDataObjects.Recor
148      self._insertFlag = 0      self._insertFlag = 0
149      self._deleteFlag = 0      self._deleteFlag = 0
150    
151      return result      return 1
152    
153    
154    # If a vendor can do any of these more efficiently (i.e., use a known    # If a vendor can do any of these more efficiently (i.e., use a known
# Line 197  class DBSIG_RecordSet(GDataObjects.Recor Line 198  class DBSIG_RecordSet(GDataObjects.Recor
198                                                                     "%s._end_t" % (table), \                                                                     "%s._end_t" % (table), \
199                                                                     self._parent._dataObject, \                                                                     self._parent._dataObject, \
200                                                                     self, \                                                                     self, \
201                                                                     "_end_t IS NULL")                                                                     "_end_t IS NULL",0)
202    
203    
204    def _buildInsertStatement(self, table):    def _buildInsertStatement(self, table):
# Line 259  class DBSIG_RecordSet(GDataObjects.Recor Line 260  class DBSIG_RecordSet(GDataObjects.Recor
260                   string.join(statementElement[2],',') )                   string.join(statementElement[2],',') )
261    
262      try:      try:
       self._parent._update_cursor.execute("BEGIN")  
263        self._parent._update_cursor.execute(statement)        self._parent._update_cursor.execute(statement)
264        self._parent._update_cursor.execute("COMMIT")        
   
265      except self._parent._dataObject._DatabaseError, err:      except self._parent._dataObject._DatabaseError, err:
266        GDebug.printMesg(1, "_doInsertStatementWHist: ERROR = %s" % err)              GDebug.printMesg(1, "_doInsertStatementWHist: ERROR = %s" % err)
267        raise GDataObjects.ConnectionError, err        print >> sys.stderr, "DBSIG_RecordSet._doInsertStatementWHist: ERROR = %s " % err
268          raise GDataObjects.ConnectionError(str(err))
269    
270      return 1      return 1
271    
# Line 410  class DBSIG_ResultSet(GDataObjects.Resul Line 410  class DBSIG_ResultSet(GDataObjects.Resul
410        try:        try:
411          rsets = self._cursor.fetchmany()          rsets = self._cursor.fetchmany()
412        except self._dataObject._DatabaseError, err:        except self._dataObject._DatabaseError, err:
413          raise GDataObjects.ConnectionError, err          raise GDataObjects.ConnectionError(str(err))
414        if rsets and len(rsets):        if rsets and len(rsets):
415          for rs in(rsets):          for rs in(rsets):
416            if rs:            if rs:
# Line 556  class DBSIG_DataObject(GDataObjects.Data Line 556  class DBSIG_DataObject(GDataObjects.Data
556        cursor.execute(self._buildQuery(conditions))        cursor.execute(self._buildQuery(conditions))
557    
558      except self._DatabaseError, err:      except self._DatabaseError, err:
559        raise GDataObjects.ConnectionError, err        raise GDataObjects.ConnectionError(str(err))
560    
561      if not prefixedFields:      if not prefixedFields:
562        rs = self._resultSetClass(self, cursor=cursor, masterRecordSet=masterRecordSet)        rs = self._resultSetClass(self, cursor=cursor, masterRecordSet=masterRecordSet)
# Line 583  class DBSIG_DataObject(GDataObjects.Data Line 583  class DBSIG_DataObject(GDataObjects.Data
583      try:      try:
584        self._dataConnection.commit()        self._dataConnection.commit()
585      except self._DatabaseError, value:      except self._DatabaseError, value:
586        raise GDataObjects.ConnectionError, value        raise GDataObjects.ConnectionError(str(err))
587        
588      self._beginTransaction()      self._beginTransaction()
589    
590    def rollback(self):    def rollback(self):

Legend:
Removed from v.1.18.2.3  
changed lines
  Added in v.1.18.2.4

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26