fix #1510: panics when measurement doesn't exist

pull/1525/head
David Norton 2015-02-06 15:41:12 -05:00
parent 7d5322b646
commit 3f3c00da8d
2 changed files with 18 additions and 5 deletions

View File

@ -1398,26 +1398,34 @@ func TestHandler_serveShowTagKeys(t *testing.T) {
},
},
},
// SHOW TAG KEYS FROM <non-existant measurement>
{
q: `SHOW TAG KEYS FROM bad`,
err: `measurement "bad" not found`,
},
}
for i, tt := range tests {
query := map[string]string{"db": "foo", "q": tt.q}
status, body = MustHTTP("GET", s.URL+`/query`, query, nil, "")
if status != http.StatusOK {
if (tt.err == "" && status != http.StatusOK) ||
(tt.err != "" && status != http.StatusInternalServerError) {
t.Logf("query #%d: %s", i, tt.q)
t.Log(body)
t.Logf("body = %s\n", body)
t.Errorf("unexpected status: %d", status)
}
r := &influxdb.Results{}
if err := json.Unmarshal([]byte(body), r); err != nil {
t.Logf("query #%d: %s", i, tt.q)
t.Log(body)
t.Logf("body = %s\n", body)
t.Error(err)
}
if !reflect.DeepEqual(tt.err, errstring(r.Err)) {
t.Errorf("%d. %s: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.q, tt.err, r.Err)
if !reflect.DeepEqual(tt.err, errstring(r.Results[0].Err)) {
t.Logf("body = %s\n", body)
fmt.Printf("r.Results[0].Err) = %v\n", r.Results[0].Err)
t.Errorf("%d. %s: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.q, tt.err, errstring(r.Results[0].Err))
} else if tt.err == "" && !reflect.DeepEqual(tt.r, r) {
b, _ := json.Marshal(tt.r)
t.Log(string(b))

View File

@ -2224,6 +2224,11 @@ func measurementsFromSourceOrDB(stmt influxql.Source, db *database) (Measurement
name = segments[2]
}
measurement := db.measurements[name]
if measurement == nil {
return nil, fmt.Errorf(`measurement "%s" not found`, name)
}
measurements = append(measurements, db.measurements[name])
} else {
return nil, errors.New("identifiers in FROM clause must be measurement names")