tursodatabase/turso

Foreign Key CASCADE Cycles Cause Stack Overflow

Open

#5 154 ouverte le 11 févr. 2026

Voir sur GitHub
 (7 commentaires) (1 réaction) (0 assignés)Rust (1 001 forks)github user discovery
foreign keysgood first issuepanic

Métriques du dépôt

Stars
 (19 103 stars)
Métriques de merge PR
 (Métriques PR en attente)

Description

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.

Guide contributeur