-
Notifications
You must be signed in to change notification settings - Fork 101
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
空DELETEを抑制する #1097
空DELETEを抑制する #1097
Conversation
Codecov ReportAttention: Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## master #1097 +/- ##
=======================================
Coverage 51.63% 51.64%
=======================================
Files 80 80
Lines 10223 10224 +1
=======================================
+ Hits 5279 5280 +1
Misses 4944 4944
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
data/class/SC_Query.php このコード入れるとどうも管理画面にログイン出来なくなります。 |
@bbkids |
本当に申し訳御座いません。 管理画面にログインするタイミングでランキングが更新されるのですが、 プラグイン側に問題があるのだと思います。すみませんでした。 [/admin/home.php] Fatal error(E_USER_ERROR): DB処理でエラーが発生しました。 |
MySQL は DELETE で ORDER BY を使えるので、カスタマイズでは支障となるパターンがありそうですね。(@bbkids 様の報告されたケースがそれに該当するかは未検証です。) SC_Query::count()、SC_Query::exists() 側でケアしても良いのかも。 |
ざっと確認しましたが、delete() は、setOrder() や setLimit() の影響を受けないようなので、カスタマイズの観点では問題無さそうでした。 setOrder() など → select() など → delete() の流れを同一 SC_Query インスタンスで実行するとコケる問題のようです。 個人的には、上で言う「select() など」の時点で、setOrder() の効力を失効される方が良い気がするのですが、どうでしょう?→ #1116 に展開しました。 多分、@bbkids 様の報告ケースは、それで回避されそうに思います。また、EC-CUBE 本体の実装でも LC_Page_Mypage_Favorite::lfGetFavoriteProduct() のように同一メソッド内で何度も 気持ち悪い例 $objQuery = SC_Query_Ex::getSingletonInstance();
$objQuery->begin();
$objQuery->delete('dtb_bkup');
$objQuery->insert('dtb_bkup', ['bkup_name' => 'example1']);
$objQuery->insert('dtb_bkup', ['bkup_name' => 'example2']);
$objQuery->insert('dtb_bkup', ['bkup_name' => 'example3']);
var_export($objQuery->select('bkup_name', 'dtb_bkup'));
/*
array (
0 =>
array (
'bkup_name' => 'example1',
),
1 =>
array (
'bkup_name' => 'example2',
),
2 =>
array (
'bkup_name' => 'example3',
),
)
*/
$objQuery->setLimit(1);
$objQuery->setOrder('bkup_name DESC');
var_export($objQuery->select('bkup_name', 'dtb_bkup'));
/*
array (
0 =>
array (
'bkup_name' => 'example3',
),
)
*/
var_export($objQuery->select('bkup_name', 'dtb_bkup'));
/*
array (
0 =>
array (
'bkup_name' => 'example3',
),
1 =>
array (
'bkup_name' => 'example2',
),
2 =>
array (
'bkup_name' => 'example1',
),
)
*/
$objQuery->rollback(); |
仰る通りで、導入していた古いプラグインが同一 SC_Query インスタンスでsetOrder() → select() → delete() の流れを実行している事が原因でした。 |
Fixes #630