Derek Simkowiak wrote:
-> Should I change those three instances of self.lock to be -> self._lock?
More info: doing this fixed my problem. I am shocked and amazed that a product that *must* be one of the most popular around could have a typo in it (assuming, of course, that this is the Correct Fix for this particular problem).
What's worse, this bug was caused by another (imho) "bug", see below for details.
[...]
SELECT * FROM applicants;
This results in an exception, caused by (imho) another "bug" in the database adapter. It limits the number of results to 1000 on SELECT for whatever reason -- but when it adds the LIMIT code, it does not remove the ";" at the end. Here is the relevant code:
if qtype == "SELECT" and max_rows: qs = "%s LIMIT %d" % (qs,max_rows) r=0 db.query(qs)
Well, for what its worth, Andy made those changes to the DA based on some stability feedback I'd given him, and because he probably didn't get a whole lot of people testing the beta, it slipped through. I know I make errors like this from time to time (the primary code path works but a secondary code path never is exercised). Also, I dont think any of the Zope DAs do the right thing when you suffix the SQL command terminator to a command. Granted, I think they should tolerate it, but they don't have to. This has to do with the fact that most of the program APIs to databases do NOT use a semicolon in their API calls, only the bare statement is used. I'd dearly love to see a re-implementation of Zope's RDBMS core interfaces, but this is not a trivial undertaking, and without a customer-funded requirement, Zope Corporation is not likely to perform that task. I find there to be some troubling semantic issues with only exposing the API interface "query" from a connection object. Still, not so troubling that I feel motivated to turn it in to an after-hours rewrite. -- Matt Kromer Zope Corporation http://www.zope.com/