<?php
// SELECT-only: inherit existing approved private configuration, never emit it.
$lane=getenv('PM_LANE');
$pid=$lane==='B'?10001:112175;
$parentRoot=$lane==='B'?'/tmp/zhct-http-store-mysql.dQTTBP':'/tmp/zhct-dm-poc-20260928.fcpiiN/store';
if(strpos((string)file_get_contents('/proc/'.$pid.'/cmdline'),$parentRoot.'/public')===false)throw new RuntimeException('Parent drift');
$inherited=[];
foreach(explode("\0",(string)file_get_contents('/proc/'.$pid.'/environ'))as $item){$pair=explode('=',$item,2);if(count($pair)===2)$inherited[$pair[0]]=$pair[1];}
if(($inherited['POC_EXTERNAL_STUBS']??'')!=='1'||($inherited['POC_REAL_QUEUE']??'0')!=='0')throw new RuntimeException('Unsafe parent');
foreach($inherited as $key=>$value)putenv($key.'='.$value);
putenv('PM_LANE='.$lane);putenv('PM_ROOT='.$parentRoot);
$runtime=$lane==='B'?'/tmp/cdx-store-category9-B.cVux2z':'/tmp/cdx-store-category9-C.Hr1w83';
require $runtime.'/db.php';
$out=['lane'=>$lane,'DML'=>0,'DDL'=>0,'captured_utc'=>gmdate('c')];
$journal=[];
$read=static function($sql,$args=[])use($q,&$journal){
  $journal[]=['sql'=>$sql,'args'=>$args]; return $q($sql,$args);
};
$table=$p.'material_category';
if($lane==='B'){
 $out['identity']=$read('SELECT VERSION() AS VERSION,DATABASE() AS DB,@@session.sql_mode AS SQL_MODE');
 $out['columns']=$read('SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION',[$table]);
 $out['indexes']=$read('SELECT * FROM information_schema.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY INDEX_NAME,SEQ_IN_INDEX',[$table]);
 $out['constraints']=$read('SELECT * FROM information_schema.TABLE_CONSTRAINTS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?',[$table]);
 $out['keys']=$read('SELECT * FROM information_schema.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=?',[$table]);
 $out['triggers']=$read('SELECT * FROM information_schema.TRIGGERS WHERE EVENT_OBJECT_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?',[$table]);
 foreach(['123456','499999','500000','999999'] as $f){
  $out['fraction_'.$f]=$read("SELECT CAST('2001-01-01 01:01:01.$f' AS DATETIME(0)) AS T");
 }
 $out['clock']=$read('SELECT CURRENT_TIMESTAMP AS T,CURRENT_TIMESTAMP(0) AS T0,CURRENT_TIMESTAMP(6) AS T6');
}else{
 $out['identity']=$read("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') AS SCHEMA_NAME FROM DUAL");
 $out['version']=$read('SELECT * FROM V$VERSION');
 $out['columns']=$read('SELECT * FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID',[$table]);
 $out['indexes']=$read('SELECT * FROM USER_INDEXES WHERE TABLE_NAME=? ORDER BY INDEX_NAME',[$table]);
 $out['index_columns']=$read('SELECT * FROM USER_IND_COLUMNS WHERE TABLE_NAME=? ORDER BY INDEX_NAME,COLUMN_POSITION',[$table]);
 $out['constraints']=$read('SELECT * FROM USER_CONSTRAINTS WHERE TABLE_NAME=? ORDER BY CONSTRAINT_NAME',[$table]);
 $out['constraint_columns']=$read('SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME=? ORDER BY CONSTRAINT_NAME,POSITION',[$table]);
 $out['triggers']=$read('SELECT * FROM USER_TRIGGERS WHERE TABLE_NAME=?',[$table]);
 $out['schema_ddl']=$read("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'ZHCT_APP') AS DDL FROM DUAL",[$table]);
 foreach(['123456','499999','500000','999999'] as $f){
  $out['fraction_'.$f]=$read("SELECT CAST(TIMESTAMP '2001-01-01 01:01:01.$f' AS DATETIME(0)) AS T FROM DUAL");
 }
 $out['clock']=$read("SELECT CURRENT_TIMESTAMP AS T,CURRENT_TIMESTAMP(0) AS T0,CURRENT_TIMESTAMP(6) AS T6,TO_TIMESTAMP(TO_CHAR(CURRENT_TIMESTAMP,'YYYY-MM-DD HH24:MI:SS'),'YYYY-MM-DD HH24:MI:SS') AS TRUNC_T FROM DUAL");
}
$out['rows']=$read('SELECT * FROM '.$table.' ORDER BY ID');
$out['utf8_columns']=$lane==='B'?$read('SELECT ID,HEX(NAME) AS NAME_HEX,HEX(CATEGORY_PATH) AS PATH_HEX,HEX(CREATE_BY) AS CREATOR_HEX FROM '.$table.' ORDER BY ID'):$read('SELECT ID,RAWTOHEX(CHARTOBIN(NAME)) AS NAME_HEX,RAWTOHEX(CHARTOBIN(CATEGORY_PATH)) AS PATH_HEX,RAWTOHEX(CHARTOBIN(CREATE_BY)) AS CREATOR_HEX FROM '.$table.' ORDER BY ID');
$out['journal']=$journal;
echo json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION),"\n";
