From f9e30367ff7c3cf54ba032ef23c96b7600c3bea7 Mon Sep 17 00:00:00 2001 From: shaoying Date: Wed, 27 Jun 2018 01:20:51 +0800 Subject: [PATCH] mac mod mdb.open --- src/contexts/ctx.go | 12 ++++++-- src/contexts/mdb/mdb.go | 63 ++++++++++++++++++++++++----------------- 2 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/contexts/ctx.go b/src/contexts/ctx.go index b2c9d931..d1397192 100644 --- a/src/contexts/ctx.go +++ b/src/contexts/ctx.go @@ -1626,7 +1626,11 @@ func (m *Message) Cmd(arg ...interface{}) *Message { // {{{ func (m *Message) Confx(key string, arg ...interface{}) string { // {{{ if len(arg) == 0 { - return m.Conf(key) + value := m.Option(key) + if value == "" { + value = m.Conf(key) + } + return value } skip := false @@ -1744,7 +1748,11 @@ func (m *Message) Conf(key string, arg ...string) string { // {{{ // }}} func (m *Message) Capx(key string, arg ...interface{}) string { // {{{ if len(arg) == 0 { - return m.Cap(key) + value := m.Option(key) + if value == "" { + value = m.Cap(key) + } + return value } skip := false diff --git a/src/contexts/mdb/mdb.go b/src/contexts/mdb/mdb.go index 357da9cc..7c4c4e0f 100644 --- a/src/contexts/mdb/mdb.go +++ b/src/contexts/mdb/mdb.go @@ -21,15 +21,21 @@ type MDB struct { *ctx.Context } -func (mdb *MDB) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { // {{{ +func (mdb *MDB) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server { c.Caches = map[string]*ctx.Cache{ - "source": &ctx.Cache{Name: "数据库参数", Value: "", Help: "数据库参数"}, - "driver": &ctx.Cache{Name: "数据库驱动", Value: "", Help: "数据库驱动"}, + "database": &ctx.Cache{Name: "数据库", Value: m.Confx("database", arg, 0), Help: "数据库驱动"}, + "username": &ctx.Cache{Name: "用户名", Value: m.Confx("username", arg, 1), Help: "数据库驱动"}, + "password": &ctx.Cache{Name: "密码", Value: m.Confx("password", arg, 2), Help: "数据库驱动"}, + "protocol": &ctx.Cache{Name: "协议", Value: m.Confx("protocol", arg, 4), Help: "数据库驱动"}, + "address": &ctx.Cache{Name: "地址", Value: m.Confx("address", arg, 3), Help: "数据库驱动"}, + "driver": &ctx.Cache{Name: "数据库驱动(mysql)", Value: m.Confx("driver", arg, 5), Help: "数据库驱动"}, } c.Configs = map[string]*ctx.Config{ "table": &ctx.Config{Name: "关系表", Value: "", Help: "关系表"}, "field": &ctx.Config{Name: "字段名", Value: "", Help: "字段名"}, "where": &ctx.Config{Name: "条件", Value: "", Help: "条件"}, + "group": &ctx.Config{Name: "聚合", Value: "", Help: "聚合"}, + "order": &ctx.Config{Name: "排序", Value: "", Help: "排序"}, "parse": &ctx.Config{Name: "解析", Value: "", Help: "解析"}, } @@ -38,7 +44,6 @@ func (mdb *MDB) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server return s } -// }}} func (mdb *MDB) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{ mdb.Context.Master(nil) if mdb.Context == Index { @@ -49,19 +54,12 @@ func (mdb *MDB) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{ // }}} func (mdb *MDB) Start(m *ctx.Message, arg ...string) bool { // {{{ - if len(arg) > 0 { - m.Cap("source", arg[0]) - } - m.Cap("driver", Pulse.Conf("driver")) - if m.Cap("source") == "" || m.Cap("driver") == "" { - return false - } - - db, e := sql.Open(m.Cap("driver"), m.Cap("source")) + db, e := sql.Open(m.Cap("driver"), fmt.Sprintf("%s:%s@%s(%s)/%s", + m.Cap("username"), m.Cap("password"), m.Cap("protocol"), m.Cap("address"), m.Cap("database"))) m.Assert(e) mdb.DB = db - m.Log("info", nil, "%d open %s %s", Pulse.Capi("nsource"), m.Cap("driver"), m.Cap("stream", m.Cap("source"))) + m.Log("info", nil, "%d open %s %s", m.Capi("nsource"), m.Cap("driver"), m.Cap("stream", m.Cap("database"))) return false } @@ -85,21 +83,34 @@ var Pulse *ctx.Message var Index = &ctx.Context{Name: "mdb", Help: "数据中心", Caches: map[string]*ctx.Cache{ "nsource": &ctx.Cache{Name: "数据源数量", Value: "0", Help: "已打开数据库的数量"}, - "dbname": &ctx.Cache{Name: "生成模块名", Value: "", Help: "生成模块名", Hand: func(m *ctx.Message, x *ctx.Cache, arg ...string) string { - return fmt.Sprintf("db%d", Pulse.Capi("nsource", 1)) - }}, }, Configs: map[string]*ctx.Config{ - "driver": &ctx.Config{Name: "数据库驱动(mysql)", Value: "mysql", Help: "数据库驱动"}, + "database": &ctx.Config{Name: "默认数据库", Value: "demo", Help: "数据库驱动"}, + "username": &ctx.Config{Name: "默认用户名", Value: "demo", Help: "数据库驱动"}, + "password": &ctx.Config{Name: "默认密码", Value: "demo", Help: "数据库驱动"}, + "protocol": &ctx.Config{Name: "默认协议", Value: "tcp", Help: "数据库驱动"}, + "address": &ctx.Config{Name: "默认地址", Value: "", Help: "数据库驱动"}, + "driver": &ctx.Config{Name: "数据库驱动(mysql)", Value: "mysql", Help: "数据库驱动"}, + + "dbhelp": &ctx.Config{Name: "默认帮助", Value: "数据存储", Help: "默认帮助"}, + "dbname": &ctx.Config{Name: "默认模块名", Value: "db", Help: "默认模块名", Hand: func(m *ctx.Message, x *ctx.Config, arg ...string) string { + if len(arg) > 0 { // {{{ + return arg[0] + } + return fmt.Sprintf("%s%d", x.Value, m.Capi("nsource", 1)) + // }}} + }}, + "csv_sep": &ctx.Config{Name: "字段分隔符", Value: "\t", Help: "字段分隔符"}, }, Commands: map[string]*ctx.Command{ - "open": &ctx.Command{Name: "open source [name]", Help: "打开数据库, source: 数据源, name: 模块名", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - m.Assert(len(arg) > 0, "缺少参数") // {{{ - m.Start(m.Capx("dbname", arg, 1), "数据存储", arg...) - m.Echo(m.Target().Name) - // }}} - }}, + "open": &ctx.Command{ + Name: "open [database [username [password [address [protocol [driver]]]]]] [dbname name] [dbhelp help]", + Help: "open打开数据库, database: 数据库名, username: 用户名, password: 密码, address: 主机地址, protocol: 主机协议, driver: 数据库类型, dbname: 模块名称, dbhelp: 帮助信息", + Form: map[string]int{"dbname": 1, "dbhelp": 1}, + Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { + m.Start(m.Confx("dbname"), m.Confx("dbhelp"), arg...) + }}, "exec": &ctx.Command{Name: "exec sql [arg]", Help: "操作数据库, sql: SQL语句, arg: 查询参数", Appends: map[string]string{"last": "最后插入元组的标识", "nrow": "修改元组的数量"}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { @@ -202,7 +213,7 @@ var Index = &ctx.Context{Name: "mdb", Help: "数据中心", // }}} }}, "show": &ctx.Command{ - Name: "show table fields... [where conditions]|[group fields]|[order fields]|[save filename]", + Name: "show table fields... [where conditions] [group fields] [order fields] [save filename]", Help: "查询数据库, table: 表名, fields: 字段, where: 查询条件, group: 聚合字段, order: 排序字段", Form: map[string]int{"where": 1, "group": 1, "order": 1, "extras": 1, "save": 1}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { @@ -250,7 +261,7 @@ var Index = &ctx.Context{Name: "mdb", Help: "数据中心", "get": &ctx.Command{Name: "get [where str] [parse str] [table [field]]", Help: "执行查询语句", Form: map[string]int{"where": 1, "parse": 2}, Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { - where := m.Confx("where", m.Option("where")) // {{{ + where := m.Confx("where") // {{{ if where != "" { where = "where " + where }