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;

```

Reply to this note

Please Login to reply.

Discussion

まあ解説本買うか論文読めということなんだろうけど。

解説本、Kindle版は画像化されていて検索ができない。

Issue立ててみた。日本語で良かったんだろうか。

https://github.com/project-tsurugi/tsurugidb/issues/5