Skip to content

#3166 fix: allow sqlc.arg/@name to fill gaps in numbered placeholder sequences - #4622

Open
nikolayk812 wants to merge 2 commits into
sqlc-dev:mainfrom
nikolayk812:3166-preprocessor-bug
Open

nikolayk812 wants to merge 2 commits into
sqlc-dev:mainfrom
nikolayk812:3166-preprocessor-bug

Conversation

@nikolayk812

@nikolayk812 nikolayk812 commented Sep 20, 2026

Copy link
Copy Markdown
Contributor

Problem

Mixing sqlc.arg()/@name with explicit $N placeholders fails when the named construct occupies a lower-numbered position than the native placeholders:

-- fails with: could not determine data type of parameter $1
INSERT INTO users (a, b, c) VALUES (sqlc.arg(a), $2, $3);

The mirror case (named construct at the end) worked fine:
-- works
INSERT INTO users (a, b, c) VALUES ($1, $2, sqlc.arg(c));

This asymmetry was reported in #3166.

Root cause

validatePlaceholders ran before number() assigned numbers to sqlc.arg/@name/sqlc.slice occurrences. The gap check only considered native $N placeholders, so it saw {2, 3}, found a gap at 1, and fired the error — not knowing that sqlc.arg(a) was about to fill it.

#3166

e2e changes: sqlc.arg(named) now gets numbered before validation runs, so it fills $2 and the first real gap shifts from $2 to $3.

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.

1 participant