DB
[ class tree: DB ] [ index: DB ] [ all elements ]

Source for file SC_DB_DBFactory_PGSQL.php

Documentation is available at SC_DB_DBFactory_PGSQL.php

  1. <?php
  2. /*
  3.  * This file is part of EC-CUBE
  4.  *
  5.  * Copyright(c) 2000-2011 LOCKON CO.,LTD. All Rights Reserved.
  6.  *
  7.  * http://www.lockon.co.jp/
  8.  *
  9.  * This program is free software; you can redistribute it and/or
  10.  * modify it under the terms of the GNU General Public License
  11.  * as published by the Free Software Foundation; either version 2
  12.  * of the License, or (at your option) any later version.
  13.  *
  14.  * This program is distributed in the hope that it will be useful,
  15.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  16.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  17.  * GNU General Public License for more details.
  18.  *
  19.  * You should have received a copy of the GNU General Public License
  20.  * along with this program; if not, write to the Free Software
  21.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  22.  */
  23.  
  24. // {{{ requires
  25. require_once CLASS_REALDIR 'db/SC_DB_DBFactory.php';
  26.  
  27. /**
  28.  * PostgreSQL 固有の処理をするクラス.
  29.  *
  30.  * このクラスを直接インスタンス化しないこと.
  31.  * 必ず SC_DB_DBFactory クラスを経由してインスタンス化する.
  32.  * また, SC_DB_DBFactory クラスの関数を必ずオーバーライドしている必要がある.
  33.  *
  34.  * @package DB
  35.  * @author LOCKON CO.,LTD.
  36.  * @version $Id:SC_DB_DBFactory_PGSQL.php 15532 2007-08-31 14:39:46Z nanasess $
  37.  */
  38.  
  39.     /**
  40.      * DBのバージョンを取得する.
  41.      *
  42.      * @param string $dsn データソース名
  43.      * @return string データベースのバージョン
  44.      */
  45.     function sfGetDBVersion($dsn ""{
  46.         $objQuery =SC_Query_Ex::getSingletonInstance($dsn);
  47.         $val $objQuery->getOne("select version()");
  48.         $arrLine explode(" " $val);
  49.         return $arrLine[0" " str_replace(","""$arrLine[1]);
  50.     }
  51.  
  52.     /**
  53.      * MySQL 用の SQL 文に変更する.
  54.      *
  55.      * DB_TYPE が PostgreSQL の場合は何もしない
  56.      *
  57.      * @access private
  58.      * @param string $sql SQL 文
  59.      * @return string MySQL 用に置換した SQL 文
  60.      */
  61.     function sfChangeMySQL($sql){
  62.         return $sql;
  63.     }
  64.  
  65.     /**
  66.      * 昨日の売上高・売上件数を算出する SQL を返す.
  67.      *
  68.      * @param string $method SUM または COUNT
  69.      * @return string 昨日の売上高・売上件数を算出する SQL
  70.      */
  71.     function getOrderYesterdaySql($method{
  72.         return "SELECT ".$method."(total) FROM dtb_order "
  73.               . "WHERE del_flg = 0 "
  74.                 . "AND to_char(create_date,'YYYY/MM/DD') = to_char(CURRENT_TIMESTAMP - interval '1 days','YYYY/MM/DD') "
  75.                 . "AND status <> " ORDER_CANCEL;
  76.     }
  77.  
  78.     /**
  79.      * 当月の売上高・売上件数を算出する SQL を返す.
  80.      *
  81.      * @param string $method SUM または COUNT
  82.      * @return string 当月の売上高・売上件数を算出する SQL
  83.      */
  84.     function getOrderMonthSql($method{
  85.         return "SELECT ".$method."(total) FROM dtb_order "
  86.               . "WHERE del_flg = 0 "
  87.                 . "AND to_char(create_date,'YYYY/MM') = ? "
  88.                 . "AND to_char(create_date,'YYYY/MM/DD') <> to_char(CURRENT_TIMESTAMP,'YYYY/MM/DD') "
  89.                 . "AND status <> " ORDER_CANCEL;
  90.     }
  91.  
  92.     /**
  93.      * 昨日のレビュー書き込み件数を算出する SQL を返す.
  94.      *
  95.      * @return string 昨日のレビュー書き込み件数を算出する SQL
  96.      */
  97.     function getReviewYesterdaySql({
  98.         return "SELECT COUNT(*) FROM dtb_review AS A "
  99.           . "LEFT JOIN dtb_products AS B "
  100.                  . "ON A.product_id = B.product_id "
  101.               . "WHERE A.del_flg=0 "
  102.                 . "AND B.del_flg = 0 "
  103.                 . "AND to_char(A.create_date, 'YYYY/MM/DD') = to_char(CURRENT_TIMESTAMP - interval '1 days','YYYY/MM/DD') "
  104.                 . "AND to_char(A.create_date,'YYYY/MM/DD') != to_char(CURRENT_TIMESTAMP,'YYYY/MM/DD')";
  105.     }
  106.  
  107.     /**
  108.      * メール送信履歴の start_date の検索条件の SQL を返す.
  109.      *
  110.      * @return string 検索条件の SQL
  111.      */
  112.     function getSendHistoryWhereStartdateSql({
  113.         return "start_date BETWEEN current_timestamp + '- 5 minutes' AND current_timestamp + '5 minutes'";
  114.     }
  115.  
  116.     /**
  117.      * ダウンロード販売の検索条件の SQL を返す.
  118.      *
  119.      * @param string $dtb_order_alias 
  120.      * @return string 検索条件の SQL
  121.      */
  122.     function getDownloadableDaysWhereSql($dtb_order_alias 'dtb_order'{
  123.         $baseinfo SC_Helper_DB_Ex::sfGetBasisData();
  124.         //downloadable_daysにNULLが入っている場合(無期限ダウンロード可能時)もあるので、NULLの場合は0日に補正
  125.         $downloadable_days $baseinfo['downloadable_days'];
  126.         if($downloadable_days ==null || $downloadable_days == "")$downloadable_days=0;
  127.         return "(SELECT CASE WHEN (SELECT d1.downloadable_days_unlimited FROM dtb_baseinfo d1) = 1 AND " $dtb_order_alias ".payment_date IS NOT NULL THEN 1 WHEN DATE(CURRENT_TIMESTAMP) <= DATE(" $dtb_order_alias ".payment_date + '"$downloadable_days ." days') THEN 1 ELSE 0 END)";
  128.     }
  129.  
  130.     /**
  131.      * 売上集計の期間別集計のSQLを返す
  132.      *
  133.      * @param mixed $type 
  134.      * @return string 検索条件のSQL
  135.      */
  136.     function getOrderTotalDaysWhereSql($type{
  137.         switch($type){
  138.         case 'month':
  139.             $format 'MM';
  140.             break;
  141.         case 'year':
  142.             $format 'YYYY';
  143.             break;
  144.         case 'wday':
  145.             $format 'Dy';
  146.             break;
  147.         case 'hour':
  148.             $format 'HH24';
  149.             break;
  150.         default:
  151.             $format 'YYYY-MM-DD';
  152.             break;
  153.         }
  154.  
  155.         return "to_char(create_date, '".$format."') AS str_date,
  156.             COUNT(order_id) AS total_order,
  157.             SUM(CASE WHEN order_sex = 1 THEN 1 ELSE 0 END) AS men,
  158.             SUM(CASE WHEN order_sex = 2 THEN 1 ELSE 0 END) AS women,
  159.             SUM(CASE WHEN customer_id <> 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_member,
  160.             SUM(CASE WHEN customer_id <> 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_member,
  161.             SUM(CASE WHEN customer_id = 0 AND order_sex = 1 THEN 1 ELSE 0 END) AS men_nonmember,
  162.             SUM(CASE WHEN customer_id = 0 AND order_sex = 2 THEN 1 ELSE 0 END) AS women_nonmember,
  163.             SUM(total) AS total,
  164.             AVG(total) AS total_average";
  165.     }
  166.  
  167.     /**
  168.      * 売上集計の年代別集計の年代抽出部分のSQLを返す
  169.      *
  170.      * @return string 年代抽出部分の SQL
  171.      */
  172.     function getOrderTotalAgeColSql({
  173.         return 'TRUNC(CAST(EXTRACT(YEAR FROM AGE(create_date, order_birth)) AS INT), -1)';
  174.     }
  175.  
  176.     /**
  177.      * 文字列連結を行う.
  178.      *
  179.      * @param array $columns 連結を行うカラム名
  180.      * @return string 連結後の SQL 文
  181.      */
  182.     function concatColumn($columns{
  183.         $sql "";
  184.         $i 0;
  185.         $total count($columns);
  186.         foreach ($columns as $column{
  187.             $sql .= $column;
  188.             if ($i $total -1{
  189.                 $sql .= " || ";
  190.             }
  191.             $i++;
  192.         }
  193.         return $sql;
  194.     }
  195.  
  196.     /**
  197.      * テーブルを検索する.
  198.      *
  199.      * 引数に部分一致するテーブル名を配列で返す.
  200.      *
  201.      * @deprecated SC_Query::listTables() を使用してください
  202.      * @param string $expression 検索文字列
  203.      * @return array テーブル名の配列
  204.      */
  205.     function findTableNames($expression ""{
  206.         $objQuery =SC_Query_Ex::getSingletonInstance();
  207.         $sql "   SELECT c.relname AS name, "
  208.             .  "     CASE c.relkind "
  209.             .  "     WHEN 'r' THEN 'table' "
  210.             .  "     WHEN 'v' THEN 'view' END AS type "
  211.             .  "     FROM pg_catalog.pg_class c "
  212.             .  "LEFT JOIN pg_catalog.pg_namespace n "
  213.             .  "       ON n.oid = c.relnamespace "
  214.             .  "    WHERE c.relkind IN ('r','v') "
  215.             .  "      AND n.nspname NOT IN ('pg_catalog', 'pg_toast') "
  216.             .  "      AND pg_catalog.pg_table_is_visible(c.oid) "
  217.             .  "      AND c.relname LIKE ?"
  218.             .  " ORDER BY 1,2;";
  219.         $arrColList $objQuery->getAll($sqlarray("%" $expression "%"));
  220.         $arrColList SC_Utils_Ex::sfSwapArray($arrColListfalse);
  221.         return $arrColList[0];
  222.     }
  223.  
  224.     /**
  225.      * 文字コード情報を取得する
  226.      *
  227.      * @return array 文字コード情報
  228.      */
  229.     function getCharSet({
  230.         // 未実装
  231.         return array();
  232.     }
  233. }
  234. ?>

Documentation generated on Fri, 24 Feb 2012 14:02:32 +0900 by Seasoft