Exemplo n.º 1
0
 /**
  *  ステートメントの実行準備
  *
  *  ステートメント状態を実行可能な状態に構築する。<br/>
  *  抽出条件が下記の条件に該当する場合に実行される
  *   - {@link Cascade_DB_SQL_Criteria::TYPE_IS_MGET}
  */
 protected function prepareForMultiGet()
 {
     // 抽出KEYを取得
     $cardinal_key = $this->data_format->getCardinalKey();
     if ($cardinal_key === NULL) {
         $ex_msg = 'Not found required primary_key, or fetch_key {df} %s';
         $ex_msg = sprintf($ex_msg, get_class($this->data_format));
         throw new Cascade_Exception_DBException($ex_msg);
     }
     // 実行準備
     if (is_array($cardinal_key) === FALSE) {
         // 単体キー
         $query = 'SELECT * FROM __TABLE_NAME__ WHERE %1$s IN (:%1$s)';
         $query = sprintf($query, $cardinal_key);
         $params = array($cardinal_key => $this->criteria->params);
     } else {
         // 複合キー
         $condition_01 = NULL;
         $condition_02 = NULL;
         foreach ($cardinal_key as $_key) {
             $condition_01 = $condition_01 === NULL ? sprintf('%1$s', $_key) : sprintf('%2$s, %1$s', $_key, $condition_01);
             $condition_02 = $condition_02 === NULL ? sprintf(':%1$s', $_key) : sprintf('%2$s, :%1$s', $_key, $condition_02);
         }
         $query = 'SELECT * FROM __TABLE_NAME__ WHERE (%1$s) IN (:cardinal_key<%2$s>)';
         $query = sprintf($query, $condition_01, $condition_02);
         $params = array('cardinal_key' => $this->criteria->params);
     }
     $this->processQuery($query, $params);
 }