Skip to content

fix(sql-pglite): support parameterless SQL scripts - #8145

Open
k70suK3-k06a7ash1 wants to merge 1 commit into
Effect-TS:mainfrom
k70suK3-k06a7ash1:fix/pglite-parameterless-sql-scripts
Open

k70suK3-k06a7ash1 wants to merge 1 commit into
Effect-TS:mainfrom
k70suK3-k06a7ash1:fix/pglite-parameterless-sql-scripts

Conversation

@k70suK3-k06a7ash1

Copy link
Copy Markdown

Parameterless SQL scripts currently fail through the PGlite row-query interface with cannot insert multiple commands into a prepared statement (SQLSTATE 42601). For example:

yield* sql`
  CREATE TABLE example (id INTEGER, value TEXT);
  CREATE INDEX example_id ON example (id);
  CREATE INDEX example_value ON example (value);
`

The adapter always calls PGlite's single-statement query API. This change separates execution into an internal Script | Parameterized tagged union: parameterless SQL uses exec, while statements with a non-empty parameter array keep using query with bound values. SQL is passed intact, including semicolons inside literals, comments and dollar-quoted blocks.

Scripts return the final statement's rows, or an empty array when there are no rows. This applies to ordinary row queries, .unprepared and .stream, preserving result-name transformations and SQL error classification. The .raw, .values and .valuesUnprepared paths retain their existing single-statement behavior.

This was originally encountered with the combined index creation in SqlMessageStorage on 4.0.0-rc.112. Current main already executes those indexes separately; the regression tests here reproduce the remaining adapter limitation directly.

Validation:

  • Before the fix, the new regression file had 7 failures and 1 pass, reproducing SQLSTATE 42601.
  • pnpm test --run packages/sql/pglite/test: 7 files, 41 tests passed, covering DDL, final/empty results, execution modes, parameter binding, SQL quoting, failure atomicity, transaction rollback and result transformations.
  • pnpm check, pnpm lint-fix and git diff --check passed.
  • Includes a patch changeset for @effect/sql-pglite.

@changeset-bot

changeset-bot Bot commented Sep 9, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 572c141

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 30 packages
Name Type
@effect/sql-pglite Patch
effect Patch
@effect/opentelemetry Patch
@effect/vitest Patch
@effect/ai-anthropic Patch
@effect/ai-openai-compat Patch
@effect/ai-openai Patch
@effect/ai-openrouter Patch
@effect/atom-react Patch
@effect/atom-solid Patch
@effect/atom-vue Patch
@effect/platform-browser Patch
@effect/platform-bun Patch
@effect/platform-deno Patch
@effect/platform-node-shared Patch
@effect/platform-node Patch
@effect/sql-clickhouse Patch
@effect/sql-d1 Patch
@effect/sql-libsql Patch
@effect/sql-mssql Patch
@effect/sql-mysql2 Patch
@effect/sql-pg Patch
@effect/sql-sqlite-bun Patch
@effect/sql-sqlite-do Patch
@effect/sql-sqlite-node Patch
@effect/sql-sqlite-react-native Patch
@effect/sql-sqlite-wasm Patch
@effect/docgen Patch
@effect/doctest Patch
@effect/openapi-generator Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

github-actions Bot commented Sep 9, 2026

Copy link
Copy Markdown
Contributor

Bundle Size Analysis

Generated from PR build output; treat the content below as untrusted.

File Name Current Size Previous Size Difference
arbitrary-combinators.ts 34.16 KB 34.16 KB 0.00 KB (0.00%)
basic.ts 6.87 KB 6.87 KB 0.00 KB (0.00%)
batching.ts 9.95 KB 9.95 KB 0.00 KB (0.00%)
brand.ts 6.45 KB 6.45 KB 0.00 KB (0.00%)
cache.ts 10.77 KB 10.77 KB 0.00 KB (0.00%)
config.ts 21.43 KB 21.43 KB 0.00 KB (0.00%)
differ.ts 20.23 KB 20.23 KB 0.00 KB (0.00%)
http-client.ts 21.93 KB 21.93 KB 0.00 KB (0.00%)
http-router.ts 33.39 KB 33.39 KB 0.00 KB (0.00%)
logger.ts 10.88 KB 10.88 KB 0.00 KB (0.00%)
metric.ts 9.02 KB 9.02 KB 0.00 KB (0.00%)
optic.ts 6.70 KB 6.70 KB 0.00 KB (0.00%)
pubsub.ts 15.10 KB 15.10 KB 0.00 KB (0.00%)
queue.ts 11.85 KB 11.85 KB 0.00 KB (0.00%)
schedule.ts 10.96 KB 10.96 KB 0.00 KB (0.00%)
schema-binary.ts 39.42 KB 39.42 KB 0.00 KB (0.00%)
schema-class.ts 19.98 KB 19.98 KB 0.00 KB (0.00%)
schema-fromJsonSchemaDocument.ts 30.40 KB 30.40 KB 0.00 KB (0.00%)
schema-representation-roundtrip.ts 26.18 KB 26.18 KB 0.00 KB (0.00%)
schema-string-transformation.ts 13.60 KB 13.60 KB 0.00 KB (0.00%)
schema-string.ts 11.08 KB 11.08 KB 0.00 KB (0.00%)
schema-template-literal.ts 15.36 KB 15.36 KB 0.00 KB (0.00%)
schema-toArbitrary.ts 33.70 KB 33.70 KB 0.00 KB (0.00%)
schema-toCodeDocument.ts 24.50 KB 24.50 KB 0.00 KB (0.00%)
schema-toCodecJson.ts 19.18 KB 19.18 KB 0.00 KB (0.00%)
schema-toEquivalence.ts 19.32 KB 19.32 KB 0.00 KB (0.00%)
schema-toFormatter.ts 19.43 KB 19.43 KB 0.00 KB (0.00%)
schema-toJsonSchemaDocument.ts 23.51 KB 23.51 KB 0.00 KB (0.00%)
schema-toRepresentation.ts 19.48 KB 19.48 KB 0.00 KB (0.00%)
schema.ts 19.18 KB 19.18 KB 0.00 KB (0.00%)
stm.ts 12.80 KB 12.80 KB 0.00 KB (0.00%)
stream.ts 9.83 KB 9.83 KB 0.00 KB (0.00%)

@kyosuke-lvgs

Copy link
Copy Markdown

When will this PR be merged?

@kyosuke-lvgs

Copy link
Copy Markdown

@tim-smart
Please review

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants