SlimeNENC ファミリー · SlimeCOBOL-ESQL Informix トラック · 検証段階

SlimeInformix — Informix 移行の「隠れ方言」を、実機で証明する

Informix(I4GL / ESQL/C / ESQL/COBOL)資産を PostgreSQL / Java へ移行するとき、一番こわいのは 「動いているように見えて、答えが静かに変わる」方言差です。私たちは実機 Informix をオラクルに、 移行前後を bit-exact で突き合わせ、振る舞いが変わっていないことを機械で証明します。

正直な状態(検証段階)。 SlimeInformix は変換器(Informix 方言の sql_pre / sql_emit)を開発中です。 いま証明できているのは ―― 実機 Informix 15.0.1 Developer Edition で確定した「隠れ方言トラップ」のカタログと、 real-iron オラクル kit(ocesql が DB2 系 EXEC SQL を検証したのと同型の Informix 版)。「Informix 対応済」とは書きません
Informix 15.0.1 DEPostgreSQL 1651 プローブ方言トラップ 12 件 確定real-iron オラクルI4GL / ESQL/C / ESQL/COBOL
🎛 AI GATE このページの解説を、あなたの解像度で。

Informix と PostgreSQL は整数の割り算(100/8 が 12.5 か 12 か)や小数→整数の丸めが静かに違います。実機 Informix 15.0.1 ⇄ PostgreSQL 16 を 51 プローブで突合し、隠れ方言トラップ 12 件を確定。「95% 自動化」が見落とす箇所を実測で押さえました。

📋 「このレベルで AI に質問」= 選んだ解像度に合った指示つきで、このページの解説をコピーします。お手元の AI(Claude · GPT · Gemini · Grok 等)に貼れば、その目線でさらに深掘りできます。

いま証明できていること(正直に)

  • 隠れ方言の実機確定実 Informix 15.0.1 Developer Edition ⇄ 実 PostgreSQL 16 に同じ SQL を 51 プローブ流し、値/順序が実際に食い違った 12 件だけを採録。文書でなく実測です。
  • real-iron オラクル稼働中の Informix を独立参照実装(オラクル)とし、移行後の出力と byte / 結果を N/N 突合。Docker 1 コマンドで起動でき、第三者が手元で再現できます。
  • 無条件 silent トラップ 4 件下表のうち ★★★ の 4 件は条件なしで静かに値が変わる=競合の「95% 自動化」が最も見落とす核。

なぜ「95% 自動化」では危ないか ― 実機で確定した隠れ方言

同じ SQL が Informix と PostgreSQL で違う答えを出す箇所。naive な「素通し」変換は、ここでエラーも出さずに静かに壊れます。 これは SlimeJava の「整数トラップ表」(Java の wrapping を素朴に写すと壊れる)の SQL 層版です。

危険度方言トラップInformixPostgreSQL帰結
★★★整数除算 total/cnt(100/8)12.5(浮動小数)12(切捨て)平均・按分・歩合が静かに切捨て(金額欠損)
★★★小数→整数 CAST(2.7 AS INT)2(切捨て)3(四捨五入)整数項目への代入が静かに違う
★★★NULL のソート順 ORDER BY xNULLs 先頭NULLs 末尾top-N・ページング・「先頭行」が変わる
★★★桁あふれ INSERT char(5)←8文字黙って 'ABCDE'ERRORサイレントなデータ欠損 / 移行でアプリ停止
★★MOD(10.5,3) / SUBSTR 負数 / SMALLINT 溢れ / 日付書式 / 末尾空白いずれも実機で食い違い確認(計 6 件、条件・型依存を正直に注記)
誇張しないために。 「ROUND が違うはず」「日付の月日解釈が違うはず」等は実機が否定しました(両者一致)。 私たちは実測で食い違ったものだけをトラップに数えます。当初『空文字列=NULL』を想定しましたが、実機 Informix で '' は空文字列のまま(NULL 化しない)と判明し撤回しました ―― これが「文書でなく実測」です。

私たちのやり方 ― 実機オラクルで「振る舞い不変」を証明

各トラップは「変換器が Informix の意味論を写すべき箇所」です。faithful(忠実)変換は実機 Informix と一致し、その証跡を出します。

トラップ変換器が写すべき形(例)
整数除算a/ba::numeric/b(浮動小数へ昇格)
小数→整数CAST(x AS INT)trunc(x)::int(四捨五入でなく切捨て)
NULL 順ORDER BY xORDER BY x NULLS FIRST
桁あふれsubstr(v,1,n) で Informix の黙殺切捨てを可視化(=データ欠損を証跡化)

これは整数の wrapping を Rust の wrapping へ写すのと同型の発想です。成果物は 「振る舞い不変の証明書」=全トラップを実機オラクルと N/N 突合した、第三者が手元で再現できる証跡。

まだ確認していないこと(誇張しない)

  • 変換器Informix 方言の sql_pre / sql_emit(A/D/E/I の自動写像)は開発中。= 「Informix 変換 対応済」とは言いません。
  • 完全 ESQL オラクルInformix 同梱の ESQL/C・ESQL/COBOL プリコンパイラで原 ESQL を実機実行し、ホスト変数 + indicator まで取る real-iron オラクルは次段階。現状は SQL/格納層で確定。
  • 大規模 corpus実公開 Informix コーパス全数での等価検証は。現状は方言トラップの確定 + PoC 規模。

SlimeNENC ファミリーでの位置づけ

SlimeInformix は SlimeCOBOL の埋め込み SQL 機能 SlimeCOBOL-ESQLInformix トラックです。 レガシー側は COBOL / JCL / RPG、DB 側は DB2(独立参照 ocesql で検証済)に加え、Informix を実機オラクルで詰めています。 Informix は z/OS メインフレームではなく Unix ミッドレンジの enterprise legacy ―― メインフレーム track とは別系統の兄弟トラックとして正直に位置づけます。

お問い合わせ / PoC 評価の相談 SlimeCOBOL-ESQL リソース SlimeNENC ファミリー 他の製品

数値はすべて実 Informix 15.0.1 Developer Edition と実 PostgreSQL 16 の実走値(2026-06)。文書から組んだ主張はありません。