Sorry about the whitespace noise in the commit... On Wed, Jan 5, 2011 at 10:42, Nate Lowrie <[email protected]> wrote: > 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 > > > [excessive quoting removed by server]
_______________________________________________ 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]
