Changeset 20387 for lang/php

Show
Ignore:
Timestamp:
10/01/08 21:02:13 (2 months ago)
Author:
nowelium
Message:
 
Location:
lang/php/misc/Hermit
Files:
6 added
16 modified

Legend:

Unmodified
Added
Removed
  • lang/php/misc/Hermit/example/employee/hoge.php

    r20325 r20387  
    99    public function __construct(){ 
    1010        //HermitDaoManager::set(__CLASS__, 'EmployeeDao'); 
    11 <<<<<<< .mine 
    12         $dao = new Hermit('EmployeeDao'); 
    13         //$result = $dao->getAllEmployeeList(); 
    14         //$result = $dao->getEmployeeByEmpNo(7698); 
    15         /* 
    16 ======= 
    1711        $this->dao = new Hermit('EmployeeDao'); 
    1812    } 
     
    2418    } 
    2519    public function getEmp(){ 
    26 >>>>>>> .r20319 
    2720        $emp = new Employee; 
    2821        $emp->empno = 7566; 
    2922        $emp->ename = 'JONES'; 
    30 <<<<<<< .mine 
    31         $result = $dao->getEmployee($emp); 
    32         */ 
    33         $result = $dao->getEmployeeAndDepartment(); 
    34         return $result; 
    35 ======= 
    3623        return $this->dao->getEmployee($emp); 
    37 >>>>>>> .r20319 
    3824    } 
    3925} 
  • lang/php/misc/Hermit/src/Hermit/annote/HermitAnnoteConst.php

    r20200 r20387  
    6767    } 
    6868    public function getProcedure(ReflectionMethod $method){ 
    69         $key = $method->getName . self::PROCEDURE_SUFFIX; 
     69        $key = $method->getName() . self::PROCEDURE_SUFFIX; 
    7070        if($this->reflector->hasConstant($key)){ 
    7171            return $this->reflector->getConstant($key); 
  • lang/php/misc/Hermit/src/Hermit/command/HermitProcedureCommand.php

    r20325 r20387  
    88    private $sqlCreator; 
    99    private $type; 
    10     public function __construct(ReflectionMethod $method, HermitSqlCreator $sqlCreator, HermitValueType $type){ 
     10    private $annote; 
     11    public function setMethod(ReflectionMethod $method){ 
    1112        $this->method = $method; 
     13    } 
     14    public function setSqlCreator(HermitSqlCreator $sqlCreator){ 
    1215        $this->sqlCreator = $sqlCreator; 
     16    } 
     17    public function setValueType(HermitValueType $type){ 
    1318        $this->type = $type; 
     19    } 
     20    public function setAnnote(HermitAnnote $annote){ 
     21        $this->annote = $annote; 
    1422    } 
    1523 
    1624    public function execute(PDO $pdo, array $parameters){ 
    17         $sql = $this->sqlCreator->createSql($pdo); 
    18         $stmt = HermitStatementBuilder::prepare($pdo, $this->method, $sql); 
     25        $builder = new HermitProcedureStatementBuilder($this->method, $this->annote, $this->sqlCreator); 
     26        $stmt = $builder->build($pdo); 
    1927        $stmt->execute($parameters); 
    20         $rs = new HermitProcedureResultSet; 
    21         return $rs->execute($stmt, $this->type); 
     28        $rs = new HermitProcedureResultSet($stmt->getSqlParameter()); 
     29        $rs->bindParameter($pdo, $parameters); 
     30        return $rs->create($stmt, $this->type); 
    2231    } 
    2332} 
  • lang/php/misc/Hermit/src/Hermit/command/HermitSelectCommand.php

    r20200 r20387  
    1414    } 
    1515    public function execute(PDO $pdo, array $parameters){ 
    16         $sql = $this->sqlCreator->createSql($pdo); 
    17         $stmt = HermitStatementBuilder::prepare($pdo, $this->method, $sql); 
     16        $builder = new HermitStatementBuilder($this->method, $this->sqlCreator); 
     17        $stmt = $builder->build($pdo); 
    1818        $stmt->execute($parameters); 
    1919        $resultset = HermitResultSetFactory::create($this->method); 
  • lang/php/misc/Hermit/src/Hermit/command/HermitSqlCommandFactory.php

    r20325 r20387  
    4242    } 
    4343    protected function createProcedureCommand(PDO $pdo, ReflectionMethod $method){ 
    44         $dbName = HermitDatabaseMetaFactory::getDatabaseName($pdo); 
    45         $creator = $this->createProcedureSqlCreator($method, $dbName); 
     44        $dbms = HermitDatabaseMetaFactory::getDbms($pdo); 
     45        $creator = $this->createProcedureSqlCreator($method, $dbms); 
    4646        $creator->initialize($pdo, $method, $this->annote); 
    4747        $valueType = HermitValueTypeFactory::create($this->annote, $method); 
    48         return new HermitProcedureCommand($method, $creator, $valueType); 
     48 
     49        $command = new HermitProcedureCommand; 
     50        $command->setMethod($method); 
     51        $command->setSqlCreator($creator); 
     52        $command->setValueType($valueType); 
     53        $command->setAnnote($this->annote); 
     54        return $command; 
    4955    } 
    5056    protected function createProcedureSqlCreator(ReflectionMethod $method, $dbName){ 
    5157        $sql = $this->annote->getProcedure($method); 
    5258        if(null !== $sql){ 
    53             return new HermitStaticSqlCreator($sql); 
     59            return new HermitProcedureCallSqlCreator($sql); 
    5460        } 
    5561        $sql = $this->annote->getSql($method, $dbName); 
    5662        if(null !== $sql){ 
    57             return new HermitStaticSqlCreator($sql); 
     63            return new HermitProcedureCallSqlCreator($sql); 
    5864        } 
    5965        $sql = $this->annote->getFile($method); 
    6066        if(null !== $sql){ 
    61             return new HermitStaticSqlCreator($sql); 
     67            return new HermitProcedureCallSqlCreator($sql); 
    6268        } 
    6369        throw new BadMethodCallException('method: "' . $method->getName() . '" was not apply to Procedure command'); 
     
    7379    } 
    7480    protected function createSelectCommand(PDO $pdo, ReflectionMethod $method){ 
    75         $dbName = HermitDatabaseMetaFactory::getDatabaseName($pdo); 
    76         $creator = $this->createSelectSqlCreator($method, $dbName); 
     81        $dbms = HermitDatabaseMetaFactory::getDbms($pdo); 
     82        $creator = $this->createSelectSqlCreator($method, $dbms); 
    7783        $creator->initialize($pdo, $method, $this->annote); 
    7884        if($creator instanceof HermitAppendableSqlCreator){ 
     
    8288        return new HermitSelectCommand($method, $creator, $valueType); 
    8389    } 
    84     protected function createSelectSqlCreator(ReflectionMethod $method, $dbName){ 
    85         $sql = $this->annote->getSql($method, $dbName); 
     90    protected function createSelectSqlCreator(ReflectionMethod $method, $dbms){ 
     91        $sql = $this->annote->getSql($method, $dbms); 
    8692        if(null !== $sql){ 
    8793            return new HermitStaticSqlCreator($sql); 
    8894        } 
    89         $sql = $this->annote->getFile($method, $dbName); 
     95        $sql = $this->annote->getFile($method, $dbms); 
    9096        if(null !== $sql){ 
    9197            return new HermitStaticSqlCreator($sql); 
  • lang/php/misc/Hermit/src/Hermit/meta/HermitDatabaseMetaFactory.php

    r19682 r20387  
    1313        // nop 
    1414    } 
    15     public static function getDatabaseName(PDO $pdo){ 
     15    public static function getDbms(PDO $pdo){ 
    1616        return $pdo->getAttribute(PDO::ATTR_DRIVER_NAME); 
    1717    } 
    1818    public static function get(PDO $pdo){ 
    19         $driver = self::getDatabaseName($pdo); 
     19        $driver = self::getDbms($pdo); 
    2020        if(!isset(self::$dbms[$driver])){ 
    2121            throw new RuntimeException('unsupported driver: ' . $driver); 
  • lang/php/misc/Hermit/src/Hermit/parameter/HermitSqlParameter.php

    r18954 r20387  
    66abstract class HermitSqlParameter { 
    77    public function match($matches){ 
     8        if(count($matches) < 4){ 
     9            throw new RuntimeException('sql comment was fail: ' . join(',', $matches)); 
     10        } 
    811        return $this->replace($matches[1], $matches[2], $matches[3]); 
    912    } 
  • lang/php/misc/Hermit/src/Hermit/resultset/HermitDefaultResultSet.php

    r20200 r20387  
    55 */ 
    66class HermitDefaultResultSet implements HermitResultSet { 
    7     public function execute(HermitStatement $stmt, HermitValueType $type){ 
     7    public function create(HermitStatement $stmt, HermitValueType $type){ 
    88        $type->apply($stmt); 
    99        return $stmt->fetch(); 
  • lang/php/misc/Hermit/src/Hermit/resultset/HermitListResultSet.php

    r20200 r20387  
    66 */ 
    77class HermitListResultSet implements HermitResultSet { 
    8     public function execute(HermitStatement $stmt, HermitValueType $type){ 
     8    public function create(HermitStatement $stmt, HermitValueType $type){ 
    99        $type->apply($stmt); 
    1010         
    1111        $results = array(); 
    12         while($obj = $stmt->fetch()){ 
    13             $results[] = $obj; 
     12        while($row = $stmt->fetch()){ 
     13            $results[] = $row; 
    1414        } 
    1515        return $results; 
  • lang/php/misc/Hermit/src/Hermit/resultset/HermitProcedureResultSet.php

    r20200 r20387  
    44 * @author nowelium 
    55 */ 
    6 class HermitProcedureResultSet { 
     6class HermitProcedureResultSet implements HermitResultSet, HermitParameterBind { 
     7    private $procParameter; 
     8    public function __construct(HermitProcedureParameter $procParameter){ 
     9        $this->procParameter = $procParameter; 
     10    } 
     11    public function create(HermitStatement $stmt, HermitValueType $type){ 
     12        $type->apply($stmt); 
     13 
     14        if($stmt->columnCount() < 1){ 
     15            return null; 
     16        } 
     17 
     18        $results = array(); 
     19        do { 
     20            $row = $stmt->fetch(); 
     21            if(false === $row){ 
     22                break; 
     23            } 
     24            $results[] = $row; 
     25        } while($stmt->nextRowset()); 
     26        return $results; 
     27    } 
     28    public function bindParameter(PDO $pdo, array $parameter){ 
     29        $param = $parameter[0]; 
     30        $dbms = HermitDatabaseMetaFactory::getDbms($pdo); 
     31        if('mysql' === $dbms){ 
     32            if(!$this->procParameter->hasBindParameters()){ 
     33                return; 
     34            } 
     35            $out = $this->procParameter->getOutParameters(); 
     36            foreach($out as $name){ 
     37                $stmt = $pdo->prepare('SELECT @' . $name); 
     38                $stmt->bindColumn(1, $param->$name); 
     39                $stmt->execute(); 
     40                 
     41                $stmt->fetch(PDO::FETCH_BOUND); 
     42                $stmt->closeCursor(); 
     43                unset($stmt); 
     44            } 
     45        } 
     46    } 
    747} 
  • lang/php/misc/Hermit/src/Hermit/resultset/HermitResultSet.php

    r20200 r20387  
    55 */ 
    66interface HermitResultSet { 
    7     public function execute(HermitStatement $stmt, HermitValueType $type); 
     7    public function create(HermitStatement $stmt, HermitValueType $type); 
    88} 
  • lang/php/misc/Hermit/src/Hermit/statement/HermitStatement.php

    r19344 r20387  
    1111        $this->statement = $statement; 
    1212    } 
     13    public function getSqlParameter(){ 
     14        return $this->parameter; 
     15    } 
    1316    public function execute($parameterValue = array()){ 
    1417        $this->parameter->bind($this->statement, $parameterValue); 
    1518        return $this->statement->execute(); 
     19    } 
     20    public function fetch(){ 
     21        $args = func_get_args(); 
     22        $c = count($args); 
     23        if($c < 1){ 
     24            return $this->statement->fetch(); 
     25        } 
     26        if($c < 2){ 
     27            return $this->statement->fetch($args[0]); 
     28        } 
     29        return call_user_func_array(array($this->statement, 'fetch'), $args); 
    1630    } 
    1731    public function __call($name, $params){ 
  • lang/php/misc/Hermit/src/Hermit/statement/HermitStatementBuilder.php

    r19954 r20387  
    44 * @author nowelium 
    55 */ 
    6 abstract class HermitStatementBuilder { 
     6class HermitStatementBuilder { 
    77    const REGEX = '/(\/\*([^\*\/]*)\*\/)(\w+|((\'|")([^(\'|")]*)(\'|")))?/m'; 
    8     public static function prepare(PDO $pdo, ReflectionMethod $method, $sql){ 
    9         $parameterType = self::createParameterType($method); 
    10         $sql = preg_replace_callback(self::REGEX, array($parameterType, 'match'), $sql); 
    11         return new HermitStatement($parameterType, $pdo->prepare($sql)); 
     8    private $method; 
     9    private $sqlCreator; 
     10    public function __construct(ReflectionMethod $method, HermitSqlCreator $sqlCreator){ 
     11        $this->method = $method; 
     12        $this->sqlCreator = $sqlCreator; 
    1213    } 
    13     protected static function createParameterType(ReflectionMethod $method){ 
    14         $numOfParams = $method->getNumberOfParameters(); 
     14    public function build(PDO $pdo){ 
     15        $parameter = $this->createParameterType(); 
     16        $sql = $this->sqlCreator->createSql($pdo); 
     17        $sql = self::preparedSql($parameter, $sql); 
     18        return new HermitStatement($parameter, $pdo->prepare($sql)); 
     19    } 
     20 
     21    protected static function preparedSql(HermitSqlParameter $parameter, $sql){ 
     22        return preg_replace_callback(self::REGEX, array($parameter, 'match'), $sql); 
     23    } 
     24 
     25    protected function createParameterType(){ 
     26        $numOfParams = $this->method->getNumberOfParameters(); 
    1527        if(0 === $numOfParams){ 
    1628            return new HermitSqlParameterNull; 
  • lang/php/misc/Hermit/test/db_init.php

    r20314 r20387  
    22 
    33function db_init(PDO $pdo){ 
    4     $name = HermitDatabaseMetaFactory::getDatabaseName($pdo); 
     4    $name = HermitDatabaseMetaFactory::getDbms($pdo); 
    55    $_db_init = 'db_' . $name . '_init'; 
    66    $_db_init($pdo); 
  • lang/php/misc/Hermit/test/resource/procedure-mysql.sql.php

    r20325 r20387  
    5454$stmt = $pdo->query($sql); 
    5555$stmt->closeCursor(); 
     56unset($stmt); 
    5657 
    5758$sql = <<<__SQL__ 
     
    6465$stmt = $pdo->query($sql); 
    6566$stmt->closeCursor(); 
     67unset($stmt); 
     68 
    6669  
    6770$sql = <<<__SQL__ 
     
    7578$stmt = $pdo->query($sql); 
    7679$stmt->closeCursor(); 
     80unset($stmt); 
     81 
    7782 
    7883$sql = <<<__SQL__ 
     
    8792$stmt = $pdo->query($sql); 
    8893$stmt->closeCursor(); 
     94unset($stmt); 
     95 
    8996 
    9097$sql = <<<__SQL__ 
     
    98105$stmt = $pdo->query($sql); 
    99106$stmt->closeCursor(); 
     107unset($stmt); 
     108 
    100109 
    101110$sql = <<<__SQL__ 
     
    109118$stmt = $pdo->query($sql); 
    110119$stmt->closeCursor(); 
     120unset($stmt); 
     121 
    111122 
    112123$sql = <<<__SQL__ 
     
    119130$stmt = $pdo->query($sql); 
    120131$stmt->closeCursor(); 
     132unset($stmt); 
     133 
    121134 
    122135$sql = <<<__SQL__ 
     
    130143$stmt = $pdo->query($sql); 
    131144$stmt->closeCursor(); 
     145unset($stmt); 
     146 
    132147 
    133148$sql = <<<__SQL__ 
     
    142157$stmt = $pdo->query($sql); 
    143158$stmt->closeCursor(); 
     159unset($stmt); 
     160 
    144161 
    145162$pdo->commit(); 
  • lang/php/misc/Hermit/test/resource/test-mysql.sql.php

    r20314 r20387  
    2929$stmt = $pdo->query($sql); 
    3030$stmt->closeCursor(); 
     31unset($stmt); 
     32 
    3133 
    3234$sql = <<<__SQL__ 
     
    3537$stmt = $pdo->query($sql); 
    3638$stmt->closeCursor(); 
     39unset($stmt); 
     40 
    3741$sql = <<<__SQL__ 
    3842INSERT INTO EMP VALUES(7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,300,30,'2000-01-01 00:00:00.0'); 
     
    4044$stmt = $pdo->query($sql); 
    4145$stmt->closeCursor(); 
     46unset($stmt); 
     47 
    4248$sql = <<<__SQL__ 
    4349INSERT INTO EMP VALUES(7521,'WARD','SALESMAN',7698,'1981-02-22',1250,500,30,'2000-01-01 00:00:00.0'); 
     
    4551$stmt = $pdo->query($sql); 
    4652$stmt->closeCursor(); 
     53unset($stmt); 
     54 
    4755$sql = <<<__SQL__ 
    4856INSERT INTO EMP VALUES(7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20,'2000-01-01 00:00:00.0'); 
     
    5058$stmt = $pdo->query($sql); 
    5159$stmt->closeCursor(); 
     60unset($stmt); 
     61 
    5262$sql = <<<__SQL__ 
    5363INSERT INTO EMP VALUES(7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,1400,30,'2000-01-01 00:00:00.0'); 
     
    5565$stmt = $pdo->query($sql); 
    5666$stmt->closeCursor(); 
     67unset($stmt); 
     68 
    5769$sql = <<<__SQL__ 
    5870INSERT INTO EMP VALUES(7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30,'2000-01-01 00:00:00.0'); 
     
    6072$stmt = $pdo->query($sql); 
    6173$stmt->closeCursor(); 
     74unset($stmt); 
     75 
    6276$sql = <<<__SQL__ 
    6377INSERT INTO EMP VALUES(7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10,'2000-01-01 00:00:00.0'); 
     
    6579$stmt = $pdo->query($sql); 
    6680$stmt->closeCursor(); 
     81unset($stmt); 
     82 
    6783$sql = <<<__SQL__ 
    6884INSERT INTO EMP VALUES(7788,'SCOTT','ANALYST',7566,'1982-12-09',3000.0,NULL,20,'2005-01-18 13:09:32.213'); 
     
    7086$stmt = $pdo->query($sql); 
    7187$stmt->closeCursor(); 
     88unset($stmt); 
     89 
    7290$sql = <<<__SQL__ 
    7391INSERT INTO EMP VALUES(7839,'KING','PRESIDENT',NULL,'1981-11-17',5000,NULL,10,'2000-01-01 00:00:00.0'); 
     
    7593$stmt = $pdo->query($sql); 
    7694$stmt->closeCursor(); 
     95unset($stmt); 
     96 
    7797$sql = <<<__SQL__ 
    7898INSERT INTO EMP VALUES(7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30,'2000-01-01 00:00:00.0'); 
     
    80100$stmt = $pdo->query($sql); 
    81101$stmt->closeCursor(); 
     102unset($stmt); 
     103 
    82104$sql = <<<__SQL__ 
    83105INSERT INTO EMP VALUES(7876,'ADAMS','CLERK',7788,'1983-01-12',1100,NULL,20,'2000-01-01 00:00:00.0'); 
     
    85107$stmt = $pdo->query($sql); 
    86108$stmt->closeCursor(); 
     109unset($stmt); 
     110 
    87111$sql = <<<__SQL__ 
    88112INSERT INTO EMP VALUES(7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30,'2000-01-01 00:00:00.0'); 
     
    90114$stmt = $pdo->query($sql); 
    91115$stmt->closeCursor(); 
     116unset($stmt); 
     117 
    92118$sql = <<<__SQL__ 
    93119INSERT INTO EMP VALUES(7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20,'2000-01-01 00:00:00.0'); 
     
    95121$stmt = $pdo->query($sql); 
    96122$stmt->closeCursor(); 
     123unset($stmt); 
     124 
    97125$sql = <<<__SQL__ 
    98126INSERT INTO EMP VALUES(7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10,'2000-01-01 00:00:00.0'); 
     
    100128$stmt = $pdo->query($sql); 
    101129$stmt->closeCursor(); 
     130unset($stmt); 
     131 
    102132 
    103133$sql = <<<__SQL__ 
     
    112142$stmt = $pdo->query($sql); 
    113143$stmt->closeCursor(); 
     144unset($stmt); 
     145 
    114146 
    115147$sql = <<<__SQL__ 
     
    118150$stmt = $pdo->query($sql); 
    119151$stmt->closeCursor(); 
     152unset($stmt); 
     153 
    120154$sql = <<<__SQL__ 
    121155INSERT INTO DEPT VALUES (20, 'RESEARCH',   'DALLAS', 0, 1); 
     
    123157$stmt = $pdo->query($sql); 
    124158$stmt->closeCursor(); 
     159unset($stmt); 
     160 
    125161$sql = <<<__SQL__ 
    126162INSERT INTO DEPT VALUES (30, 'SALES',      'CHICAGO', 0, 1); 
     
    128164$stmt = $pdo->query($sql); 
    129165$stmt->closeCursor(); 
     166unset($stmt); 
     167 
    130168$sql = <<<__SQL__ 
    131169INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON', 0, 1); 
     
    133171$stmt = $pdo->query($sql); 
    134172$stmt->closeCursor(); 
     173unset($stmt); 
     174 
    135175 
    136176$pdo->commit();