/** * ステートメントの実行準備 * * ステートメント状態を実行可能な状態に構築する。<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); }