1
0
forked from x/ContextOS

mac mod mdb.open

This commit is contained in:
shaoying 2018-06-27 01:20:51 +08:00
parent c9654729de
commit f9e30367ff
2 changed files with 47 additions and 28 deletions

View File

@ -1626,7 +1626,11 @@ func (m *Message) Cmd(arg ...interface{}) *Message { // {{{
func (m *Message) Confx(key string, arg ...interface{}) string { // {{{ func (m *Message) Confx(key string, arg ...interface{}) string { // {{{
if len(arg) == 0 { if len(arg) == 0 {
return m.Conf(key) value := m.Option(key)
if value == "" {
value = m.Conf(key)
}
return value
} }
skip := false skip := false
@ -1744,7 +1748,11 @@ func (m *Message) Conf(key string, arg ...string) string { // {{{
// }}} // }}}
func (m *Message) Capx(key string, arg ...interface{}) string { // {{{ func (m *Message) Capx(key string, arg ...interface{}) string { // {{{
if len(arg) == 0 { if len(arg) == 0 {
return m.Cap(key) value := m.Option(key)
if value == "" {
value = m.Cap(key)
}
return value
} }
skip := false skip := false

View File

@ -21,15 +21,21 @@ type MDB struct {
*ctx.Context *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{ c.Caches = map[string]*ctx.Cache{
"source": &ctx.Cache{Name: "数据库参数", Value: "", Help: "数据库参数"}, "database": &ctx.Cache{Name: "数据库", Value: m.Confx("database", arg, 0), Help: "数据库驱动"},
"driver": &ctx.Cache{Name: "数据库驱动", Value: "", 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{ c.Configs = map[string]*ctx.Config{
"table": &ctx.Config{Name: "关系表", Value: "", Help: "关系表"}, "table": &ctx.Config{Name: "关系表", Value: "", Help: "关系表"},
"field": &ctx.Config{Name: "字段名", Value: "", Help: "字段名"}, "field": &ctx.Config{Name: "字段名", Value: "", Help: "字段名"},
"where": &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: "解析"}, "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 return s
} }
// }}}
func (mdb *MDB) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{ func (mdb *MDB) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
mdb.Context.Master(nil) mdb.Context.Master(nil)
if mdb.Context == Index { 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 { // {{{ func (mdb *MDB) Start(m *ctx.Message, arg ...string) bool { // {{{
if len(arg) > 0 { db, e := sql.Open(m.Cap("driver"), fmt.Sprintf("%s:%s@%s(%s)/%s",
m.Cap("source", arg[0]) m.Cap("username"), m.Cap("password"), m.Cap("protocol"), m.Cap("address"), m.Cap("database")))
}
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"))
m.Assert(e) m.Assert(e)
mdb.DB = db 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 return false
} }
@ -85,21 +83,34 @@ var Pulse *ctx.Message
var Index = &ctx.Context{Name: "mdb", Help: "数据中心", var Index = &ctx.Context{Name: "mdb", Help: "数据中心",
Caches: map[string]*ctx.Cache{ Caches: map[string]*ctx.Cache{
"nsource": &ctx.Cache{Name: "数据源数量", Value: "0", Help: "已打开数据库的数量"}, "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{ 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: "字段分隔符"}, "csv_sep": &ctx.Config{Name: "字段分隔符", Value: "\t", Help: "字段分隔符"},
}, },
Commands: map[string]*ctx.Command{ 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) { "open": &ctx.Command{
m.Assert(len(arg) > 0, "缺少参数") // {{{ Name: "open [database [username [password [address [protocol [driver]]]]]] [dbname name] [dbhelp help]",
m.Start(m.Capx("dbname", arg, 1), "数据存储", arg...) Help: "open打开数据库, database: 数据库名, username: 用户名, password: 密码, address: 主机地址, protocol: 主机协议, driver: 数据库类型, dbname: 模块名称, dbhelp: 帮助信息",
m.Echo(m.Target().Name) 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: 查询参数", "exec": &ctx.Command{Name: "exec sql [arg]", Help: "操作数据库, sql: SQL语句, arg: 查询参数",
Appends: map[string]string{"last": "最后插入元组的标识", "nrow": "修改元组的数量"}, Appends: map[string]string{"last": "最后插入元组的标识", "nrow": "修改元组的数量"},
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { 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{ "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: 排序字段", Help: "查询数据库, table: 表名, fields: 字段, where: 查询条件, group: 聚合字段, order: 排序字段",
Form: map[string]int{"where": 1, "group": 1, "order": 1, "extras": 1, "save": 1}, 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) { 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: "执行查询语句", "get": &ctx.Command{Name: "get [where str] [parse str] [table [field]]", Help: "执行查询语句",
Form: map[string]int{"where": 1, "parse": 2}, Form: map[string]int{"where": 1, "parse": 2},
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) { 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 != "" { if where != "" {
where = "where " + where where = "where " + where
} }