Skip to content

Column does not exist using CTE with nested sub-select #709

Closed
@jschaf

Description

@jschaf

Config: sqlc.yaml

version: "1"
packages:
  - name: "db"
    path: "acctdb"
    queries: "./acctdb/sqlc_queries.sql"
    schema: "./acctdb/account_schema.sql"
    engine: "postgresql"

SQL Schema

CREATE TABLE test1 (
  env_id         bigint      NOT NULL,
  start_time     timestamptz NOT NULL,
  PRIMARY KEY (env_id, start_time)
);

CREATE TABLE test2 (
  env_id       bigint      NOT NULL,
  update_time  timestamptz NOT NULL DEFAULT now(),
  PRIMARY KEY (env_id, update_time)
);

SQL queries

-- name: FooBar :many
WITH
  agg1 AS (
    SELECT env_id, sum(1) AS num_sessions
    FROM test1 sm
    -- ERROR HERE:start_time does not exist
    WHERE sm.start_time >= sqlc.arg('StartTime')
    GROUP BY sm.env_id
  ),
  agg2 AS (
    SELECT 2 AS env_id, 2 AS num_shards
    FROM (
      SELECT env_id, 3 AS update_time
      FROM test2
    ) latest
    INNER JOIN test2 sm USING (env_id, update_time)
  )
SELECT a1.env_id               AS env_id,
       a1.num_sessions::bigint AS num_sessions,
       a2.num_shards           AS num_shards
FROM agg1 a1
FULL OUTER JOIN agg2 a2 USING (env_id)
ORDER BY env_id;

Command

docker run --rm -v /p/heap/services/platform/account/pkg/pg:/src -w /src -u "1000:1000" kjconroy/sqlc generate

acctdb/sqlc_queries.sql:6:11: column "start_time" does not exist

I think what's happening is that agg1 and agg2 have different columns. sqlc seems to want agg1 to have the same columns as agg2. Since agg2 has update_column instead of start_column, sqlc errors. This is just a guess.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions