def __call__(self, model, add=None, remove=None, owner='<STR_LIT>'):
ADD_COLUMN = self.byName('<STR_LIT>')<EOL>if issubclass(model, orb.Table):<EOL><INDENT>typ = '<STR_LIT>'<EOL><DEDENT>else:<EOL><INDENT>raise orb.errors.OrbError('<STR_LIT>'.format(type(model)))<EOL><DEDENT>add_i18n = []<EOL>add_standard = []<EOL>for col in add or []:<EOL><INDENT>if col.testFlag(col.Flags.Virtual):<EOL><INDENT>continue<EOL><DEDENT>if col.testFlag(col.Flags.I18n):<EOL><INDENT>add_i18n.append(col)<EOL><DEDENT>else:<EOL><INDENT>add_standard.append(col)<EOL><DEDENT><DEDENT>if add_standard:<EOL><INDENT>sql_raw = []<EOL>for col in add_standard:<EOL><INDENT>sql_raw.append(<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'.format(type=typ, name=model.schema().dbname(), column=ADD_COLUMN(col)[<NUM_LIT:0>])<EOL>)<EOL><DEDENT>sql = '<STR_LIT:\n>'.join(sql_raw)<EOL><DEDENT>else:<EOL><INDENT>sql = '<STR_LIT>'<EOL><DEDENT>if add_i18n:<EOL><INDENT>id_column = model.schema().idColumn()<EOL>id_type = id_column.dbType('<STR_LIT>')<EOL>i18n_options = {<EOL>'<STR_LIT>': model.schema().dbname(),<EOL>'<STR_LIT>': u'<STR_LIT:\t>' + '<STR_LIT>'.join([ADD_COLUMN(col)[<NUM_LIT:0>] for col in add_i18n]),<EOL>'<STR_LIT>': owner,<EOL>'<STR_LIT>': id_type,<EOL>'<STR_LIT>': id_column.field()<EOL>}<EOL>i18n_sql = (<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'<EOL>u'<STR_LIT>'<EOL>).format(**i18n_options)<EOL>sql += '<STR_LIT:\n>' + i18n_sql<EOL><DEDENT>return sql, {}<EOL>
Modifies the table to add and remove the given columns.

:param model: <orb.Model>
:param add: [<orb.Column>, ..]
:param remove: [<orb.Column>, ..]

:return: <bool>