<?php
declare(strict_types=1);require __DIR__.'/connect.php';$out=['lane'=>$lane,'identity_verified'=>true,'HTTP'=>0,'business_dml'=>0,'tables'=>[]];
foreach(['equipment','dishes','dishes_img','dishes_cate','upload_file','store'] as $name){$table='yoshop_'.$name;$upper=strtoupper($table);$cols=$dm?$q('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',[$upper]):$q('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',[$table]);if(!$cols)throw new RuntimeException('Missing schema '.$name);foreach($cols as &$c)$c['column_name']=strtolower($c['column_name']);unset($c);$fk=$dm?$q("SELECT COUNT(*) n FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R' AND (TABLE_NAME=? OR R_CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME=?))",[$upper,$upper]):$q('SELECT COUNT(*) n FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND (TABLE_NAME=? OR REFERENCED_TABLE_NAME=?)',[$table,$table]);$tr=$dm?$q('SELECT COUNT(*) n FROM USER_TRIGGERS WHERE TABLE_NAME=?',[$upper]):$q('SELECT COUNT(*) n FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE=?',[$table]);$unique=$dm?$q("SELECT c.CONSTRAINT_NAME,c.CONSTRAINT_TYPE,cc.COLUMN_NAME,cc.POSITION FROM USER_CONSTRAINTS c JOIN USER_CONS_COLUMNS cc ON c.CONSTRAINT_NAME=cc.CONSTRAINT_NAME WHERE c.TABLE_NAME=? AND c.CONSTRAINT_TYPE IN ('P','U') ORDER BY c.CONSTRAINT_NAME,cc.POSITION",[$upper]):$q('SELECT INDEX_NAME,NON_UNIQUE,COLUMN_NAME,SEQ_IN_INDEX FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME=? AND NON_UNIQUE=0 ORDER BY INDEX_NAME,SEQ_IN_INDEX',[$table]);$m=['columns'=>$cols,'foreign_keys'=>(int)$fk[0]['n'],'triggers'=>(int)$tr[0]['n'],'unique'=>$unique,'rows'=>(int)$q('SELECT COUNT(*) n FROM '.$table)[0]['n']];if($name!=='dishes_cate')$m['own_rows']=(int)$q('SELECT COUNT(*) n FROM '.$table.' WHERE store_id IN (2147001111,2147001112)')[0]['n'];$out['tables'][$name]=$m;}
file_put_contents(__DIR__.'/structure-'.$lane.'.json',json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES));echo json_encode(['lane'=>$lane,'identity_verified'=>true,'HTTP'=>0,'business_dml'=>0,'tables'=>array_map(static function($m){return ['columns'=>array_column($m['columns'],'column_name'),'foreign_keys'=>$m['foreign_keys'],'triggers'=>$m['triggers'],'rows'=>$m['rows'],'own_rows'=>$m['own_rows']??null,'unique'=>$m['unique']];},$out['tables'])]),"\n";
