Expand description
primitives — codegen が直呼びできる安定 primitive 公開面(bc#36 / typed-codegen.md §3.4)。
A0 = 公開面の確定(emitter 生成ロジックは A1/#37)。生成コードが「細粒度 primitive を 呼ぶ」ための callable surface を additive に切り出す。
最重要規律(AC 7): 演算子意味論は再実装しない。 各 primitive は Expression IR の
単一キーノード(serde_json::json!)を組んで既存 SSoT crate::expr::evaluate へ委譲する
だけの薄いラッパ。よって意味論(INT_OVERFLOW / PRECISION_LOSS / MOD_ZERO / NULL_REF /
TYPE_MISMATCH / 短絡未評価 / code-point 順 等)は evaluate と完全一致する。
短絡の保存: and/or/cond/coalesce は 未評価の IR ノード(&J)を引数に取り、
内部で evaluate が短絡する(値を先に渡す API は採らない)。
加えて run_plan / run_plan_parallel の bounded 並行 / skip・unproduced / hydration helper を 再エクスポートまたは薄く公開する(いずれも既存実装を SSoT として共有)。
Functions§
- add
- 加算(int×int / float×float checked。混在は TYPE_MISMATCH)。
- and
- 論理積(短絡: a=false なら b は評価されない)。b は未評価 IR で渡す。
- arr
- array 構築。
- coalesce
- null 合体(左が null のときだけ右を評価)。右は未評価 IR で渡す。
- concat
- 文字列連結(n-ary, min 2。string のみ)。
- concat_
native concatのネイティブ実装(evaluate非経由)。既にネイティブ評価済みの parts をString::push_strで連結する。非 string 部分はTYPE_MISMATCH(evaluateのconcatアームと同一)。arity<2 は不正 IR(InvalidNode)。parts は emitter が各要素を再帰的に native emit した Value 列(=式ツリー解釈が消えている)。- cond
- 条件(strict bool。採用側のみ評価)。then/else は未評価 IR で渡す。
- div
- 除算(常に float。|int|>2^53 は PRECISION_LOSS、0除算は NAN_OR_INF)。
- eq
- 等価(同一スカラ型のみ。null==null 可)。
- eval_
expr - 生の Expression IR を直接評価する汎用 primitive(意味論は個別 primitive と同一 SSoT)。
- float_
lit {float:n}リテラル(NaN/Inf は NAN_OR_INF)。- ge
- 以上。
- gt
- 大なり。
- hydrate_
into - behavior.rs の map.into と同一規律の zip-attach helper。
- int_lit
{int:"..."}リテラル(i64 checked)。- le
- 以下。
- len
- 配列長(配列のみ。string length は v1 に無い)。
- lt
- 小なり(同一型 int/float/string。string は code-point 順)。
- map_
with_ concurrency - 入力順を保存し in-flight を
concurrencyで上限する bounded 並行 map。 - mod
- 剰余(truncated、符号は被除数。int の 0 剰余は MOD_ZERO)。
- mul
- 乗算。
- ne
- 非等価。
- neg
- 単項マイナス。
- not
- 論理否定(strict bool。truthiness なし)。
- obj
- object 構築(own key
__proto__は FORBIDDEN_KEY)。 - or
- 論理和(短絡: a=true なら b は評価されない)。
- ref
- 参照。中間 null は NULL_REF。
- ref_
native refのネイティブ実装(evaluate非経由)。scope→field を直接歩く。 中間 null はNULL_REF(evaluateのrefアームと同一)。- ref_opt
- null 安全参照。中間 null は null 伝播。
- ref_
opt_ native refOptのネイティブ実装(evaluate非経由)。中間 null は null 伝播。- skip_
connection - connection relation の未生成 = {items:[],cursor:null}。
- skip_
single - single relation の未生成 = Null。
- sub
- 減算。
- unproduced_
value - 未生成 Port(Skip)の表現値。single→Null / connection→空 connection。