Skip to content

duythinht/dbml-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b5659a8 · Jul 13, 2022

History

37 Commits
May 24, 2020
May 24, 2020
May 24, 2020
Jul 13, 2022
May 17, 2020
Jul 13, 2022
May 18, 2020
Jul 13, 2022
May 24, 2020
May 19, 2020
Jul 13, 2022
Aug 17, 2020

Repository files navigation

DBML parser for Go

DBML-go is a Go parser for DBML syntax.

Installation

Go get

go get github.com/duythinht/dbml-go/...

Quick start

package main

import (
	"fmt"
	"os"

	"github.com/duythinht/dbml-go/parser"
	"github.com/duythinht/dbml-go/scanner"
)

func main() {
	f, _ := os.Open("test.dbml")
	s := scanner.NewScanner(f)
	parser := parser.NewParser(s)
	dbml, err := parser.Parse()
	if err != nil {
		fmt.Printf("%s\n", err)
		os.Exit(1)
	}

	// process dbml here
}

Go model generate

go get github.com/duythinht/dbml-go/cmd/dbml-go-gen-model
Usage:
  dbml-gen-go-model [flags]

Flags:
  -E, --exclude string          regex for exclude "from" files. Only applied if "from" is a directory
  -t, --fieldtags stringArray   go field tags (default [db,json,mapstructure])
  -f, --from string             source of dbml, can be https://dbdiagram.io/... | fire_name.dbml (default "database.dbml")
      --gen-table-name          should generate "TableName" function
  -h, --help                    help for dbml-gen-go-model
  -o, --out string              output folder (default "model")
  -p, --package string          single for multiple files (default "model")
      --recursive               recursive search directory. Only applied if "from" is a directory
      --remember-alias          should remember table alias. Only applied if "from" is a directory

Example:

input:

// database.dbml
Table users as U {
  id int [pk, unique, increment] // auto-increment
  full_name varchar [not null, unique, default: 1]
  created_at timestamp
  country_code int
  Note: 'This is simple note'
}

Run:

mkdir -p model
dbml-gen-go-model -f database.dbml -o model -p model

output: model/users.table.go

// Code generated by dbml-gen-go-model. DO NOT EDIT.
// Supported by duythinht@2020
package model

// User is generated type for table 'users'
type User struct {
	ID          int    `db:"id" json:"id" mapstructure:"id"`
	FullName    string `db:"full_name" json:"full_name" mapstructure:"full_name"`
	CreatedAt   int    `db:"created_at" json:"created_at" mapstructure:"created_at"`
	CountryCode int    `db:"country_code" json:"country_code" mapstructure:"country_code"`
}

// table 'users' columns list struct
type __tbl_users_columns struct {
	ID          string
	FullName    string
	CreatedAt   string
	CountryCode string
}

// table 'users' metadata struct
type __tbl_users struct {
	Name    string
	Columns __tbl_users_columns
}

// table 'users' metadata info
var _tbl_users = __tbl_users{
	Columns: __tbl_users_columns{
		CountryCode: "country_code",
		CreatedAt:   "created_at",
		FullName:    "full_name",
		ID:          "id",
	},
	Name: "users",
}

// GetColumns return list columns name for table 'users'
func (*__tbl_users) GetColumns() []string {
	return []string{"id", "full_name", "created_at", "country_code"}
}

// T return metadata info for table 'users'
func (*User) T() *__tbl_users {
	return &_tbl_users
}