Ticket #194 (closed バグ指摘: 修正済)
PostgreSQL8.3-beta で新着情報の SQL エラー
Reported by: | nanasess | Owned by: | adachi |
---|---|---|---|
Priority: | 中 | Milestone: | EC-CUBE2.3.0 |
Component: | フロント | Version: | 2.0系(正式版) |
Keywords: | Cc: | ||
修正済み: |
Description
PostgreSQL8.3 では, 型制約が厳しくなったらしい.
新着情報画面で下記エラーが発生する
SELECT *, cast(substring(news_date,1,10) as date) as news_date_disp FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC DB Error: unknown error SELECT *, cast(substring(news_date,1,10) as date) as news_date_disp FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC [nativecode=ERROR: function pg_catalog.substring(timestamp without time zone, integer, integer) does not exist LINE 1: SELECT *, cast(substring(news_date,1,10) as date) as news_da... ^ HINT: No function matches the given name and argument types. You might need to add explicit type casts.]
PostgreSQL は以下のパッチで修正可能.
Index: LC_Page_FrontParts_Bloc_News.php =================================================================== --- LC_Page_FrontParts_Bloc_News.php (リビジョン 16804) +++ LC_Page_FrontParts_Bloc_News.php (作業コピー) @@ -97,7 +97,7 @@ function lfGetNews(){ $conn = new SC_DBConn(); - $sql = "SELECT *, cast(substring(news_date,1,10) as date) as news_date_disp FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC"; + $sql = "SELECT *, cast(substring(news_date::text,1,10) as date) as news_date_disp FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC"; $list_data = $conn->getAll($sql); return $list_data; }
MySQL の場合, 上記修正をすると, おそらく構文エラーとなるため, 分岐させる必要があるかも.(未検証)
Change History
comment:2 follow-up: ↓ 3 Changed 16 years ago by shutta
- Owner changed from somebody to shutta
- Status changed from new to assigned
そもそもsubstringを使用しなくても、
$sql = "SELECT *, cast(news_date as date) as news_date_disp FROM dtb_news WHERE del_flg = '0' ORDER BY rank DESC";
と、すれば良い気がします。 これなら、PostgreSQL,MySQLどちらもOKです。
で、substring()を使用している全ての箇所を修正しましたが、data/class/pages/admin/mail/LC_Page_Admin_Mail_Template.phpだけは、
(substring(create_date, 1, 19)) as disp_date
のように指定されており、「年-月-日 時:分:秒」を取得しないといけなかったので、
$this->list_data['disp_date'] = substr($this->list_data['disp_date'], 0, 19);
のようにphp側で切り出すように修正しました。
comu-ver2ブランチには、コミットしましたので、あとは、 r17144 を開発版でも取り込んでもらうだけです。
Note: See
TracTickets for help on using
tickets.