<?php
declare(strict_types=1);
$dm=getenv('POC_DIALECT')==='dm';$lane=getenv('PAGE_LANE');
try{$db=new PDO($dm?'dm:host=127.0.0.1;port=5238;schema=AIZHCT_APP':'mysql:host='.getenv('POC_AI_HOST').';port='.getenv('POC_AI_PORT').';dbname='.getenv('POC_AI_SCHEMA').';charset=utf8',getenv('POC_AI_USER'),getenv('POC_AI_PASSWORD'),[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_CASE=>PDO::CASE_LOWER]);}catch(Throwable $e){throw new RuntimeException('Private metadata DB connection failed');}
$q=static function($sql,$args=[])use($db){$s=$db->prepare($sql);$s->execute($args);$r=$s->fetchAll(PDO::FETCH_ASSOC);foreach($r as &$row)foreach($row as &$v)if(is_resource($v))$v=stream_get_contents($v);return $r;};
$identity=$dm?$db->query("SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL")->fetchColumn():$db->query('SELECT DATABASE()')->fetchColumn();
if($dm?$identity!=='AIZHCT_APP':($identity!==getenv('POC_AI_SCHEMA')||strpos($db->query('SELECT VERSION()')->fetchColumn(),'5.6.')!==0))throw new RuntimeException('Identity drift');
$cols=$dm?$q("SELECT COLUMN_NAME,DATA_TYPE,NULLABLE,DATA_DEFAULT,DATA_LENGTH,DATA_PRECISION,DATA_SCALE FROM USER_TAB_COLUMNS WHERE TABLE_NAME='YOSHOP_PAGE' ORDER BY COLUMN_ID"):$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='yoshop_page' ORDER BY ORDINAL_POSITION");
$indexes=$dm?$q("SELECT i.INDEX_NAME,i.UNIQUENESS,c.COLUMN_NAME,c.COLUMN_POSITION FROM USER_INDEXES i JOIN USER_IND_COLUMNS c ON i.INDEX_NAME=c.INDEX_NAME WHERE i.TABLE_NAME='YOSHOP_PAGE' ORDER BY i.INDEX_NAME,c.COLUMN_POSITION"):$q("SELECT INDEX_NAME,NON_UNIQUE,COLUMN_NAME,SEQ_IN_INDEX FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='yoshop_page' ORDER BY INDEX_NAME,SEQ_IN_INDEX");
$fk=$dm?$q("SELECT COUNT(*) n FROM USER_CONSTRAINTS WHERE CONSTRAINT_TYPE='R' AND (TABLE_NAME='YOSHOP_PAGE' OR R_CONSTRAINT_NAME IN (SELECT CONSTRAINT_NAME FROM USER_CONSTRAINTS WHERE TABLE_NAME='YOSHOP_PAGE'))"):$q("SELECT COUNT(*) n FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE WHERE TABLE_SCHEMA=DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND (TABLE_NAME='yoshop_page' OR REFERENCED_TABLE_NAME='yoshop_page')");
$tr=$dm?$q("SELECT COUNT(*) n FROM USER_TRIGGERS WHERE TABLE_NAME='YOSHOP_PAGE'"):$q("SELECT COUNT(*) n FROM INFORMATION_SCHEMA.TRIGGERS WHERE TRIGGER_SCHEMA=DATABASE() AND EVENT_OBJECT_TABLE='yoshop_page'");
$extra=$dm?$q("SELECT DBMS_METADATA.GET_DDL('TABLE','YOSHOP_PAGE','AIZHCT_APP') ddl FROM DUAL"):[];
$out=['lane'=>$lane,'business_dml'=>0,'columns'=>$cols,'indexes'=>$indexes,'identity_columns'=>$extra,'foreign_keys'=>(int)$fk[0]['n'],'triggers'=>(int)$tr[0]['n'],'own_collision'=>(int)$q('SELECT COUNT(*) n FROM yoshop_page WHERE store_id IN (2147001521,2147001522)')[0]['n'],'natural_rows'=>(int)$q('SELECT COUNT(*) n FROM yoshop_page')[0]['n']];
file_put_contents(__DIR__.'/structure-'.$lane.'.json',json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_SLASHES));echo json_encode($out),"\n";
