JobListTx missing similar error to JobList on metadata w/ SQLite
まだ誰も着手していません。
評価
- 難易度
- 2/5
- 見積もり時間
- 1〜3時間
- 初心者へのやさしさ
- 45/100
調査の方向性
Start in client.go at the JobList implementation around line 2018, then compare it with JobListTx around line 2046. Reproduce the metadata query with the SQLite integration and check issue 570's referenced discussion before deciding whether the same unsupported-metadata error is still needed. Done means JobListTx reports the clear SQLite limitation instead of the driver's token error.
索引モデルが issue の本文から書いたものです。
説明
Howdy!
I'm testing out the SQLite integration. We use metadata to provide an easy way to find particular jobs when we don't know the ID ahead of time.
Our code uses JobListTx rather than JobList, and we receive this fun error from the driver:
SQL logic error: unrecognized token: "@" (1)
I went to write a reproducer, and accidentally used JobList. To my surprise, there was a much better error!
JobListResult.Metadata is not supported on SQLite
Looking at the code, it looks like the error was added to JobList but not JobListTx.
Full reproducers below:
NOT GREAT ERROR:
package main
import (
"context"
"database/sql"
"encoding/json"
"log"
"github.com/riverqueue/river"
"github.com/riverqueue/river/riverdriver/riversqlite"
"github.com/riverqueue/river/rivermigrate"
_ "modernc.org/sqlite"
)
type job struct{}
func (j job) Kind() string { return "job" }
func main() {
db, err := sql.Open("sqlite", ":memory:")
if err != nil {
log.Fatal(err)
}
defer db.Close()
db.SetMaxOpenConns(1)
driver := riversqlite.New(db)
migrator, err := rivermigrate.New(driver, nil)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
if _, err := migrator.Validate(ctx); err != nil {
log.Fatal(err)
}
if _, err := migrator.Migrate(ctx, rivermigrate.DirectionUp, nil); err != nil {
log.Fatal(err)
}
riverClient, err := river.NewClient(driver, &river.Config{})
if err != nil {
log.Fatal(err)
}
metadata, err := json.Marshal(map[string]string{
"foo": "bar",
})
if err != nil {
log.Fatal(err)
}
if _, err := riverClient.Insert(ctx, job{}, &river.InsertOpts{Metadata: metadata}); err != nil {
log.Fatal(err)
}
tx, err := db.Begin()
if err != nil {
log.Fatal(err)
}
defer tx.Rollback()
jobs, err := riverClient.JobListTx(ctx, tx, river.NewJobListParams().Metadata(string(metadata)))
if err != nil {
log.Fatal(err)
}
if err := tx.Commit(); err != nil {
log.Fatal(err)
}
for _, j := range jobs.Jobs {
log.Printf("job: %+v", j)
}
}
VS the GREAT ERROR:
package main
import (
"context"
"database/sql"
"encoding/json"
"log"
"github.com/riverqueue/river"
"github.com/riverqueue/river/riverdriver/riversqlite"
"github.com/riverqueue/river/rivermigrate"
_ "modernc.org/sqlite"
)
type job struct{}
func (j job) Kind() string { return "job" }
func main() {
db, err := sql.Open("sqlite", ":memory:")
if err != nil {
log.Fatal(err)
}
db.SetMaxOpenConns(1)
driver := riversqlite.New(db)
migrator, err := rivermigrate.New(driver, nil)
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
if _, err := migrator.Validate(ctx); err != nil {
log.Fatal(err)
}
if _, err := migrator.Migrate(ctx, rivermigrate.DirectionUp, nil); err != nil {
log.Fatal(err)
}
riverClient, err := river.NewClient(driver, &river.Config{})
if err != nil {
log.Fatal(err)
}
metadata, err := json.Marshal(map[string]string{
"foo": "bar",
})
if err != nil {
log.Fatal(err)
}
if _, err := riverClient.Insert(ctx, job{}, &river.InsertOpts{Metadata: metadata}); err != nil {
log.Fatal(err)
}
jobs, err := riverClient.JobList(ctx, river.NewJobListParams().Metadata(string(metadata)))
if err != nil {
log.Fatal(err)
}
for _, j := range jobs.Jobs {
log.Printf("job: %+v", j)
}
}
[EDIT] depending on how quickly https://github.com/riverqueue/river/issues/570#issuecomment-2869139374 comes into play, this might be a non-issue!
- 主要言語
- Go
- スター
- 5.7k
- フォーク
- 179
- 平均マージ
- 2日 19時間
- マージ済み PR(30日)
- 12
コントリビューションガイド
このリポジトリのコントリビューションガイドは索引されていません
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
riverqueue/river のほかの issue
-
難易度 5/5 1週間以上 初心者へのやさしさ 45/100
riverqueue/river#1358 · コメント 1 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 35/100
riverqueue/river#1258 · コメント 7 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 45/100
riverqueue/river#1225 · コメント 14 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
riverqueue/river#1185 · コメント 2 件 ·
-
難易度 4/5 3〜5日 初心者へのやさしさ 52/100
riverqueue/river#1183 · リアクション 2 件 ·
riverqueue/river の issue をすべて見る
似ている issue
-
難易度 1/5 1時間未満 初心者へのやさしさ 90/100
-
Bob Shell support オープンenhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100
santhosh-tekuri/jsonschema#276 ·