ruto on Nostr: Tsurugi ...
Tsurugi (劔)よくわからない。LTXの仕様がドキュメント化されていなくて(解説本には書いてあるかも)、それっぽいコードを実行したら普通にwrite skewが起きた。使い方が悪いのかもしれない。
次のSQLを実行した場合、serializableでないのでどちらかはCOMMITできないはずだけど、なぜかコミットできる。
```sql
-- 準備
CREATE TABLE test (
id int PRIMARY KEY,
value int NOT NULL
);
INSERT INTO test (id, value) VALUES (1, 1);
COMMIT;
-- transaction 1
BEGIN LONG TRANSACTION WRITE PRESERVE test;
-- 本来は
-- INSERT INTO test (id, value) VALUES (2, SELECT SUM(VALUE) + 1 FROM test);
-- と書きたいが、まだサポートされていないので、クライアント側でSELECT結果をINSERTに渡しているものとする。
SELECT SUM(value) + 1 FROM test;
INSERT INTO test (id, value) VALUES (2, 2);
-- transaction 2 (別の接続で実行する)
BEGIN LONG TRANSACTION WRITE PRESERVE test;
SELECT SUM(value) + 1 FROM test;
INSERT INTO test (id, value) VALUES (3, 2);
-- transaction 1に戻る
COMMIT;
-- transaction 2に戻る
COMMIT;
```
Published at
2023-10-07 08:19:31Event JSON
{
"id": "30a8baaa11893e4951c0330323673fd595c8518fa47d1b86ac18af50d2583803",
"pubkey": "2888961a564e080dfe35ad8fc6517b920d2fcd2b7830c73f7c3f9f2abae90ea9",
"created_at": 1696666771,
"kind": 1,
"tags": [],
"content": "Tsurugi (劔)よくわからない。LTXの仕様がドキュメント化されていなくて(解説本には書いてあるかも)、それっぽいコードを実行したら普通にwrite skewが起きた。使い方が悪いのかもしれない。\n次のSQLを実行した場合、serializableでないのでどちらかはCOMMITできないはずだけど、なぜかコミットできる。\n\n\n```sql\n-- 準備\n\nCREATE TABLE test (\n id int PRIMARY KEY,\n value int NOT NULL\n);\n\nINSERT INTO test (id, value) VALUES (1, 1);\n\nCOMMIT;\n\n\n-- transaction 1\nBEGIN LONG TRANSACTION WRITE PRESERVE test;\n\n-- 本来は\n-- INSERT INTO test (id, value) VALUES (2, SELECT SUM(VALUE) + 1 FROM test);\n-- と書きたいが、まだサポートされていないので、クライアント側でSELECT結果をINSERTに渡しているものとする。\n\nSELECT SUM(value) + 1 FROM test;\nINSERT INTO test (id, value) VALUES (2, 2);\n\n-- transaction 2 (別の接続で実行する)\nBEGIN LONG TRANSACTION WRITE PRESERVE test;\n\nSELECT SUM(value) + 1 FROM test;\nINSERT INTO test (id, value) VALUES (3, 2);\n\n-- transaction 1に戻る\n\nCOMMIT;\n\n-- transaction 2に戻る\n\nCOMMIT;\n```",
"sig": "3adcdaa4f3c87534e1157ddb4ff22f605dd213836750eb7b11789470daeab91aa35e61a4a39ffb0df575d9ea0a984d08a33939ae19ec67f299fb607a25eb5139"
}