tursodatabase/turso

Foreign Key CASCADE Cycles Cause Stack Overflow

Chiusa

#5154 aperta il 11 feb 2026

 (7 commenti) (1 reazione) (0 assegnatari)Rust (1001 fork)github user discovery
foreign keysgood first issuepanic

Metriche repository

Star
 (19.103 stelle)
Metriche merge PR
 (Merge medio 2g 11h) (147 PR mergiate in 30 g)

Descrizione

Description

Self-referential or circular foreign key CASCADE constraints cause stack overflow.

Reproducer

PRAGMA foreign_keys = ON;

CREATE TABLE T (
    id INTEGER PRIMARY KEY,
    parent_id INTEGER REFERENCES T(id) ON DELETE CASCADE
);
INSERT INTO T VALUES (1, NULL), (2, 1), (3, 2), (4, 3);
DELETE FROM T WHERE id = 1;

Crash Message

thread 'main' has overflowed its stack
fatal runtime error: stack overflow, aborting

Per SQLite documentation: "SQLite limits the depth of recursion of triggers in order to prevent a statement involving recursive triggers from using an unbounded amount of memory." The default MAX_TRIGGER_DEPTH is 1000. Turso has no depth limit.

core/translate/fkeys.rs:1444-1665 - Recursive subprograms without depth tracking.


This issue brought to you by Mikaël and Claude Code.

Guida contributor