code: func (p *Parser) parseShowTagValuesStatement() (Statement, error) {
  	stmt := &ShowTagValuesStatement{}
  	var err error
  
  	if tok, _, _ := p.ScanIgnoreWhitespace(); tok == EXACT {
  		return p.parseShowTagValuesCardinalityStatement(true)
  	} else if tok == CARDINALITY {
  		return p.parseShowTagValuesCardinalityStatement(false)
  	}
  	p.Unscan()
  
  	// Parse optional ON clause.
  	if tok, _, _ := p.ScanIgnoreWhitespace(); tok == ON {
  		// Parse the database.
  		stmt.Database, err = p.ParseIdent()
  		if err != nil {
  			return nil, err
  		}
  	} else {
  		p.Unscan()
  	}
  
  	// Parse optional source.
  	if tok, _, _ := p.ScanIgnoreWhitespace(); tok == FROM {
  		if stmt.Sources, err = p.parseSources(false); err != nil {
  			return nil, err
  		}
  	} else {
  		p.Unscan()
  	}
  
  	// Parse required WITH KEY.
  	if stmt.Op, stmt.TagKeyExpr, err = p.parseTagKeyExpr(); err != nil {
  		return nil, err
  	}
  
  	// Parse condition: "WHERE EXPR".
  	if stmt.Condition, err = p.parseCondition(); err != nil {
  		return nil, err
  	}
  
  	// Parse sort: "ORDER BY FIELD+".
  	if stmt.SortFields, err = p.parseOrderBy(); err != nil {
  		return nil, err
  	}
  
  	// Parse limit: "LIMIT <n>".
  	if stmt.Limit, err = p.ParseOptionalTokenAndInt(LIMIT); err != nil {
  		return nil, err
  	}
  
  	// Parse offset: "OFFSET <n>".
  	if stmt.Offset, err = p.ParseOptionalTokenAndInt(OFFSET); err != nil {
  		return nil, err
  	}
  
  	return stmt, nil
  }
docs: // parseShowTagValuesStatement parses a string and returns a Statement.
  // This function assumes the "SHOW TAG VALUES" tokens have already been consumed.