親イシュー: #29
依存: #30 (P0)
概要
CLAUDE.md には各プロトコルの TxExecutor が実装すべきAPIが記載されているが、コード上の強制が一切ない。scan(..., int64_t limit) 実装漏れによるTPC-Cランタイムクラッシュや、Status::WARN_NOT_FOUND 時の未初期化ポインタ参照など、コンパイル時に捕捉できたはずのバグが過去に発生している。
やること
template <class T>
concept TxExecutorLike = requires(T t, Storage s, std::string_view k, TupleBody** b) {
{ t.read(s, k, b) } -> std::same_as<Status>;
{ t.write(s, k, std::declval<TupleBody&&>()) } -> std::same_as<Status>;
{ t.insert(s, k, std::declval<TupleBody&&>()) } -> std::same_as<Status>;
{ t.delete_record(s, k) } -> std::same_as<Status>;
{ t.scan(s, k, false, k, false,
std::declval<std::vector<TupleBody*>&>()) } -> std::same_as<Status>;
{ t.scan(s, k, false, k, false,
std::declval<std::vector<TupleBody*>&>(), int64_t{}) } -> std::same_as<Status>;
{ t.commit() } -> std::same_as<bool>;
{ t.abort() } -> std::same_as<void>;
};
完了条件
scan(..., int64_t limit) の実装漏れがあるプロトコルはコンパイルエラーになること
- 全プロトコルのビルドが通ること
- CI が通ること
備考
- P6(分離レベルチェッカー)と近住のタスクで、組み合わせると効果的
親イシュー: #29
依存: #30 (P0)
概要
CLAUDE.md には各プロトコルの
TxExecutorが実装すべきAPIが記載されているが、コード上の強制が一切ない。scan(..., int64_t limit)実装漏れによるTPC-Cランタイムクラッシュや、Status::WARN_NOT_FOUND時の未初期化ポインタ参照など、コンパイル時に捕捉できたはずのバグが過去に発生している。やること
include/tx_executor_concept.hhにTxExecutorLikeconcept を定義する<TxExecutorLike Tx, ...>に変更するTxExecutorが concept を満たすことを確認するscan(..., int64_t limit)の実装漏れが居たプロトコル(ss2pl, d2pl, mvto, si等)の実装を椚認する完了条件
scan(..., int64_t limit)の実装漏れがあるプロトコルはコンパイルエラーになること備考