cockroachdb / cockroachdb/cockroach
sql: type inference fails when using WITH query with parameters
- Dominant language
- Go
- Stars
- 32.5k
- Forks
- 4.1k
- PR merge metrics
- PR metrics pending
Description
**Describe the problem**
When running parameterized statement alongside with CTE query, CockroachDB fails to infer type of the parameter.
Table:
```sql
CREATE TABLE foo (
a INT PRIMARY KEY,
b VARCHAR(10),
c INT
);
```
Following statement fails: ($1 = `int(1)`)
```sql
WITH x AS (SELECT 1, '') UPSERT INTO bar (a, b, c) SELECT *, $1 FROM x;
-- ERROR: value type string doesn't match type int of column "c" (SQLSTATE 42804)
```
However the following statements succeeds:
```sql
WITH x AS (SELECT '', 1) UPSERT INTO bar (b, a, c) SELECT *, $1 FROM x;
WITH x AS (SELECT 1) UPSERT INTO bar (a, b, c) SELECT *, '', $1 FROM x;
WITH x AS (SELECT 1, '', $1) UPSERT INTO bar (a, b, c) SELECT * FROM x;
```
All of the statements runs without error on PostgreSQL 17.
**To Reproduce**
Minimal Go code to reproduce:
```go
package main
import (
"context"
"github.com/jackc/pgx/v5"
)
func main() {
conn, err := pgx.Connect(context.Background(), "postgres://root@localhost:26257/default")
if err != nil {
panic(err)
}
// CREATE TABLE foo (a INT PRIMARY KEY, b VARCHAR(10), c INT)
_, err = conn.Exec(context.Background(), "WITH x AS (SELECT 1, '') UPSERT INTO foo SELECT *, $1 FROM x", 1)
if err != nil {
panic(err)
}
}
```
**Expected behavior**
Statement runs without error.
**Environment:**
- CockroachDB version 23.2.6
- Server OS: Docker for Mac
- Client app: Go 1.23.2, github.com/jackc/pgx/v5 v5.5.5
Jira issue: CRDB-45018
Contributor guide
Assessment
This issue has not been assessed yet.