HistorySnapshot - Образ изменений в таблице

class axioma.core.dp.HistorySnapshot

Образ изменений в таблице. Используется редактируемой таблицей EditableTable

Методы:

HistorySnapshot(comparator)

Конструктор класса

Параметры:comparator (VariantComparator) – функтор сравнения
insertedFeatureSequence(range=PageRange())

Получить итератор по записям, которые были добавлены

Параметры:range (PageRange) – диапазон страниц
Результат:итератор по добавленным записям
Тип результата:Cursor
inserted()

Список записей, которые были добавлены

Результат:список добавленных записей
Тип результата:list [Feature]
newfoundIds()

Список обновленных записей

Результат:добавленные записи
Тип результата:list [QVariant]
storeNewfoundFeature(feature)

Поместить в таблицу запись для добавления

Параметры:feature (Feature) – запись для добавления
storeUpdatedFeature(feature)

Поместить в таблицу запись для обновления

Параметры:feature (Feature) – запись для обновления
storeGoneFeature(id)

Поместить идентификатор записи для удаления

Параметры:id (QVariant) – идентификатор записи для удаления
clear()

удалить все изменения

isEmpty()
Результат:является ли пустым
Тип результата:bool
idComparator()
Результат:компаратор идентификаторов
Тип результата:VariantComparator
numInsertedFeatures()
Результат:количество записей для добавления
Тип результата:int
numNewfoundIds()
Результат:количество записей для обновления
Тип результата:int
numGoneFeatures()
Результат:количество записей для удаления
Тип результата:int

Пример использования:

from axioma.core.dp import *
from axioma.cs import *
from axioma.core.geometry import *
from axioma.render import *
from axioma.mapinfo import *

from PyQt5.QtCore import *

# Открываем таблицу
table = open_file('world.tab')
assert(isinstance(table, EditableTable))

# Создаем файл транзакций
history_snapshot = HistorySnapshot(table.featureIdComparator())

# Делаем выборку из двух записей
features = table.selectToFeatureList(QuerySelectAll(table.tableSchema().attributeNames()), PageRange(0, 2))

# Определяем индексы изменяемых полей
index_geometry = table.tableSchema().indexOf('object')
index_style = table.tableSchema().indexOf('tr$$_rendition')
index_country = table.tableSchema().indexOf('Country')

# Список атрибутов можно получить
# print (table.tableSchema().attributeNames())

# Вставка
new_feature =  Feature.createFeature(table.tableSchema())
# Устанавливаем геометрию по индексу поля
poly = QPolygonF();
v = 1000000
poly << QPointF(-v, -v) << QPointF(-v, v) << QPointF(v, v) << QPointF(v, -v) << QPointF(-v, -v)
polygon = Polygon(table.coordSystem(), poly)
new_feature.setAttribute(index_geometry, polygon)
new_feature.setModified(index_geometry, True)
# Устанавливаем стиль
style = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 65280, 16777215)')
new_feature.setAttribute(index_style, style)
new_feature.setModified(index_style, True)
# Строковае поле по его имени
new_feature.setAttribute('Country', 'New Country')
new_feature.setModified('Country', True)
# Сохраняем в файле транзакций
history_snapshot.storeNewfoundFeature(new_feature)

# Обновление
# Берем первую запись и обновляем для нее стиль оформления
if len(features) >= 1:
    feature = features[0]
    style_red = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 16711680, 16777215)')
    feature.setAttribute(index_style, style_red)
    feature.setModified(index_style, True)
    # Сохраняем в файле транзакций
    history_snapshot.storeUpdatedFeature(feature)

# Удаление
# Помечаем на удаление вторую выбранную запись
if len(features) >= 2:
    history_snapshot.storeGoneFeature(features[1].id())

# Сохраняем изменения из файла транзакций в таблице
table.save(history_snapshot)

Примечание

Для редактирования открытой таблицы лучшим решением будет создать для нее обертку TransactionalTable посредством метода wrap