erd.sketch

SQL to Go: models from a DDL script

What follows is not a mock-up: it is the real output of the generator for the script on the left. You get the same code in the editor under “Codegen → Go”.

The inputschema.sql
CREATE TABLE users (
    id BIGINT NOT NULL PRIMARY KEY,
    email       VARCHAR(255) NOT NULL UNIQUE,
    full_name   VARCHAR(120),
    is_active   BOOLEAN NOT NULL,
    created_at  TIMESTAMP NOT NULL
);

CREATE TABLE orders (
    id BIGINT NOT NULL PRIMARY KEY,
    user_id     BIGINT NOT NULL REFERENCES users(id),
    total       DECIMAL(12,2) NOT NULL,
    note        TEXT,
    placed_at   TIMESTAMP NOT NULL
);
What comes outmodels.go
import (
	"time"
)

type Users struct {
	ID        int64     `json:"id"`  // BIGINT
	Email     string    `json:"email"`
	FullName  *string   `json:"full_name,omitempty"`
	IsActive  bool      `json:"is_active"`
	CreatedAt time.Time `json:"created_at"`
}

type Orders struct {
	ID       int64     `json:"id"`  // BIGINT
	UserID   int64     `json:"user_id"`  // BIGINT → users.id
	Total    string    `json:"total"`  // DECIMAL(12,2)
	Note     *string   `json:"note,omitempty"`
	PlacedAt time.Time `json:"placed_at"`
}
Open the editor

The script stays in the browser: both parsing and generation run on your machine, nothing goes to a server.

How the types land

in SQLin the model
BIGINTint64
VARCHAR(255)string
BOOLEANbool
TIMESTAMPtime.Time
DECIMAL(12,2)string
TEXT*string
Optional field
*string
Column name
json:"full_name,omitempty"
Relation
// BIGINT → users.id