hooks/syncschema.py
branchstable
changeset 5833 d7256ae7c1d1
parent 5805 560cde8a4f9f
child 5834 b8ad49864928
equal deleted inserted replaced
5832:16a4235e031f 5833:d7256ae7c1d1
   514             constraints = self.rschema.rdef(etype, atype).constraints
   514             constraints = self.rschema.rdef(etype, atype).constraints
   515             coltype = y2sql.type_from_constraints(adbh, atype, constraints,
   515             coltype = y2sql.type_from_constraints(adbh, atype, constraints,
   516                                                   creating=False)
   516                                                   creating=False)
   517             # XXX check self.values['cardinality'][0] actually changed?
   517             # XXX check self.values['cardinality'][0] actually changed?
   518             notnull = self.values['cardinality'][0] != '1'
   518             notnull = self.values['cardinality'][0] != '1'
   519             sql = adbh.sql_set_null_allowed(table, column, coltype, notnull)
   519             if getattr(adbh, 'alter_table_requires_cursor', False):
       
   520                 sql = adbh.sql_set_null_allowed(table, column, coltype, notnull, 
       
   521                                                 self.session.system_sql)
       
   522             else:
       
   523                 sql = adbh.sql_set_null_allowed(table, column, coltype, notnull)
   520             session.system_sql(sql)
   524             session.system_sql(sql)
   521         if 'fulltextindexed' in self.values:
   525         if 'fulltextindexed' in self.values:
   522             UpdateFTIndexOp(session)
   526             UpdateFTIndexOp(session)
   523             session.transaction_data.setdefault(
   527             session.transaction_data.setdefault(
   524                 'fti_update_etypes', set()).add(etype)
   528                 'fti_update_etypes', set()).add(etype)
   549             oldcstr is None or oldcstr.max != newcstr.max):
   553             oldcstr is None or oldcstr.max != newcstr.max):
   550             adbh = self.session.pool.source('system').dbhelper
   554             adbh = self.session.pool.source('system').dbhelper
   551             card = rtype.rdef(subjtype, objtype).cardinality
   555             card = rtype.rdef(subjtype, objtype).cardinality
   552             coltype = y2sql.type_from_constraints(adbh, objtype, [newcstr],
   556             coltype = y2sql.type_from_constraints(adbh, objtype, [newcstr],
   553                                                   creating=False)
   557                                                   creating=False)
   554             sql = adbh.sql_change_col_type(table, column, coltype, card != '1')
   558             if getattr(adbh, 'alter_table_requires_cursor', False):
       
   559                 sql = adbh.sql_change_col_type(table, column, coltype, card[0] != '1',
       
   560                                                self.session.system_sql)
       
   561             else:
       
   562                 sql = adbh.sql_change_col_type(table, column, coltype, card[0] != '1')
   555             try:
   563             try:
   556                 session.system_sql(sql, rollback_on_failure=False)
   564                 session.system_sql(sql, rollback_on_failure=False)
   557                 self.info('altered column %s of table %s: now %s',
   565                 self.info('altered column %s of table %s: now %s',
   558                           column, table, coltype)
   566                           column, table, coltype)
   559             except Exception, ex:
   567             except Exception, ex:
   576         if cstrtype == 'SizeConstraint':
   584         if cstrtype == 'SizeConstraint':
   577             try:
   585             try:
   578                 adbh = self.session.pool.source('system').dbhelper
   586                 adbh = self.session.pool.source('system').dbhelper
   579                 coltype = y2sql.type_from_constraints(adbh, rdef.object, [],
   587                 coltype = y2sql.type_from_constraints(adbh, rdef.object, [],
   580                                                       creating=False)
   588                                                       creating=False)
   581                 sql = adbh.sql_change_col_type(table, column, coltype,
   589     
   582                                                rdef.cardinality != '1')
   590                 if getattr(adbh, 'alter_table_requires_cursor', False):
       
   591                     sql = adbh.sql_change_col_type(table, column, coltype,
       
   592                                                    rdef.cardinality[0] != '1',
       
   593                                                    self.session.system_sql)
       
   594                 else:
       
   595                     sql = adbh.sql_change_col_type(table, column, coltype,
       
   596                                                rdef.cardinality[0] != '1')
       
   597                 
   583                 self.session.system_sql(sql, rollback_on_failure=False)
   598                 self.session.system_sql(sql, rollback_on_failure=False)
   584                 self.info('altered column %s of table %s: now %s',
   599                 self.info('altered column %s of table %s: now %s',
   585                           column, table, coltype)
   600                           column, table, coltype)
   586             except Exception, ex:
   601             except Exception, ex:
   587                 # not supported by sqlite for instance
   602                 # not supported by sqlite for instance