oxide explain's placement notes list != as implemented and say nothing about joins and aggregates left on the CPU

オープン 初心者向け
#94 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 1 日以内に返信

まだ誰も着手していません。

評価

難易度
2/5
見積もり時間
1〜3時間
初心者へのやさしさ
86/100
issue の種類
バグ
明瞭さ
明確に書かれている
活発さ
活発
技術スタック
rust

調査の方向性

rule.rs の comparison() と lower_join、lower_sort_merge_join、lower_aggregate の早期リターン付近を読み、配置メモを対象とする Explain テストを見つけます。比較リストを更新し、各早期リターンについてスキップする理由を記録します。2つのクエリ例で正確な配置メモが出力され、Explain テストでそのメモが固定されていれば完了です。

索引モデルが issue の本文から書いたものです。

説明

bug documentation good first issue

Today — two gaps in the notes #32 added (CHANGELOG 0.2.0: "every node that was skipped and why"):

$ oxide explain --target cuda -q "SELECT id FROM t WHERE k != 3" --table t=…
placement notes (target cuda):
  FilterExec: `!=` is not one of the comparisons the device kernels implement (=, !=, <, <=, >, >=)

The message lists != although comparison() (rule.rs ~450-459) has no NotEq. And joins left on the CPU for their join type, filter or key shape print no note at all (SELECT … FROM t a LEFT JOIN t b ON … shows no "placement notes" section): the early returns in lower_join, lower_sort_merge_join and lower_aggregate return Ok(None) without self.skip(...).

Fix — drop != from the list; record a reason on every early return.

Done when — both commands print an accurate note, pinned in the explain test.

Found in the 0.3.0 review; published 0.2.0 has the same code.

主要言語
Rust
スター
1
フォーク
2
平均マージ
5日 22時間
マージ済み PR(30日)
4

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

vyncint/oxidelake のほかの issue

vyncint/oxidelake の issue をすべて見る

似ている issue

Rust の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。