--- a/hooks/syncschema.py Wed Jun 30 15:43:36 2010 +0200
+++ b/hooks/syncschema.py Thu Jul 01 17:06:37 2010 +0200
@@ -252,12 +252,11 @@
return
session = self.session
if 'fulltext_container' in self.values:
- ftiupdates = session.transaction_data.setdefault(
- 'fti_update_etypes', set())
for subjtype, objtype in rschema.rdefs:
- ftiupdates.add(subjtype)
- ftiupdates.add(objtype)
- UpdateFTIndexOp(session)
+ hook.set_operation(session, 'fti_update_etypes', subjtype,
+ UpdateFTIndexOp)
+ hook.set_operation(session, 'fti_update_etypes', objtype,
+ UpdateFTIndexOp)
if not 'inlined' in self.values:
return # nothing to do
inlined = self.values['inlined']
@@ -367,7 +366,7 @@
sysource = session.pool.source('system')
attrtype = y2sql.type_from_constraints(
sysource.dbhelper, rdef.object, rdef.constraints)
- # XXX should be moved somehow into lgc.adbh: sqlite doesn't support to
+ # XXX should be moved somehow into lgdb: sqlite doesn't support to
# add a new column with UNIQUE, it should be added after the ALTER TABLE
# using ADD INDEX
if sysource.dbdriver == 'sqlite' and 'UNIQUE' in attrtype:
@@ -506,23 +505,21 @@
else:
sysource.drop_index(session, table, column)
if 'cardinality' in self.values and self.rschema.final:
- adbh = session.pool.source('system').dbhelper
- if not adbh.alter_column_support:
+ syssource = session.pool.source('system')
+ if not syssource.dbhelper.alter_column_support:
# not supported (and NOT NULL not set by yams in that case, so
- # no worry)
+ # no worry) XXX (syt) then should we set NOT NULL below ??
return
atype = self.rschema.objects(etype)[0]
constraints = self.rschema.rdef(etype, atype).constraints
- coltype = y2sql.type_from_constraints(adbh, atype, constraints,
+ coltype = y2sql.type_from_constraints(syssource.dbhelper, atype, constraints,
creating=False)
# XXX check self.values['cardinality'][0] actually changed?
- notnull = self.values['cardinality'][0] != '1'
- sql = adbh.sql_set_null_allowed(table, column, coltype, notnull)
- session.system_sql(sql)
+ syssource.set_null_allowed(self.session, table, column, coltype,
+ self.values['cardinality'][0] != '1')
if 'fulltextindexed' in self.values:
- UpdateFTIndexOp(session)
- session.transaction_data.setdefault(
- 'fti_update_etypes', set()).add(etype)
+ hook.set_operation(session, 'fti_update_etypes', etype,
+ UpdateFTIndexOp)
class SourceDbCWConstraintAdd(hook.Operation):
@@ -548,13 +545,12 @@
# alter the physical schema on size constraint changes
if newcstr.type() == 'SizeConstraint' and (
oldcstr is None or oldcstr.max != newcstr.max):
- adbh = self.session.pool.source('system').dbhelper
+ syssource = self.session.pool.source('system')
card = rtype.rdef(subjtype, objtype).cardinality
- coltype = y2sql.type_from_constraints(adbh, objtype, [newcstr],
- creating=False)
- sql = adbh.sql_change_col_type(table, column, coltype, card != '1')
+ coltype = y2sql.type_from_constraints(syssource.dbhelper, objtype,
+ [newcstr], creating=False)
try:
- session.system_sql(sql, rollback_on_failure=False)
+ syssource.change_col_type(session, table, column, coltype, card[0] != '1')
self.info('altered column %s of table %s: now %s',
column, table, coltype)
except Exception, ex:
@@ -575,13 +571,13 @@
column = SQL_PREFIX + str(self.rdef.rtype)
# alter the physical schema on size/unique constraint changes
if cstrtype == 'SizeConstraint':
+ syssource = self.session.pool.source('system')
+ coltype = y2sql.type_from_constraints(syssource.dbhelper,
+ self.rdef.object, [],
+ creating=False)
try:
- adbh = self.session.pool.source('system').dbhelper
- coltype = y2sql.type_from_constraints(adbh, rdef.object, [],
- creating=False)
- sql = adbh.sql_change_col_type(table, column, coltype,
- rdef.cardinality != '1')
- self.session.system_sql(sql, rollback_on_failure=False)
+ syssource.change_col_type(session, table, column, coltype,
+ self.rdef.cardinality[0] != '1')
self.info('altered column %s of table %s: now %s',
column, table, coltype)
except Exception, ex:
@@ -1174,7 +1170,7 @@
def postcommit_event(self):
session = self.session
source = session.repo.system_source
- to_reindex = session.transaction_data.get('fti_update_etypes', ())
+ to_reindex = session.transaction_data.pop('fti_update_etypes', ())
self.info('%i etypes need full text indexed reindexation',
len(to_reindex))
schema = self.session.repo.vreg.schema