func (e *QueryExecutor) executeDropSeriesStatement(stmt *influxql.DropSeriesStatement, database string) error { if dbi, err := e.MetaClient.Database(database); err != nil { return err } else if dbi == nil { return influxql.ErrDatabaseNotFound(database) } // Check for time in WHERE clause (not supported). if influxql.HasTimeExpr(stmt.Condition) { return errors.New("DROP SERIES doesn't support time in WHERE clause") } // Locally drop the series. return e.TSDBStore.DeleteSeries(database, stmt.Sources, stmt.Condition) }
func (s *Store) ExecuteShowTagValuesStatement(stmt *influxql.ShowTagValuesStatement, database string) (models.Rows, error) { // NOTE(benbjohnson): // This function is temporarily moved here until reimplemented in the new query engine. // Check for time in WHERE clause (not supported). if influxql.HasTimeExpr(stmt.Condition) { return nil, errors.New("SHOW TAG VALUES doesn't support time in WHERE clause") } // Find the database. db := s.DatabaseIndex(database) if db == nil { return nil, nil } // Expand regex expressions in the FROM clause. sources, err := s.ExpandSources(stmt.Sources) if err != nil { return nil, err } // Get the list of measurements we're interested in. measurements, err := measurementsFromSourcesOrDB(db, sources...) if err != nil { return nil, err } // Make result. var rows models.Rows tagValues := make(map[string]stringSet) for _, m := range measurements { var ids SeriesIDs if stmt.Condition != nil { // Get series IDs that match the WHERE clause. ids, _, err = m.walkWhereForSeriesIds(stmt.Condition) if err != nil { return nil, err } // If no series matched, then go to the next measurement. if len(ids) == 0 { continue } // TODO: check return of walkWhereForSeriesIds for fields } else { // No WHERE clause so get all series IDs for this measurement. ids = m.seriesIDs } for k, v := range m.tagValuesByKeyAndSeriesID(stmt.TagKeys, ids) { _, ok := tagValues[k] if !ok { tagValues[k] = v } tagValues[k] = tagValues[k].union(v) } } for k, v := range tagValues { r := &models.Row{ Name: k + "TagValues", Columns: []string{k}, } vals := v.list() sort.Strings(vals) for _, val := range vals { v := interface{}(val) r.Values = append(r.Values, []interface{}{v}) } rows = append(rows, r) } sort.Sort(rows) return rows, nil }