@@ -518,7 +518,36 @@ func (p *Parser) parseColumnExprListWithTerm(term TokenKind, pos Pos) (*ColumnEx
518518 if term != "" && p .matchTokenKind (term ) {
519519 break
520520 }
521- columnExpr , err := p .parseColumnsExpr (p .Pos ())
521+
522+ // Check if this is a named parameter (identifier followed by =)
523+ // We need to peek ahead to see if there's an identifier followed by =
524+ var columnExpr Expr
525+ var err error
526+
527+ // Try to detect named parameter pattern: identifier = value
528+ isNamedParam := false
529+ firstToken , peekErr := p .lexer .peekToken ()
530+ if peekErr == nil && firstToken != nil && (firstToken .Kind == TokenKindIdent || firstToken .Kind == TokenKindKeyword ) {
531+ // Peek two tokens ahead to check for =
532+ // Save state, consume first token, peek second, restore
533+ savedState := p .lexer .saveState ()
534+ if err := p .lexer .consumeToken (); err == nil {
535+ secondToken , peekErr2 := p .lexer .peekToken ()
536+ if peekErr2 == nil && secondToken != nil && secondToken .Kind == TokenKindSingleEQ {
537+ isNamedParam = true
538+ }
539+ }
540+ p .lexer .restoreState (savedState )
541+ }
542+
543+ if isNamedParam {
544+ // Parse as named parameter
545+ columnExpr , err = p .parseNamedParameter (p .Pos ())
546+ } else {
547+ // Parse as regular column expression
548+ columnExpr , err = p .parseColumnsExpr (p .Pos ())
549+ }
550+
522551 if err != nil {
523552 return nil , err
524553 }
@@ -537,6 +566,31 @@ func (p *Parser) parseColumnExprListWithTerm(term TokenKind, pos Pos) (*ColumnEx
537566 return columnExprList , nil
538567}
539568
569+ func (p * Parser ) parseNamedParameter (pos Pos ) (* NamedParameterExpr , error ) {
570+ // Parse the parameter name
571+ name , err := p .parseIdent ()
572+ if err != nil {
573+ return nil , err
574+ }
575+
576+ // Expect and consume the = token
577+ if err := p .expectTokenKind (TokenKindSingleEQ ); err != nil {
578+ return nil , err
579+ }
580+
581+ // Parse the parameter value
582+ value , err := p .parseExpr (p .Pos ())
583+ if err != nil {
584+ return nil , err
585+ }
586+
587+ return & NamedParameterExpr {
588+ NamePos : pos ,
589+ Name : name ,
590+ Value : value ,
591+ }, nil
592+ }
593+
540594func (p * Parser ) parseSelectItems () ([]* SelectItem , error ) {
541595 selectItems := make ([]* SelectItem , 0 )
542596 for ! p .lexer .isEOF () || p .last () != nil {
0 commit comments