Changeset 20325 for lang/php

Show
Ignore:
Timestamp:
10/01/08 00:34:49 (2 months ago)
Author:
nowelium
Message:
 
Location:
lang/php/misc/Hermit
Files:
2 added
7 modified

Legend:

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

    r18954 r20325  
    33interface EmployeeDao { 
    44    const TABLE = 'EMP'; 
     5 
    56    const getAllEmployeeList_SQL = 'SELECT * FROM EMP'; 
    67    public function getAllEmployeeList(); 
     
    1112    const getEmployeeByEmpNo_QUERY = 'EMPNO = /*empno*/"7369"'; 
    1213    public function getEmployeeByEmpNo($empno); 
     14 
     15 
     16    const getEmployeeAndDepartment_VALUE_TYPE = 'ASSOC'; 
     17    public function getEmployeeAndDepartment(); 
    1318} 
  • lang/php/misc/Hermit/example/employee/hoge.php

    r20266 r20325  
    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======= 
    1117        $this->dao = new Hermit('EmployeeDao'); 
    1218    } 
     
    1824    } 
    1925    public function getEmp(){ 
     26>>>>>>> .r20319 
    2027        $emp = new Employee; 
    2128        $emp->empno = 7566; 
    2229        $emp->ename = 'JONES'; 
     30<<<<<<< .mine 
     31        $result = $dao->getEmployee($emp); 
     32        */ 
     33        $result = $dao->getEmployeeAndDepartment(); 
     34        return $result; 
     35======= 
    2336        return $this->dao->getEmployee($emp); 
     37>>>>>>> .r20319 
    2438    } 
    2539} 
  • lang/php/misc/Hermit/src/Hermit/command/HermitSqlCommandFactory.php

    r20314 r20325  
    4545        $creator = $this->createProcedureSqlCreator($method, $dbName); 
    4646        $creator->initialize($pdo, $method, $this->annote); 
    47         return new HermitProcedureCommand($method, $creator); 
     47        $valueType = HermitValueTypeFactory::create($this->annote, $method); 
     48        return new HermitProcedureCommand($method, $creator, $valueType); 
    4849    } 
    4950    protected function createProcedureSqlCreator(ReflectionMethod $method, $dbName){ 
  • lang/php/misc/Hermit/src/Hermit/meta/HermitProcedureInfo.php

    r20314 r20325  
    55 */ 
    66class HermitProcedureInfo implements Serializable { 
     7    const IN_TYPE = 1; 
     8    const OUT_TYPE = 2; 
     9    const INOUT_TYPE = 3; 
     10 
    711    private $names = array(); 
    812    private $inout = array(); 
    913    private $types = array(); 
    1014 
    11     const IN_TYPE = 1; 
    12     const OUT_TYPE = 2; 
    13     const INOUT_TYPE = 3; 
    14  
    1515    public function serialize(){ 
     16        $s = array(); 
     17        foreach($this as $property => $value){ 
     18            $s[$property] = $value; 
     19        } 
     20        return serialize($s); 
    1621    } 
    1722    public function unserialize($serialized){ 
     23        $unserialized = unserialize($serialized); 
     24        if(!is_array($unserialized)){ 
     25            throw new UnexpectedValueException('unserilized value: ' . $serialized); 
     26        } 
     27        foreach($unserialized as $property => $value){ 
     28            $this->$property = $value; 
     29        } 
    1830    } 
    1931 
     
    3345        $this->types[$name] = $type; 
    3446    } 
    35     public function getParamsNames(){ 
     47    public function getParamNames(){ 
    3648        return $this->names; 
    3749    } 
    3850    public function getInout($name){ 
     51        if(!array_key_exists($name, $this->inout)){ 
     52            throw new InvalidArgumentException('"' . $name . '" has not value in: ' . join(',', array_keys($this->inout))); 
     53        } 
    3954        return $this->input[$name]; 
    4055    } 
    4156    public function getParamType($name){ 
     57        if(!array_key_exists($name, $this->inout)){ 
     58            throw new InvalidArgumentException('"' . $name . '" has not value in: ' . join(',', array_keys($this->inout))); 
     59        } 
    4260        return $this->types[$name]; 
    4361    } 
    4462    public function typeofIn($name){ 
     63        if(!array_key_exists($name, $this->inout)){ 
     64            throw new InvalidArgumentException('"' . $name . '" has not value in: ' . join(',', array_keys($this->inout))); 
     65        } 
    4566        return self::IN_TYPE === $this->inout[$name]; 
    4667    } 
    4768    public function typeofOut($name){ 
     69        if(!array_key_exists($name, $this->inout)){ 
     70            throw new InvalidArgumentException('"' . $name . '" has not value in: ' . join(',', array_keys($this->inout))); 
     71        } 
    4872        return self::OUT_TYPE === $this->inout[$name]; 
    4973    } 
    5074    public function typeofInOut($name){ 
     75        if(!array_key_exists($name, $this->inout)){ 
     76            throw new InvalidArgumentException('"' . $name . '" has not value in: ' . join(',', array_keys($this->inout))); 
     77        } 
    5178        return self::INOUT_TYPE === $this->inout[$name]; 
    5279    } 
  • lang/php/misc/Hermit/test/HermitProcedureInfo_mysqlTest.php

    r20314 r20325  
    1010 
    1111$dbmeta = new HermitMySQLDatabaseMeta($pdo); 
    12 $procedureInfo = $dbmeta->getProcedureInfo('PROC_IN_OUT'); 
     12{ 
     13    $test->diag(basename(__FILE__) . '::parameter[in:out]'); 
     14    $procedureInfo = $dbmeta->getProcedureInfo('PROC_IN_OUT'); 
    1315 
    14 $test->ok($procedureInfo !== null); 
    15  
     16    $test->ok($procedureInfo !== null); 
     17    $parameters = array_map('strtolower', $procedureInfo->getParamNames()); 
     18    $expect = array('sales', 'tax'); 
     19    $test->is(count(array_diff($parameters, $expect)), 0); 
     20    $test->is($procedureInfo->typeofIn('sales'), true); 
     21    $test->is($procedureInfo->typeofOut('sales'), false); 
     22    $test->is($procedureInfo->typeofInOut('sales'), false); 
     23    $test->is($procedureInfo->typeofIn('tax'), false); 
     24    $test->is($procedureInfo->typeofOut('tax'), true); 
     25    $test->is($procedureInfo->typeofInOut('tax'), false); 
     26} 
     27$procedureInfo2 = $dbmeta->getProcedureInfo('PROC_IN_OUT'); 
     28$test->ok($procedureInfo === $procedureInfo2, 'same instance'); 
     29{ 
     30    $test->diag(basename(__FILE__) . '::parameter[in:out:out]'); 
     31    $procedureInfo = $dbmeta->getProcedureInfo('PROC_IN_OUT_OUT'); 
     32    $parameters = array_map('strtolower', $procedureInfo->getParamNames()); 
     33    $expect = array('sales', 'tax', 'total'); 
     34    $test->is(count(array_diff($parameters, $expect)), 0); 
     35    $test->is($procedureInfo->typeofIn('sales'), true); 
     36    $test->is($procedureInfo->typeofOut('sales'), false); 
     37    $test->is($procedureInfo->typeofInOut('sales'), false); 
     38    $test->is($procedureInfo->typeofIn('tax'), false); 
     39    $test->is($procedureInfo->typeofOut('tax'), true); 
     40    $test->is($procedureInfo->typeofInOut('tax'), false); 
     41    $test->is($procedureInfo->typeofIn('total'), false); 
     42    $test->is($procedureInfo->typeofOut('total'), true); 
     43    $test->is($procedureInfo->typeofInOut('total'), false); 
     44    $test->ok($procedureInfo !== $procedureInfo2, 'not same instance;cause not same procedure'); 
     45} 
     46{ 
     47    $test->diag(basename(__FILE__) . '::parameter[in:in]'); 
     48    $procedureInfo = $dbmeta->getProcedureInfo('PROC_IN_IN_MULTIRESULT'); 
     49    $parameters = array_map('strtoupper', $procedureInfo->getParamNames()); 
     50    $expect = array('IN_MGR_1', 'IN_MGR_2'); 
     51    $test->is(count(array_diff($parameters, $expect)), 0, 'check uppercase'); 
     52    $expect = array('in_mgr_1', 'in_mgr_2'); 
     53    $test->is(count(array_diff($parameters, $expect)), 2, 'check uppercase'); 
     54    $test->is($procedureInfo->typeofIn('IN_MGR_1'), true); 
     55    $test->is($procedureInfo->typeofOut('IN_MGR_1'), false); 
     56    $test->is($procedureInfo->typeofInOut('IN_MGR_1'), false); 
     57    $test->is($procedureInfo->typeofIn('IN_MGR_2'), true); 
     58    $test->is($procedureInfo->typeofOut('IN_MGR_2'), false); 
     59    $test->is($procedureInfo->typeofInOut('IN_MGR_2'), false); 
     60} 
     61{ 
     62    $test->diag(basename(__FILE__) . '::parameter[inout]'); 
     63    $procedureInfo = $dbmeta->getProcedureInfo('PROC_INOUT'); 
     64    $parameters = array_map('strtolower', $procedureInfo->getParamNames()); 
     65    $expect = array('sales'); 
     66    $test->is(count(array_diff($parameters, $expect)), 0); 
     67    $test->is($procedureInfo->typeofIn('sales'), false); 
     68    $test->is($procedureInfo->typeofOut('sales'), false); 
     69    $test->is($procedureInfo->typeofInOut('sales'), true); 
     70} 
     71{ 
     72    $test->diag(basename(__FILE__) . '::parameter[in]'); 
     73    $procedureInfo = $dbmeta->getProcedureInfo('PROC_IN_MULTIRESULT'); 
     74    $parameters = array_map('strtoupper', $procedureInfo->getParamNames()); 
     75    $expect = array('IN_MGR'); 
     76    $test->is(count(array_diff($parameters, $expect)), 0, 'check case insentive'); 
     77    $test->is($procedureInfo->typeofIn('IN_MGR'), true); 
     78    $test->is($procedureInfo->typeofOut('IN_MGR'), false); 
     79    $test->is($procedureInfo->typeofInOut('IN_MGR'), false); 
     80} 
     81{ 
     82    $test->diag(basename(__FILE__) . '::parameter[out]'); 
     83    $procedureInfo = $dbmeta->getProcedureInfo('PROC_OUT_MULTIRESULT'); 
     84    $parameters = array_map('strtolower', $procedureInfo->getParamNames()); 
     85    $expect = array('param'); 
     86    $test->is(count(array_diff($parameters, $expect)), 0); 
     87    $test->is($procedureInfo->typeofIn('param'), false); 
     88    $test->is($procedureInfo->typeofOut('param'), true); 
     89    $test->is($procedureInfo->typeofInOut('param'), false); 
     90} 
     91{ 
     92    $test->diag(basename(__FILE__) . '::parameter[]'); 
     93    $procedureInfo = $dbmeta->getProcedureInfo('PROC_NOSPEC_PARAM'); 
     94    $parameters = array_map('strtolower', $procedureInfo->getParamNames()); 
     95    $expect = array('param_1', 'param_2', 'param_3'); 
     96    $test->is(count(array_diff($parameters, $expect)), 0); 
     97    $test->is($procedureInfo->typeofIn('param_1'), true); 
     98    $test->is($procedureInfo->typeofOut('param_1'), false); 
     99    $test->is($procedureInfo->typeofInOut('param_1'), false); 
     100    $test->is($procedureInfo->typeofIn('param_2'), true); 
     101    $test->is($procedureInfo->typeofOut('param_2'), false); 
     102    $test->is($procedureInfo->typeofInOut('param_2'), false); 
     103    $test->is($procedureInfo->typeofIn('param_3'), true); 
     104    $test->is($procedureInfo->typeofOut('param_3'), false); 
     105    $test->is($procedureInfo->typeofInOut('param_3'), false); 
     106} 
  • lang/php/misc/Hermit/test/resource/procedure-mysql.sql

    r20314 r20325  
    77DROP PROCEDURE IF EXISTS PROC_INOUT_MULTIRESULT; 
    88DROP PROCEDURE IF EXISTS PROC_OUT_MULTIRESULT; 
     9DROP PROCEDURE IF EXISTS PROC_NOSPEC_PARAM; 
    910 
    1011delimiter / 
     
    6364end; 
    6465/ 
     66 
     67CREATE PROCEDURE PROC_NOSPEC_PARAM(param_1 INTEGER, param_2 INTEGER, param_3 INTEGER) 
     68begin 
     69  select * from EMP where empno = param_1; 
     70  select * from EMP where empno = param_2; 
     71  select * from EMP where empno = param_3; 
     72end; 
     73/ 
  • lang/php/misc/Hermit/test/resource/procedure-mysql.sql.php

    r20314 r20325  
    3434$sql = <<<__SQL__ 
    3535DROP PROCEDURE IF EXISTS PROC_OUT_MULTIRESULT; 
     36__SQL__; 
     37$pdo->exec($sql); 
     38$sql = <<<__SQL__ 
     39DROP PROCEDURE IF EXISTS PROC_NOSPEC_PARAM; 
    3640__SQL__; 
    3741$pdo->exec($sql); 
     
    127131$stmt->closeCursor(); 
    128132 
     133$sql = <<<__SQL__ 
     134CREATE PROCEDURE PROC_NOSPEC_PARAM(param_1 INTEGER, param_2 INTEGER, param_3 INTEGER) 
     135begin 
     136  select * from EMP where empno = param_1; 
     137  select * from EMP where empno = param_2; 
     138  select * from EMP where empno = param_3; 
     139end; 
     140/ 
     141__SQL__; 
     142$stmt = $pdo->query($sql); 
     143$stmt->closeCursor(); 
     144 
    129145$pdo->commit(); 
    130146} catch(PDOException $e){