⚙️Engine & VDBE

SQLite übersetzt jede Anweisung in ein Programm für eine eigene virtuelle Maschine, die VDBE (Virtual DataBase Engine). Hier läuft die echte SQLite 3 als WebAssembly (sql.js) – du siehst das Programm, das sie wirklich erzeugt, und kannst es Instruktion für Instruktion verfolgen.

🏗️Architektur

Kern

Virtuelle Maschine (VDBE)

Quelltext: vdbe.c

Führt das Bytecode-Programm Instruktion für Instruktion aus – mit Registern und Cursorn. EXPLAIN zeigt genau dieses Programm.

"SELECT …"  ──►  Tokens  ──►  Syntaxbaum  ──►  Bytecode
                                                   │
                                                   ▼
   Datei  ◄──  VFS  ◄──  Pager (Seiten)  ◄──  B-Baum  ◄──  VDBE
SQLite (WebAssembly) wird geladen …

📌Gut zu wissen

💡 Register statt Stack
Seit Version 3.5.5 (Januar 2008) ist die VDBE eine Registermaschine statt einer Stapelmaschine. P1–P3 sind meist Register- oder Cursor-Nummern bzw. Sprungziele, P4 ein beliebiger Wert, P5 Flags.
✅ Prepared Statements
sqlite3_prepare_v2() erzeugt dieses Programm einmal; sqlite3_step() führt es bis zum nächsten ResultRow aus. Wiederverwenden spart Tokenizer, Parser und Planer.
⚠️ Kein stabiles Format
Die Opcodes sind ein internes Detail und ändern sich zwischen Versionen. Für Diagnosen ist EXPLAIN QUERY PLAN die richtige Schnittstelle.