![]() |
|
|||
WebMoney: WMZ Z294115950220 WMR R409981405661 WME E134003968233 |
Visa 4274 3200 2453 6495 |
Важно: Этот интерфейс
экспериментален и подлежит изменению без уведомления.
Предположим, что есть место, принимающее базу данных в состоянии S0.
Модификации сделаны, база данных перешла в состояние S1 и зарегистрирован
changeset ("local" changeset). Затем changeset на основе S0 получается от
другого места ("remote" changeset) и применяется
к базе данных. База данных находится тогда в состоянии (S1+"remote"),
где точное состояние зависит от любых решений разрешения конфликтов
(OMIT или REPLACE) сделанных, применяя "remote".
Перебазирование changeset должно обновить его, чтобы принять те решения
разрешения конфликтов во внимание, так, чтобы те же самые конфликты не были
решены в другом месте в сети. Например, если местные и отдаленные changesets содержат INSERT того же
самого ключа на "CREATE TABLE t1(a PRIMARY KEY, b)": local: INSERT INTO t1 VALUES(1, 'v1');
remote: INSERT INTO t1 VALUES(1, 'v2'); и разрешение конфликтов REPLACE, тогда изменение INSERT удалено из
местного changeset (это было отвергнуто). Или, если разрешением конфликтов
был "OMIT", то местный changeset изменяется, чтобы вместо этого содержать: UPDATE t1 SET b = 'v2' WHERE a=1; Изменения в местном changeset перебазируются следующим образом: Если конфликт с удаленным обновлением, и резолюция OMIT, значения
old.* перебазирующиеся, используя значения new.* в удаленном изменении.
Или, если резолюция REPLACE, то изменение копируется в перебазированный
changeset с обновлениями колонок, также обновленных противоречивым удаленным
UPDATE. Если это означает, что никакие колонки не были бы
обновлены, изменение пропущено. Местное изменение может быть перебазирующимся против многократных
отдаленных изменений одновременно. Если единственный ключ изменяется
многократным отдаленным changeset, они объединены следующим образом, прежде
чем местный changeset перебазируется: Обратите внимание на то, что разрешения конфликтов от многократного
отдаленного changeset объединены на основе поля, а не строки.
Это означает, что в случае многократных операций по удаленному обновлению,
некоторые области единственного местного изменения могут быть
перебазирующимися для REPLACE, в то время как другие
перебазирующиеся для OMIT. Чтобы повторно основывать местный changeset, отдаленный changeset должен
сначала быть применен к локальной базе данных, используя
sqlite3changeset_apply_v2() и буфер захваченной информации. Тогда:
Choose any three.
Session Module C Interface
Перебазирование changesets
typedef struct sqlite3_rebaser sqlite3_rebaser;