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

       

Семантика функциональных update-выражений вида TRANSFORM INSERT и TRANSFORM DELETE


Для определения семантики функциональных update-выражений вида TRANSFORM INSERT и TRANSFORM DELETE выразим их через функциональные update-выражения вида TRANSFORM REPLACE, для которых семантика была определена выше.

В синтаксисе функциональных update-выражений вида TRANSFORM INSERT выражение expr($var1,$var2) определяет упорядоченную последовательность узлов, которые необходимо вставить. Для каждого целевого узла последовательности, возвращаемой выражением locpath2, результат вычисления выражения expr($var1,$var2) вставляется на позицию, определяемую ключевыми словами into, preceding и following. Если указано ключевое слово into, то узлы вставляются в начало последовательности дочерних узлов целевого узла. Если указано ключевое слово preceding, то узлы вставляются непосредственно перед каждым целевым узлом. В случае, если позиция определяется ключевым словом following, узлы вставляются после каждого целевого узла.

В синтаксисе функциональных update-выражений вида TRANSFORM DELETE выражение locpath2($var1) определяет последовательность узлов, которые подлежат удалению из результата. Узлы удаляются вместе со всем их содержимым.

Ниже приводится формальное определение функциональных update-выражений вида TRANSFORM INSERT и TRANSFORM DELETE через выражения вида TRANSFORM REPLACE.

1) INSERT INTO

for $var1 in locpath1 transform insert into $var2 in locpath2($var1) value expr($var1,$var2)

определяется, как

for $var1 in locpath1 transform replace $var2 in locpath2($var1) with element {node-name($var2)} {($var2/@*,expr($var1,$var2),$var2/*)}

2) INSERT PRECEDING

for $var1 in locpath1 transform insert preceding $var2 in locpath2($var1) value expr($var1,$var2)

определяется, как

for $var1 in locpath1 transform replace $var2 in locpath2($var1) with (expr($var1,$var2),$var2)

3) INSERT FOLLOWING

for $var1 in locpath1 transform insert following $var2 in locpath2($var1) value expr($var1,$var2)

определяется, как

for $var1 in locpath1 transform replace $var2 in locpath2($var1) with ($var2, expr($var1,$var2))

4) DELETE

for $var1 in locpath1 transform delete locpath2($var1)

определяется, как

for $var1 in locpath1 transform replace $var2 in locpath2($var1) with ()

Далее мы рассмотрим некоторые подходы к реализации функциональных update-выражений. Будут выделены возможные ограничения семантики таких выражений, которые позволяют упростить реализацию и сделать ее более эффективной.



Содержание  Назад  Вперед