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 |
|
|
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: |
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 = {} |
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 |
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): |
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 |
|
|
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: |
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) |
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): |