Files
relspecgo/pkg/readers/sqlite/README.md
Hein d0630b4899
Some checks failed
CI / Test (1.24) (push) Successful in -23m3s
CI / Test (1.25) (push) Successful in -22m45s
CI / Lint (push) Failing after -25m11s
CI / Build (push) Failing after -25m26s
Integration Tests / Integration Tests (push) Successful in -25m38s
feat: Added Sqlite reader
2026-02-07 09:30:45 +02:00

1.7 KiB

SQLite Reader

Reads database schema from SQLite database files.

Usage

import (
    "git.warky.dev/wdevs/relspecgo/pkg/readers"
    "git.warky.dev/wdevs/relspecgo/pkg/readers/sqlite"
)

// Using file path
options := &readers.ReaderOptions{
    FilePath: "path/to/database.db",
}

reader := sqlite.NewReader(options)
db, err := reader.ReadDatabase()

// Or using connection string
options := &readers.ReaderOptions{
    ConnectionString: "path/to/database.db",
}

Features

  • Reads tables with columns and data types
  • Reads views with definitions
  • Reads primary keys
  • Reads foreign keys with CASCADE actions
  • Reads indexes (non-auto-generated)
  • Maps SQLite types to canonical types
  • Derives relationships from foreign keys

SQLite Specifics

  • SQLite doesn't support schemas, creates single "main" schema
  • Uses pure Go driver (modernc.org/sqlite) - no CGo required
  • Supports both file path and connection string
  • Auto-increment detection for INTEGER PRIMARY KEY columns
  • Foreign keys require PRAGMA foreign_keys = ON to be set

Example Schema

PRAGMA foreign_keys = ON;

CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(50) NOT NULL UNIQUE,
    email VARCHAR(100) NOT NULL
);

CREATE TABLE posts (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    user_id INTEGER NOT NULL,
    title VARCHAR(200) NOT NULL,
    FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE
);

Type Mappings

SQLite Type Canonical Type
INTEGER, INT int
BIGINT int64
REAL, DOUBLE float64
TEXT, VARCHAR string
BLOB bytea
BOOLEAN bool
DATE date
DATETIME, TIMESTAMP timestamp