Files
relspecgo/pkg/readers/sqlite
warkanum 9cc10715e3 feat: generated and identity columns for mssql, sqlite, drizzle, typeorm, bun and gorm readers
- mssql: write computed columns (AS (expr) PERSISTED) and identity; read computed definition and identity
- sqlite: write GENERATED ALWAYS AS (expr) STORED; read generated columns via table_xinfo and parse the expression
- drizzle: generatedAlwaysAs / generated(Always|ByDefault)AsIdentity, read and write
- typeorm: asExpression/generatedType and identity decorators, read and write; decorator scan is now quote-aware
- bun, gorm readers: read generated and identity markers
- readmes updated
2026-10-02 23:04:04 +02:00
..
2026-02-07 09:30:45 +02:00

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
  • Generated columns (virtual and stored) are read via PRAGMA table_xinfo; the expression is parsed from the CREATE TABLE SQL
  • 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