r467 - / zope-mysqlda zope-mysqlda/branches
zope-mysqlda/branches/upstream
zope-mysqlda/branches/upstream/current
zope-mysqlda/branches/upstream/current/help
zope-mysqlda/branches/upstream/current/icons
Jonas Meurer
mejo at alioth.debian.org
Fri Nov 17 15:04:12 CET 2006
Author: mejo
Date: 2006-11-17 15:04:12 +0100 (Fri, 17 Nov 2006)
New Revision: 467
Added:
zope-mysqlda/
zope-mysqlda/branches/
zope-mysqlda/branches/upstream/
zope-mysqlda/branches/upstream/current/
zope-mysqlda/branches/upstream/current/CHANGES.txt
zope-mysqlda/branches/upstream/current/DA.py
zope-mysqlda/branches/upstream/current/DABase.py
zope-mysqlda/branches/upstream/current/DEPENDENCIES.txt
zope-mysqlda/branches/upstream/current/README.txt
zope-mysqlda/branches/upstream/current/VERSION.txt
zope-mysqlda/branches/upstream/current/__init__.py
zope-mysqlda/branches/upstream/current/browse.dtml
zope-mysqlda/branches/upstream/current/connectionAdd.dtml
zope-mysqlda/branches/upstream/current/connectionEdit.dtml
zope-mysqlda/branches/upstream/current/db.py
zope-mysqlda/branches/upstream/current/help/
zope-mysqlda/branches/upstream/current/help/DA.py
zope-mysqlda/branches/upstream/current/help/DABase.py
zope-mysqlda/branches/upstream/current/help/db.py
zope-mysqlda/branches/upstream/current/icons/
zope-mysqlda/branches/upstream/current/icons/bin.gif
zope-mysqlda/branches/upstream/current/icons/date.gif
zope-mysqlda/branches/upstream/current/icons/datetime.gif
zope-mysqlda/branches/upstream/current/icons/field.gif
zope-mysqlda/branches/upstream/current/icons/float.gif
zope-mysqlda/branches/upstream/current/icons/int.gif
zope-mysqlda/branches/upstream/current/icons/stable.gif
zope-mysqlda/branches/upstream/current/icons/table.gif
zope-mysqlda/branches/upstream/current/icons/text.gif
zope-mysqlda/branches/upstream/current/icons/time.gif
zope-mysqlda/branches/upstream/current/icons/view.gif
zope-mysqlda/branches/upstream/current/icons/what.gif
zope-mysqlda/branches/upstream/current/table_info.dtml
zope-mysqlda/tags/
Log:
[svn-inject] Installing original source of zope-mysqlda
Added: zope-mysqlda/branches/upstream/current/CHANGES.txt
===================================================================
--- zope-mysqlda/branches/upstream/current/CHANGES.txt 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/CHANGES.txt 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,66 @@
+Z MySQL DA Releases
+
+ 2.0.9
+
+ Allow the connection string to work without a specified database.
+
+ Wrap queries with a lock to prevent multiple threads from using
+ the connection simultaneously (this may or may not be happening).
+ If transactional, then there is an additional transaction lock,
+ acquired at the beginning of the transaction and released when
+ either finished or aborted.
+
+ A named lock can be specified by inserting *LOCKNAME at the start
+ of the connection string. This is probably best used only if you
+ must use non-transactional tables.
+
+ Some stuff will be logged as an error when bad things happen
+ during the transaction manager hooks.
+
+ 2.0.8
+
+ More information about columns is available from the table
+ browser. This is primarily to support SQL Blender.
+
+ DECIMAL and NUMERIC columns now returned as floating-point numbers
+ (was string). This has also been fixed in MySQLdb-0.9.1, but the
+ fix is included here just in case you don't upgrade. Upgrading is
+ a good idea anyway, because some memory-related bugs are fixed,
+ particularly if using Zope 2.4 and Python 2.1.
+
+ 2.0.7
+
+ Transaction support tweaked some more. A plus (+) or minus (-)
+ at the beginning of the connection string will force transactions
+ on or off respectively. By default, transactions are enabled if
+ the server supports them. Beware: If you are using non-TST tables
+ on a server that supports transactions, you should probably force
+ transactions off.
+
+ 2.0.6
+
+ This version finally should have all the transaction support
+ working correctly. If your MySQL server supports transactions,
+ i.e. it has at least one transaction-safe table (TST) handler,
+ transactions are enabled automatically. If transactions are
+ enabled, rollbacks (aborts) fail if any non-TST tables were
+ modified.
+
+ 2.0.5
+
+ Transactions don't really work right in this and prior versions.
+
+ 2.0.4
+
+ INT columns, whether UNSIGNED or not, are returned as Python
+ long integers to avoid overflows. Python-1.5.2 adds an 'L' to
+ the end of long integers when printing. Later versions do not.
+ As a workaround, use affected columns with a format string,
+ i.e. '<dtml-var x fmt="%d">'.
+
+ 2.0.0
+
+ This is the first version of the database adapter using MySQLdb
+ for Zope. This database adapter is based on the Z DCOracle DA
+ version 2.2.0.
+
Added: zope-mysqlda/branches/upstream/current/DA.py
===================================================================
--- zope-mysqlda/branches/upstream/current/DA.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/DA.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,161 @@
+##############################################################################
+#
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+#
+# Copyright (c) Digital Creations. All rights reserved.
+#
+# This license has been certified as Open Source(tm).
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions in source code must retain the above copyright
+# notice, this list of conditions, and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions, and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. Digital Creations requests that attribution be given to Zope
+# in any manner possible. Zope includes a "Powered by Zope"
+# button that is installed by default. While it is not a license
+# violation to remove this button, it is requested that the
+# attribution remain. A significant investment has been put
+# into Zope, and this effort will continue if the Zope community
+# continues to grow. This is one way to assure that growth.
+#
+# 4. All advertising materials and documentation mentioning
+# features derived from or use of this software must display
+# the following acknowledgement:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# In the event that the product being advertised includes an
+# intact Zope distribution (with copyright and license included)
+# then this clause is waived.
+#
+# 5. Names associated with Zope or Digital Creations must not be used to
+# endorse or promote products derived from this software without
+# prior written permission from Digital Creations.
+#
+# 6. Modified redistributions of any form whatsoever must retain
+# the following acknowledgment:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# Intact (re-)distributions of any official Zope release do not
+# require an external acknowledgement.
+#
+# 7. Modifications are encouraged but must be packaged separately as
+# patches to official Zope releases. Distributions that do not
+# clearly separate the patches from the original work must be clearly
+# labeled as unofficial distributions. Modifications which do not
+# carry the name Zope may be packaged in any form, as long as they
+# conform to all of the clauses above.
+#
+#
+# Disclaimer
+#
+# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations. Specific
+# attributions are listed in the accompanying credits file.
+#
+##############################################################################
+database_type='MySQL'
+__doc__='''%s Database Connection
+
+$Id: DA.py,v 1.4 2001/08/09 20:16:36 adustman Exp $''' % database_type
+__version__='$Revision: 1.4 $'[11:-2]
+
+import os
+from db import DB
+import Shared.DC.ZRDB.Connection, sys, DABase
+from App.Dialogs import MessageDialog
+from Globals import HTMLFile
+from ImageFile import ImageFile
+from ExtensionClass import Base
+from DateTime import DateTime
+
+manage_addZMySQLConnectionForm=HTMLFile('connectionAdd',globals())
+
+def manage_addZMySQLConnection(self, id, title,
+ connection_string,
+ check=None, REQUEST=None):
+ """Add a DB connection to a folder"""
+ self._setObject(id, Connection(id, title, connection_string, check))
+ if REQUEST is not None: return self.manage_main(self,REQUEST)
+
+class Connection(DABase.Connection):
+ " "
+ database_type=database_type
+ id='%s_database_connection' % database_type
+ meta_type=title='Z %s Database Connection' % database_type
+ icon='misc_/Z%sDA/conn' % database_type
+
+ manage_properties=HTMLFile('connectionEdit', globals())
+
+ def factory(self): return DB
+
+ def connect(self,s):
+ try: self._v_database_connection.close()
+ except: pass
+ self._v_connected=''
+ DB=self.factory()
+ ## No try. DO.
+ self._v_database_connection=DB(s)
+ self._v_connected=DateTime()
+ return self
+
+ def sql_quote__(self, v, escapes={}):
+ return self._v_database_connection.string_literal(v)
+
+
+classes=('DA.Connection',)
+
+meta_types=(
+ {'name':'Z %s Database Connection' % database_type,
+ 'action':'manage_addZ%sConnectionForm' % database_type,
+ },
+ )
+
+folder_methods={
+ 'manage_addZMySQLConnection':
+ manage_addZMySQLConnection,
+ 'manage_addZMySQLConnectionForm':
+ manage_addZMySQLConnectionForm,
+ }
+
+__ac_permissions__=(
+ ('Add Z MySQL Database Connections',
+ ('manage_addZMySQLConnectionForm',
+ 'manage_addZMySQLConnection')),
+ )
+
+misc_={'conn': ImageFile(
+ os.path.join('Shared','DC','ZRDB','www','DBAdapterFolder_icon.gif'))}
+
+for icon in ('table', 'view', 'stable', 'what',
+ 'field', 'text','bin','int','float',
+ 'date','time','datetime'):
+ misc_[icon]=ImageFile(os.path.join('icons','%s.gif') % icon, globals())
Added: zope-mysqlda/branches/upstream/current/DABase.py
===================================================================
--- zope-mysqlda/branches/upstream/current/DABase.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/DABase.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,250 @@
+##############################################################################
+#
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+#
+# Copyright (c) Digital Creations. All rights reserved.
+#
+# This license has been certified as Open Source(tm).
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions in source code must retain the above copyright
+# notice, this list of conditions, and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions, and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. Digital Creations requests that attribution be given to Zope
+# in any manner possible. Zope includes a "Powered by Zope"
+# button that is installed by default. While it is not a license
+# violation to remove this button, it is requested that the
+# attribution remain. A significant investment has been put
+# into Zope, and this effort will continue if the Zope community
+# continues to grow. This is one way to assure that growth.
+#
+# 4. All advertising materials and documentation mentioning
+# features derived from or use of this software must display
+# the following acknowledgement:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# In the event that the product being advertised includes an
+# intact Zope distribution (with copyright and license included)
+# then this clause is waived.
+#
+# 5. Names associated with Zope or Digital Creations must not be used to
+# endorse or promote products derived from this software without
+# prior written permission from Digital Creations.
+#
+# 6. Modified redistributions of any form whatsoever must retain
+# the following acknowledgment:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# Intact (re-)distributions of any official Zope release do not
+# require an external acknowledgement.
+#
+# 7. Modifications are encouraged but must be packaged separately as
+# patches to official Zope releases. Distributions that do not
+# clearly separate the patches from the original work must be clearly
+# labeled as unofficial distributions. Modifications which do not
+# carry the name Zope may be packaged in any form, as long as they
+# conform to all of the clauses above.
+#
+#
+# Disclaimer
+#
+# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations. Specific
+# attributions are listed in the accompanying credits file.
+#
+##############################################################################
+__doc__='''Database Connection
+
+$Id: DABase.py,v 1.5 2001/08/17 02:17:38 adustman Exp $'''
+__version__='$Revision: 1.5 $'[11:-2]
+
+import Shared.DC.ZRDB.Connection, sys
+from Globals import HTMLFile
+from ImageFile import ImageFile
+from ExtensionClass import Base
+import Acquisition
+
+class Connection(Shared.DC.ZRDB.Connection.Connection):
+ _isAnSQLConnection=1
+
+ manage_options=Shared.DC.ZRDB.Connection.Connection.manage_options+(
+ {'label': 'Browse', 'action':'manage_browse'},
+ # {'label': 'Design', 'action':'manage_tables'},
+ )
+
+ manage_tables=HTMLFile('tables',globals())
+ manage_browse=HTMLFile('browse',globals())
+
+ info=None
+
+ def tpValues(self):
+ #if hasattr(self, '_v_tpValues'): return self._v_tpValues
+ r=[]
+ # self._v_tables=tables=TableBrowserCollection()
+ #tables=tables.__dict__
+ c=self._v_database_connection
+ try:
+ for d in c.tables(rdb=0):
+ try:
+ name=d['TABLE_NAME']
+ b=TableBrowser()
+ b.__name__=name
+ b._d=d
+ b._c=c
+ #b._columns=c.columns(name)
+ b.icon=table_icons.get(d['TABLE_TYPE'],'text')
+ r.append(b)
+ # tables[name]=b
+ except:
+ # print d['TABLE_NAME'], sys.exc_type, sys.exc_value
+ pass
+
+ finally: pass #print sys.exc_type, sys.exc_value
+ #self._v_tpValues=r
+ return r
+
+ def __getitem__(self, name):
+ if name=='tableNamed':
+ if not hasattr(self, '_v_tables'): self.tpValues()
+ return self._v_tables.__of__(self)
+ raise KeyError, name
+
+ def manage_wizard(self, tables):
+ " "
+
+ def manage_join(self, tables, select_cols, join_cols, REQUEST=None):
+ """Create an SQL join"""
+
+ def manage_insert(self, table, cols, REQUEST=None):
+ """Create an SQL insert"""
+
+ def manage_update(self, table, keys, cols, REQUEST=None):
+ """Create an SQL update"""
+
+class TableBrowserCollection(Acquisition.Implicit):
+ "Helper class for accessing tables via URLs"
+
+class Browser(Base):
+ def __getattr__(self, name):
+ try: return self._d[name]
+ except KeyError: raise AttributeError, name
+
+class values:
+
+ def len(self): return 1
+
+ def __getitem__(self, i):
+ try: return self._d[i]
+ except AttributeError: pass
+ self._d=self._f()
+ return self._d[i]
+
+class TableBrowser(Browser, Acquisition.Implicit):
+ icon='what'
+ Description=check=''
+ info=HTMLFile('table_info',globals())
+ menu=HTMLFile('table_menu',globals())
+
+ def tpValues(self):
+ v=values()
+ v._f=self.tpValues_
+ return v
+
+ def tpValues_(self):
+ r=[]
+ tname=self.__name__
+ for d in self._c.columns(tname):
+ b=ColumnBrowser()
+ b._d=d
+ b.icon=d['Icon']
+ b.TABLE_NAME=tname
+ r.append(b)
+ return r
+
+ def tpId(self): return self._d['TABLE_NAME']
+ def tpURL(self): return "Table/%s" % self._d['TABLE_NAME']
+ def Name(self): return self._d['TABLE_NAME']
+ def Type(self): return self._d['TABLE_TYPE']
+
+ manage_designInput=HTMLFile('designInput',globals())
+ def manage_buildInput(self, id, source, default, REQUEST=None):
+ "Create a database method for an input form"
+ args=[]
+ values=[]
+ names=[]
+ columns=self._columns
+ for i in range(len(source)):
+ s=source[i]
+ if s=='Null': continue
+ c=columns[i]
+ d=default[i]
+ t=c['Type']
+ n=c['Name']
+ names.append(n)
+ if s=='Argument':
+ values.append("<!--#sql-value %s type=%s-->'" %
+ (n, vartype(t)))
+ a='%s%s' % (n, boboType(t))
+ if d: a="%s=%s" % (a,d)
+ args.append(a)
+ elif s=='Property':
+ values.append("<!--#sql-value %s type=%s-->'" %
+ (n, vartype(t)))
+ else:
+ if isStringType(t):
+ if find(d,"\'") >= 0: d=join(split(d,"\'"),"''")
+ values.append("'%s'" % d)
+ elif d:
+ values.append(str(d))
+ else:
+ raise ValueError, (
+ 'no default was given for <em>%s</em>' % n)
+
+
+
+
+class ColumnBrowser(Browser):
+ icon='field'
+
+ def check(self):
+ return ('\t<input type=checkbox name="%s.%s">' %
+ (self.TABLE_NAME, self._d['Name']))
+ def tpId(self): return self._d['Name']
+ def tpURL(self): return "Column/%s" % self._d['Name']
+ def Description(self): return " %s" % self._d['Description']
+
+table_icons={
+ 'TABLE': 'table',
+ 'VIEW':'view',
+ 'SYSTEM_TABLE': 'stable',
+ }
+
Property changes on: zope-mysqlda/branches/upstream/current/DABase.py
___________________________________________________________________
Name: svn:executable
+
Added: zope-mysqlda/branches/upstream/current/DEPENDENCIES.txt
===================================================================
--- zope-mysqlda/branches/upstream/current/DEPENDENCIES.txt 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/DEPENDENCIES.txt 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,4 @@
+* MySQL-python-1.0.0 or newer
+
+* Zope-2.7.0 or newer
+
Added: zope-mysqlda/branches/upstream/current/README.txt
===================================================================
--- zope-mysqlda/branches/upstream/current/README.txt 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/README.txt 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,43 @@
+Z MySQL DA
+
+ This is the Z MySQL database adapter product for the
+ Z Object Publishing Environment.
+
+ ** NOTE **
+
+ Note that the Z MySQL database adapter is compatible with MySQL
+ versions 3.22 and later (including MySQL 3.23, 4.0, and 4.1).
+
+ ** IMPORTANT **
+
+ This product is distributed as a NON-BINARY release!
+
+ This product requires compiled Python extensions that are
+ NOT included as a binary with this release. You must build
+ or install the required extensions using the instructions
+ below before the product will work properly!
+
+ Installation
+
+ The Z MySQL database adapter uses the MySQLdb package.
+ This must be installed before you can use the Z MySQL DA.
+ You can find this at::
+
+ http://sourceforge.net/projects/mysql-python
+
+ You need at least version 1.0.0; 1.2.0 is recommended. If you are
+ compiling this yourself, you must use the same python executable
+ as your Zope installation uses, otherwise Zope will not find it.
+
+ Connection Strings
+
+ The connection string used for Z MySQL Database Connection
+ are of the form::
+
+ database[@host[:port]] [user [password [unix_socket]]]
+
+ or typically just::
+
+ database user password
+
+ to use the default server.
Added: zope-mysqlda/branches/upstream/current/VERSION.txt
===================================================================
--- zope-mysqlda/branches/upstream/current/VERSION.txt 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/VERSION.txt 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1 @@
+ZMySQLDA 2.0.9
Added: zope-mysqlda/branches/upstream/current/__init__.py
===================================================================
--- zope-mysqlda/branches/upstream/current/__init__.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/__init__.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,107 @@
+##############################################################################
+#
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+#
+# Copyright (c) Digital Creations. All rights reserved.
+#
+# This license has been certified as Open Source(tm).
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions in source code must retain the above copyright
+# notice, this list of conditions, and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions, and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. Digital Creations requests that attribution be given to Zope
+# in any manner possible. Zope includes a "Powered by Zope"
+# button that is installed by default. While it is not a license
+# violation to remove this button, it is requested that the
+# attribution remain. A significant investment has been put
+# into Zope, and this effort will continue if the Zope community
+# continues to grow. This is one way to assure that growth.
+#
+# 4. All advertising materials and documentation mentioning
+# features derived from or use of this software must display
+# the following acknowledgement:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# In the event that the product being advertised includes an
+# intact Zope distribution (with copyright and license included)
+# then this clause is waived.
+#
+# 5. Names associated with Zope or Digital Creations must not be used to
+# endorse or promote products derived from this software without
+# prior written permission from Digital Creations.
+#
+# 6. Modified redistributions of any form whatsoever must retain
+# the following acknowledgment:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# Intact (re-)distributions of any official Zope release do not
+# require an external acknowledgement.
+#
+# 7. Modifications are encouraged but must be packaged separately as
+# patches to official Zope releases. Distributions that do not
+# clearly separate the patches from the original work must be clearly
+# labeled as unofficial distributions. Modifications which do not
+# carry the name Zope may be packaged in any form, as long as they
+# conform to all of the clauses above.
+#
+#
+# Disclaimer
+#
+# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations. Specific
+# attributions are listed in the accompanying credits file.
+#
+##############################################################################
+__doc__='''Generic Database Adapter Package Registration
+
+$Id: __init__.py,v 1.4 2001/08/17 02:17:38 adustman Exp $'''
+__version__='$Revision: 1.4 $'[11:-2]
+
+import sys, string
+import DA
+
+methods=DA.folder_methods
+misc_=DA.misc_
+
+def initialize(context):
+
+ context.registerClass(
+ DA.Connection,
+ permission='Add Z MySQL Database Connections',
+ constructors=(DA.manage_addZMySQLConnectionForm,
+ DA.manage_addZMySQLConnection),
+ )
+
+ context.registerHelp()
+ context.registerHelpTitle('ZMySQLDA')
+
Added: zope-mysqlda/branches/upstream/current/browse.dtml
===================================================================
--- zope-mysqlda/branches/upstream/current/browse.dtml 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/browse.dtml 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,12 @@
+<html>
+ <head><title><!--#var title_or_id--> tables</title></head>
+ <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+ <!--#var manage_tabs-->
+ <!--#tree header=info-->
+ <IMG SRC="<!--#var SCRIPT_NAME-->/misc_/ZMySQLDA/<!--#var icon-->"
+ ALT="<!--#var Type-->" BORDER="0">
+ <!--#var Name--><!--#var Description-->
+ <!--#/tree-->
+
+ </body>
+</html>
Added: zope-mysqlda/branches/upstream/current/connectionAdd.dtml
===================================================================
--- zope-mysqlda/branches/upstream/current/connectionAdd.dtml 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/connectionAdd.dtml 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,92 @@
+<html>
+ <head><title>Add Z MySQL Database Connection</title></head>
+ <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+
+ <h2>Add Z MySQL Database Connection</h2>
+
+ <form action="manage_addZMySQLConnection" method="POST">
+ <table cellspacing="2">
+ <tr>
+ <th align="LEFT" valign="TOP">Id</th>
+ <td align="LEFT" valign="TOP">
+ <input type="TEXT" name="id" size="40"
+ value="MySQL_database_connection">
+ </td>
+ </tr>
+ <tr>
+ <th align="LEFT" valign="TOP"><em>Title</em></th>
+ <td align="LEFT" valign="TOP">
+ <input type="TEXT" name="title" size="40"
+ value="Z MySQL Database Connection">
+ </td>
+ </tr>
+ <tr>
+ <th align="LEFT" valign="TOP">
+ Enter a Database Connection String
+ <a href="#1"><sup>1</sup></a></th>
+ <td align="LEFT" valign="TOP">
+ <input type="TEXT" name="connection_string" size="40">
+ </td>
+ </tr>
+ <tr>
+ <th align="LEFT" valign="TOP">Connect immediately</th>
+ <td align="LEFT" valign="TOP">
+ <input name="check" type="CHECKBOX" value="YES" CHECKED>
+ </td>
+ </tr>
+ <tr>
+ <td></td>
+ <td><br><input type="SUBMIT" value="Add"></td>
+ </tr>
+ </table>
+ </form>
+
+
+
+<dt><a hname="1"><sup>1</sup></a> Connection Strings</dt>
+<dd>
+<p>
+ The connection string used for Z MySQL Database Connection
+ is of the form:
+<pre>
+ [*lock] [+/-][database][@host[:port]] [user [password [unix_socket]]]
+</pre>
+ or typically:
+<pre>
+ database user password
+</pre>
+ to use a MySQL server on localhost via the standard UNIX socket.
+ Only specify host if the server is on a remote system. You can
+ use a non-standard port, if necessary. Hint: To use a non-standard
+ port on the local system, use 127.0.0.1 for the host instead of
+ localhost.
+<p>
+ Either a database or a host or both must be specified.
+<p>
+ If the UNIX socket is in a non-standard location, you can specify
+ the full path to it after the password.
+<p>
+ A '-' in front of the database tells ZMySQLDA to not use Zope's
+ Transaction Manager, even if the server supports transactions. A
+ '+' in front of the database tells ZMySQLDA that it must use
+ transactions; an exception will be raised if they are not
+ supported by the server. If neither '-' or '+' are present, then
+ transactions will be enabled if the server supports them. If you
+ are using non-transaction safe tables (TSTs) on a server that
+ supports TSTs, use '-'. If you require transactions, use '+'. If
+ you aren't sure, don't use either.
+<p>
+ *<em>lock</em> at the begining of the connection string means to
+ psuedo-transactional. When the transaction begins, it will acquire
+ a lock on the server named <em>lock</em> (i.e. MYLOCK). When the
+ transaction commits, the lock will be released. If the transaction
+ is aborted and restarted, which can happen due to a ConflictError,
+ you'll get an error in the logs, and inconsistent data. In this
+ respect, it's equivalent to transactions turned off.
+<p>
+ Transactions are highly recommended. Using a named lock in
+ conjunctions with transactions is probably pointless.
+</dd></dl>
+
+ </body>
+</html>
Added: zope-mysqlda/branches/upstream/current/connectionEdit.dtml
===================================================================
--- zope-mysqlda/branches/upstream/current/connectionEdit.dtml 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/connectionEdit.dtml 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,48 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
+<html lang="en">
+ <head><title>Edit <dtml-var title_or_id></title></head>
+ <body bgcolor="#FFFFFF" link="#000099" vlink="#555555" alink="#77003B">
+ <dtml-var manage_tabs>
+
+ <h2>Edit <dtml-var title_or_id></h2>
+
+ <form action="manage_edit" method="POST">
+ <table cellspacing="2">
+
+ <tr>
+ <th align="LEFT" valign="TOP">Id</th>
+ <td align="LEFT" valign="TOP"><dtml-var id></td>
+ </tr>
+
+ <tr>
+ <th align="LEFT" valign="TOP"><em>Title</em></th>
+ <td align="LEFT" valign="TOP">
+ <input type="TEXT" name="title" size="40"
+ value="<dtml-var title html_quote>">
+ </td>
+ </tr>
+
+ <tr>
+ <th align="LEFT" valign="TOP">Database Connection String</th>
+ <td align="LEFT" valign="TOP">
+ <input type="TEXT" name="connection_string" size="40"
+ value="<dtml-var connection_string html_quote>">
+ </td>
+ </tr>
+ <tr>
+ <th align="LEFT" valign="TOP">Connect immediately</th>
+ <td align="LEFT" valign="TOP">
+ <input name="check" type="CHECKBOX" value="YES" CHECKED>
+ </td>
+ </tr>
+
+ <tr>
+ <td></td>
+ <td><br><input type="SUBMIT" value="Change"></td>
+ </tr>
+
+ </table>
+ </form>
+
+ </body>
+</html>
Added: zope-mysqlda/branches/upstream/current/db.py
===================================================================
--- zope-mysqlda/branches/upstream/current/db.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/db.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,389 @@
+##############################################################################
+#
+# Zope Public License (ZPL) Version 1.0
+# -------------------------------------
+#
+# Copyright (c) Digital Creations. All rights reserved.
+#
+# This license has been certified as Open Source(tm).
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# 1. Redistributions in source code must retain the above copyright
+# notice, this list of conditions, and the following disclaimer.
+#
+# 2. Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions, and the following disclaimer in
+# the documentation and/or other materials provided with the
+# distribution.
+#
+# 3. Digital Creations requests that attribution be given to Zope
+# in any manner possible. Zope includes a "Powered by Zope"
+# button that is installed by default. While it is not a license
+# violation to remove this button, it is requested that the
+# attribution remain. A significant investment has been put
+# into Zope, and this effort will continue if the Zope community
+# continues to grow. This is one way to assure that growth.
+#
+# 4. All advertising materials and documentation mentioning
+# features derived from or use of this software must display
+# the following acknowledgement:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# In the event that the product being advertised includes an
+# intact Zope distribution (with copyright and license included)
+# then this clause is waived.
+#
+# 5. Names associated with Zope or Digital Creations must not be used to
+# endorse or promote products derived from this software without
+# prior written permission from Digital Creations.
+#
+# 6. Modified redistributions of any form whatsoever must retain
+# the following acknowledgment:
+#
+# "This product includes software developed by Digital Creations
+# for use in the Z Object Publishing Environment
+# (http://www.zope.org/)."
+#
+# Intact (re-)distributions of any official Zope release do not
+# require an external acknowledgement.
+#
+# 7. Modifications are encouraged but must be packaged separately as
+# patches to official Zope releases. Distributions that do not
+# clearly separate the patches from the original work must be clearly
+# labeled as unofficial distributions. Modifications which do not
+# carry the name Zope may be packaged in any form, as long as they
+# conform to all of the clauses above.
+#
+#
+# Disclaimer
+#
+# THIS SOFTWARE IS PROVIDED BY DIGITAL CREATIONS ``AS IS'' AND ANY
+# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL DIGITAL CREATIONS OR ITS
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+# ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+# OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+# SUCH DAMAGE.
+#
+#
+# This software consists of contributions made by Digital Creations and
+# many individuals on behalf of Digital Creations. Specific
+# attributions are listed in the accompanying credits file.
+#
+##############################################################################
+
+'''$Id: db.py,v 1.21 2005/03/06 02:35:06 adustman Exp $'''
+__version__='$Revision: 1.21 $'[11:-2]
+
+import _mysql
+from _mysql_exceptions import OperationalError, NotSupportedError
+MySQLdb_version_required = (1,0,0)
+
+_v = getattr(_mysql, 'version_info', (0,0,0))
+if _v < MySQLdb_version_required:
+ raise NotSupportedError, \
+ "ZMySQLDA requires at least MySQLdb %s, %s found" % \
+ (MySQLdb_version_required, _v)
+
+from MySQLdb.converters import conversions
+from MySQLdb.constants import FIELD_TYPE, CR, CLIENT
+from Shared.DC.ZRDB.TM import TM
+from DateTime import DateTime
+from zLOG import LOG, ERROR, INFO
+
+import string, sys
+from string import strip, split, find, upper, rfind
+from time import time
+
+key_types = {
+ "PRI": "PRIMARY KEY",
+ "MUL": "INDEX",
+ "UNI": "UNIQUE",
+ }
+
+field_icons = "bin", "date", "datetime", "float", "int", "text", "time"
+
+icon_xlate = {
+ "varchar": "text", "char": "text",
+ "enum": "what", "set": "what",
+ "double": "float", "numeric": "float",
+ "blob": "bin", "mediumblob": "bin", "longblob": "bin",
+ "tinytext": "text", "mediumtext": "text",
+ "longtext": "text", "timestamp": "datetime",
+ "decimal": "float", "smallint": "int",
+ "mediumint": "int", "bigint": "int",
+ }
+
+type_xlate = {
+ "double": "float", "numeric": "float",
+ "decimal": "float", "smallint": "int",
+ "mediumint": "int", "bigint": "int",
+ "int": "int", "float": "float",
+ "timestamp": "datetime", "datetime": "datetime",
+ "time": "datetime",
+ }
+
+def _mysql_timestamp_converter(s):
+ if len(s) < 14:
+ s = s + "0"*(14-len(s))
+ parts = map(int, (s[:4],s[4:6],s[6:8],
+ s[8:10],s[10:12],s[12:14]))
+ return DateTime("%04d-%02d-%02d %02d:%02d:%02d" % tuple(parts))
+
+def DateTime_or_None(s):
+ try: return DateTime(s)
+ except: return None
+
+def int_or_long(s):
+ try: return int(s)
+ except: return long(s)
+
+"""Locking strategy:
+
+The minimum that must be done is a mutex around a query, store_result
+sequence. When using transactions, the mutex must go around the
+entire transaction."""
+
+class DB(TM):
+
+ Database_Connection=_mysql.connect
+ Database_Error=_mysql.Error
+
+ defs={
+ 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",
+ }
+
+ conv=conversions.copy()
+ conv[FIELD_TYPE.LONG] = int_or_long
+ conv[FIELD_TYPE.DATETIME] = DateTime_or_None
+ conv[FIELD_TYPE.DATE] = DateTime_or_None
+ conv[FIELD_TYPE.DECIMAL] = float
+ del conv[FIELD_TYPE.TIME]
+ del conv[FIELD_TYPE.BLOB]
+
+ _p_oid=_p_changed=_registered=None
+
+ def __init__(self,connection):
+ from thread import allocate_lock
+ self.connection=connection
+ self.kwargs = kwargs = self._parse_connection_string(connection)
+ self.db=apply(self.Database_Connection, (), kwargs)
+ LOG("ZMySQLDA", INFO, "Opened new connection %s: %s" \
+ % (self.db, connection))
+ transactional = self.db.server_capabilities & CLIENT.TRANSACTIONS
+ if self._try_transactions == '-':
+ transactional = 0
+ elif not transactional and self._try_transactions == '+':
+ raise NotSupportedError, "transactions not supported by this server"
+ self._use_TM = self._transactions = transactional
+ if self._mysql_lock:
+ self._use_TM = 1
+ if self._use_TM:
+ self._tlock = allocate_lock()
+ self._lock = allocate_lock()
+
+ def _parse_connection_string(self, connection):
+ kwargs = {'conv': self.conv}
+ items = split(connection)
+ self._use_TM = None
+ if not items: return kwargs
+ lockreq, items = items[0], items[1:]
+ if lockreq[0] == "*":
+ self._mysql_lock = lockreq[1:]
+ db_host, items = items[0], items[1:]
+ self._use_TM = 1
+ else:
+ self._mysql_lock = None
+ db_host = lockreq
+ if '@' in db_host:
+ db, host = split(db_host,'@',1)
+ kwargs['db'] = db
+ if ':' in host:
+ host, port = split(host,':',1)
+ kwargs['port'] = int(port)
+ kwargs['host'] = host
+ else:
+ kwargs['db'] = db_host
+ if kwargs['db'] and kwargs['db'][0] in ('+', '-'):
+ self._try_transactions = kwargs['db'][0]
+ kwargs['db'] = kwargs['db'][1:]
+ else:
+ self._try_transactions = None
+ if not kwargs['db']:
+ del kwargs['db']
+ if not items: return kwargs
+ kwargs['user'], items = items[0], items[1:]
+ if not items: return kwargs
+ kwargs['passwd'], items = items[0], items[1:]
+ if not items: return kwargs
+ kwargs['unix_socket'], items = items[0], items[1:]
+ return kwargs
+
+ def tables(self, rdb=0,
+ _care=('TABLE', 'VIEW')):
+ r=[]
+ a=r.append
+ self._lock.acquire()
+ try:
+ self.db.query("SHOW TABLES")
+ result = self.db.store_result()
+ finally:
+ self._lock.release()
+ row = result.fetch_row(1)
+ while row:
+ a({'TABLE_NAME': row[0][0], 'TABLE_TYPE': 'TABLE'})
+ row = result.fetch_row(1)
+ return r
+
+ def columns(self, table_name):
+ from string import join
+ try:
+ try:
+ self._lock.acquire()
+ # Field, Type, Null, Key, Default, Extra
+ self.db.query('SHOW COLUMNS FROM %s' % table_name)
+ c=self.db.store_result()
+ finally:
+ self._lock.release()
+ except:
+ return ()
+ r=[]
+ for Field, Type, Null, Key, Default, Extra in c.fetch_row(0):
+ info = {}
+ field_default = Default and "DEFAULT %s"%Default or ''
+ if Default: info['Default'] = Default
+ if '(' in Type:
+ end = rfind(Type,')')
+ short_type, size = split(Type[:end],'(',1)
+ if short_type not in ('set','enum'):
+ if ',' in size:
+ info['Scale'], info['Precision'] = \
+ map(int, split(size,',',1))
+ else:
+ info['Scale'] = int(size)
+ else:
+ short_type = Type
+ if short_type in field_icons:
+ info['Icon'] = short_type
+ else:
+ info['Icon'] = icon_xlate.get(short_type, "what")
+ info['Name'] = Field
+ info['Type'] = type_xlate.get(short_type,'string')
+ info['Extra'] = Extra,
+ info['Description'] = join([Type, field_default, Extra or '',
+ key_types.get(Key, Key or ''),
+ Null != 'YES' and 'NOT NULL' or '']),
+ info['Nullable'] = (Null == 'YES') and 1 or 0
+ if Key:
+ info['Index'] = 1
+ if Key == 'PRI':
+ info['PrimaryKey'] = 1
+ info['Unique'] = 1
+ elif Key == 'UNI':
+ info['Unique'] = 1
+ r.append(info)
+ return r
+
+ def query(self,query_string, max_rows=1000):
+ self._use_TM and self._register()
+ desc=None
+ result=()
+ db=self.db
+ try:
+ self._lock.acquire()
+ for qs in filter(None, map(strip,split(query_string, '\0'))):
+ qtype = upper(split(qs, None, 1)[0])
+ if qtype == "SELECT" and max_rows:
+ qs = "%s LIMIT %d" % (qs,max_rows)
+ r=0
+ db.query(qs)
+ c=db.store_result()
+ if desc is not None:
+ if c and (c.describe() != desc):
+ raise 'Query Error', (
+ 'Multiple select schema are not allowed'
+ )
+ if c:
+ desc=c.describe()
+ result=c.fetch_row(max_rows)
+ else:
+ desc=None
+ finally:
+ self._lock.release()
+
+ if desc is None: return (),()
+
+ items=[]
+ func=items.append
+ defs=self.defs
+ for d in desc:
+ item={'name': d[0],
+ 'type': defs.get(d[1],"t"),
+ 'width': d[2],
+ 'null': d[6]
+ }
+ func(item)
+ return items, result
+
+ def string_literal(self, s): return self.db.string_literal(s)
+
+ def _begin(self, *ignored):
+ self._tlock.acquire()
+ try:
+ self.db.ping()
+ if self._transactions:
+ self.db.query("BEGIN")
+ self.db.store_result()
+ if self._mysql_lock:
+ self.db.query("SELECT GET_LOCK('%s',0)" % self._mysql_lock)
+ self.db.store_result()
+ except:
+ LOG('ZMySQLDA', ERROR, "exception during _begin",
+ error=sys.exc_info())
+ self._tlock.release()
+ raise
+
+ def _finish(self, *ignored):
+ try:
+ try:
+ if self._mysql_lock:
+ self.db.query("SELECT RELEASE_LOCK('%s')" % self._mysql_lock)
+ self.db.store_result()
+ if self._transactions:
+ self.db.query("COMMIT")
+ self.db.store_result()
+ except:
+ LOG('ZMySQLDA', ERROR, "exception during _finish",
+ error=sys.exc_info())
+ raise
+ finally:
+ self._tlock.release()
+
+ def _abort(self, *ignored):
+ try:
+ if self._mysql_lock:
+ self.db.query("SELECT RELEASE_LOCK('%s')" % self._mysql_lock)
+ self.db.store_result()
+ if self._transactions:
+ self.db.query("ROLLBACK")
+ self.db.store_result()
+ else:
+ LOG('ZMySQLDA', ERROR, "aborting when non-transactional")
+ finally:
+ self._tlock.release()
Added: zope-mysqlda/branches/upstream/current/help/DA.py
===================================================================
--- zope-mysqlda/branches/upstream/current/help/DA.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/help/DA.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,61 @@
+def manage_addZMySQLConnection(self, id, title,
+ connection_string,
+ check=None, REQUEST=None):
+ """Add a MySQL connection to a folder.
+
+ Arguments:
+
+ REQUEST -- The current request
+
+ title -- The title of the ZMySQLDA Connection (string)
+
+ id -- The id of the ZMySQLDA Connection (string)
+
+ connection_string -- The connection string is of the form:
+
+ '[*lock] [+/-][database][@host[:port]] [user [password [unix_socket]]]'
+
+ or typically:
+
+ 'database user password'
+
+ to use a MySQL server on localhost via the standard UNIX
+ socket. Only specify host if the server is on a remote
+ system. You can use a non-standard port, if necessary. If the
+ UNIX socket is in a non-standard location, you can specify the
+ full path to it after the password. Hint: To use a
+ non-standard port on the local system, use 127.0.0.1 for the
+ host instead of localhost.
+
+ Either a database or a host or both must be specified.
+
+ A '-' in front of the database tells ZMySQLDA to not use
+ Zope's Transaction Manager, even if the server supports
+ transactions. A '+' in front of the database tells ZMySQLDA
+ that it must use transactions; an exception will be raised if
+ they are not supported by the server. If neither '-' or '+'
+ are present, then transactions will be enabled if the server
+ supports them. If you are using non-transaction safe tables
+ (TSTs) on a server that supports TSTs, use '-'. If you require
+ transactions, use '+'. If you aren't sure, don't use either.
+
+ *lock at the begining of the connection string means to
+ psuedo-transactional. When the transaction begins, it will
+ acquire a lock on the server named lock (i.e. MYLOCK). When
+ the transaction commits, the lock will be released. If the
+ transaction is aborted and restarted, which can happen due to
+ a ConflictError, you'll get an error in the logs, and
+ inconsistent data. In this respect, it's equivalent to
+ transactions turned off.
+
+ Transactions are highly recommended. Using a named lock in
+ conjunctions with transactions is probably pointless.
+
+ """
+
+class Connection:
+ """MySQL Connection Object"""
+
+ __constructor__ = manage_addZMySQLConnection
+
+
Added: zope-mysqlda/branches/upstream/current/help/DABase.py
===================================================================
--- zope-mysqlda/branches/upstream/current/help/DABase.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/help/DABase.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,35 @@
+def manage_addZMySQLConnection(self, id, title,
+ connection_string,
+ check=None, REQUEST=None):
+ """Add a MySQL connection to a folder.
+
+ Arguments:
+
+ REQUEST -- The current request
+
+ title -- The title of the ZMySQLDA Connection (string)
+
+ id -- The id of the ZMySQLDA Connection (string)
+
+ connection_string -- The connection string is of the form:
+
+ 'database[@host[:port]] [user [password [unix_socket]]]'
+
+ or typically:
+
+ 'database user password'
+
+ to use a MySQL server on localhost via the standard UNIX socket.
+ Only specify host if the server is on a remote system. You can
+ use a non-standard port, if necessary. If the UNIX socket is in
+ a non-standard location, you can specify the full path to it
+ after the password.
+
+ """
+
+class Connection:
+ """MySQL Connection Object"""
+
+ __constructor__ = manage_addZMySQLConnection
+
+
Added: zope-mysqlda/branches/upstream/current/help/db.py
===================================================================
--- zope-mysqlda/branches/upstream/current/help/db.py 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/help/db.py 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,28 @@
+class DB:
+
+ """This is the ZMySQLDA Database Connection Object."""
+
+ def __init__(self,connection):
+ """
+ connection
+ blah blah
+ """
+
+ def tables(self, rdb=0,
+ _care=('TABLE', 'VIEW')):
+ """Returns a list of tables in the current database."""
+
+ def columns(self, table_name):
+ """Returns a list of column descriptions for 'table_name'."""
+
+ def query(self,query_string, max_rows=1000):
+ """Execute 'query_string' and return at most 'max_rows'."""
+
+ def _begin(self, *ignored):
+ """Begin a transaction (when TM is enabled)."""
+
+ def _finish(self, *ignored):
+ """Commit a transaction (when TM is enabled)."""
+
+ def _abort(self, *ignored):
+ """Rollback a transaction (when TM is enabled)."""
Added: zope-mysqlda/branches/upstream/current/icons/bin.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/bin.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/date.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/date.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/datetime.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/datetime.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/field.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/field.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/float.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/float.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/int.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/int.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/stable.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/stable.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/table.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/table.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/text.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/text.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/time.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/time.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/view.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/view.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/icons/what.gif
===================================================================
(Binary files differ)
Property changes on: zope-mysqlda/branches/upstream/current/icons/what.gif
___________________________________________________________________
Name: svn:executable
+
Name: svn:mime-type
+ application/octet-stream
Added: zope-mysqlda/branches/upstream/current/table_info.dtml
===================================================================
--- zope-mysqlda/branches/upstream/current/table_info.dtml 2006-11-15 11:03:33 UTC (rev 466)
+++ zope-mysqlda/branches/upstream/current/table_info.dtml 2006-11-17 14:04:12 UTC (rev 467)
@@ -0,0 +1,7 @@
+<dtml-var standard_html_header>
+
+<dtml-var TABLE_TYPE><dtml-if TABLE_OWNER>
+ owned by <dtml-var TABLE_OWNER></dtml-if>
+<dtml-if REMARKS><br><dtml-var REMARKS></dtml-if>
+
+<dtml-var standard_html_footer>
More information about the pkg-zope-commits
mailing list