Susumu Yata
null+****@clear*****
Thu Feb 18 15:45:01 JST 2016
Susumu Yata 2016-02-18 15:45:01 +0900 (Thu, 18 Feb 2016) New Revision: 0cf2180538c96aaa6eb026d60ae2042a364d5a21 https://github.com/groonga/grnci/commit/0cf2180538c96aaa6eb026d60ae2042a364d5a21 Message: Use []cmdArgs instead of map[string]string to fix the order of arguments GitHub: #30 Modified files: db.go grnci.go Modified: db.go (+11 -6) =================================================================== --- db.go 2016-02-18 14:42:45 +0900 (3846bda) +++ db.go 2016-02-18 15:45:01 +0900 (bef68b5) @@ -296,8 +296,13 @@ func checkArgKey(s string) error { return nil } +type cmdArg struct { + Key string + Value string +} + // composeCommand() composes a command from a name and arguments. -func (db *DB) composeCommand(name string, args map[string]string) (string, error) { +func (db *DB) composeCommand(name string, args []cmdArg) (string, error) { if err := checkCmdName(name); err != nil { return "", err } @@ -305,13 +310,13 @@ func (db *DB) composeCommand(name string, args map[string]string) (string, error if _, err := buf.WriteString(name); err != nil { return "", err } - for key, val := range args { - if err := checkArgKey(key); err != nil { + for _, arg := range args { + if err := checkArgKey(arg.Key); err != nil { return "", err } - val = strings.Replace(val, "\\", "\\\\", -1) + val := strings.Replace(arg.Value, "\\", "\\\\", -1) val = strings.Replace(val, "'", "\\'", -1) - fmt.Fprintf(buf, " --%s '%s'", key, val) + fmt.Fprintf(buf, " --%s '%s'", arg.Key, val) } return buf.String(), nil } @@ -372,7 +377,7 @@ func (db *DB) query(cmd string) ([]byte, error) { } // qureyEx() executes a command with separated arguments. -func (db *DB) queryEx(name string, args map[string]string) ([]byte, error) { +func (db *DB) queryEx(name string, args []cmdArg) ([]byte, error) { cmd, err := db.composeCommand(name, args) if err != nil { return nil, err Modified: grnci.go (+75 -67) =================================================================== --- grnci.go 2016-02-18 14:42:45 +0900 (e19a373) +++ grnci.go 2016-02-18 15:45:01 +0900 (2a5f758) @@ -356,12 +356,11 @@ func (db *DB) TableCreate(name string, options *TableCreateOptions) error { if options == nil { options = NewTableCreateOptions() } - args := make(map[string]string) - args["name"] = name - keyFlag := "" + var args []cmdArg + args = append(args, cmdArg{"name", name}) + flags, keyFlag := "", "" if len(options.Flags) != 0 { - flags := splitValues(options.Flags, '|') - for _, flag := range flags { + for _, flag := range splitValues(options.Flags, '|') { switch flag { case "TABLE_NO_KEY": if len(keyFlag) != 0 { @@ -381,7 +380,7 @@ func (db *DB) TableCreate(name string, options *TableCreateOptions) error { keyFlag = flag } } - args["flags"] = options.Flags + flags = options.Flags } if len(keyFlag) == 0 { if len(options.KeyType) == 0 { @@ -389,26 +388,29 @@ func (db *DB) TableCreate(name string, options *TableCreateOptions) error { } else { keyFlag = "TABLE_HASH_KEY" } - if len(args["flags"]) == 0 { - args["flags"] = keyFlag + if len(flags) == 0 { + flags = keyFlag } else { - args["flags"] += "|" + keyFlag + flags += "|" + keyFlag } } + if len(flags) != 0 { + args = append(args, cmdArg{"flags", flags}) + } if len(options.KeyType) != 0 { - args["key_type"] = options.KeyType + args = append(args, cmdArg{"key_type", options.KeyType}) } if len(options.ValueType) != 0 { - args["value_type"] = options.ValueType + args = append(args, cmdArg{"value_type", options.ValueType}) } if len(options.DefaultTokenizer) != 0 { - args["default_tokenizer"] = options.DefaultTokenizer + args = append(args, cmdArg{"default_tokenizer", options.DefaultTokenizer}) } if len(options.Normalizer) != 0 { - args["normalizer"] = options.Normalizer + args = append(args, cmdArg{"normalizer", options.Normalizer}) } if len(options.TokenFilters) != 0 { - args["token_filters"] = options.TokenFilters + args = append(args, cmdArg{"token_filters", options.TokenFilters}) } res, err := db.queryEx("table_create", args) if err != nil { @@ -480,22 +482,26 @@ func (db *DB) ColumnCreate(tbl, name, typ string, options *ColumnCreateOptions) if options == nil { options = NewColumnCreateOptions() } - args := make(map[string]string) - args["table"] = tbl - args["name"] = name + var args []cmdArg + args = append(args, cmdArg{"table", tbl}) + args = append(args, cmdArg{"name", name}) + flags := "" if len(options.Flags) != 0 { - args["flags"] = options.Flags + flags = options.Flags } if len(typFlag) != 0 { - if len(args["flags"]) == 0 { - args["flags"] = typFlag + if len(flags) == 0 { + flags = typFlag } else { - args["flags"] += "|" + typFlag + flags += "|" + typFlag } } - args["type"] = typ + if len(flags) != 0 { + args = append(args, cmdArg{"flags", flags}) + } + args = append(args, cmdArg{"type", typ}) if len(src) != 0 { - args["source"] = src + args = append(args, cmdArg{"source", src}) } res, err := db.queryEx("column_create", args) if err != nil { @@ -875,12 +881,12 @@ func (db *DB) Load(tbl string, vals interface{}, options *LoadOptions) (int, err } } } - args := make(map[string]string) - args["table"] = tbl + var args []cmdArg + args = append(args, cmdArg{"table", tbl}) if len(options.IfExists) != 0 { - args["ifexists"] = options.IfExists + args = append(args, cmdArg{"ifexists", options.IfExists}) } - args["columns"] = strings.Join(cols, ",") + args = append(args, cmdArg{"columns", strings.Join(cols, ",")}) headCmd, err := db.composeCommand("load", args) if err != nil { return 0, err @@ -1197,47 +1203,49 @@ func (db *DB) Select(tbl string, vals interface{}, options *SelectOptions) (int, } } } - args := make(map[string]string) - args["table"] = tbl - args["output_columns"] = strings.Join(cols, ",") + var args []cmdArg + args = append(args, cmdArg{"table", tbl}) + args = append(args, cmdArg{"output_columns", strings.Join(cols, ",")}) if len(options.MatchColumns) != 0 { - args["match_columns"] = options.MatchColumns + args = append(args, cmdArg{"match_columns", options.MatchColumns}) } if len(options.Query) != 0 { - args["query"] = options.Query + args = append(args, cmdArg{"query", options.Query}) } if len(options.Filter) != 0 { - args["filter"] = options.Filter + args = append(args, cmdArg{"filter", options.Filter}) } if len(options.Scorer) != 0 { - args["scorer"] = options.Scorer + args = append(args, cmdArg{"scorer", options.Scorer}) } if len(options.Sortby) != 0 { - args["sortby"] = options.Sortby + args = append(args, cmdArg{"sortby", options.Sortby}) } if options.Offset != 0 { - args["offset"] = strconv.Itoa(options.Offset) + args = append(args, cmdArg{"offset", strconv.Itoa(options.Offset)}) } if options.Limit != 10 { - args["limit"] = strconv.Itoa(options.Limit) + args = append(args, cmdArg{"limit", strconv.Itoa(options.Limit)}) } if !options.Cache { - args["cache"] = "no" + args = append(args, cmdArg{"cache", "no"}) } if options.MatchEscalationThreshold != 0 { - args["match_escalation_threshold"] = - strconv.Itoa(options.MatchEscalationThreshold) + args = append(args, cmdArg{ + "match_escalation_threshold", + strconv.Itoa(options.MatchEscalationThreshold), + }) } if len(options.QueryFlags) != 0 { - args["query_flags"] = options.QueryFlags + args = append(args, cmdArg{"query_flags", options.QueryFlags}) } if len(options.QueryExpander) != 0 { - args["query_expander"] = options.QueryExpander + args = append(args, cmdArg{"query_expander", options.QueryExpander}) } if len(options.Adjuster) != 0 { - args["adjuster"] = options.Adjuster + args = append(args, cmdArg{"adjuster", options.Adjuster}) } - args["command_version"] = "2" + args = append(args, cmdArg{"command_version", "2"}) str, err := db.queryEx("select", args) if err != nil { return 0, err @@ -1282,9 +1290,9 @@ func (db *DB) ColumnRemove(tbl, name string, options *ColumnRemoveOptions) error if options == nil { options = NewColumnRemoveOptions() } - args := make(map[string]string) - args["table"] = tbl - args["name"] = name + var args []cmdArg + args = append(args, cmdArg{"table", tbl}) + args = append(args, cmdArg{"name", name}) res, err := db.queryEx("column_remove", args) if err != nil { return err @@ -1331,10 +1339,10 @@ func (db *DB) ColumnRename(tbl, name, newName string, options *ColumnRenameOptio if options == nil { options = NewColumnRenameOptions() } - args := make(map[string]string) - args["table"] = tbl - args["name"] = name - args["new_name"] = newName + var args []cmdArg + args = append(args, cmdArg{"table", tbl}) + args = append(args, cmdArg{"name", name}) + args = append(args, cmdArg{"new_name", newName}) res, err := db.queryEx("column_rename", args) if err != nil { return err @@ -1375,8 +1383,8 @@ func (db *DB) TableRemove(name string, options *TableRemoveOptions) error { if options == nil { options = NewTableRemoveOptions() } - args := make(map[string]string) - args["name"] = name + var args []cmdArg + args = append(args, cmdArg{"name", name}) res, err := db.queryEx("table_remove", args) if err != nil { return err @@ -1420,9 +1428,9 @@ func (db *DB) TableRename(name, newName string, options *TableRenameOptions) err if options == nil { options = NewTableRenameOptions() } - args := make(map[string]string) - args["name"] = name - args["new_name"] = newName + var args []cmdArg + args = append(args, cmdArg{"name", name}) + args = append(args, cmdArg{"new_name", newName}) res, err := db.queryEx("table_rename", args) if err != nil { return err @@ -1460,8 +1468,8 @@ func (db *DB) ObjectExist(name string, options *ObjectExistOptions) error { if options == nil { options = NewObjectExistOptions() } - args := make(map[string]string) - args["name"] = name + var args []cmdArg + args = append(args, cmdArg{"name", name}) res, err := db.queryEx("object_exist", args) if err != nil { return err @@ -1499,8 +1507,8 @@ func (db *DB) Truncate(name string, options *TruncateOptions) error { if options == nil { options = NewTruncateOptions() } - args := make(map[string]string) - args["target_name"] = name + var args []cmdArg + args = append(args, cmdArg{"target_name", name}) res, err := db.queryEx("truncate", args) if err != nil { return err @@ -1542,9 +1550,9 @@ func (db *DB) ThreadLimit(options *ThreadLimitOptions) (int, error) { if options == nil { options = NewThreadLimitOptions() } - args := make(map[string]string) + var args []cmdArg if options.Max > 0 { - args["max"] = strconv.Itoa(options.Max) + args = append(args, cmdArg{"max", strconv.Itoa(options.Max)}) } res, err := db.queryEx("thread_limit", args) if err != nil { @@ -1587,7 +1595,7 @@ func (db *DB) DatabaseUnmap(options *DatabaseUnmapOptions) error { if options == nil { options = NewDatabaseUnmapOptions() } - args := make(map[string]string) + var args []cmdArg res, err := db.queryEx("database_unmap", args) if err != nil { return err @@ -1625,8 +1633,8 @@ func (db *DB) PluginRegister(name string, options *PluginRegisterOptions) error if options == nil { options = NewPluginRegisterOptions() } - args := make(map[string]string) - args["name"] = name + var args []cmdArg + args = append(args, cmdArg{"name", name}) res, err := db.queryEx("plugin_register", args) if err != nil { return err @@ -1664,8 +1672,8 @@ func (db *DB) PluginUnregister(name string, options *PluginUnregisterOptions) er if options == nil { options = NewPluginUnregisterOptions() } - args := make(map[string]string) - args["name"] = name + var args []cmdArg + args = append(args, cmdArg{"name", name}) res, err := db.queryEx("plugin_unregister", args) if err != nil { return err -------------- next part -------------- HTML����������������������������...Download