TransactionalTable - Интерфейс транзакционной таблицы

class axioma.core.dp.TransactionalTable

Примечание

Абстрактный

Абстрактный класс, представляющий транзакционную таблицу. Из редактируемой таблицы EditableTable можно получить транзакционную,используя функцию wrap(). Если для открытия использовать метод axioma.core.open_json(), то в случае, если есть возможность редактирования таблицы, внутренняя транзакционная таблица создается по умолчанию. Если транзакционная таблица создана, все изменения таблицы (вставка/изменение/удаление) производятся в нее. После вызова метода commit() изменения сохраняются в основной таблице.

Унаследован от:

Методы:

commit()

Внести все изменения в таблицу. При этом все изменения из файла транзакции сохранятся в основной таблице.

restore()

Отменить все изменения таблицы. Производится очистка файла транзакций.

setAutoCommit()

Устанавливает режим автоматического подтверждения изменений при закрытии таблицы без явного подтверждения (axioma.core.dp.HasFeatureHistory.commit()) или отказа (axioma.core.dp.HasFeatureHistory.restore())

setAutoRollback()

Устанавливает режим автоматического отказа от изменений при закрытии таблицы (используется по умолчанию)

useAutoRollback()

Возвращает признак автоматического отказа от изменений при закрытии таблицы

Результат

True, если используется автоматическая отмена изменений (по умолчанию), и False, если используется автоматическое сохранение изменений

Тип результата

bool

Функции:

axioma.core.dp.wrap(edit_table)

Обернуть редактируемую таблицу в транзакционную. Файл транзакции будет создан, если это возможно, в директории с данными редактируемой таблицы, иначе будет создан временный файл.

Параметры

edit_table (EditableTable) – редактируемая таблица

axioma.core.dp.wrap(edit_table, file_path)

Обернуть редактируемую таблицу в транзакционную

Параметры
  • edit_table (EditableTable) – редактируемая таблица

  • file_path (str) – путь к файлу транзакции, который будет создан

axioma.core.dp.recoverHistory(edit_table, file_path)

Восстановление файла транзакций после аварийного завершения программы. Если в процессе редактирования возникла ситуация, при которой внесенные изменения не были сохранены в таблице, то после открытия этой таблицы можно явно попытаться восстановить потерянные данные.

Параметры
  • edit_table (EditableTable) – редактируемая таблица

  • file_path (str) – наименование таблицы на основе которого формируется наименование файла транзакций, из которого будет произведена попытка восстановления

Результат

Успешность выполнения операции. Если восстановление произведено, возвращается True.

Тип результата

bool

axioma.core.dp.recoverHistory(edit_table)

Восстановление файла транзакций. В данном случае будет предпринята попытка неявно определить наименование редактируемой таблицы.

Параметры

edit_table (EditableTable) – редактируемая таблица

Результат

Успешность выполнения операции. Если восстановление произведено, возвращается True.

Тип результата

bool

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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# Пример кода для открытия и редактирования таблицы с помощью JSON 
from axioma.core.dp import *
from axioma.cs import *
from axioma.core.geometry import *
from axioma.render import *
from axioma.common import RuntimeException
from axioma.mapinfo import *
import axioma.core
from PyQt5.QtCore import *
from PyQt5.QtGui import *

'''
Пример вставки объекта в таблицу и сохранение информации об изменениях.
При занесении информации до вызова commit используется файл транзакций.
'''

# Открываем таблицу
json = {
    "src": "/tmp/world.tab"
}
table = axioma.core.open_json(json)
if table is None:
    raise RuntimeException("Таблица не открыта")
assert(isinstance(table, TransactionalTable))
axioma.app.mainWindow.registerDataObject(table)

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

# Вставка
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)
new_feature.setAttribute(index_country, 'New Country')
new_feature.setModified(index_country, True)
style = MapBasicStyle().styleFromString('Pen (1,2,0) Brush (2, 65280, 16777215)')
new_feature.setAttribute(index_style, style)
new_feature.setModified(index_style, True)

# Вставка в транзакционную таблицу
table.insert([new_feature])

table.commit()