/dbx

database schema manager

Primary LanguageGo

readme

The database enhancement operations library. Support mysql postgresql oracle dmdb hive sqlite database type. Provides data structure definitions, data manipulation, and paging classes.


package main

import (
	_ "github.com/jackc/pgx/v5"
	_ "github.com/jackc/pgx/v5/stdlib"
	"github.com/linlexing/dbx/ddb"
	_ "github.com/linlexing/dbx/postgres"
	"github.com/linlexing/dbx/schema"
)

func main() {
	db, err := ddb.Openx("pgx", "postgres://common:123456@localhost:5432/postgres?sslmode=disable")
	if err != nil {
		panic(err)
	}
	//table struct define
	//create table
	tabTest := schema.NewTable("TestTab")
	tabTest.Columns = []*schema.Column{
		{
			Name:      "ID",
			Type:      schema.TypeString,
			MaxLength: 24,
		},
		{
			Name:      "Name",
			Type:      schema.TypeString,
			MaxLength: 50,
		},
		{
			Name: "Remark",
			Type: schema.TypeString,
		},
		{
			Name: "Age",
			Type: schema.TypeInt,
		},
		{
			Name: "Birthday",
			Type: schema.TypeDatetime,
		},
	}
	tabTest.PrimaryKeys = []string{"ID"}
	// list, err := tabTest.Extract(db.DriverName(), db)
	// if err != nil {
	// 	panic(err)
	// }
	// for _, l := range list {
	// 	println(l)
	// }
	//db change
	if err := tabTest.Update(db.DriverName(), db); err != nil {
		panic(err)
	}
	defer func() {
		if _, err := db.Exec("drop table TestTab"); err != nil {
			panic(err)
		}
	}()
	//change struct
	tabTest.ColumnByName("Name").MaxLength = 100
	tabTest.ColumnByName("Age").Type = schema.TypeFloat
	//remove Remark
	tabTest.Columns = append(tabTest.Columns[:2], tabTest.Columns[3:]...)
	tabTest.Columns = append(tabTest.Columns, &schema.Column{
		Name:      "Detail",
		Type:      schema.TypeString,
		MaxLength: 100,
	})
	// list, err = tabTest.Extract(db.DriverName(), db)
	// if err != nil {
	// 	panic(err)
	// }
	// for _, l := range list {
	// 	println(l)
	// }
	//db change
	if err := tabTest.Update(db.DriverName(), db); err != nil {
		panic(err)
	}
}