<?php
declare(strict_types=1);require __DIR__.'/common.php';$guard=$protected();$pre=json_decode(file_get_contents($runtime.'/preflight.json'),true);$check($guard===$pre['protected'],'End all protected unchanged');$schema=[];$indexes=[];foreach(['nutrition_meals','nutrition_lack','staff','store_user','config_enum'] as $t){$name='yoshop_'.$t;$u=strtoupper($name);$cols=$read($dm?'SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT,DATA_LENGTH,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME=? ORDER BY COLUMN_ID':'SELECT COLUMN_NAME,DATA_TYPE,COLUMN_TYPE,IS_NULLABLE,COLUMN_DEFAULT,CHARACTER_MAXIMUM_LENGTH,NUMERIC_PRECISION,NUMERIC_SCALE,EXTRA FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY ORDINAL_POSITION',[$dm?$u:$name]);$tr=$read($dm?'SELECT * FROM USER_TRIGGERS WHERE TABLE_NAME=?':'SELECT TRIGGER_NAME,EVENT_MANIPULATION,ACTION_TIMING,ACTION_STATEMENT FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?',[$dm?$u:$name]);$fk=$read($dm?"SELECT CONSTRAINT_NAME,TABLE_NAME,R_CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R' AND (TABLE_NAME=? OR R_CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME=?))":'SELECT TABLE_NAME,CONSTRAINT_NAME,COLUMN_NAME,REFERENCED_TABLE_NAME,REFERENCED_COLUMN_NAME FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND (TABLE_NAME=? OR REFERENCED_TABLE_NAME=?)',[$dm?$u:$name,$dm?$u:$name]);$schema[$t]=['columns'=>$cols,'triggers'=>$tr,'FK'=>$fk];if($dm)$schema[$t]['DDL']=$read("SELECT DBMS_METADATA.GET_DDL('TABLE',?,'AIZHCT_APP') ddl FROM DUAL",[$u]);$indexes[$t]=$read($dm?'SELECT INDEX_NAME,COLUMN_NAME,COLUMN_POSITION,DESCEND FROM USER_IND_COLUMNS WHERE TABLE_NAME=? ORDER BY INDEX_NAME,COLUMN_POSITION':'SELECT INDEX_NAME,NON_UNIQUE,SEQ_IN_INDEX,COLUMN_NAME,COLLATION,SUB_PART FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? ORDER BY INDEX_NAME,SEQ_IN_INDEX',[$dm?$u:$name]);}
$old=json_decode(file_get_contents($prior.'/probe-'.$lane.'.json'),true)['schema'];foreach($old as &$s)foreach($s as &$rows)foreach($rows as &$row)ksort($row);unset($s,$rows,$row);$identityProgress=[];foreach($old as $table=>$original){foreach(['columns','triggers','FK'] as $part)$check($original[$part]===$schema[$table][$part],'Original stable schema '.$table.'/'.$part);if($dm){$a=$original['DDL'][0]['ddl'];$b=$schema[$table]['DDL'][0]['ddl'];if($a!==$b){$check(in_array($table,['nutrition_meals','nutrition_lack'],true),'Only own written identities may advance');$check(preg_match('/AUTO_INCREMENT = ([0-9]+);$/D',$a,$m)===1&&preg_match('/AUTO_INCREMENT = ([0-9]+);$/D',$b,$n)===1,'Exact native identity suffix');$check(preg_replace('/AUTO_INCREMENT = [0-9]+;$/D','AUTO_INCREMENT = @next;',$a)===preg_replace('/AUTO_INCREMENT = [0-9]+;$/D','AUTO_INCREMENT = @next;',$b),'Only native next identity differs');$identityProgress[$table]=['initial'=>(int)$m[1],'final'=>(int)$n[1]];}}}
$pin=json_decode(file_get_contents(__DIR__.'/source-final-sha.json'),true)['files'];foreach($pin as $name=>$sha)$check(hash_file('sha256',$root.'/'.$name)===$sha,'Whole final source6168 before cleanup '.$name);$persist('end-inspection.json',['lane'=>$lane,'own'=>$small(),'protected'=>$guard,'schema'=>$schema,'indexes_end'=>$indexes,'initial_index_snapshot_available'=>false,'schema_structure_original_exact'=>true,'native_identity_progress'=>$identityProgress,'source_files_exact'=>6168,'HTTP'=>0,'DML'=>0,'DDL'=>0]);echo json_encode(['lane'=>$lane,'end_protected_exact'=>true,'original_schema_structure_exact'=>true,'native_identity_progress'=>$identityProgress,'source_files_exact'=>6168,'HTTP'=>0,'DML'=>0,'DDL'=>0]),"\n";
