пытается создать триггер в Xcode / Swift5 / GRDB. триггер в кодовом блоке ниже не работает, поэтому я перемещаю его и вижу ошибку в заголовке [я удалил текст оператора SQL из заголовка]. странная часть в том, что DB Browser будет запускать SQL и СОЗДАТЬ триггер просто отлично. и приложение отвечает, как и ожидалось, с помощью внешнего триггера. и кажется, что UPDATE внутри прекрасно работает вне триггера.
открыл выпуск с репозиторием GRDB github ... просто передавая необработанный SQL thru. проверьте несколько валидаторов онлайн. все либо сказали, что в этом нет ничего плохого, либо потерпели неудачу на CREATE TABLE
в блоке ниже ... так что не верьте ни одному из валидаторов
вспомнил, что у меня есть DraftCode на ipad, с включенным phpLiteAdmin. отправьте SQL и получите ту же ошибку incomplete input
. вернитесь на рабочий стол ... обновите PHP и получите phpLiteAdmin
... та же ошибка.
так ... это либо ошибка SQLite, как https://github.com/sqlitebrowser/sqlitebrowser/issues/1470? или, скорее, синтаксическая ошибка с моей стороны. Я никогда не играл с триггерами раньше ... так что я могу быть тупицей, упускающим из виду очевидное. если да, пожалуйста, помогите мне исправить.
еще один интересный момент ... в phpLiteAdmin
, используя триггер-компоновщик, все работает просто отлично. но попытка запустить результирующий оператор create SQL, скопировать / удалить триггер / и вставить обратно, выдает ту же ошибку
SQLite version: 3.31.1
PHP version: 7.3.14
phpLiteAdmin version: 1.9.8.2
, любую помощь по созданию триггера в GRDB
или phpLiteAdmin
как SQL заявление будет оценено. спасибо.
CREATE TABLE CartItem (
id INTEGER PRIMARY KEY AUTOINCREMENT,
transactionID INTEGER DEFAULT NULL,
wasReceived BOOLEAN,
sku VARCHAR,
label VARCHAR,
description VARCHAR,
unitLabel VARCHAR,
cost DOUBLE,
wholesale DOUBLE,
retail DOUBLE,
tax DOUBLE,
cartQty FLOAT,
modified REAL
);
-- because 'transaction' is reserved
CREATE TABLE TransXion (
id INTEGER PRIMARY KEY AUTOINCREMENT,
transactionNum VARCHAR,
shippingSubtotal DOUBLE,
taxableSubtotal DOUBLE,
nontaxableSubtotal DOUBLE,
subtotal DOUBLE,
total DOUBLE,
paymentsSubtotal DOUBLE,
balance DOUBLE,
itemsWereRcvd BOOLEAN,
locked BOOLEAN,
modified REAL
);
CREATE TRIGGER insert_TransXion_Dollar_Values_trigger
AFTER INSERT ON CartItem
WHEN transactionID = new.transactionID
BEGIN
UPDATE TransXion
SET total = (
SELECT SUM(ci.retail) AS retail_total
FROM CartItem ci
WHERE ci.transactionID = TransXion.id
)
WHERE id IN (
SELECT transactionID
FROM CartItem ci
WHERE ci.transactionID = TransXion.id
);
END;