From 786b9e2f45ef23bc8d327edd6132e443260969aa Mon Sep 17 00:00:00 2001 From: Chahine-tech Date: Fri, 28 Nov 2025 16:20:56 +0100 Subject: [PATCH] fix: resolve parser bugs and upgrade CI to Go 1.25 --- .github/workflows/ci.yml | 8 ++++---- .github/workflows/release.yml | 2 +- pkg/parser/advanced_features.go | 4 ---- pkg/parser/parser.go | 10 +++++----- tests/dialect_benchmark_test.go | 2 +- 5 files changed, 11 insertions(+), 15 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 407f3f7..58400f3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -17,7 +17,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: "1.24.3" + go-version: "1.25" - name: Install dependencies run: go mod download @@ -46,7 +46,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: "1.24.3" + go-version: "1.25" - name: Install dependencies run: go mod download @@ -74,7 +74,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: "1.24.3" + go-version: "1.25" - name: Install dependencies run: go mod download @@ -94,7 +94,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: "1.24.3" + go-version: "1.25" - name: Install dependencies run: go mod download diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 368e49a..26cd2b6 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,7 +16,7 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: "1.24.3" + go-version: "1.25" - name: Install dependencies run: go mod download diff --git a/pkg/parser/advanced_features.go b/pkg/parser/advanced_features.go index baf63d1..794b8f1 100644 --- a/pkg/parser/advanced_features.go +++ b/pkg/parser/advanced_features.go @@ -361,7 +361,6 @@ func (p *Parser) parseCaseExpression() (*CaseExpression, error) { return nil, fmt.Errorf("failed to parse CASE input: %v", err) } ce.Input = input - p.nextToken() } // Parse WHEN clauses @@ -385,7 +384,6 @@ func (p *Parser) parseCaseExpression() (*CaseExpression, error) { return nil, fmt.Errorf("failed to parse ELSE result: %v", err) } ce.ElseResult = elseResult - p.nextToken() } // Expect END keyword @@ -412,7 +410,6 @@ func (p *Parser) parseWhenClause() (*WhenClause, error) { return nil, fmt.Errorf("failed to parse WHEN condition: %v", err) } wc.Condition = condition - p.nextToken() // Expect THEN keyword if !p.curTokenIs(lexer.THEN) { @@ -426,7 +423,6 @@ func (p *Parser) parseWhenClause() (*WhenClause, error) { return nil, fmt.Errorf("failed to parse THEN result: %v", err) } wc.Result = result - p.nextToken() return wc, nil } diff --git a/pkg/parser/parser.go b/pkg/parser/parser.go index 55533d9..467193a 100644 --- a/pkg/parser/parser.go +++ b/pkg/parser/parser.go @@ -488,10 +488,9 @@ func (p *Parser) parseOrderByClause() ([]*OrderByClause, error) { } p.nextToken() - if !p.expectPeek(lexer.BY) { - return nil, fmt.Errorf("expected BY after ORDER") + if !p.curTokenIs(lexer.BY) { + return nil, fmt.Errorf("expected BY after ORDER, got %s", p.curToken.Literal) } - p.nextToken() var clauses []*OrderByClause @@ -822,9 +821,10 @@ func (p *Parser) parseGroupedExpression() (Expression, error) { return nil, err } - if !p.expectPeek(lexer.RPAREN) { - return nil, fmt.Errorf("expected ')' to close grouped expression") + if !p.curTokenIs(lexer.RPAREN) { + return nil, fmt.Errorf("expected ')' to close grouped expression, got %s", p.curToken.Literal) } + p.nextToken() return exp, nil } diff --git a/tests/dialect_benchmark_test.go b/tests/dialect_benchmark_test.go index 6216c64..152e8f3 100644 --- a/tests/dialect_benchmark_test.go +++ b/tests/dialect_benchmark_test.go @@ -216,7 +216,7 @@ func BenchmarkComplexDialectQueries(b *testing.B) { "INNER JOIN `ecommerce`.`orders` `o` ON `u`.`user_id` = `o`.`user_id` " + "INNER JOIN `ecommerce`.`order_items` `oi` ON `o`.`order_id` = `oi`.`order_id` " + "INNER JOIN `ecommerce`.`products` `p` ON `oi`.`product_id` = `p`.`product_id` " + - "WHERE `o`.`order_date` >= DATE_SUB(NOW(), INTERVAL 30 DAY) " + + "WHERE `o`.`order_date` >= '2024-01-01' " + "AND `u`.`status` = 'active' " + "AND `p`.`category` IN ('electronics', 'books', 'clothing') " + "GROUP BY `u`.`user_id`, `u`.`username`, `p`.`name`, `oi`.`quantity`, `oi`.`price`, `o`.`order_date`, `o`.`status`, `o`.`total_amount` " +