Changeset 18784 for branches/version-2_5-dev/data/class/SC_Query.php
- Timestamp:
- 2010/08/12 19:33:49 (16 years ago)
- bzr:base-revision:
- svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18783
- bzr:committer:
- Kentaro Ohkouchi <[email protected]>
- bzr:file-ids:
data/class/SC_Query.php 15078@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2FSC_Query.php
data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php 15123@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fdb%2Fdbfactory%2FSC_DB_DBFactory_MYSQL.php
data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php 15123@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fdb%2Fdbfactory%2FSC_DB_DBFactory_PGSQL.php
data/class/helper/SC_Helper_DB.php 15176@1e3b908f-19a9-db11-a64c-001125224ba8:branches%2Ffeature-module-update%2Fdata%2Fclass%2Fhelper%2FSC_Helper_DB.php- bzr:mapping-version:
- v4
- bzr:repository-uuid:
- 1e3b908f-19a9-db11-a64c-001125224ba8
- bzr:revision-id:
- [email protected]
- bzr:revno:
- 2267
- bzr:revprop:branch-nick:
- branches/version-2_5-dev
- bzr:root:
- branches/version-2_5-dev
- bzr:text-parents:
data/class/SC_Query.php [email protected]
data/class/db/dbfactory/SC_DB_DBFactory_MYSQL.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18777
data/class/db/dbfactory/SC_DB_DBFactory_PGSQL.php [email protected]
data/class/helper/SC_Helper_DB.php svn-v4:1e3b908f-19a9-db11-a64c-001125224ba8:branches/version-2_5-dev:18777- bzr:timestamp:
- 2010-08-12 19:33:42.628999949 +0900
- bzr:user-agent:
- bzr2.1.2+bzr-svn1.0.2
- svn:original-date:
- 2010-08-12T10:33:42.629000Z
- File:
-
- 1 edited
-
branches/version-2_5-dev/data/class/SC_Query.php (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/version-2_5-dev/data/class/SC_Query.php
r18775 r18784 33 33 */ 34 34 class SC_Query { 35 36 var $instance; 35 37 var $option; 36 38 var $where; … … 38 40 var $groupby; 39 41 var $order; 42 var $force_run; 40 43 41 44 /** 42 45 * コンストラクタ. 43 46 * 44 * @param $dsn45 * @param boolean $ err_disp エラー表示を行うかどうか47 * @param string $dsn データソース名 48 * @param boolean $force_run エラーが発生しても処理を続行する場合 true 46 49 * @param boolean $new 新規に接続を行うかどうか 47 * @return SC_Query 48 */ 49 function SC_Query($dsn = "", $err_disp = true, $new = false) { 50 */ 51 function SC_Query($dsn = "", $force_run = true, $new = false) { 50 52 51 53 if ($dsn == "") { … … 64 66 } 65 67 66 if (! $this->isError()) {68 if (!PEAR::isError($this->conn)) { 67 69 $this->conn->setCharset(CHAR_CODE); 68 70 $this->conn->setFetchMode(MDB2_FETCHMODE_ASSOC); 69 71 } 72 70 73 $this->dbFactory = SC_DB_DBFactory_Ex::getInstance(); 74 $this->force_run = $force_run; 71 75 $this->where = ""; 72 76 } 73 77 74 78 /** 79 * シングルトンの SC_Query インスタンスを取得する. 80 * 81 * @param string $dsn データソース名 82 * @param boolean $force_run エラーが発生しても処理を続行する場合 true 83 * @param boolean $new 新規に接続を行うかどうか 84 * @return SC_Query シングルトンの SC_Query インスタンス 85 */ 86 function getSingletonInstance($dsn = "", $force_run = true, $new = false) { 87 if (is_null($this->instance)) { 88 $this->instance =& new SC_Query($dsn = "", $force_run = true, 89 $new = false); 90 } 91 return $this->instance; 92 } 93 94 /** 75 95 * エラー判定を行う. 76 96 * 97 * @deprecated PEAR::isError() を使用して下さい 77 98 * @return boolean 78 99 */ … … 109 130 * @param string $where WHERE句 110 131 * @param array $arrval プレースホルダ 111 * @param integer $fetchmode 使用するフェッチモード。デフォルトは DB_FETCHMODE_ASSOC。132 * @param integer $fetchmode 使用するフェッチモード。デフォルトは MDB2_FETCHMODE_ASSOC。 112 133 * @return array|null 113 134 */ … … 131 152 } 132 153 154 /** 155 * トランザクションをコミットする. 156 * 157 * @return MDB2_OK 成功した場合は MDB2_OK; 158 * 失敗した場合は PEAR::Error オブジェクト 159 */ 133 160 function commit() { 134 $this->conn->commit(); 135 } 136 161 return $this->conn->commit(); 162 } 163 164 /** 165 * トランザクションを開始する. 166 * 167 * @return MDB2_OK 成功した場合は MDB2_OK; 168 * 失敗した場合は PEAR::Error オブジェクト 169 */ 137 170 function begin() { 138 $this->conn->beginTransaction(); 139 } 140 171 return $this->conn->beginTransaction(); 172 } 173 174 /** 175 * トランザクションをロールバックする. 176 * 177 * @return MDB2_OK 成功した場合は MDB2_OK; 178 * 失敗した場合は PEAR::Error オブジェクト 179 */ 141 180 function rollback() { 142 $this->conn->rollback(); 143 } 144 181 return $this->conn->rollback(); 182 } 183 184 /** 185 * トランザクションが開始されているかチェックする. 186 * 187 * @return boolean トランザクションが開始されている場合 true 188 */ 189 function inTransaction() { 190 return $this->conn->inTransaction(); 191 } 192 193 /** 194 * 更新系の SQL を実行する. 195 * 196 * この関数は SC_Query::query() のエイリアスです. 197 * 198 * FIXME MDB2::exec() の実装であるべき 199 */ 145 200 function exec($str, $arrval = array()) { 146 // FIXME MDB2::exec() の実装であるべき 147 $this->query($str, $arrval); 201 return $this->query($str, $arrval); 148 202 } 149 203 … … 160 214 $sql = $this->dbFactory->sfChangeMySQL($sql); 161 215 162 $sth = $this->conn->prepare($sql); 163 if (PEAR::isError($sth)) { 164 /* 165 * XXX インストーラのテーブルチェックに失敗してしまう. 166 * エラーハンドリングの方法を要検討 167 */ 168 return; 169 } 170 $affected = $sth->execute($arrval); 171 172 if (PEAR::isError($affected)) { 173 trigger_error($affected->getMessage(), E_USER_ERROR); 216 $sth =& $this->prepare($sql); 217 if (PEAR::isError($sth) && $this->force_run) { 218 return; 219 } 220 221 $affected =& $this->execute($sth, $arrval); 222 if (PEAR::isError($affected) && $this->force_run) { 223 return; 174 224 } 175 225 … … 177 227 } 178 228 229 /** 230 * 構築した SELECT 文を取得する. 231 * 232 * @param string $col SELECT 文に含めるカラム名 233 * @param string $table SELECT 文に含めるテーブル名 234 * @param string $where SELECT 文に含める WHERE 句 235 * @return string 構築済みの SELECT 文 236 */ 179 237 function getSql($col, $table, $where = '') { 180 238 $sqlse = "SELECT $col FROM $table"; … … 192 250 } 193 251 252 /** 253 * SELECT 文の末尾に付与する SQL を設定する. 254 * 255 * この関数で設定した値は SC_Query::getSql() で使用されます. 256 * 257 * @param string $str 付与する SQL 文 258 * @return SC_Query 自分自身のインスタンス 259 */ 194 260 function setOption($str) { 195 261 $this->option = $str; 196 } 197 198 // TODO MDB2::setLimit() を使用する 199 function setLimitOffset($limit, $offset = 0, $return = false) { 262 return $this; 263 } 264 265 /** 266 * SELECT 文に付与する LIMIT, OFFSET 句を設定する. 267 * 268 * この関数で設定した値は SC_Query::getSql() で使用されます. 269 * TODO MDB2::setLimit() を使用する 270 * 271 * @param integer $limit LIMIT 句に付与する値 272 * @param integer $offset OFFSET 句に付与する値 273 * @return SC_Query 自分自身のインスタンス 274 */ 275 function setLimitOffset($limit, $offset = 0) { 200 276 if (is_numeric($limit) && is_numeric($offset)){ 201 277 202 278 $option = " LIMIT " . $limit; 203 279 $option.= " OFFSET " . $offset; 204 205 if($return){ 206 return $option; 207 }else{ 208 $this->option.= $option; 209 } 210 } 211 } 212 280 $this->option .= $option; 281 } 282 return $this; 283 } 284 285 /** 286 * SELECT 文に付与する GROUP BY 句を設定する. 287 * 288 * この関数で設定した値は SC_Query::getSql() で使用されます. 289 * 290 * @param string $str GROUP BY 句に付与する文字列 291 * @return SC_Query 自分自身のインスタンス 292 */ 213 293 function setGroupBy($str) { 214 294 if (strlen($str) == 0) { … … 217 297 $this->groupby = "GROUP BY " . $str; 218 298 } 219 } 220 221 function andwhere($str) { 299 return $this; 300 } 301 302 /** 303 * SELECT 文の WHERE 句に付与する AND 条件を設定する. 304 * 305 * この関数で設定した値は SC_Query::getSql() で使用されます. 306 * 307 * @param string $str WHERE 句に付与する AND 条件の文字列 308 * @return SC_Query 自分自身のインスタンス 309 */ 310 function andWhere($str) { 222 311 if($this->where != "") { 223 312 $this->where .= " AND " . $str; … … 225 314 $this->where = $str; 226 315 } 227 } 228 316 return $this; 317 } 318 319 /** 320 * SELECT 文の WHERE 句に付与する OR 条件を設定する. 321 * 322 * この関数で設定した値は SC_Query::getSql() で使用されます. 323 * 324 * @param string $str WHERE 句に付与する OR 条件の文字列 325 * @return SC_Query 自分自身のインスタンス 326 */ 229 327 function orWhere($str) { 230 328 if($this->where != "") { … … 233 331 $this->where = $str; 234 332 } 235 } 236 333 return $this; 334 } 335 336 /** 337 * SELECT 文に付与する WHERE 句を設定する. 338 * 339 * この関数で設定した値は SC_Query::getSql() で使用されます. 340 * 341 * @param string $str WHERE 句に付与する文字列 342 * @return SC_Query 自分自身のインスタンス 343 */ 237 344 function setWhere($str) { 238 345 $this->where = $str; 239 } 240 346 return $this; 347 } 348 349 /** 350 * SELECT 文に付与する ORDER BY 句を設定する. 351 * 352 * この関数で設定した値は SC_Query::getSql() で使用されます. 353 * 354 * @param string $str ORDER BY 句に付与する文字列 355 * @return SC_Query 自分自身のインスタンス 356 */ 241 357 function setOrder($str) { 242 358 if (strlen($str) == 0) { … … 245 361 $this->order = "ORDER BY " . $str; 246 362 } 247 } 248 249 363 return $this; 364 } 365 366 /** 367 * SELECT 文に付与する LIMIT 句を設定する. 368 * 369 * この関数で設定した値は SC_Query::getSql() で使用されます. 370 * 371 * @param integer $limit LIMIT 句に設定する値 372 * @return SC_Query 自分自身のインスタンス 373 */ 250 374 function setLimit($limit){ 251 375 if ( is_numeric($limit)){ 252 376 $this->option = " LIMIT " .$limit; 253 377 } 254 } 255 378 return $this; 379 } 380 381 /** 382 * SELECT 文に付与する OFFSET 句を設定する. 383 * 384 * この関数で設定した値は SC_Query::getSql() で使用されます. 385 * 386 * @param integer $offset LIMIT 句に設定する値 387 * @return SC_Query 自分自身のインスタンス 388 */ 256 389 function setOffset($offset) { 257 390 if ( is_numeric($offset)){ 258 391 $this->offset = " OFFSET " .$offset; 259 392 } 393 return $this; 260 394 } 261 395 … … 352 486 } 353 487 354 // MAX文の実行 488 /** 489 * MAX文を実行する. 490 * 491 * @param string $table テーブル名 492 * @param string $col カラム名 493 * @param string $where 付与する WHERE 句 494 * @param array $arrval ブレースホルダに挿入する値 495 * @return integer MAX文の実行結果 496 */ 355 497 function max($table, $col, $where = "", $arrval = array()) { 356 498 $ret = $this->get($table, "MAX($col)", $where, $arrval); … … 358 500 } 359 501 360 // MIN文の実行 502 /** 503 * MIN文を実行する. 504 * 505 * @param string $table テーブル名 506 * @param string $col カラム名 507 * @param string $where 付与する WHERE 句 508 * @param array $arrval ブレースホルダに挿入する値 509 * @return integer MIN文の実行結果 510 */ 361 511 function min($table, $col, $where = "", $arrval = array()) { 362 512 $ret = $this->get($table, "MIN($col)", $where, $arrval); … … 364 514 } 365 515 366 // 特定のカラムの値を取得 516 /** 517 * SQL を構築して, 特定のカラムの値を取得する. 518 * 519 * @param string $table テーブル名 520 * @param string $col カラム名 521 * @param string $where 付与する WHERE 句 522 * @param array $arrval ブレースホルダに挿入する値 523 * @return mixed SQL の実行結果 524 */ 367 525 function get($table, $col, $where = "", $arrval = array()) { 368 526 $sqlse = $this->getSql($col, $table, $where); … … 372 530 } 373 531 532 /** 533 * SQL を指定して, 特定のカラムの値を取得する. 534 * 535 * @param string $sql 実行する SQL 536 * @param array $arrval ブレースホルダに挿入する値 537 * @return mixed SQL の実行結果 538 */ 374 539 function getOne($sql, $arrval = array()) { 375 540 376 541 $sql = $this->dbFactory->sfChangeMySQL($sql); 377 542 378 $sth = $this->conn->prepare($sql); 379 $affected = $sth->execute($arrval); 380 381 if (PEAR::isError($affected)) { 382 trigger_error($affected->getMessage(), E_USER_ERROR); 543 $sth =& $this->prepare($sql); 544 if (PEAR::isError($sth) && $this->force_run) { 545 return; 546 } 547 548 $affected =& $this->execute($sth, $arrval); 549 if (PEAR::isError($affected) && $this->force_run) { 550 return; 383 551 } 384 552 … … 393 561 * @param string $where WHERE句 394 562 * @param array $arrVal プレースホルダ配列 395 * @param integer $fetchmode 使用するフェッチモード。デフォルトは DB_FETCHMODE_ASSOC。563 * @param integer $fetchmode 使用するフェッチモード。デフォルトは MDB2_FETCHMODE_ASSOC。 396 564 * @return array array('カラム名' => '値', ...)の連想配列 397 565 */ … … 401 569 $sql = $this->dbFactory->sfChangeMySQL($sql); 402 570 403 $sth = $this->conn->prepare($sql); 404 $affected = $sth->execute($arrVal); 405 406 if (PEAR::isError($affected)) { 407 trigger_error($affected->getMessage(), E_USER_ERROR); 571 $sth =& $this->prepare($sql); 572 if (PEAR::isError($sth) && $this->force_run) { 573 return; 574 } 575 576 $affected =& $this->execute($sth, $arrVal); 577 if (PEAR::isError($affected) && $this->force_run) { 578 return; 408 579 } 409 580 … … 411 582 } 412 583 413 // 1列取得 584 /** 585 * SELECT 文の実行結果を 1行のみ取得する. 586 * 587 * @param string $table テーブル名 588 * @param string $col カラム名 589 * @param string $where 付与する WHERE 句 590 * @param array $arrval ブレースホルダに挿入する値 591 * @return array SQL の実行結果の配列 592 */ 414 593 function getCol($table, $col, $where = "", $arrval = array()) { 415 594 $sql = $this->getSql($col, $table, $where); 416 595 $sql = $this->dbFactory->sfChangeMySQL($sql); 417 596 418 $sth = $this->conn->prepare($sql); 419 $affected = $sth->execute($arrval); 420 421 if (PEAR::isError($affected)) { 422 trigger_error($affected->getMessage(), E_USER_ERROR); 597 $sth =& $this->prepare($sql); 598 if (PEAR::isError($sth) && $this->force_run) { 599 return; 600 } 601 602 $affected =& $this->execute($sth, $arrval); 603 if (PEAR::isError($affected) && $this->force_run) { 604 return; 423 605 } 424 606 … … 444 626 } 445 627 628 // TODO MDB2::nextID のエイリアスとする 446 629 function nextval($table, $colname) { 447 630 $sql = ""; … … 458 641 } 459 642 643 // TODO MDB2::currID のエイリアスとする 460 644 function currval($table, $colname) { 461 645 $sql = ""; … … 471 655 } 472 656 657 // TODO MDB2 に該当関数が無いため実装を要検討 473 658 function setval($table, $colname, $data) { 474 659 $sql = ""; … … 485 670 } 486 671 487 // XXX 更新系には exec() を使用するべき 672 /** 673 * SQL を実行する. 674 * 675 * XXX 更新系には exec() を使用するべき 676 * 677 * @param string $n 実行する SQL 文 678 * @param array $arrval ブレースホルダに挿入する値 679 * @return array SQL の実行結果の配列 680 */ 488 681 function query($n ,$arr = array(), $ignore_err = false){ 489 682 490 683 $n = $this->dbFactory->sfChangeMySQL($n); 491 684 492 $sth = $this->conn->prepare($n); 493 $result = $sth->execute($arr); 494 495 if (PEAR::isError($result)) { 496 /* 497 * XXX インストーラのテーブルチェックに失敗してしまう. 498 * エラーハンドリングの方法を要検討 499 */ 500 //trigger_error($result->getMessage(), E_USER_ERROR); 685 $sth =& $this->prepare($n); 686 if (PEAR::isError($sth) && $this->force_run) { 687 return; 688 } 689 690 $result = $this->execute($sth, $arr); 691 if (PEAR::isError($result) && $this->force_run) { 692 return; 501 693 } 502 694 … … 543 735 return $this->conn->quote($val); 544 736 } 737 738 /** 739 * プリペアドステートメントを構築する. 740 * 741 * @access private 742 * @param string $sql プリペアドステートメントを構築する SQL 743 * @return MDB2_Statement_Common プリペアドステートメントインスタンス 744 */ 745 function prepare($sql) { 746 $sth =& $this->conn->prepare($sql); 747 if (PEAR::isError($sth)) { 748 if (!$this->force_run) { 749 trigger_error($sth->getMessage(), E_USER_ERROR); 750 } 751 } 752 return $sth; 753 } 754 755 /** 756 * プリペアドクエリを実行する. 757 * 758 * @access private 759 * @param MDB2_Statement_Common プリペアドステートメントインスタンス 760 * @param array $arrVal ブレースホルダに挿入する配列 761 * @return MDB2_Result 結果セットのインスタンス 762 */ 763 function execute(&$sth, $arrVal = array()) { 764 $affected =& $sth->execute($arrVal); 765 if (PEAR::isError($affected)) { 766 if (!$this->force_run) { 767 trigger_error($affected->getMessage(), E_USER_ERROR); 768 } 769 } 770 return $affected; 771 } 545 772 } 546 773
Note: See TracChangeset
for help on using the changeset viewer.
