public function build(PDO $pdo, array $inputParameters)
 {
     self::checkProcedureParameter($this->method);
     $procedureName = $this->annote->getProcedure($this->method);
     $meta = HermitDatabaseMetaFactory::get($pdo);
     $info = $meta->getProcedureInfo($procedureName);
     $dbms = HermitDatabaseMetaFactory::getDbms($pdo);
     $parameter = null;
     if (isset(self::$procedureParameters[$dbms])) {
         $className = self::$procedureParameters[$dbms];
         $parameter = new $className($info, $dbms);
     } else {
         $parameter = new HermitProcedureParameter($info, $dbms);
     }
     $parameter->setInputParameters($inputParameters);
     $parameter->setTargetClass($this->targetClass);
     $parameter->setTargetMethod($this->method);
     $sql = self::preparedSql($parameter, $this->sqlCreator->createSql());
     $logger = HermitLoggerManager::getLogger();
     if ($logger->isDebugEnabled()) {
         $logger->debug('{%s} preparedSql: "%s"', __CLASS__, $sql);
     }
     $statement = $pdo->prepare($sql);
     return new HermitDefaultStatement($parameter, $statement);
 }
 public function initialize(PDO $pdo, ReflectionMethod $method, HermitAnnote $annote)
 {
     $meta = HermitDatabaseMetaFactory::get($pdo);
     $table = $annote->getTable();
     $info = $meta->getTableInfo($table);
     $columns = $info->getColumns();
     $insert = 'INSERT INTO';
     $insert .= ' ';
     $insert .= $table;
     $insert .= ' (';
     $insert .= join(', ', $columns);
     $insert .= ') VALUES (';
     $begin = false;
     foreach ($columns as $column) {
         $begin = true;
         $insert .= '/*' . $column . '*/';
         $insert .= '"' . $column . '"';
         $insert .= ',';
     }
     if ($begin) {
         $insert = substr($insert, 0, -1);
     }
     $insert .= ')';
     $this->insert = $insert;
 }
 public function initialize(PDO $pdo, ReflectionMethod $method, HermitAnnote $annote)
 {
     $meta = HermitDatabaseMetaFactory::get($pdo);
     $table = $annote->getTable();
     $info = $meta->getTableInfo($table);
     $primaryKeys = $info->getPrimaryKeys();
     $sql = 'DELETE';
     $sql .= ' ';
     $sql .= 'FROM';
     $sql .= ' ';
     $sql .= $table;
     $sql .= ' ';
     $sql .= 'WHERE';
     $sql .= ' ';
     $begin = false;
     foreach ($primaryKeys as $pk) {
         $begin = true;
         $sql .= ' ';
         $sql .= $pk . '=';
         $sql .= ' ';
         $sql .= '/*' . $pk . '*/';
         $sql .= '"' . $pk . '"';
         $sql .= ' ';
         $sql .= 'AND';
     }
     if ($begin) {
         $sql = substr($sql, 0, -3);
     }
     $this->sql = $sql;
 }
 public function initialize(PDO $pdo, ReflectionMethod $method, HermitAnnote $annote)
 {
     $procedureName = $annote->getProcedure($method);
     $dbMeta = HermitDatabaseMetaFactory::get($pdo);
     $info = $dbMeta->getProcedureInfo($procedureName);
     $this->setupSql = self::generateSetupSql($info);
     $this->sql = self::generateCallSql($info);
 }
 /**
  * @param PDO $pdo
  * @param HermitProcedureParameter $parameter
  * @return HermitResultSet
  */
 public static function create(PDO $pdo, ReflectionMethod $method, HermitAnnote $annote, HermitProcedureParameter $parameter)
 {
     $dbms = HermitDatabaseMetaFactory::getDbms($pdo);
     if (isset(self::$resultsets[$dbms])) {
         $className = self::$resultsets[$dbms];
         return new $className($method, $annote, $parameter);
     }
     return new HermitProcedureResultSet($method, $annote, $parameter);
 }
 protected function getStaticSqlCreator(PDO $pdo)
 {
     $dbms = HermitDatabaseMetaFactory::getDbms($pdo);
     $sql = $this->annote->getSql($this->method, $dbms);
     if (null !== $sql) {
         return new HermitStaticSqlCreator($sql);
     }
     $sql = $this->annote->getFile($this->method, $dbms);
     if (null !== $sql) {
         return new HermitStaticSqlCreator($sql);
     }
     return null;
 }
 public function initialize(PDO $pdo, ReflectionMethod $method, HermitAnnote $annote)
 {
     $meta = HermitDatabaseMetaFactory::get($pdo);
     $table = $annote->getTable();
     $info = $meta->getTableInfo($table);
     $columns = $info->getColumns();
     $select = 'SELECT';
     $select .= ' ';
     $select .= join(', ', $columns);
     $select .= ' ';
     $select .= 'FROM';
     $select .= ' ';
     $select .= $table;
     $this->select = $select;
 }
 protected function createProcedureSqlCreator(PDO $pdo)
 {
     $dbms = HermitDatabaseMetaFactory::getDbms($pdo);
     $sql = $this->annote->getProcedure($this->method);
     if (null !== $sql) {
         return new HermitProcedureCallSqlCreator($sql);
     }
     $sql = $this->annote->getSql($this->method, $dbms);
     if (null !== $sql) {
         return new HermitProcedureCallSqlCreator($sql);
     }
     $sql = $this->annote->getFile($this->method);
     if (null !== $sql) {
         return new HermitProcedureCallSqlCreator($sql);
     }
     throw new BadMethodCallException('method: "' . $this->method->getName() . '" was not apply to Procedure command');
 }
Example #9
0
function db_init(PDO $pdo)
{
    $name = HermitDatabaseMetaFactory::getDbms($pdo);
    $_db_init = 'db_' . $name . '_init';
    $_db_init($pdo);
    $sqlpath = dirname(__FILE__) . '/resource/test-' . $name . '.sql.php';
    if (file_exists($sqlpath)) {
        require $sqlpath;
        $_db_query = 'db_' . $name . '_query_test';
        $_db_query($pdo);
    } else {
        $sqlpath = dirname(__FILE__) . '/resource/test-' . $name . '.sql';
        try {
            $pdo->beginTransaction();
            $pdo->exec(file_get_contents($sqlpath));
            $pdo->commit();
        } catch (PDOException $e) {
            $pdo->rollback();
            echo (string) $e, PHP_EOL;
            throw new RuntimeException(__FUNCTION__ . ' does not complete');
        }
    }
    $sqlpath = dirname(__FILE__) . '/resource/procedure-' . $name . '.sql.php';
    if (file_exists($sqlpath)) {
        require $sqlpath;
        $_db_query = 'db_' . $name . '_query_procedure';
        $_db_query($pdo);
    } else {
        $sqlpath = dirname(__FILE__) . '/resource/procedure-' . $name . '.sql';
        try {
            $pdo->beginTransaction();
            $pdo->exec(file_get_contents($sqlpath));
            $pdo->commit();
        } catch (PDOException $e) {
            $pdo->rollback();
            echo (string) $e, PHP_EOL;
            throw new RuntimeException(__FUNCTION__ . ' does not complete');
        }
    }
}