forked from x/ContextOS
tce add mdb.get
This commit is contained in:
parent
1ad0af36cb
commit
47c4683446
@ -1,5 +1,3 @@
|
|||||||
|
source etc/local.shy
|
||||||
login root root
|
login root root
|
||||||
config debug on
|
|
||||||
~ssh
|
|
||||||
listen ":9090"
|
|
||||||
|
|
||||||
|
@ -102,8 +102,8 @@ func (cli *CLI) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
|
|||||||
yac.Cmd("train", "num", "num", "mul{", "[1-9][0-9]*", "0[0-9]+", "0x[0-9]+", "}")
|
yac.Cmd("train", "num", "num", "mul{", "[1-9][0-9]*", "0[0-9]+", "0x[0-9]+", "}")
|
||||||
yac.Cmd("train", "str", "str", "mul{", "\"[^\"]*\"", "'[^']*'", "}")
|
yac.Cmd("train", "str", "str", "mul{", "\"[^\"]*\"", "'[^']*'", "}")
|
||||||
|
|
||||||
yac.Cmd("train", "tran", "tran", "mul{", "@", "$", "}", "opt{", "$", "[a-zA-Z0-9]+", "}")
|
yac.Cmd("train", "tran", "tran", "mul{", "@", "$", "}", "opt{", "[a-zA-Z0-9]+", "}")
|
||||||
yac.Cmd("train", "word", "word", "mul{", "~", "!", "tran", "str", "[a-zA-Z0-9_/.]+", "}")
|
yac.Cmd("train", "word", "word", "mul{", "~", "!", "tran", "str", "[a-zA-Z0-9_/.:]+", "}")
|
||||||
|
|
||||||
yac.Cmd("train", "op1", "op1", "mul{", "$", "@", "}")
|
yac.Cmd("train", "op1", "op1", "mul{", "$", "@", "}")
|
||||||
yac.Cmd("train", "op1", "op1", "mul{", "-z", "-n", "}")
|
yac.Cmd("train", "op1", "op1", "mul{", "-z", "-n", "}")
|
||||||
@ -196,6 +196,7 @@ func (cli *CLI) Begin(m *ctx.Message, arg ...string) ctx.Server { // {{{
|
|||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
||||||
|
m.Sesss("cli", m)
|
||||||
cli.Caches["#"] = &ctx.Cache{Name: "参数个数", Value: fmt.Sprintf("%d", len(arg)), Help: "参数个数"}
|
cli.Caches["#"] = &ctx.Cache{Name: "参数个数", Value: fmt.Sprintf("%d", len(arg)), Help: "参数个数"}
|
||||||
for i, v := range arg {
|
for i, v := range arg {
|
||||||
cli.Caches[fmt.Sprintf("%d", i)] = &ctx.Cache{Name: "执行参数", Value: v, Help: "执行参数"}
|
cli.Caches[fmt.Sprintf("%d", i)] = &ctx.Cache{Name: "执行参数", Value: v, Help: "执行参数"}
|
||||||
@ -229,7 +230,6 @@ func (cli *CLI) Start(m *ctx.Message, arg ...string) bool { // {{{
|
|||||||
}
|
}
|
||||||
|
|
||||||
cli.nfs = m.Sesss("nfs", "nfs")
|
cli.nfs = m.Sesss("nfs", "nfs")
|
||||||
// m.Target().Sessions["nfs"] = cli.nfs
|
|
||||||
if m.Has("stdio") {
|
if m.Has("stdio") {
|
||||||
cli.nfs.Cmd("scan", m.Cap("stream", "stdio"), m.Spawn(m.Target()).Cmd("source", m.Cap("init.shy")).Get("result"))
|
cli.nfs.Cmd("scan", m.Cap("stream", "stdio"), m.Spawn(m.Target()).Cmd("source", m.Cap("init.shy")).Get("result"))
|
||||||
} else {
|
} else {
|
||||||
|
@ -871,22 +871,28 @@ func (m *Message) Sess(key string, arg ...string) *Message { // {{{
|
|||||||
}
|
}
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
func (m *Message) Sesss(key string, arg ...string) *Message { // {{{
|
func (m *Message) Sesss(key string, arg ...interface{}) *Message { // {{{
|
||||||
if _, ok := m.Sessions[key]; !ok && len(arg) > 0 {
|
if _, ok := m.Sessions[key]; !ok && len(arg) > 0 {
|
||||||
|
switch msg := arg[0].(type) {
|
||||||
|
case *Message:
|
||||||
|
m.Sessions[key] = msg
|
||||||
|
return msg
|
||||||
|
}
|
||||||
|
|
||||||
root := true
|
root := true
|
||||||
if len(arg) > 2 {
|
if len(arg) > 2 {
|
||||||
root = Right(arg[2])
|
root = Right(arg[2].(string))
|
||||||
}
|
}
|
||||||
method := "find"
|
method := "find"
|
||||||
if len(arg) > 1 {
|
if len(arg) > 1 {
|
||||||
method = arg[1]
|
method = arg[1].(string)
|
||||||
}
|
}
|
||||||
|
|
||||||
switch method {
|
switch method {
|
||||||
case "find":
|
case "find":
|
||||||
m.Sessions[key] = m.Find(arg[0], root)
|
m.Sessions[key] = m.Find(arg[0].(string), root)
|
||||||
case "search":
|
case "search":
|
||||||
m.Sessions[key] = m.Search(arg[0], root)[0]
|
m.Sessions[key] = m.Search(arg[0].(string), root)[0]
|
||||||
}
|
}
|
||||||
return m.Sessions[key]
|
return m.Sessions[key]
|
||||||
}
|
}
|
||||||
@ -1106,6 +1112,24 @@ func (m *Message) Copy(msg *Message, meta string, arg ...string) *Message { // {
|
|||||||
return m
|
return m
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// }}}
|
||||||
|
func (m *Message) Table(cb func(map[string]string) bool) *Message { // {{{
|
||||||
|
if len(m.Meta["append"]) > 0 {
|
||||||
|
for i := 0; i < len(m.Meta[m.Meta["append"][0]]); i++ {
|
||||||
|
row := map[string]string{}
|
||||||
|
for _, k := range m.Meta["append"] {
|
||||||
|
if i < len(m.Meta[k]) {
|
||||||
|
row[k] = m.Meta[k][i]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !cb(row) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return m
|
||||||
|
}
|
||||||
|
|
||||||
// }}}
|
// }}}
|
||||||
|
|
||||||
func (m *Message) Insert(meta string, index int, arg ...interface{}) string { // {{{
|
func (m *Message) Insert(meta string, index int, arg ...interface{}) string { // {{{
|
||||||
|
@ -2,6 +2,7 @@ package mdb // {{{
|
|||||||
// }}}
|
// }}}
|
||||||
import ( // {{{
|
import ( // {{{
|
||||||
"contexts"
|
"contexts"
|
||||||
|
"encoding/json"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@ -28,7 +29,12 @@ func (mdb *MDB) Spawn(m *ctx.Message, c *ctx.Context, arg ...string) ctx.Server
|
|||||||
"source": &ctx.Cache{Name: "数据库参数", Value: "", Help: "数据库参数"},
|
"source": &ctx.Cache{Name: "数据库参数", Value: "", Help: "数据库参数"},
|
||||||
"driver": &ctx.Cache{Name: "数据库驱动", Value: "", Help: "数据库驱动"},
|
"driver": &ctx.Cache{Name: "数据库驱动", Value: "", Help: "数据库驱动"},
|
||||||
}
|
}
|
||||||
c.Configs = map[string]*ctx.Config{}
|
c.Configs = map[string]*ctx.Config{
|
||||||
|
"table": &ctx.Config{Name: "关系表", Value: "", Help: "关系表"},
|
||||||
|
"field": &ctx.Config{Name: "字段名", Value: "", Help: "字段名"},
|
||||||
|
"where": &ctx.Config{Name: "条件", Value: "", Help: "条件"},
|
||||||
|
"parse": &ctx.Config{Name: "解析", Value: "", Help: "解析"},
|
||||||
|
}
|
||||||
|
|
||||||
s := new(MDB)
|
s := new(MDB)
|
||||||
s.Context = c
|
s.Context = c
|
||||||
@ -206,6 +212,50 @@ var Index = &ctx.Context{Name: "mdb", Help: "数据中心",
|
|||||||
}
|
}
|
||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
|
"get": &ctx.Command{Name: "get [where str] [parse str] [table [field]]", Help: "执行查询语句",
|
||||||
|
Formats: map[string]int{"where": 1, "parse": 1},
|
||||||
|
Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
|
|
||||||
|
where := m.Conf("where")
|
||||||
|
if m.Options("where") {
|
||||||
|
where = m.Option("where")
|
||||||
|
}
|
||||||
|
|
||||||
|
parse := m.Conf("parse")
|
||||||
|
if m.Options("parse") {
|
||||||
|
parse = m.Option("parse")
|
||||||
|
}
|
||||||
|
|
||||||
|
table := m.Conf("table")
|
||||||
|
if len(arg) > 0 {
|
||||||
|
table = arg[0]
|
||||||
|
}
|
||||||
|
|
||||||
|
field := m.Conf("field")
|
||||||
|
if len(arg) > 1 {
|
||||||
|
field = arg[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
rest := []string{}
|
||||||
|
if len(arg) > 2 {
|
||||||
|
rest = arg[2:]
|
||||||
|
}
|
||||||
|
|
||||||
|
msg := m.Spawn(m.Target())
|
||||||
|
msg.Cmd("query", fmt.Sprintf("select %s from %s where %s", field, table, where), rest)
|
||||||
|
m.Copy(msg, "result").Copy(msg, "append")
|
||||||
|
m.Table(func(row map[string]string) bool {
|
||||||
|
data := map[string]interface{}{}
|
||||||
|
switch parse {
|
||||||
|
case "json":
|
||||||
|
json.Unmarshal([]byte(row[field]), data)
|
||||||
|
m.Echo("%v", data)
|
||||||
|
default:
|
||||||
|
m.Echo("%v", row[field])
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
})
|
||||||
|
}},
|
||||||
"list": &ctx.Command{Name: "list add table field [where condition]", Help: "执行查询语句",
|
"list": &ctx.Command{Name: "list add table field [where condition]", Help: "执行查询语句",
|
||||||
Formats: map[string]int{"where": 1},
|
Formats: map[string]int{"where": 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) {
|
||||||
|
@ -85,7 +85,7 @@ func (web *WEB) generate(m *ctx.Message, uri string, arg ...string) string { //
|
|||||||
|
|
||||||
args := []string{}
|
args := []string{}
|
||||||
for i := 0; i < len(arg)-1; i += 2 {
|
for i := 0; i < len(arg)-1; i += 2 {
|
||||||
args = append(args, arg[i]+"="+arg[i+1])
|
args = append(args, arg[i]+"="+url.QueryEscape(arg[i+1]))
|
||||||
}
|
}
|
||||||
p := strings.Join(args, "&")
|
p := strings.Join(args, "&")
|
||||||
|
|
||||||
|
@ -366,14 +366,13 @@ var Index = &ctx.Context{Name: "yac", Help: "语法中心",
|
|||||||
// }}}
|
// }}}
|
||||||
}},
|
}},
|
||||||
"parse": &ctx.Command{Name: "parse page void word...", Help: "解析语句, page: 语法集合, void: 空白语法集合, word: 语句", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
"parse": &ctx.Command{Name: "parse page void word...", Help: "解析语句, page: 语法集合, void: 空白语法集合, word: 语句", Hand: func(m *ctx.Message, c *ctx.Context, key string, arg ...string) {
|
||||||
if yac, ok := m.Target().Server.(*YAC); m.Assert(ok) { // {{{
|
if yac, ok := m.Target().Server.(*YAC); m.Assert(ok, "模块类型错误") { // {{{
|
||||||
page, ok := yac.page[arg[0]]
|
page, ok := yac.page[arg[0]]
|
||||||
m.Assert(ok)
|
m.Assert(ok, "语法集合错误")
|
||||||
void, ok := yac.page[arg[1]]
|
void, ok := yac.page[arg[1]]
|
||||||
m.Assert(ok)
|
m.Assert(ok, "词法集合错误")
|
||||||
|
|
||||||
if cli, ok := m.Data["cli"].(*ctx.Context); m.Assert(ok) {
|
if cli, ok := m.Data["cli"].(*ctx.Context); m.Assert(ok, "执行模块错误") {
|
||||||
m.Sessions["cli"] = m.Spawn(cli)
|
|
||||||
cli, rest, word := yac.parse(m, cli, page, void, strings.Join(arg[2:], " "))
|
cli, rest, word := yac.parse(m, cli, page, void, strings.Join(arg[2:], " "))
|
||||||
m.Data["cli"] = cli
|
m.Data["cli"] = cli
|
||||||
m.Result(0, rest, word)
|
m.Result(0, rest, word)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user