<?php
declare(strict_types=1);
$root=$argv[1]??'';$module=$argv[2]??'';$family=$argv[3]??'';if(!in_array($module,['store','terminal'],true)||!in_array($family,['order','recharge'],true))exit(78);
$timezone=$argv[4]??'UTC';if(!in_array($timezone,['UTC','Asia/Shanghai'],true))exit(78);date_default_timezone_set($timezone);
function getStoreId():int{return 2147001111;}
function app_name():string{return 'store';}
require $root.'/vendor/autoload.php';spl_autoload_register(static function($class)use($root){foreach(['app\\'=>'app/','cores\\'=>'cores/'] as $prefix=>$dir)if(strpos($class,$prefix)===0){$f=$root.'/'.$dir.str_replace('\\','/',substr($class,strlen($prefix))).'.php';if(is_file($f))require $f;}},true,true);require $root.'/app/common/database/DmBuilder.php';require $root.'/app/'.$module.'/common.php';if(getenv('ORDER_COMMON_FILE'))require getenv('ORDER_COMMON_FILE');if(getenv('ORDER_MODEL_FILE'))require getenv('ORDER_MODEL_FILE');
class OrderReadSqlCapture extends \think\db\connector\Mysql{
 public array $sql=[];public array $values=[];public string $selectKind='list';
 public function connect(array $config=[],$linkNum=0,$autoConnection=false):\PDO{throw new RuntimeException('No PDO in SQL source capture');}
 public function getFields(string $tableName):array{$r=[];foreach(['id','order_id','store_id','user_id','goods_id','order_goods_id','score','status','sort','create_time','is_delete','content','goods_name','goods_no','order_no','nick_name','pay_status','order_status','pay_method','order_source','delivery_type','pay_time','recharge_type'] as $k)$r[$k]=['name'=>$k,'type'=>in_array($k,['content','goods_name','goods_no','order_no','nick_name','pay_method'],true)?'text':'int','primary'=>$k==='order_id','autoinc'=>false];return $r;}
 private function capture(\think\db\BaseQuery $q,string $kind,bool $one=false):void{$q->parseOptions();$this->sql[$kind]=$this->getBuilder()->select($q,$one);$this->values[$kind]=array_map(static function($b){return $b[0];},$q->getBind(false));}
 public function value(\think\db\BaseQuery $q,string $field,$default=null,bool $one=true){$options=$q->parseOptions();$old=$options['field']??null;$q->setOption('field',(array)$field);$this->capture($q,'count',$one);if($old!==null)$q->setOption('field',$old);else $q->removeOption('field');return 1;}
 public function select(\think\db\BaseQuery $q):array{$this->capture($q,$this->selectKind);return [];}
 public function find(\think\db\BaseQuery $q):array{$this->capture($q,'detail',true);return [];}
}
$literal="order.user 中文' \\";$out=['module'=>$module,'family'=>$family,'PDO_opens'=>0,'SQL_executed'=>0,'source_sha256'=>[],'dialects'=>[]];
foreach(['mysql'=>\think\db\builder\Mysql::class,'dm'=>\app\common\database\DmBuilder::class] as $dialect=>$builder){\cores\BaseModel::$storeId=2147001111;$db=new \think\DbManager();$db->setConfig(['default'=>'mysql','connections'=>['mysql'=>['type'=>'\\'.OrderReadSqlCapture::class,'builder'=>$builder,'prefix'=>'yoshop_','fields_strict'=>false]]]);$class='app\\'.$module.'\\model\\'.($family==='recharge'?'recharge\\':'').'Order';$file=(new ReflectionClass($class))->getFileName();$out['source_sha256'][substr($file,strlen($root)+1)]=hash_file('sha256',$file);$model=new $class;$params=$family==='order'?['dataType'=>'cancel','searchType'=>10,'searchValue'=>$literal,'userId'=>987,'betweenTime'=>['2026-10-01','2026-10-11']]:['user_id'=>987,'search'=>$literal,'recharge_type'=>10,'pay_status'=>10,'betweenTime'=>['2026-10-01','2026-10-11']];$model->getList($params);$cap=$db->connect('mysql');if($family==='order'){$cap->selectKind='all';$model->getListAll($params);$model->getDetail(123);}$out['dialects'][$dialect]=['sql'=>$cap->sql,'binds'=>$cap->values,'reserved_order_prefix'=>strpos(str_replace('`','',$cap->sql['count']),'order.')!==false,'literal_bind_unchanged'=>in_array('%'.$literal.'%',$cap->values['count'],true),'tenant_bind'=>in_array(2147001111,$cap->values['count'],true)];if($family==='order')$out['dialects'][$dialect]['scalar_detail_id_filter']=preg_match('/(?:\s|\.)`?id`?\s*=/', $cap->sql['detail'])===1;}
echo json_encode($out,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES),"\n";
