# salonig405-hub/sentineldb architecture

> Architecture diagram of the GitHub repository salonig405-hub/sentineldb, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-15). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/salonig405-hub/sentineldb
- Repository: https://github.com/salonig405-hub/sentineldb

## Overview

SentinelDB is a command-line database: users enter commands in its console, which tokenizes and parses them before execution and displays results. Its query language covers database and table management, record insert/fetch/update/delete/count, and memory/flush operations. The storage engine coordinates catalog metadata, record serialization, pages, and disk-backed memory management. The source excerpts establish the console and storage interactions; executor-to-storage links are shown as unverified because the executor implementation excerpt was not provided.

Main entry points: [`SentinelDB-main/src/main.cpp`](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/main.cpp) (CLI loop), [`SentinelDB-main/src/storage/storage_engine.cpp`](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/storage_engine.cpp) (Storage engine), [`SentinelDB-main/src/query/executor.cpp`](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/executor.cpp) (Execution engine), [`SentinelDB-main/src/memory/memory_manager.cpp`](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/memory/memory_manager.cpp) (Memory manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Command interface"]
  node_main["CLI loop<br/>[main.cpp]"]
  node_console["Console<br/>[console.cpp]"]
  node_printer["Table printer<br/>[table_printer.cpp]"]
end

subgraph group_query["Query processing"]
  node_lexer["Lexer<br/>[lexer.cpp]"]
  node_parser["Parser<br/>[parser.cpp]"]
  node_ast["Statement AST<br/>[ast.hpp]"]
  node_executor["Execution engine<br/>[executor.cpp]"]
end

subgraph group_data["Database storage"]
  node_storage["Storage engine<br/>[storage_engine.cpp]"]
  node_catalog["Catalog manager"]
  node_schema["Table schemas<br/>[schema.cpp]"]
  node_record["Record codec<br/>[record.cpp]"]
  node_page["Data pages<br/>[page.cpp]"]
  node_disk[("Disk manager<br/>[disk_manager.cpp]")]
end

subgraph group_memory["Memory management"]
  node_memory["Memory manager<br/>[memory_manager.cpp]"]
  node_veh["Fault handler<br/>[veh_handler.cpp]"]
end

node_user(("User"))

node_user -->|"enters commands"| node_main
node_main -->|"reads input"| node_console
node_main -->|"tokenizes"| node_lexer
node_lexer -.->|"provides tokens"| node_parser
node_main -->|"parses tokens"| node_parser
node_parser -->|"builds statements"| node_ast
node_main -->|"executes statement"| node_executor
node_executor -.->|"dispatches operations"| node_storage
node_executor -.->|"uses metadata"| node_catalog
node_executor -.->|"returns rows"| node_printer
node_main -->|"prints results"| node_printer
node_main -->|"reports results"| node_console
node_storage -->|"updates metadata"| node_catalog
node_storage -->|"accesses pages"| node_memory
node_storage -->|"allocates pages"| node_disk
node_storage -->|"serializes records"| node_record
node_storage -->|"reads and modifies"| node_page
node_catalog -->|"manages schemas"| node_schema
node_memory -->|"loads and flushes"| node_disk
node_memory -->|"registers handler"| node_veh

click node_main "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/main.cpp"
click node_console "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/terminal/console.cpp"
click node_printer "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/terminal/table_printer.cpp"
click node_lexer "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/lexer.cpp"
click node_parser "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/parser.cpp"
click node_ast "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/include/query/ast.hpp"
click node_executor "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/executor.cpp"
click node_storage "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/storage_engine.cpp"
click node_catalog "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/catalog/catalog_manager.cpp"
click node_schema "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/catalog/schema.cpp"
click node_record "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/record.cpp"
click node_page "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/page.cpp"
click node_disk "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/disk_manager.cpp"
click node_memory "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/memory/memory_manager.cpp"
click node_veh "https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/memory/veh_handler.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_console,node_printer,node_user toneBlue
class node_lexer,node_parser,node_ast,node_executor toneAmber
class node_storage,node_catalog,node_schema,node_record,node_page,node_disk toneMint
class node_memory,node_veh toneRose
```

## Components

### Command interface

- [CLI loop](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/main.cpp): `SentinelDB-main/src/main.cpp`
- [Console](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/terminal/console.cpp): `SentinelDB-main/src/terminal/console.cpp`
- [Table printer](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/terminal/table_printer.cpp): `SentinelDB-main/src/terminal/table_printer.cpp`

### Query processing

- [Lexer](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/lexer.cpp): `SentinelDB-main/src/query/lexer.cpp`
- [Parser](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/parser.cpp): `SentinelDB-main/src/query/parser.cpp`
- [Statement AST](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/include/query/ast.hpp): `SentinelDB-main/include/query/ast.hpp`
- [Execution engine](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/query/executor.cpp): `SentinelDB-main/src/query/executor.cpp`

### Database storage

- [Storage engine](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/storage_engine.cpp): `SentinelDB-main/src/storage/storage_engine.cpp`
- [Catalog manager](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/catalog/catalog_manager.cpp): `SentinelDB-main/src/catalog/catalog_manager.cpp`
- [Table schemas](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/catalog/schema.cpp): `SentinelDB-main/src/catalog/schema.cpp`
- [Record codec](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/record.cpp): `SentinelDB-main/src/storage/record.cpp`
- [Data pages](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/page.cpp): `SentinelDB-main/src/storage/page.cpp`
- [Disk manager](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/storage/disk_manager.cpp): `SentinelDB-main/src/storage/disk_manager.cpp`

### Memory management

- [Memory manager](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/memory/memory_manager.cpp): `SentinelDB-main/src/memory/memory_manager.cpp`
- [Fault handler](https://github.com/salonig405-hub/sentineldb/blob/main/SentinelDB-main/src/memory/veh_handler.cpp): `SentinelDB-main/src/memory/veh_handler.cpp`

### Other components

- **User**

## Connections

- User → CLI loop: enters commands (evidence: `SentinelDB-main/src/main.cpp`)
- CLI loop → Console: reads input (evidence: `SentinelDB-main/src/main.cpp`)
- CLI loop → Lexer: tokenizes (evidence: `SentinelDB-main/src/main.cpp`)
- Lexer → Parser: provides tokens
- CLI loop → Parser: parses tokens (evidence: `SentinelDB-main/src/main.cpp`)
- Parser → Statement AST: builds statements
- CLI loop → Execution engine: executes statement (evidence: `SentinelDB-main/src/main.cpp`)
- Execution engine → Storage engine: dispatches operations
- Execution engine → Catalog manager: uses metadata
- Execution engine → Table printer: returns rows
- CLI loop → Table printer: prints results (evidence: `SentinelDB-main/src/main.cpp`)
- CLI loop → Console: reports results (evidence: `SentinelDB-main/src/main.cpp`)
- Storage engine → Catalog manager: updates metadata (evidence: `SentinelDB-main/src/storage/storage_engine.cpp`)
- Storage engine → Memory manager: accesses pages (evidence: `SentinelDB-main/src/storage/storage_engine.cpp`)
- Storage engine → Disk manager: allocates pages (evidence: `SentinelDB-main/src/storage/storage_engine.cpp`)
- Storage engine → Record codec: serializes records (evidence: `SentinelDB-main/src/storage/storage_engine.cpp`)
- Storage engine → Data pages: reads and modifies (evidence: `SentinelDB-main/src/storage/storage_engine.cpp`)
- Catalog manager → Table schemas: manages schemas
- Memory manager → Disk manager: loads and flushes (evidence: `SentinelDB-main/src/memory/memory_manager.cpp`)
- Memory manager → Fault handler: registers handler (evidence: `SentinelDB-main/src/memory/memory_manager.cpp`)
