def create_index_sql(self, db_type, table_name, fields=None, new_fields=None, foreign_key_dict=None): def new_field_name_by_id(id_value): for f in new_fields: if f['id'] == id_value: return f['field_name'] db_module = db_modules.get_db_module(db_type) index_name = self.f_index_name.value if self.f_foreign_index.value: if foreign_key_dict: key = foreign_key_dict['key'] ref = foreign_key_dict['ref'] primary_key = foreign_key_dict['primary_key'] else: fields = self.task.sys_fields.copy() fields.set_where(id=self.f_foreign_field.value) fields.open() key = fields.f_db_field_name.value ref_id = fields.f_object.value items = self.task.sys_items.copy() items.set_where(id=ref_id) items.open() ref = items.f_table_name.value primary_key = items.f_primary_key.value fields.set_where(id=primary_key) fields.open() primary_key = fields.f_db_field_name.value sql = db_module.create_foreign_index_sql(table_name, index_name, key, ref, primary_key) else: index_fields = self.f_fields_list.value desc = '' if self.descending.value: desc = 'DESC' unique = '' if self.f_unique_index.value: unique = 'UNIQUE' fields = common.load_index_fields(index_fields) if db_type == db_modules.FIREBIRD: if new_fields: field_defs = [new_field_name_by_id(field[0]) for field in fields] else: field_defs = [self.task.sys_fields.field_by_id(field[0], 'f_db_field_name') for field in fields] field_str = '"' + '", "'.join(field_defs) + '"' else: field_defs = [] for field in fields: if new_fields: field_name = new_field_name_by_id(field[0]) else: field_name = self.task.sys_fields.field_by_id(field[0], 'f_db_field_name') d = '' if field[1]: d = 'DESC' field_defs.append('"%s" %s' % (field_name, d)) field_str = ', '.join(field_defs) sql = db_module.create_index_sql(index_name, table_name, unique, field_str, desc) print(sql) return sql
def create_index_sql(self, db_type, table_name, fields=None, new_fields=None, foreign_key_dict=None): def new_field_name_by_id(id_value): for f in new_fields: if f['id'] == id_value: return f['field_name'] db_module = db_modules.get_db_module(db_type) index_name = self.f_index_name.value if self.f_foreign_index.value: if foreign_key_dict: key = foreign_key_dict['key'] ref = foreign_key_dict['ref'] primary_key = foreign_key_dict['primary_key'] else: fields = self.task.sys_fields.copy() fields.set_where(id=self.f_foreign_field.value) fields.open() key = fields.f_db_field_name.value ref_id = fields.f_object.value items = self.task.sys_items.copy() items.set_where(id=ref_id) items.open() ref = items.f_table_name.value primary_key = items.f_primary_key.value fields.set_where(id=primary_key) fields.open() primary_key = fields.f_db_field_name.value sql = db_module.create_foreign_index_sql(table_name, index_name, key, ref, primary_key) else: index_fields = self.f_fields_list.value desc = '' if self.descending.value: desc = 'DESC' unique = '' if self.f_unique_index.value: unique = 'UNIQUE' fields = common.load_index_fields(index_fields) if db_type == db_modules.FIREBIRD: if new_fields: field_defs = [new_field_name_by_id(field[0]) for field in fields] else: field_defs = [self.task.sys_fields.field_by_id(field[0], 'f_db_field_name') for field in fields] field_str = '"' + '", "'.join(field_defs) + '"' else: field_defs = [] for field in fields: if new_fields: field_name = new_field_name_by_id(field[0]) else: field_name = self.task.sys_fields.field_by_id(field[0], 'f_db_field_name') d = '' if field[1]: d = 'DESC' field_defs.append('"%s" %s' % (field_name, d)) field_str = ', '.join(field_defs) sql = db_module.create_index_sql(index_name, table_name, unique, field_str, desc) #~ print(sql) return sql