Files
relspecgo/pkg/readers/drizzle
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
..

Drizzle Reader

Reads TypeScript/JavaScript files containing Drizzle ORM schema definitions and extracts database schema information.

Overview

The Drizzle Reader parses Drizzle ORM schema files (TypeScript/JavaScript) that define database tables using Drizzle's schema builder and converts them into RelSpec's internal database model representation.

Features

  • Parses Drizzle schema definitions
  • Extracts table, column, and relationship information
  • Supports various Drizzle column types
  • Handles constraints and indexes

Usage

Basic Example

package main

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

func main() {
    options := &readers.ReaderOptions{
        FilePath: "/path/to/schema.ts",
    }

    reader := drizzle.NewReader(options)
    db, err := reader.ReadDatabase()
    if err != nil {
        panic(err)
    }

    fmt.Printf("Found %d schemas\n", len(db.Schemas))
}

CLI Example

# Read Drizzle schema and convert to JSON
relspec --input drizzle --in-file schema.ts --output json --out-file schema.json

# Convert Drizzle to GORM models
relspec --input drizzle --in-file schema/ --output gorm --out-file models.go

Example Drizzle Schema

import { pgTable, serial, varchar, text, timestamp, integer } from 'drizzle-orm/pg-core';
import { relations } from 'drizzle-orm';

export const users = pgTable('users', {
  id: serial('id').primaryKey(),
  username: varchar('username', { length: 50 }).notNull().unique(),
  email: varchar('email', { length: 100 }).notNull(),
  createdAt: timestamp('created_at').notNull().defaultNow(),
});

export const posts = pgTable('posts', {
  id: serial('id').primaryKey(),
  userId: integer('user_id').notNull().references(() => users.id, { onDelete: 'cascade' }),
  title: varchar('title', { length: 200 }).notNull(),
  content: text('content'),
});

export const usersRelations = relations(users, ({ many }) => ({
  posts: many(posts),
}));

export const postsRelations = relations(posts, ({ one }) => ({
  user: one(users, {
    fields: [posts.userId],
    references: [users.id],
  }),
}));

Notes

  • .generatedAlwaysAs(sqlexpr) sets Generated + GenerationExpression; .generatedAlwaysAsIdentity() / .generatedByDefaultAsIdentity() set Identity + IdentityGeneration
  • Supports both PostgreSQL and MySQL Drizzle schemas
  • Extracts relationship information from relations definitions
  • Schema defaults to public for PostgreSQL