Commit b7caa49e authored by Jérome Perrin's avatar Jérome Perrin

ERP5Catalog: make upgradeSchema support multiple connections

parent 18004c62
......@@ -1128,20 +1128,41 @@ class CatalogTool (UniqueObject, ZCatalog, CMFCoreCatalogTool, ActiveObject):
security.declareProtected(Permissions.ManagePortal, 'upgradeSchema')
def upgradeSchema(self, sql_catalog_id=None, src__=0):
"""Upgrade all catalog tables, with ALTER or CREATE queries"""
portal = self.getPortalObject()
catalog = self.getSQLCatalog(sql_catalog_id)
connection_id = catalog.z_create_catalog.connection_id
src = []
db = self.getPortalObject()[connection_id]()
with db.lock():
for clear_method in catalog.sql_clear_catalog:
r = catalog[clear_method]._upgradeSchema(
connection_id, create_if_not_exists=1, src__=1)
if r:
src.append(r)
if not src__:
for r in src:
db.query(r)
return src
# group methods by connection
methods_by_connection_id = {}
for method_id in catalog.sql_clear_catalog:
method = catalog[method_id]
connection_id = method.connection_id
# XXX we cannot select on deferred connection
if connection_id == 'erp5_sql_deferred_connection':
connection_id = 'erp5_sql_connection'
"""
connection = portal[connection_id]
if isinstance(connection, 'deferred'):
# we cannot update a deferred connection, so find a "normal" XXX
# connection with the same connection string
for candidate_connection in portal.objectValues():
pass
"""
methods_by_connection_id.setdefault(connection_id, []).append(method)
queries_by_connection_id = {}
for connection_id, method_list in methods_by_connection_id.iteritems():
queries_by_connection_id[connection_id] = []
db = portal[connection_id]()
with db.lock():
for method in method_list:
query = method._upgradeSchema(connection_id, create_if_not_exists=1, src__=1)
if query:
queries_by_connection_id[connection_id].append(query)
if not src__:
for query in queries_by_connection_id[connection_id]:
db.query(query)
return sum(queries_by_connection_id.values(), [])
InitializeClass(CatalogTool)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment