<?php
declare(strict_types=1);
$lane=getenv('PM_LANE');$root=getenv('PM_ROOT');$check=static function(bool $ok,string $reason){if(!$ok)throw new RuntimeException($reason);};$save=static function($name,$value){file_put_contents(__DIR__.'/'.$name,json_encode($value,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_PRESERVE_ZERO_FRACTION));chmod(__DIR__.'/'.$name,0600);};$config=require $root.'/application/database.php';
if($lane==='B'){$local=require '/workspace/zhct/zhctproject/store/application/config/local/database.php';foreach(['hostname','database','username','password'] as $key)$check($config[$key]===$local[$key],'Code local config scope');$check((string)(($config['hostport']??'')?:3306)===(string)(($local['hostport']??'')?:3306),'Code local port');$dsn='mysql:host='.$config['hostname'].';port='.(($config['hostport']??'')?:3306).';dbname='.$config['database'].';charset=utf8mb4';}
else{$check($lane==='C'&&$config['hostname']==='127.0.0.1'&&(string)$config['hostport']==='5237'&&$config['database']==='ZHCT_APP','DM nonproduction scope');$dsn='dm:host=127.0.0.1;port=5237;schema=ZHCT_APP';}
$db=new PDO($dsn,$config['username'],$config['password'],[PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION,PDO::ATTR_CASE=>PDO::CASE_LOWER,PDO::ATTR_STRINGIFY_FETCHES=>false]);$p=$lane==='B'?'ydy_':'YDY_';$GLOBALS['ORACLE_JOURNAL']=[];
$q=static function(string $sql,array $params=[])use($db,$check):array {$check(preg_match('/^SELECT\b/i',$sql)===1,'Oracle SELECT only');$n=count($GLOBALS['ORACLE_JOURNAL']);$GLOBALS['ORACLE_JOURNAL'][$n]=['sql'=>$sql,'parameters'=>$params];$statement=$db->prepare($sql);$GLOBALS['ORACLE_JOURNAL'][$n]['queryString']=$statement->queryString;$statement->execute($params);$rows=[];while($row=$statement->fetch(PDO::FETCH_ASSOC)){$row=array_change_key_case($row,CASE_LOWER);foreach($row as &$value){if(is_resource($value))$value=stream_get_contents($value);$check(!is_string($value)||strlen($value)<=262144,'Field cap256K');}unset($value);$rows[]=$row;$check(count($rows)<=100,'Source cap100 rows');}$check(strlen(json_encode($rows))<=2097152,'Source cap2M');$GLOBALS['ORACLE_JOURNAL'][$n]['row_count']=count($rows);return $rows;};require_once $root.'/env.php';
