145 lines
5 KiB
Text
145 lines
5 KiB
Text
$NetBSD: patch-aa,v 1.5 2000/03/16 12:14:07 wiz Exp $
|
|
|
|
Patch from MySQLdb distribution to let the ZMySQL DA work with it
|
|
instead of with MySQLmodule, with patch paths modified for pkg use.
|
|
|
|
---
|
|
|
|
This patch should convert ZMySQLDA from using MySQLmodule-1.4 to _mysql.
|
|
Why _mysql and not MySQLdb? Well, look at the patch. :) It's basically puny.
|
|
ZMySQLDA ends up abstracting away the Python DB API interface anyway, so why
|
|
wrap another wrapper? Plus, by default MySQLdb attempts to do type
|
|
conversions, which Zope doesn't want at this point.
|
|
|
|
I made some changes, partially to help Zopistas, to both _mysql and MySQLdb.
|
|
The main one is removing type_conv as part of _mysql. It now needs to be
|
|
passed to _mysql.connect() as the conv keyword argument; if it is not present,
|
|
it uses an empty dictionary (return everything as strings). MySQLdb now owns
|
|
type_conv, and passes a copy if you don't supply your own converter. Thanks
|
|
to Thilo Mezger for pointing out that Zope DOES expect numbers to be returned
|
|
as numbers, so now a minimal type converter dictionary is passed.
|
|
|
|
To apply the patch, you probably want to do something like this:
|
|
|
|
cd ZOPEHOME # whatever that is
|
|
tar xvfz ZMySQLDA.tar.gz # the original, unadulterated version
|
|
patch -p1 <ZMySQLDA.patch # adulterate it
|
|
|
|
Then, follow the README instructions for building MySQLdb and install
|
|
it where Python can find it. Finally, you will need to restart Zope.
|
|
|
|
Andy Dustman <adustman@comstar.net>
|
|
1999-10-11
|
|
|
|
diff -ur python/Products/ZMySQLDA/DA.py python/Products/ZMySQLDA/DA.py
|
|
--- python/Products/ZMySQLDA/DA.py Mon Jan 25 10:42:45 1999
|
|
+++ python/Products/ZMySQLDA/DA.py Wed Sep 15 20:16:32 1999
|
|
@@ -133,18 +133,6 @@
|
|
|
|
def factory(self): return DB
|
|
|
|
- def sql_quote__(self, v, escapes={
|
|
- '\\': '\\\\',
|
|
- '\"': '\\\"',
|
|
- '\'': '\\\'',
|
|
- '\0': '\\0',
|
|
- '\n': '\\n',
|
|
- '\t': '\\t',
|
|
- '\r': '\\r',
|
|
- '\b': '\\n',
|
|
- }):
|
|
- find=string.find
|
|
- for c in "\\\"\'\0\n\t\r\b":
|
|
- if find(v,c) > -1:
|
|
- v=string.join(string.split(v,c),escapes[c])
|
|
- return "'%s'" % v
|
|
+ def sql_quote__(self, v, escapes={}):
|
|
+ from _mysql import escape_string
|
|
+ return "'%s'" % escape_string(v)
|
|
diff -ur python/Products/ZMySQLDA/db.py python/Products/ZMySQLDA/db.py
|
|
--- python/Products/ZMySQLDA/db.py Mon Jan 25 10:42:45 1999
|
|
+++ python/Products/ZMySQLDA/db.py Mon Oct 11 21:29:07 1999
|
|
@@ -105,5 +105,6 @@
|
|
|
|
-import MySQL, regex, sys
|
|
+import _mysql, regex, sys
|
|
+from _mysql import FIELD_TYPE
|
|
from string import strip, split, find, join
|
|
from time import gmtime, strftime
|
|
|
|
@@ -118,13 +119,26 @@
|
|
class DB:
|
|
|
|
defs={
|
|
- "short": "i", "long": "i", "char": "s", "double": "n", "decimal": "n",
|
|
- "float": "n", "tiny blob": "t", "medium blob": "t", "long blob": "t",
|
|
- "blob": "t", "date": "d", "time": "s", "datetime": "d",
|
|
- "timestamp": "d", "varchar": "t", "string": "t",
|
|
+ FIELD_TYPE.CHAR: "i", FIELD_TYPE.DATE: "d",
|
|
+ FIELD_TYPE.DATETIME: "d", FIELD_TYPE.DECIMAL: "n",
|
|
+ FIELD_TYPE.DOUBLE: "n", FIELD_TYPE.FLOAT: "n", FIELD_TYPE.INT24: "i",
|
|
+ FIELD_TYPE.LONG: "i", FIELD_TYPE.LONGLONG: "l",
|
|
+ FIELD_TYPE.SHORT: "i", FIELD_TYPE.TIMESTAMP: "d",
|
|
+ FIELD_TYPE.TINY: "i", FIELD_TYPE.YEAR: "i",
|
|
}
|
|
|
|
- Database_Error=MySQL.error
|
|
+ conv={
|
|
+ FIELD_TYPE.TINY: int,
|
|
+ FIELD_TYPE.SHORT: int,
|
|
+ FIELD_TYPE.LONG: int,
|
|
+ FIELD_TYPE.FLOAT: float,
|
|
+ FIELD_TYPE.DOUBLE: float,
|
|
+ FIELD_TYPE.LONGLONG: long,
|
|
+ FIELD_TYPE.INT24: int,
|
|
+ FIELD_TYPE.YEAR: int
|
|
+ }
|
|
+
|
|
+ Database_Error=_mysql.Error
|
|
|
|
def __init__(self,connection):
|
|
self.connection=connection
|
|
@@ -138,8 +152,7 @@
|
|
if len(dbhost) == 1: db, host = dbhost[0], 'localhost'
|
|
else: [db, host] = dbhost
|
|
|
|
- c=MySQL.connect(host,user,pw)
|
|
- c.selectdb(db)
|
|
+ c=_mysql.connect(host=host,user=user,passwd=pw,db=db,conv=self.conv)
|
|
self.db=c
|
|
return
|
|
|
|
@@ -168,10 +181,11 @@
|
|
result=()
|
|
desc=None
|
|
for qs in queries:
|
|
- c=db.query(qs)
|
|
+ db.query(qs)
|
|
+ c=db.store_result()
|
|
try:
|
|
- desc=c.fields()
|
|
- r=c.fetchrows()
|
|
+ desc=c.describe()
|
|
+ r=c.fetch_all_rows()
|
|
except: r=None
|
|
if not r: continue
|
|
if result:
|
|
@@ -182,15 +196,15 @@
|
|
except self.Database_Error, mess:
|
|
raise sys.exc_type, sys.exc_value, sys.exc_traceback
|
|
|
|
- if desc is None: return (), ()
|
|
+ if not desc: return (), ()
|
|
|
|
items=[]
|
|
func=items.append
|
|
defs=self.defs
|
|
for d in desc:
|
|
item={'name': d[0],
|
|
- 'type': defs[d[2]],
|
|
- 'width': d[3],
|
|
+ 'type': defs.get(d[1],"t"),
|
|
+ 'width': d[2],
|
|
}
|
|
func(item)
|
|
return items, result
|