art

package
v0.9.9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 21, 2021 License: Apache-2.0 Imports: 21 Imported by: 0

Documentation

Index

Constants

View Source
const (
	CtrlExitcd   = 99
	CtrlRoomTree = "tree"
)
View Source
const (
	LvlDebug = 300
	LvlTrace = 200
	LvlError = 100

	EnvSrcDb     = "SRC-DB"
	EnvOutDb     = "OUT-DB"
	EnvUser      = "USER"
	EnvHost      = "HOST"
	EnvDate      = "DATE"
	EnvRule      = "ENV-CHECK-RULE"
	EnvRuleEmpty = "EMPTY"

	SqlNull  = "NULL"
	SqlTrue  = "TRUE"
	SqlFalse = "FALSE"

	DiffSum = "sum" // 分别对比`-s`和多个`-d` 间的表名差异
	DiffTrg = "trg" // 比较 trigger
	DiffTbl = "tbl" // 比较 column, index

	Joiner = "\n"

	SyncTbl = "tbl" // 同步表和索引
	SyncTrg = "trg" // 同步trigger
	SyncRow = "row" // 同步数据
)
View Source
const (
	ShowTblName = "${TABLE_NAME}"
	ShowTblDdl  = "${TABLE_DDL}"
	ShowTgrName = "${TRIGGER_NAME}"
	ShowTgrDdl  = "${TRIGGER_DDL}"
	ShowColBase = "${COLUMNS_BASE}"
	ShowColFull = "${COLUMNS_FULL}"
)
View Source
const (
	HoldTop = "ITSELF"

	CmndEnv = "ENV"
	CmndVar = "VAR"
	CmndRef = "REF"
	CmndStr = "STR"
	CmndSeq = "SEQ"
	CmndTbl = "TBL"
	CmndRun = "RUN"
	CmndOut = "OUT"

	ParaOne = "ONE"
	ParaFor = "FOR"
	ParaEnd = "END"
	ParaHas = "HAS"
	ParaNot = "NOT"
)

Variables

View Source
var (
	MsgLevel = LvlDebug
	DiffType = map[string]bool{DiffSum: true, DiffTrg: true, DiffTbl: true}
	SyncType = map[string]bool{SyncTbl: true, SyncTrg: true, SyncRow: true}
	EmptyArr = make([]interface{}, 0)
	CtrlRoom = &Room{}
)
View Source
var ShowParaRgx = regexp.MustCompile(`\$\{(TABLE_NAME|TABLE_DDL|TRIGGER_NAME|TRIGGER_DDL|COLUMNS_BASE|COLUMNS_FULL)\}`)
View Source
var SqlSplitRgx = regexp.MustCompile(`[\r\n]+`)

Functions

func BuiltinEnvs

func BuiltinEnvs(envs map[string]string)

func Diff

func Diff(srce *DataSource, dest []*DataSource, kind map[string]bool, rgx []*regexp.Regexp) error

func Exec

func Exec(pref *Preference, dest []*DataSource, file []FileEntity, risk bool) error

func ExitIfError

func ExitIfError(err error, code int, format string, args ...interface{})

func ExitIfTrue

func ExitIfTrue(tru bool, code int, format string, args ...interface{})

func LogDebug added in v0.9.8

func LogDebug(m string, a ...interface{})

func LogError added in v0.9.5

func LogError(m string, a ...interface{})

func LogFatal added in v0.9.6

func LogFatal(m string, a ...interface{})

func LogTrace added in v0.9.5

func LogTrace(m string, a ...interface{})

func MergeTmpl added in v0.9.8

func MergeTmpl(tpl ShowTmpl, env map[string]interface{}, tbl string, con *MyConn) (string, error)

func OutDebug added in v0.9.5

func OutDebug(m string, a ...interface{})

func OutTrace added in v0.9.5

func OutTrace(m string, a ...interface{})

func Revi

func Revi(pref *Preference, dest []*DataSource, file []FileEntity, revi, mask, rqry string, risk bool) error

func ReviEach

