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 |