Пример #1
0
    def create_index_sql(self, db_type, table_name, fields=None, new_fields=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:
            key = self.f_foreign_field.display_text
            ref_id = self.task.sys_fields.field_by_id(self.f_foreign_field.value, 'f_object')
            ref = self.task.sys_items.field_by_id(ref_id, 'f_table_name')
            sql = db_module.create_foreign_index_sql(table_name, index_name, key, ref)
        else:
            index_desc = self.descending.value
            index_fields = self.f_fields.value
            desc = ''
            if index_desc:
                desc = 'DESC'
            fields = common.load_index_fields(index_fields)
            if new_fields:
                fields = [new_field_name_by_id(field[0]) for field in fields]
            else:
                fields = [self.task.sys_fields.field_by_id(field[0], 'f_field_name') for field in fields]
            if desc and db_type in (db_modules.SQLITE, db_modules.POSTGRESQL):
                fields = ['"%s" %s' % (field, desc) for field in fields]
                field_str = ', '.join(fields)
            else:
                field_str = '"' + '", "'.join(fields) + '"'
            sql = db_module.create_index_sql(index_name, table_name, field_str, desc)
        print db_module.set_case(sql)
        return db_module.set_case(sql)
Пример #2
0
    def create_index_sql(self,
                         db_type,
                         table_name,
                         fields=None,
                         new_fields=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:
            fields = self.task.sys_fields.copy()
            fields.set_where(id=self.f_foreign_field.value)
            fields.open()
            key = fields.f_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_field_name.value
            sql = db_module.create_foreign_index_sql(table_name, index_name,
                                                     key, ref, primary_key)
        else:
            index_fields = self.f_fields.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 new_fields:
                fields = [new_field_name_by_id(field[0]) for field in fields]
            else:
                fields = [
                    self.task.sys_fields.field_by_id(field[0], 'f_field_name')
                    for field in fields
                ]
            if desc and db_type in (db_modules.SQLITE, db_modules.POSTGRESQL):
                fields = ['"%s" %s' % (field, desc) for field in fields]
                field_str = ', '.join(fields)
            else:
                field_str = '"' + '", "'.join(fields) + '"'
            sql = db_module.create_index_sql(index_name, table_name, unique,
                                             field_str, desc)
        print sql
        return sql
Пример #3
0
    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_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_field_name.value
            sql = db_module.create_foreign_index_sql(table_name, index_name, key, ref, primary_key)
        else:
            index_fields = self.f_fields.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 new_fields:
                fields = [new_field_name_by_id(field[0]) for field in fields]
            else:
                fields = [self.task.sys_fields.field_by_id(field[0], 'f_field_name') for field in fields]
            if desc and db_type in (db_modules.SQLITE, db_modules.POSTGRESQL):
                fields = ['"%s" %s' % (field, desc) for field in fields]
                field_str = ', '.join(fields)
            else:
                field_str = '"' + '", "'.join(fields) + '"'
            sql = db_module.create_index_sql(index_name, table_name, unique, field_str, desc)
        print sql
        return sql
Пример #4
0
    def create_index_sql(self,
                         db_type,
                         table_name,
                         fields=None,
                         new_fields=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:
            key = self.f_foreign_field.display_text
            ref_id = self.task.sys_fields.field_by_id(
                self.f_foreign_field.value, 'f_object')
            ref = self.task.sys_items.field_by_id(ref_id, 'f_table_name')
            sql = db_module.create_foreign_index_sql(table_name, index_name,
                                                     key, ref)
        else:
            index_desc = self.descending.value
            index_fields = self.f_fields.value
            desc = ''
            if index_desc:
                desc = 'DESC'
            fields = common.load_index_fields(index_fields)
            if new_fields:
                fields = [new_field_name_by_id(field[0]) for field in fields]
            else:
                fields = [
                    self.task.sys_fields.field_by_id(field[0], 'f_field_name')
                    for field in fields
                ]
            if desc and db_type in (db_modules.SQLITE, db_modules.POSTGRESQL):
                fields = ['"%s" %s' % (field, desc) for field in fields]
                field_str = ', '.join(fields)
            else:
                field_str = '"' + '", "'.join(fields) + '"'
            sql = db_module.create_index_sql(index_name, table_name, field_str,
                                             desc)
        print db_module.set_case(sql)
        return db_module.set_case(sql)