func ReviEach(pref *Preference, revs []ReviSeg, conn *MyConn, slt string, mask *regexp.Regexp, risk bool)

func Show added in v0.9.8

func Show(srce *DataSource, ktpl []string, rgx []*regexp.Regexp) error

func Sync added in v0.9.4

func Sync(srce *DataSource, dest []*DataSource, kind map[string]bool, rgx []*regexp.Regexp) error

func Tree

func Tree(pref *Preference, envs map[string]string, srce *DataSource, dest []*DataSource, file []FileEntity, risk bool) error

func TreeRunSqlx added in v0.9.8

func TreeRunSqlx(pref *Preference, sqlx *SqlExe, src *MyConn, dst []*MyConn, risk bool) error

Types

type Arg

type Arg struct {
	Line string      // 开始和结束行,全闭区间
	Head int         // 首行
	Type string      // 参数类型 Cmnd*
	Para string      // 变量名
	Hold string      // 占位符
	Gift interface{} // 附加对象(解析物,关联物)
}

func (*Arg) String added in v0.9.8

func (h *Arg) String() string

type Col

type Col struct {
	Name string
	Seq  int
	Deft sql.NullString
	Null bool
	Type string
	Key  string
	Cmnt string
	Extr string
}

type Config

type Config struct {
	Preference Preference
	SqlTemplet map[string]string
	DataSource map[string]DataSource
	StartupEnv map[string]string
}

func ParseToml

func ParseToml(text string) (config *Config, err error)

type Conn

type Conn interface {
	// Open 打开链接
	Open(p *Preference, d *DataSource) (err error)
	// DbConn 获得链接
	DbConn() (db *sql.DB)
	// DbName 数据库名
	DbName() string

	// Exec 执行脚本
	Exec(qr string, args ...interface{}) (cnt int64, err error)
	// Query 执行查询
	Query(fn func(*sql.Rows) error, qr string, args ...interface{}) (err error)

	// Tables 获得所有表名
	Tables() (tbls []string, err error)
	// Columns 获得表的所有字段
	Columns(table string) (cls map[string]Col, err error)
	// Indexes 获得表的所有索引
	Indexes(table string) (ixs map[string]Idx, err error)
	// Triggers 获得表的所有触发器
	Triggers(table string) (tgs map[string]Trg, err error)

	// DdlTable 生产建表SQL(含索引),格式化的
	DdlTable(table string) (ddl string, err error)
	// DdlTrigger 生产建触发器SQL,格式化的
	DdlTrigger(trigger string) (ddl string, err error)

	// Literal 转成SQL字面量,set x=val的 val部分字面量,是否需要引号扩上
	// databaseTypeName sql.ColumnType.DatabaseTypeName
	Literal(val interface{}, databaseTypeName string) (string, bool)
	// Nothing 数值<=0|布尔false|NULL|字符串""|其他字面量为""
	Nothing(val interface{}) bool
	// Quotesc 转义的字符串
	Quotesc(str, qto string) string

	TableNotFound(err error) bool
}

type CtrlJob added in v0.9.3

type CtrlJob struct {
	// contains filtered or unexported fields
}

func (*CtrlJob) String added in v0.9.3

func (j *CtrlJob) String() string

type DataSource

type DataSource struct {
	Code string
	Conn string
}

type DiffItem

type DiffItem struct {
	ColArr []string
	ColMap map[string]Col
	IdxArr []string
	IdxMap map[string]Idx
	TrgArr []string
	TrgMap map[string]Trg
}

type Exe

type Exe struct {
	Seg Sql // 对应的SQL片段

	// 循环
	Fors []*Arg // SEQ,TBL产生循环
	// 产出
	Refs map[string]string // REF|STR的提取,key=HOLD,val=PARA
	// 行为
	Acts []*Arg // 源库RUN & OUT
	// 依赖,顺序重要
	Deps []*Hld // 依赖
	// 运行,深度优先L
	Sons []*Exe // 分叉
}

func (*Exe) String

func (x *Exe) String() string

func (*Exe) Tree added in v0.9.3

func (x *Exe) Tree() string

