Files
Hein 666eab7cec
Some checks failed
CI / Test (1.24) (push) Failing after -24m41s
CI / Test (1.25) (push) Failing after -24m25s
CI / Lint (push) Failing after -25m49s
CI / Build (push) Successful in -26m3s
Updated Readme files
2025-12-28 10:34:20 +02:00
..
2025-12-16 21:43:45 +02:00
2025-12-16 21:43:45 +02:00
2025-12-28 10:34:20 +02:00

YAML Reader

Reads database schema definitions from YAML files.

Overview

The YAML Reader parses YAML files that define database schemas in RelSpec's canonical YAML format and converts them into RelSpec's internal database model representation.

Features

  • Reads RelSpec's standard YAML schema format
  • Human-readable alternative to JSON format
  • Supports complete schema representation including:
    • Databases and schemas
    • Tables, columns, and data types
    • Constraints (PK, FK, unique, check)
    • Indexes
    • Relationships
    • Views and sequences

Usage

Basic Example

package main

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

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

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

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

CLI Example

# Read YAML schema and convert to GORM models
relspec --input yaml --in-file schema.yaml --output gorm --out-file models.go

# Convert YAML to PostgreSQL DDL
relspec --input yaml --in-file database.yaml --output pgsql --out-file schema.sql

# Transform YAML to JSON
relspec --input yaml --in-file schema.yaml --output json --out-file schema.json

Example YAML Schema

name: myapp
database_type: postgresql
schemas:
  - name: public
    tables:
      - name: users
        schema: public
        columns:
          id:
            name: id
            type: bigint
            not_null: true
            is_primary_key: true
            auto_increment: true
            sequence: 1
          username:
            name: username
            type: varchar
            length: 50
            not_null: true
            sequence: 2
          email:
            name: email
            type: varchar
            length: 100
            not_null: true
            sequence: 3
        constraints:
          pk_users:
            name: pk_users
            type: PRIMARY KEY
            columns:
              - id
          uq_users_username:
            name: uq_users_username
            type: UNIQUE
            columns:
              - username
        indexes:
          idx_users_email:
            name: idx_users_email
            columns:
              - email
            unique: false
            type: btree
      - name: posts
        schema: public
        columns:
          id:
            name: id
            type: bigint
            not_null: true
            is_primary_key: true
            sequence: 1
          user_id:
            name: user_id
            type: bigint
            not_null: true
            sequence: 2
          title:
            name: title
            type: varchar
            length: 200
            not_null: true
            sequence: 3
        constraints:
          fk_posts_user_id:
            name: fk_posts_user_id
            type: FOREIGN KEY
            columns:
              - user_id
            referenced_table: users
            referenced_schema: public
            referenced_columns:
              - id
            on_delete: CASCADE
            on_update: NO ACTION

Schema Structure

The YAML format mirrors RelSpec's internal model structure with human-readable syntax:

  • Database level: name, database_type, schemas
  • Schema level: name, tables, views, sequences
  • Table level: name, schema, columns, constraints, indexes, relationships
  • Column level: name, type, length, not_null, default, etc.

Notes

  • YAML format is more human-readable than JSON
  • Ideal for manual editing and version control
  • Comments are supported in YAML
  • Preserves complete schema information
  • Can be used for configuration and documentation