Skip to content

Sqlc

sqlcのエラー2

sqlc@v1.10.0だと、

-- name: ListCommentsTree :many
WITH RECURSIVE r AS (
    SELECT * FROM comments WHERE comments.id = ?
    UNION ALL
    SELECT comments.* FROM comments, r WHERE comments.parent_id = r.id
)
SELECT * FROM r;

これが

$ sqlc generate
# package sqlc
db/query.sql:35:5: syntax error near "WITH RECURSIVE r AS ("

こう。

sqlc@latestにするとこれは解消するけれど、昨日のtable aliasエラーが。。

うーん。

sqlcのエラー

-- name: ListEventUsers :many
SELECT eu.id, eu.eventid, eu.userid, eu.`status`, u.name
FROM (
    SELECT id, eventid, userid, `status`,
    row_number() OVER (PARTITION BY eventid, userid ORDER BY id DESC) AS num
    FROM eventUser
) eu, user u
WHERE eu.eventid = ?
  AND eu.num = 1
  AND eu.userid = u.id
ORDER BY eu.id;

これが

$ sqlc generate
# package sqlc
db/query.sql:14:1: table alias "eu" does not exist

adminerで実行したらちゃんと思った結果得られるのに。

Table alias not working · Issue #1385 · kyleconroy/sqlcのissueだとv1.10.0だと使えていたっぽい。

$ sqlc version
v1.14.0
$ go install github.com/kyleconroy/sqlc/cmd/sqlc@v1.10.0
$ sqlc version
v1.10.0

エラー消えて生成できるようになった。

Read more

OpenAPIとsqlcの連携

Documentation for the go-server Generatorで生成したファイルとsqlc.dev | Compile SQL to type-safe Goで生成したファイル、うまく連携できればもっと手数少なくAPIサーバーが作れるのになー・・

現状用意するものとしては、DDLとqueryとAPI定義で、APIのリソースとDBのテーブルが1:1なら決め打ちでかける部分が出てくるはず・・

どちらに寄せるかは、OpenAPI定義側かなぁ。。 OpenAPI定義からDDLが生成できれば、queryはサーバーコードと一緒でも良いと思うし。

Read more