Классика баз данных - статьи


Атомарность XML-транзакций - часть 3


Следовательно, обратная операция должна удалять последнего ребенка целевого узла. Например, для операции вставки InsertInto(<name&#x002F;>, &#x002F;doc&#x002F;person) в столбец Parameters нужно записать информацию об операции Delete&#x002F;doc&#x002F;person&#x002F;name[position() =last()]. При выполнении UNDO необходимо выполнить эту операцию удаления.
  • Пусть opi - это операция IB. Аналогично, в столбец Parameters нужно записать информацию об операции удаления вставленного узла. Например, для операции вставки InsertBefore(<name&#x002F;>, &#x002F;doc&#x002F;person&#x002F;hobby) в столбец Patrameters необходимо записать информацию об операции Delete(&#x002F;doc&#x002F;person&#x002F;hobby::preceding-sibling [ position()=1]). Для операции IA в последнем выражении необходимо заменить ось preceding-sibling на following-sibling.
  • Пусть opi - это операция D. Для операции удаления узла обратной является операция вставки этого узла. Поэтому удаляемый узел необходимо сохранить в журнале, чтобы при откате можно было его вставить. При этом требуется запомнить не только сам удаляемый узел, но и его позицию в XML-документе. Для этого перед выполнением операции удаления нужно выполнить предварительный запрос, результатом которого будут удаляемые узлы и их позиции в XML-документе. Например, для операции Delete(&#x002F;doc&#x002F;person[name='John']) предварительный запрос будет выглядеть так:

    for &#x0024;node at &#x0024;i in &#x002F;doc&#x002F;person where &#x0024;node&#x002F;name = 'John' return (&#x0024;node, &#x0024;i)

    Этот запрос выбирает все узлы person с именем "John", а также их позиции среди всех узлов person. Результат запроса сохраняется в столбце Parameters таблицы журнала. Кроме того, сохраняется путь в XML-документе, по которому нужно будет вставлять узлы при выполнении отката. Для рассматриваемого примера таким путем является &#x002F;doc.

    При выполнении обратной операции (UNDO) выполняются следующие действия:




      - Начало -  - Назад -  - Вперед -