Skip to content

Preserve MySQL optimizer hints in generated query text#4382

Merged
kyleconroy merged 2 commits intomainfrom
claude/preserve-mysql-optimizer-hints
Apr 17, 2026
Merged

Preserve MySQL optimizer hints in generated query text#4382
kyleconroy merged 2 commits intomainfrom
claude/preserve-mysql-optimizer-hints

Conversation

@kyleconroy
Copy link
Copy Markdown
Collaborator

Drafted by Claude Code on Kyle's behalf — he hasn't edited this description.

Summary

  • Fixes Feature: Support Optimizer Hints in generated queries #4353: multi-line MySQL optimizer hints (/*+ ... */ on their own line) were being stripped out of the query text embedded in generated code. Inline hints on the same line as SELECT already survived.
  • source.StripComments now keeps any line whose block comment starts with /*+, treating it as part of the SQL rather than a comment to discard.
  • Adds a TestStripComments unit test and a new mysql_optimizer_hints end-to-end testdata case covering both inline and multi-line hints.

Why the bug happened

StripComments is line-oriented. A line matching /* ... */ was classified as a block comment and dropped. For inline hints the surrounding line starts with SELECT, so the whole line — hint included — was preserved. For hints on their own line, the line itself matched the comment pattern and was removed.

Test plan

  • go test ./internal/source/ (new TestStripComments passes)
  • go test --tags=examples -run "TestReplay/base" ./internal/endtoend/ (full base replay still green; new mysql_optimizer_hints/mysql case asserts hint is preserved in query.sql.go)
  • Full CI (requires MySQL/PostgreSQL via the sqlc-test-setup path)

🤖 Generated with Claude Code

kyleconroy and others added 2 commits April 16, 2026 22:14
Fixes #4353. Hint comments (/*+ ... */) on their own line were being
treated as regular block comments and removed from the query string
embedded in generated code. Inline hints already survived because the
surrounding line did not match the block-comment pattern.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@kyleconroy kyleconroy merged commit 3f41c61 into main Apr 17, 2026
13 checks passed
@kyleconroy kyleconroy deleted the claude/preserve-mysql-optimizer-hints branch April 17, 2026 05:19
khepin added a commit to khepin/sqlc that referenced this pull request Apr 18, 2026
…te-order-by-args

* 'main' of https://github.com/sqlc-dev/sqlc:
  Map xid8 to pgtype.Uint64 for pgx/v5 (sqlc-dev#4387)
  Rename :one return variable when it conflicts with a parameter (sqlc-dev#4383)
  Coerce SQLite JSONB output regardless of type casing (sqlc-dev#4385)
  Dedupe sqlc.arg parameters wrapped in a type cast for MySQL (sqlc-dev#4384)
  Preserve MySQL optimizer hints in generated query text (sqlc-dev#4382)
  Skip CI/RTD builds when the change is irrelevant (sqlc-dev#4381)
  build(deps): bump the production-dependencies group across 1 directory with 11 updates (sqlc-dev#4380)
  build(deps): bump the production-dependencies group across 1 directory with 5 updates (sqlc-dev#4368)
  build(deps): bump pygments from 2.19.2 to 2.20.0 in /docs (sqlc-dev#4363)
  build(deps): bump requests from 2.32.5 to 2.33.0 in /docs (sqlc-dev#4357)
  Remove github.com/jackc/pgx/v4 dependency (sqlc-dev#4379)
  Upgrade Go toolchain to 1.26.2 (sqlc-dev#4378)
  build(deps): bump actions/upload-artifact from 6 to 7 (sqlc-dev#4320)
  docs: add sqlc-gen-sqlx to community language support (sqlc-dev#4371)
  build(deps): bump github.com/jackc/pgx/v5 from 5.8.0 to 5.9.0 (sqlc-dev#4377)
  Catch invalid ON CONFLICT DO UPDATE column references (sqlc-dev#4366)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Feature: Support Optimizer Hints in generated queries

1 participant