# skysaksham/pydbql architecture

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

- Interactive diagram: https://gitdiagram.com/skysaksham/pydbql
- Repository: https://github.com/skysaksham/pydbql

## Overview

PyDBQL is an interactive, file-based encrypted database and query-language application. Its principal workflow is a user command entering the shell, being parsed and dispatched, then creating or selecting a database/table, inserting validated rows, or retrieving and displaying rows with optional filtering. Metadata and row files under db/ are encrypted with the repository key. The graph reflects the current src/ implementation; legacy_code is an earlier, separate implementation. Source excerpts do not establish finer internal details beyond these calls.

Main entry points: [`src/parser.py`](https://github.com/skysaksham/pydbql/blob/main/src/parser.py) (Command parser), [`src/draw_table.py`](https://github.com/skysaksham/pydbql/blob/main/src/draw_table.py) (Read and filter rows), [`src/create_table.py`](https://github.com/skysaksham/pydbql/blob/main/src/create_table.py) (Table definition), [`src/add_data.py`](https://github.com/skysaksham/pydbql/blob/main/src/add_data.py) (Insert validation)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_shell["Interactive query shell"]
  node_entry["Application entry<br/>[main.py]"]
  node_parser["Command parser<br/>[parser.py]"]
end

subgraph group_operations["Database operations"]
  node_dbops["Database create/drop"]
  node_metadata["Table definition<br/>[create_table.py]"]
  node_rows["Insert validation<br/>[add_data.py]"]
  node_reader["Read and filter rows<br/>[draw_table.py]"]
end

subgraph group_storage["Encrypted file storage"]
  node_crypto["Encrypt/decrypt<br/>[encrypt_decrypt.py]"]
  node_catalog[("Database files")]
  node_key["Fernet key<br/>[key.txt]"]
end

subgraph group_presentation["Table presentation"]
  node_renderer["Table renderer<br/>[draw_table.py]"]
end

node_user(("Database user"))

node_user -->|"starts"| node_entry
node_entry -->|"starts shell"| node_parser
node_user -->|"enters commands"| node_parser
node_parser -->|"creates or drops"| node_dbops
node_parser -->|"creates tables"| node_metadata
node_parser -->|"inserts rows"| node_rows
node_parser -->|"requests rows"| node_reader
node_parser -->|"lists metadata"| node_renderer
node_dbops -->|"creates or removes"| node_catalog
node_metadata -->|"writes schema"| node_catalog
node_metadata -->|"encrypts metadata"| node_crypto
node_rows -->|"reads schema"| node_metadata
node_rows -->|"reads and appends"| node_catalog
node_rows -->|"encrypts rows"| node_crypto
node_reader -->|"reads schema"| node_metadata
node_reader -->|"reads rows"| node_catalog
node_reader -->|"decrypts rows"| node_crypto
node_reader -->|"displays results"| node_renderer
node_crypto -->|"loads key"| node_key
node_renderer -->|"prints tables"| node_user

click node_entry "https://github.com/skysaksham/pydbql/blob/main/main.py"
click node_parser "https://github.com/skysaksham/pydbql/blob/main/src/parser.py"
click node_dbops "https://github.com/skysaksham/pydbql/blob/main/src/drop_and_create_db.py"
click node_metadata "https://github.com/skysaksham/pydbql/blob/main/src/create_table.py"
click node_rows "https://github.com/skysaksham/pydbql/blob/main/src/add_data.py"
click node_reader "https://github.com/skysaksham/pydbql/blob/main/src/draw_table.py"
click node_crypto "https://github.com/skysaksham/pydbql/blob/main/src/encrypt_decrypt.py"
click node_catalog "https://github.com/skysaksham/pydbql/tree/main/db"
click node_key "https://github.com/skysaksham/pydbql/blob/main/db/key.txt"
click node_renderer "https://github.com/skysaksham/pydbql/blob/main/src/draw_table.py"

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_entry,node_parser toneBlue
class node_dbops,node_metadata,node_rows,node_reader,node_user toneAmber
class node_crypto,node_catalog,node_key toneMint
class node_renderer toneRose
```

## Components

### Interactive query shell

- [Application entry](https://github.com/skysaksham/pydbql/blob/main/main.py): `main.py`
- [Command parser](https://github.com/skysaksham/pydbql/blob/main/src/parser.py): `src/parser.py`

### Database operations

- [Database create/drop](https://github.com/skysaksham/pydbql/blob/main/src/drop_and_create_db.py): `src/drop_and_create_db.py`
- [Table definition](https://github.com/skysaksham/pydbql/blob/main/src/create_table.py): `src/create_table.py`
- [Insert validation](https://github.com/skysaksham/pydbql/blob/main/src/add_data.py): `src/add_data.py`
- [Read and filter rows](https://github.com/skysaksham/pydbql/blob/main/src/draw_table.py): `src/draw_table.py`

### Encrypted file storage

- [Encrypt/decrypt](https://github.com/skysaksham/pydbql/blob/main/src/encrypt_decrypt.py): `src/encrypt_decrypt.py`
- [Database files](https://github.com/skysaksham/pydbql/tree/main/db): `db`
- [Fernet key](https://github.com/skysaksham/pydbql/blob/main/db/key.txt): `db/key.txt`

### Table presentation

- [Table renderer](https://github.com/skysaksham/pydbql/blob/main/src/draw_table.py): `src/draw_table.py`

### Other components

- **Database user**

## Connections

- Database user → Application entry: starts
- Application entry → Command parser: starts shell
- Database user → Command parser: enters commands
- Command parser → Database create/drop: creates or drops
- Command parser → Table definition: creates tables
- Command parser → Insert validation: inserts rows
- Command parser → Read and filter rows: requests rows
- Command parser → Table renderer: lists metadata
- Database create/drop → Database files: creates or removes
- Table definition → Database files: writes schema
- Table definition → Encrypt/decrypt: encrypts metadata
- Insert validation → Table definition: reads schema
- Insert validation → Database files: reads and appends
- Insert validation → Encrypt/decrypt: encrypts rows
- Read and filter rows → Table definition: reads schema
- Read and filter rows → Database files: reads rows
- Read and filter rows → Encrypt/decrypt: decrypts rows
- Read and filter rows → Table renderer: displays results
- Encrypt/decrypt → Fernet key: loads key
- Table renderer → Database user: prints tables
