Show
Ignore:
Timestamp:
10/02/08 18:12:10 (3 months ago)
Author:
nowelium
Message:

mysql の procedure サポートは終わり。
General error: 2014 Cannot execute queries while other unbuffered queries are active. とかは、PDOのPDO::MYSQL_ATTR_USE_BUFFERED_QUERY をいくら設定してもダメなので、少し逃げ。一端切断すればなんとかなるけど、Datasource設定とかは管理外なので、やらない。
multi rows は 2次元配列で。

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • lang/php/misc/Hermit/src/Hermit/creator/HermitProcedureCallSqlCreator.php

    r20387 r20492  
    44 * @author nowelum 
    55 */ 
    6 class HermitProcedureCallSqlCreator implements HermitSqlCreator { 
     6class HermitProcedureCallSqlCreator implements HermitSqlCreator, HermiSetupSqlCreator { 
    77    private $sql; 
     8    private $setupSql; 
    89    public function initialize(PDO $pdo, ReflectionMethod $method, HermitAnnote $annote){ 
    910        $procedureName = $annote->getProcedure($method); 
    1011        $dbMeta = HermitDatabaseMetaFactory::get($pdo); 
    1112        $info = $dbMeta->getProcedureInfo($procedureName); 
    12         $parameterNames = $info->getParamNames(); 
    13         $sql = 'CALL'; 
    14         $sql .= ' '; 
    15         $sql .= $procedureName; 
    16         $sql .= '('; 
    17         foreach($parameterNames as $parameterName){ 
    18             $sql .= '/*' . $parameterName . '*/'; 
    19             $sql .= '"' . $parameterName . '"'; 
    20             $sql .= ','; 
    21         } 
    22         $sql = substr($sql, 0, -1); 
    23         $sql .= ')'; 
    24         $this->sql = $sql; 
     13 
     14        $this->setupSql = self::generateSetupSql($info); 
     15        $this->sql = self::generateCallSql($info); 
    2516    } 
    2617    public function createSql(){ 
    2718        return $this->sql; 
    2819    } 
     20    public function createSetupSql(){ 
     21        return $this->setupSql; 
     22    } 
     23    public function hasSetupSql(){ 
     24        return null !== $this->setupSql; 
     25    } 
     26    protected static function generateCallSql(HermitProcedureInfo $info){ 
     27        $parameterNames = $info->getParamNames(); 
     28        $callSql = 'CALL'; 
     29        $callSql .= ' '; 
     30        $callSql .= $info->getName(); 
     31        $callSql .= '('; 
     32        foreach($parameterNames as $parameterName){ 
     33            $callSql .= '/*' . $parameterName . '*/'; 
     34            $callSql .= '"' . $parameterName . '"'; 
     35            $callSql .= ','; 
     36        } 
     37        $callSql = substr($callSql, 0, -1); 
     38        $callSql .= ')'; 
     39        return $callSql; 
     40    } 
     41    protected static function generateSetupSql(HermitProcedureInfo $info){ 
     42        $begin = false; 
     43        $parameterNames = $info->getParamNames(); 
     44 
     45        $setupSql = 'SET'; 
     46        $setupSql .= ' '; 
     47        foreach($parameterNames as $parameterName){ 
     48            if($info->typeofIn($parameterName)){ 
     49               continue; 
     50            } 
     51            $begin = true; 
     52            $setupSql .= '@' . $parameterName; 
     53            $setupSql .= ' = '; 
     54            $setupSql .= '/*' . $parameterName . '*/'; 
     55            $setupSql .= '"' . $parameterName . '"'; 
     56            $setupSql .= ','; 
     57        } 
     58        if(!$begin){ 
     59            return null; 
     60        } 
     61        return substr($setupSql, 0, -1); 
     62    } 
    2963}