Skip to content
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

ページネータの修正 #1922

Merged
merged 7 commits into from
Dec 2, 2016
Merged

Conversation

chihiro-adachi
Copy link
Contributor

@chihiro-adachi chihiro-adachi commented Nov 11, 2016

#1916

  • doctrine2.5のCountOutputWalker をバックポート
    • wrap-queries: true時は、上記のCountOutputWalkerを使うように修正
  • プラグインから拡張されることを想定し, ページネータを利用する箇所はwrap-queries: trueに変更

doctrine2.5.5のpaginatorをバックポート

  • CountWalker
  • LimitSubqueryWalker
  • WhereInWalker
  • LimitSubqueryOutputWalker
  • CountOutputWalker
  • Paginator

オリジナルからの変更箇所は以下のコミット
79409b7

上記を動作させるため, KnpPagerのUsesPaginatorを移植
fce6bbc

#1916 および #1618 の問題が解消されます。

@chihiro-adachi chihiro-adachi changed the title WIP:Fix join WIP:ページネータの修正 Nov 11, 2016
@chihiro-adachi chihiro-adachi changed the title WIP:ページネータの修正 ページネータの修正 Nov 14, 2016
@chihiro-adachi
Copy link
Contributor Author

chihiro-adachi commented Nov 14, 2016

こちら実装完了してます。
以下の機能が影響を受けるため動作検証が必要。

@nanasess
Copy link
Contributor

  • tearDown() で後片付けしておいた方が良いと思います
  • CountOutputWalker.php に、どのような変更が入ったのかわかりますでしょうか?
  • wrap-queries: true を考慮していない既存のプラグインが無いかどうか、可能であればチェックした方がよいと思います

@chihiro-adachi
Copy link
Contributor Author

@nanasess

tearDown() で後片付けしておいた方が良いと思います

こちらテスト修正しました。

wrap-queries: true を考慮していない既存のプラグインが無いかどうか、可能であればチェックした方がよいと思います

ありがとうございます。
いくつか確認したところ、$qb->orderBy('pc.price02', 'DESC');のようなケースで、問題がでるようです。

今回

  • 件数の取得はCountOutputWalkerを使う
  • 検索結果は単純に$qb->getQuery()->getResult()してPagginatorの機構を使わない

ようにしてみたのですが、修正が不十分なようです。

※たぶん http://stackoverflow.com/questions/27617522/doctrine-2-paginator-with-exotic-join-throws-error に書いてあるように、関連するSqlWalkerを一通りバックポートしないといけないような気がします。

ちょっと実装見直してみます。

@chihiro-adachi
Copy link
Contributor Author

@kiy0taka
Copy link
Contributor

MySQL 5.7.16でエラーになってました。

https://travis-ci.org/kiy0taka/eccube-codeception/builds/176631565

[2016-11-18 11:01:26,480468] front.ERROR [fd99806c] [e263983e] [12] [LogListener:onKernelException:115] - Doctrine\DBAL\Exception\DriverException: An exception occurred while executing 'SELECT DISTINCT favorite_id0 FROM (SELECT d0_.favorite_id AS favorite_id0, d0_.create_date AS create_date1, d0_.update_date AS update_date2, d0_.del_flg AS del_flg3, d1_.product_id AS product_id4, d1_.name AS name5, d1_.note AS note6, d1_.description_list AS description_list7, d1_.description_detail AS description_detail8, d1_.search_word AS search_word9, d1_.free_area AS free_area10, d1_.del_flg AS del_flg11, d1_.create_date AS create_date12, d1_.update_date AS update_date13 FROM dtb_customer_favorite_product d0_ INNER JOIN dtb_product d1_ ON d0_.product_id = d1_.product_id AND (d1_.del_flg = 0) WHERE (d0_.customer_id = ? AND d1_.status = 1) AND (d0_.del_flg = 0)) dctrn_result ORDER BY create_date1 DESC LIMIT 10 OFFSET 0' with params [12]:

MySQL 5.6からsql_modeのデフォルト値が変わったのが原因のようです。

https://dev.mysql.com/doc/refman/5.6/ja/show-variables.html

Codeceptionで回しているMySQL5.1.73と5.7.16の値は以下のとおりです。

$ mysql -u root -p cube3_dev -e 'SELECT @@GLOBAL.version, @@GLOBAL.sql_mode;'
+------------------+-------------------+
| @@GLOBAL.version | @@GLOBAL.sql_mode |
+------------------+-------------------+
| 5.1.73           |                   |
+------------------+-------------------+
# mysql -u root -p cube3_dev -e 'SELECT @@GLOBAL.version, @@GLOBAL.sql_mode;'
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@GLOBAL.version | @@GLOBAL.sql_mode                                                                                                                         |
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------+
| 5.7.16           | ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+------------------+-------------------------------------------------------------------------------------------------------------------------------------------+

MySQL 5.7.16でも SET GLOBAL sql_mode = ''; でsql_modeを変更したときはエラーになりませんでした。

@chihiro-adachi
Copy link
Contributor Author

doctrineにもissueとpull requestが上がっているので確認してみます。

doctrine/orm#5622
doctrine/orm#5973
doctrine/orm#6094

@kiy0taka
Copy link
Contributor

https://travis-ci.org/kiy0taka/eccube-codeception/builds/179328258
MySQL 5.7系でもエラーにならないのを確認しました。

@Yangsin Yangsin merged commit bb8aaf8 into EC-CUBE:master Dec 2, 2016
@chihiro-adachi chihiro-adachi deleted the fix-join branch February 7, 2017 00:32
chihiro-adachi added a commit to chihiro-adachi/ec-cube that referenced this pull request Jul 11, 2018
chihiro-adachi added a commit to chihiro-adachi/ec-cube that referenced this pull request Jul 18, 2018
chihiro-adachi added a commit to chihiro-adachi/ec-cube that referenced this pull request Jul 25, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants