транзакции webSQL с JayData

Этот вопрос пришел на форум JayData, но я решил поделиться им здесь, так как это интересная тема, и, возможно, она может быть полезна и другим.

V3nom » 23 окт 2012, 14:06

Я изо всех сил пытаюсь найти информацию о транзакциях websql в JayData. Может кто подскажет или ссылку?

http://jaydata.org/forum/viewtopic.php?f=3&t=101&sid=8accd7bf5bed872b6e88d36004a280c5


person Peter Aron Zentai    schedule 23.10.2012    source источник


Ответы (1)


Транзакции — непростая вещь, которую можно поддерживать независимо от хранилища. Поэтому в JayData нет явного управления транзакциями, вместо этого вы можете использовать неявное поведение EntityContext «все или ничего». Что касается webSQL, каждый дельта-пакет (то есть: несколько элементов add/update и saveChanges() в конце) выполняется в одной и той же транзакции webSQL. Если при сохранении каких-либо элементов произойдет ошибка, все предыдущие вставки/обновления будут отменены.

Очень простой пример, демонстрирующий это в действии: следующий код вставляет два элемента в таблицу и создает сценарий ошибки дублирующего ключа. Конечным результатом является то, что в таблице не будет строк, даже если вторая вставка была отклонена из-за дублирования.

$data.Entity.extend("item", {
    ID: { key: true, computed: true, type: 'int' },
    data: { type: 'string' }
});

$data.EntityContext.extend("ItemsContainer", {
    items: { type: $data.EntitySet, elementType: item }
});

var offlinedb = new ItemsContainer({
    name: 'sqLite',
    databaseName: 'itemdb'
});

function createLocalData() {
    offlinedb.items.add({ data: 'apple' });
    offlinedb.items.add({ data: 'orange', ID:1 });
    offlinedb.saveChanges(
        function () {

        }
    );
}

Это создает программные откаты, вы можете перехватывать обработчики событий на уровне набора и контекста и генерировать в них исключение. Подробнее читайте здесь: http://jaydata.org/blog/entitycontext-and-entityset-scoped-event-handlers-in-jaydata-1.2

person Peter Aron Zentai    schedule 23.10.2012
comment
тем временем мы реализовали обработку транзакций, вы можете прочитать об этом здесь: jaydata.org/ блог/база данных-обработка-транзакций-в-jaydata - person Gabor Dolla; 11.03.2013