code: func (p *Parser) parseCreateSubscriptionStatement() (*CreateSubscriptionStatement, error) {
  	stmt := &CreateSubscriptionStatement{}
  
  	// Read the id of the subscription to create.
  	ident, err := p.ParseIdent()
  	if err != nil {
  		return nil, err
  	}
  	stmt.Name = ident
  
  	// Expect an "ON" keyword.
  	if tok, pos, lit := p.ScanIgnoreWhitespace(); tok != ON {
  		return nil, newParseError(tokstr(tok, lit), []string{"ON"}, pos)
  	}
  
  	// Read the name of the database.
  	if ident, err = p.ParseIdent(); err != nil {
  		return nil, err
  	}
  	stmt.Database = ident
  
  	if tok, pos, lit := p.Scan(); tok != DOT {
  		return nil, newParseError(tokstr(tok, lit), []string{"."}, pos)
  	}
  
  	// Read the name of the retention policy.
  	if ident, err = p.ParseIdent(); err != nil {
  		return nil, err
  	}
  	stmt.RetentionPolicy = ident
  
  	// Expect a "DESTINATIONS" keyword.
  	if tok, pos, lit := p.ScanIgnoreWhitespace(); tok != DESTINATIONS {
  		return nil, newParseError(tokstr(tok, lit), []string{"DESTINATIONS"}, pos)
  	}
  
  	// Expect one of "ANY ALL" keywords.
  	if tok, pos, lit := p.ScanIgnoreWhitespace(); tok == ALL || tok == ANY {
  		stmt.Mode = tokens[tok]
  	} else {
  		return nil, newParseError(tokstr(tok, lit), []string{"ALL", "ANY"}, pos)
  	}
  
  	// Read list of destinations.
  	var destinations []string
  	if destinations, err = p.parseStringList(); err != nil {
  		return nil, err
  	}
  	stmt.Destinations = destinations
  
  	return stmt, nil
  }
docs: // parseCreateSubscriptionStatement parses a string and returns a CreateSubscriptionStatement.
  // This function assumes the "CREATE SUBSCRIPTION" tokens have already been consumed.