dabo Commit
Revision 6307
Date: 2011-01-05 07:42:30 -0800 (Wed, 05 Jan 2011)
Author: Nate
Trac: http://trac.dabodev.com/changeset/6307

Changed:
U   trunk/dabo/db/dCursorMixin.py

Log:
This commit should fix DBQueryException SQL syntax error near parameter 
placeholder '%s' reported by me and some other users.  The issue is was when 
requery would be called for the first time on a parent with CHILD bizobjs, the 
child bizobj's requery would get called.  The requery would get the data 
structure first before re-querying.  When we construct the sql for getting the 
structure, we temporarily unset the where and limit clauses, but we never take 
care of the child filter in the where clause.  This caused an error because we 
don't pass in any parameters when getting the structure.

To fix the problem, I added in an optional parameter for ignoring the child 
filter.

Diff:
Modified: trunk/dabo/db/dCursorMixin.py
===================================================================
--- trunk/dabo/db/dCursorMixin.py       2011-01-03 01:38:04 UTC (rev 6306)
+++ trunk/dabo/db/dCursorMixin.py       2011-01-05 15:42:30 UTC (rev 6307)
@@ -281,13 +281,13 @@
                                                if ok:
                                                        # change self.Encoding 
and log the message
                                                        ## pkm 2010-10-21: I 
think that mismatched encoding should be treated as exceptional,
-                                                       ##                 and 
shouldn't trigger changing the cursor Encoding which should 
+                                                       ##                 and 
shouldn't trigger changing the cursor Encoding which should
                                                        ##                 have 
been set based on what the database reported (currently it is
                                                        ##                 not 
set that way, but I hope it will be in the future). But it is
                                                        ##                 nice 
to at least try some different common encodings if the default
                                                        ##                 one 
doesn't work, especially since Dabo currently allows non-utf8-encoded
                                                        ##                 
bytes to get saved to the database.
-                                                       #self.Encoding = enc 
+                                                       #self.Encoding = enc
                                                        dabo.log.error(_("Field 
%(fname)s: Incorrect unicode encoding set; using '%(enc)s' instead")
                                                                % 
{'fname':field_name, 'enc':enc} )
                                                        return ret
@@ -1044,7 +1044,7 @@
                                        if old_key in self._newRecords:
                                                self._newRecords[keyFieldValue] 
= self._newRecords[old_key]
                                                del self._newRecords[old_key]
-                                               # Should't ever happen, but 
just in case of desynchronization. 
+                                               # Should't ever happen, but 
just in case of desynchronization.
                                                if kons.CURSOR_TMPKEY_FIELD in 
rec:
                                                        
rec[kons.CURSOR_TMPKEY_FIELD] = keyFieldValue
                                elif self._compoundKey:
@@ -2390,7 +2390,7 @@
                return ret
 
 
-       def getSQL(self):
+       def getSQL(self, ignoreChildFilter=False):
                """ Get the complete SQL statement from all the parts."""
                fieldClause = self.sqlManager._fieldClause
                fromClause = self.sqlManager._fromClause
@@ -2407,7 +2407,7 @@
                if not fromClause:
                        fromClause = self.Table
 
-               if childFilterClause:
+               if childFilterClause and not ignoreChildFilter:
                        # Prepend it to the where clause
                        if whereClause:
                                childFilterClause += "\nand "
@@ -2443,7 +2443,7 @@
                self.sqlManager.setWhereClause("")
                holdLimit = self.sqlManager._limitClause
                self.sqlManager.setLimitClause(1)
-               ret = self.sqlManager.getSQL()
+               ret = self.sqlManager.getSQL(ignoreChildFilter=True)
                self.sqlManager.setWhereClause(holdWhere)
                self.sqlManager.setLimitClause(holdLimit)
                return ret



_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/dabo-dev
Searchable Archives: http://leafe.com/archives/search/dabo-dev
This message: 
http://leafe.com/archives/byMID/[email protected]

Reply via email to