diff options
Diffstat (limited to 'client')
-rw-r--r-- | client/go/cmd/query.go | 11 | ||||
-rw-r--r-- | client/go/cmd/query_test.go | 16 |
2 files changed, 21 insertions, 6 deletions
diff --git a/client/go/cmd/query.go b/client/go/cmd/query.go index 7abf17d5358..82ff5185cbd 100644 --- a/client/go/cmd/query.go +++ b/client/go/cmd/query.go @@ -105,10 +105,13 @@ func query(cli *CLI, arguments []string, timeoutSecs int, curl bool) error { } func splitArg(argument string) (string, string) { - equalsIndex := strings.Index(argument, "=") - if equalsIndex < 1 { + parts := strings.SplitN(argument, "=", 2) + if len(parts) < 2 { + return "yql", parts[0] + } + if strings.HasPrefix(strings.ToLower(parts[0]), "select ") { + // A query containing '=' return "yql", argument - } else { - return argument[0:equalsIndex], argument[equalsIndex+1:] } + return parts[0], parts[1] } diff --git a/client/go/cmd/query_test.go b/client/go/cmd/query_test.go index ab03058d079..d024ca5189e 100644 --- a/client/go/cmd/query_test.go +++ b/client/go/cmd/query_test.go @@ -39,8 +39,20 @@ func TestQueryNonJsonResult(t *testing.T) { func TestQueryWithMultipleParameters(t *testing.T) { assertQuery(t, - "?hits=5&timeout=20s&yql=select+from+sources+%2A+where+title+contains+%27foo%27", - "select from sources * where title contains 'foo'", "hits=5", "timeout=20s") + "?hits=5&timeout=20s&yql=select+from+sources+%2A+where+title+contains+%27foo%27+and+year+%3D+2000", + "select from sources * where title contains 'foo' and year = 2000", "hits=5", "timeout=20s") +} + +func TestQueryWithEquals(t *testing.T) { + assertQuery(t, + "?timeout=10s&yql=SELECT+from+sources+%2A+where+title+contains+%27foo%27+and+year+%3D+2000", + "SELECT from sources * where title contains 'foo' and year = 2000") +} + +func TestQuerySelect(t *testing.T) { + assertQuery(t, + "?hits=5&select=%7B%22select%22%3A%7B%22where%22%3A%7B%22contains%22%3A%5B%22title%22%2C%22a%22%5D%7D%7D%7D&timeout=10s", + `select={"select":{"where":{"contains":["title","a"]}}}`, "hits=5") } func TestQueryWithExplicitYqlParameter(t *testing.T) { |