Use of projection dsl is not available in Relation#exclude
まだ誰も着手していません。
評価
調査の方向性
Start at Relation#exclude and the projection DSL shown in the reproduction, then reproduce the query to trace where the block is evaluated. Add coverage for the expected NOT (1 = ANY(...)) SQL and confirm the projection and existing conditions remain unchanged.
索引モデルが issue の本文から書いたものです。
説明
Describe the bug
It I try to use the projection dsl in combination with #exlude...
mentions
.select { integer::count(issue_id).as(:unit_mention_count) }
.where(unit_id: 3, read: false)
.exclude { user_ids.any(1) }
...I get the following error:
NoMethodError:
undefined method `any' for #<Sequel::SQL::Identifier @value=>:user_ids>
.exclude { user_ids.any(1) }
Expected behavior
SELECT COUNT(\"mentions\".\"issue_id\") AS \"unit_mention_count\" FROM \"mentions\" WHERE ((\"unit_id\" = 3) AND (\"read\" IS FALSE) AND NOT (1 = ANY(\"mentions\".\"user_ids\")))
Workaround
Overwrite #exclude at relation
class Mentions < ROM::Relation[:sql]
schema(:mentions, infer: true) do
end
def exclude(*args, &block)
if block
exclude(*args).exclude(schema.canonical.restriction(&block))
elsif args.size == 1 && args[0].is_a?(Hash)
new(dataset.exclude(coerce_conditions(args[0])))
elsif !args.empty?
new(dataset.exclude(*args))
else
self
end
end
end
WDYT? I could provide a PR.
- 主要言語
- Ruby
- スター
- 220
- フォーク
- 97
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
rom-rb/rom-sql のほかの issue
-
bug help wanted
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
-
bug help wanted
難易度 3/5 1〜2日 初心者へのやさしさ 48/100
-
bug help wanted
難易度 3/5 1〜2日 初心者へのやさしさ 42/100
-
bug help wanted
難易度 4/5 3〜5日 初心者へのやさしさ 42/100
-
bug help wanted
難易度 3/5 1〜2日 初心者へのやさしさ 45/100
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 65/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
heartcombo/simple_form#1874 ·
-
Bug: Reports Monthly breakdown shows the whole first month when a custom range starts mid-monthオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 85/100
we-promise/sure#4603 ·
メンテナーはふだん 1 日以内に返信
-
Category: OneSwap Status: Accepted
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
OpenNebula/one#8237 ·
-
enhancement
難易度 2/5 1〜3時間 初心者へのやさしさ 70/100
AllYourBot/hostedgpt#882 ·
メンテナーはふだん 1 日以内に返信