Source for file SC_DB_DBFactory_MYSQL.php
Documentation is available at SC_DB_DBFactory_MYSQL.php
* This file is part of EC-CUBE
* Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
* http://www.lockon.co.jp/
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
require_once CLASS_REALDIR . 'db/SC_DB_DBFactory.php';
* 必ず SC_DB_DBFactory クラスを経由してインスタンス化する.
* また, SC_DB_DBFactory クラスの関数を必ずオーバーライドしている必要がある.
* @author LOCKON CO.,LTD.
* @version $Id:SC_DB_DBFactory_MYSQL.php 15267 2007-08-09 12:31:52Z nanasess $
* @param string $dsn データソース名
* @return string データベースのバージョン
$objQuery = & SC_Query_Ex::getSingletonInstance($dsn);
$val = $objQuery->getOne("select version()");
* @param string $sql SQL 文
* @return string MySQL 用に置換した SQL 文
$sql = $this->sfChangeILIKE($sql);
$sql = $this->sfChangeRANDOM($sql);
$sql = $this->sfChangeTrunc($sql);
// ARRAY_TO_STRINGをGROUP_CONCATに変換する
$sql = $this->sfChangeArrayToString($sql);
$objQuery = & SC_Query_Ex::getSingletonInstance();
$arrRet = $objQuery->getAll("SHOW VARIABLES LIKE 'char%'");
* 昨日の売上高・売上件数を算出する SQL を返す.
* @param string $method SUM または COUNT
* @return string 昨日の売上高・売上件数を算出する SQL
return "SELECT ". $method. "(total) FROM dtb_order "
. "AND cast(create_date as date) = DATE_ADD(current_date, interval -1 day) "
. "AND status <> " . ORDER_CANCEL;
* 当月の売上高・売上件数を算出する SQL を返す.
* @param string $method SUM または COUNT
* @return string 当月の売上高・売上件数を算出する SQL
return "SELECT ". $method. "(total) FROM dtb_order "
. "AND date_format(create_date, '%Y/%m') = ? "
. "AND date_format(create_date, '%Y/%m/%d') <> date_format(CURRENT_TIMESTAMP, '%Y/%m/%d') "
. "AND status <> " . ORDER_CANCEL;
* 昨日のレビュー書き込み件数を算出する SQL を返す.
* @return string 昨日のレビュー書き込み件数を算出する SQL
return "SELECT COUNT(*) FROM dtb_review AS A "
. "LEFT JOIN dtb_products AS B "
. "ON A.product_id = B.product_id "
. "AND cast(A.create_date as date) = DATE_ADD(current_date, interval -1 day) "
. "AND cast(A.create_date as date) != current_date";
* メール送信履歴の start_date の検索条件の SQL を返す.
* @return string 検索条件の SQL
return "start_date BETWEEN date_add(CURRENT_TIMESTAMP,INTERVAL -5 minute) AND date_add(CURRENT_TIMESTAMP,INTERVAL 5 minute)";
* ダウンロード販売の検索条件の SQL を返す.
* @param string $dtb_order_alias
* @return string 検索条件の SQL
return "(SELECT IF((SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1)=1, 1, DATE(CURRENT_TIMESTAMP) <= DATE(DATE_ADD(" . $dtb_order_alias . ".payment_date, INTERVAL (SELECT downloadable_days FROM dtb_baseinfo) DAY))))";
* @return string 検索条件のSQL
return " date_format(create_date, '". $format. "') AS str_date,
COUNT(order_id) AS total_order,
SUM(CASE WHEN order_sex = 1 THEN 1 ELSE 0 END) AS men,
SUM(CASE WHEN order_sex = 2 THEN 1 ELSE 0 END) AS women,
SUM(CASE WHEN customer_id <> 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_member,
SUM(CASE WHEN customer_id <> 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_member,
SUM(CASE WHEN customer_id = 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_nonmember,
SUM(CASE WHEN customer_id = 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_nonmember,
AVG(total) AS total_average";
* 売上集計の年代別集計の年代抽出部分のSQLを返す
* @return string 年代抽出部分の SQL
return 'TRUNC((YEAR(create_date) - YEAR(order_birth)) - (RIGHT(create_date, 5) < RIGHT(order_birth, 5)), -1)';
* @param array $columns 連結を行うカラム名
* @return string 連結後の SQL 文
$total = count($columns);
foreach ($columns as $column) {
* @param string $expression 検索文字列
$objQuery = & SC_Query_Ex::getSingletonInstance();
$sql = "SHOW TABLES LIKE ". $objQuery->quote("%" . $expression . "%");
$arrColList = $objQuery->getAll($sql);
$arrColList = SC_Utils_Ex::sfSwapArray($arrColList, false);
* @param string $sql SQL文
* @return string 変換後の SQL 文
function sfChangeILIKE($sql){
* RANDOM() を RAND() に変換する.
* @param string $sql SQL文
* @return string 変換後の SQL 文
function sfChangeRANDOM($sql){
* TRUNC() を TRUNCATE() に変換する.
* @param string $sql SQL文
* @return string 変換後の SQL 文
function sfChangeTrunc($sql){
* ARRAY_TO_STRING(ARRAY(A),B) を GROUP_CONCAT() に変換する.
* @param string $sql SQL文
* @return string 変換後の SQL 文
function sfChangeArrayToString($sql){
preg_match_all('/ARRAY_TO_STRING.*?\(.*?ARRAY\(.*?SELECT (.+?) FROM (.+?) WHERE (.+?)\).*?\,.*?\'(.+?)\'.*?\)/is', $sql, $match, PREG_SET_ORDER);
foreach($match as $item) {
$replace = 'GROUP_CONCAT(' . $item[1] . ' SEPARATOR \'' . $item[4] . '\') FROM ' . $item[2] . ' WHERE ' . $item[3];
* @param string $table 対象テーブル名
* @param string $name 対象カラム名
* @return array インデックス設定情報配列
$objQuery = & SC_Query_Ex::getSingletonInstance();
$arrTblInfo = $objQuery->getTableInfo($table);
foreach($arrTblInfo as $fieldInfo) {
if($fieldInfo['nativetype'] == 'text') {
// TODO: text型フィールドの場合に255文字以内決めうちでインデックス列のサイズとして
$definition['fields'][$fieldInfo['name']]['length'] = '255';
Documentation generated on Fri, 24 Feb 2012 14:02:31 +0900 by Seasoft
|