⚙️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 ◄── VDBESQLite (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.