type FileEntity

type FileEntity struct {
	Path string
	Text string
}

func FileWalker

func FileWalker(path []string, flag []string) ([]FileEntity, error)

type GiftSeq added in v0.9.8

type GiftSeq struct {
	Bgn int    // 开始
	End int    // 结束
	Inc int    // 步长
	Fmt string // 格式
}

type Hld

type Hld struct {
	Off int    // 开始位置,包含
	End int    // 结束位置,包括
	Arg *Arg   // 对应的Arg
	Str string // HOLD字符串
	Dyn bool   // true:动态替换;false:静态替换
}

func (*Hld) String added in v0.9.8

func (h *Hld) String() string

type Idx

type Idx struct {
	Name string
	Uniq bool
	Cols string
	Type string
}

type MyConn

type MyConn struct {
	Pref *Preference
	Conn *sql.DB
	Name string
}

func (*MyConn) Columns

func (m *MyConn) Columns(table string) (map[string]Col, error)

func (*MyConn) DbConn

func (m *MyConn) DbConn() (db *sql.DB)

func (*MyConn) DbName

func (m *MyConn) DbName() string

func (*MyConn) DdlTable

func (m *MyConn) DdlTable(table string) (ddl string, err error)

func (*MyConn) DdlTrigger

func (m *MyConn) DdlTrigger(trigger string) (ddl string, err error)

func (*MyConn) Exec

func (m *MyConn) Exec(qr string, args ...interface{}) (int64, error)

func (*MyConn) Indexes

func (m *MyConn) Indexes(table string) (map[string]Idx, error)

func (*MyConn) Literal

func (m *MyConn) Literal(val interface{}, col string) (string, bool)

Literal 字面量

func (*MyConn) Nothing

func (m *MyConn) Nothing(val interface{}) bool

func (*MyConn) Open

func (m *MyConn) Open(p *Preference, d *DataSource) (err error)

func (*MyConn) Query

func (m *MyConn) Query(fn func(*sql.Rows) error, qr string, args ...interface{}) error

func (*MyConn) TableNotFound added in v0.9.8

func (m *MyConn) TableNotFound(err error) bool

func (*MyConn) Tables

func (m *MyConn) Tables() (tbs []string, err error)

func (*MyConn) Triggers

func (m *MyConn) Triggers(table string) (map[string]Trg, error)

type Preference

type Preference struct {
	DatabaseType string
	DelimiterRaw string
	DelimiterCmd string
	LineComment  string
	MultComment  []string
	FmtDateTime  string
	ControlPort  int
	ConnMaxOpen  int
	ConnMaxIdel  int
}

type ReviSeg

type ReviSeg struct {
	// contains filtered or unexported fields
}

type Room added in v0.9.3

type Room struct {
	// contains filtered or unexported fields
}

func (*Room) Open added in v0.9.3

func (room *Room) Open(port int, name string, wait *sync.WaitGroup)

type ShowTmpl added in v0.9.8

type ShowTmpl struct {
	Key string          // 模板名
	Tpl string          // 原始模板
	Arg map[string]bool // 模板中的参数
	Idx []int           // 参数索引,[参数开始,参数结束,...]
}

func ParseTmpl added in v0.9.8

func ParseTmpl(key, tpl string) ShowTmpl

type Sql

type Sql struct {
	Line string // 开始和结束行,全闭区间
	Head int    // 首行
	Exeb bool   // 语句,注释
	File string // 文件名或名字
	Text string // 正文部分
}

func ParseSqls

func ParseSqls(pref *Preference, file *FileEntity) []Sql

type SqlExe

type SqlExe struct {
	Envs map[string]string // HOLD对应的环境变量
	Exes []*Exe            // 数据树
}

func ParseSqlx

func ParseSqlx(sqls []Sql, envs map[string]string) (*SqlExe, error)

func ParseTree

func ParseTree(pref *Preference, envs map[string]string, file []FileEntity) ([]*SqlExe, error)

type Trg

type Trg struct {
	Name      string
	Timing    string
	Event     string
	Statement string
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL