Doctrine 2 - ORM
  1. Doctrine 2 - ORM
  2. DDC-2394

QueryExpressionVisitor has no implementation of Comparison::CONTAINS

    Details

    • Type: Bug Bug
    • Status: Resolved
    • Priority: Major Major
    • Resolution: Invalid
    • Affects Version/s: Git Master
    • Fix Version/s: None
    • Component/s: ORM
    • Environment:
      n/a

      Description

      Use case
      $criteria = Criteria::create();
      $criteria
          ->andWhere(
              $criteria->expr()->contains('r.body', 'foo')
          )
      ;
      
      $entities = $repo->createQueryBuilder()->addCriteria($criteria)->getQuery()->getResult();
      

      Throws the following exception:

      RuntimeException: Unknown comparison operator: CONTAINS

      I except it to properly handle the CONTAINS comparison and result in a LIKE operator.

      -------

      I added a failing test case & a fix there: https://github.com/borisguery/doctrine2/tree/DDC-2394

        Activity

        Boris Guéry created issue -
        Hide
        Benjamin Eberlei added a comment -

        This was added in 2.4, you are probably using Collections 1.1 with ORM 2.3, where this occurs.

        Show
        Benjamin Eberlei added a comment - This was added in 2.4, you are probably using Collections 1.1 with ORM 2.3, where this occurs.
        Benjamin Eberlei made changes -
        Field Original Value New Value
        Status Open [ 1 ] Resolved [ 5 ]
        Resolution Invalid [ 6 ]
        Hide
        Matthieu Napoli added a comment -

        Apparently it wasn't, I'm on 2.4 and still get the exception.

        I submitted a PR: https://github.com/doctrine/doctrine2/pull/791

        Show
        Matthieu Napoli added a comment - Apparently it wasn't, I'm on 2.4 and still get the exception. I submitted a PR: https://github.com/doctrine/doctrine2/pull/791
        Hide
        Doctrine Bot added a comment -

        A related Github Pull-Request [GH-791] was closed:
        https://github.com/doctrine/doctrine2/pull/791

        Show
        Doctrine Bot added a comment - A related Github Pull-Request [GH-791] was closed: https://github.com/doctrine/doctrine2/pull/791
        Hide
        Matthias Althaus added a comment -

        As this issue confused me, I took a look into it and the reason seems to be that there's no current release of doctrine/orm including this bugfix. It's not part of the current v2.4.2 tag:

        https://github.com/doctrine/doctrine2/blob/v2.4.2/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php
        https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php

        We'd be really happy to get a new bugfix release.

        Running those lib versions:

        doctrine/annotations v1.1.2 Docblock Annotations Parser
        doctrine/cache v1.3.0 Caching library offering an object-oriented API for many cache b...
        doctrine/collections v1.2 Collections Abstraction library
        doctrine/common v2.4.2 Common Library for Doctrine projects
        doctrine/data-fixtures v1.0.0 Data Fixtures for all Doctrine Object Managers
        doctrine/dbal v2.4.2 Database Abstraction Layer
        doctrine/doctrine-bundle v1.2.0 Symfony DoctrineBundle
        doctrine/doctrine-fixtures-bundle v2.2.0 Symfony DoctrineFixturesBundle
        doctrine/inflector v1.0 Common String Manipulations with regard to casing and singular/p...
        doctrine/lexer v1.0 Base library for a lexer that can be used in Top-Down, Recursive...
        doctrine/orm v2.4.2 Object-Relational-Mapper for PHP

        Show
        Matthias Althaus added a comment - As this issue confused me, I took a look into it and the reason seems to be that there's no current release of doctrine/orm including this bugfix. It's not part of the current v2.4.2 tag: https://github.com/doctrine/doctrine2/blob/v2.4.2/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Query/QueryExpressionVisitor.php We'd be really happy to get a new bugfix release. Running those lib versions: doctrine/annotations v1.1.2 Docblock Annotations Parser doctrine/cache v1.3.0 Caching library offering an object-oriented API for many cache b... doctrine/collections v1.2 Collections Abstraction library doctrine/common v2.4.2 Common Library for Doctrine projects doctrine/data-fixtures v1.0.0 Data Fixtures for all Doctrine Object Managers doctrine/dbal v2.4.2 Database Abstraction Layer doctrine/doctrine-bundle v1.2.0 Symfony DoctrineBundle doctrine/doctrine-fixtures-bundle v2.2.0 Symfony DoctrineFixturesBundle doctrine/inflector v1.0 Common String Manipulations with regard to casing and singular/p... doctrine/lexer v1.0 Base library for a lexer that can be used in Top-Down, Recursive... doctrine/orm v2.4.2 Object-Relational-Mapper for PHP
        Hide
        Marco Pivetta added a comment -

        Matthias Althaus this is a new feature, it won't be backported as bugfix.

        Show
        Marco Pivetta added a comment - Matthias Althaus this is a new feature, it won't be backported as bugfix.
        Hide
        Matthieu Napoli added a comment -

        Marco Pivetta I would rather say it's a bug because the feature works with ArrayCollection. It was something missing in the implementation in the ORM. The feature is offered by the interface of the Criteria, so the ORM implementation should support it (else the Collection abstraction is useless).

        Show
        Matthieu Napoli added a comment - Marco Pivetta I would rather say it's a bug because the feature works with ArrayCollection. It was something missing in the implementation in the ORM. The feature is offered by the interface of the Criteria, so the ORM implementation should support it (else the Collection abstraction is useless).
        Hide
        Marco Pivetta added a comment -

        Matthieu Napoli the criteria expressions support depends on the visitor implementation.
        They are not interfaced, and custom expression types are also accepted.

        Show
        Marco Pivetta added a comment - Matthieu Napoli the criteria expressions support depends on the visitor implementation. They are not interfaced, and custom expression types are also accepted.
        Hide
        Matthieu Napoli added a comment -

        Beyond code interface, I rather mean "contract" between the library and the user.

        The criteria's purpose is a query API that works both on persistent and non-persistent collections: it abstracts the persistence away. By having differences in implementation, the main purpose of the criteria is lost, which IMO is a bug.

        Show
        Matthieu Napoli added a comment - Beyond code interface, I rather mean "contract" between the library and the user. The criteria's purpose is a query API that works both on persistent and non-persistent collections: it abstracts the persistence away. By having differences in implementation, the main purpose of the criteria is lost, which IMO is a bug.
        Hide
        Marco Pivetta added a comment -

        Matthieu Napoli there are actually various implementations that just don't support many of the operations (wrote some cache-based adapters and some Zend\Db ones as well). It's just an unsupported case in this version, it is not a bug.

        Show
        Marco Pivetta added a comment - Matthieu Napoli there are actually various implementations that just don't support many of the operations (wrote some cache-based adapters and some Zend\Db ones as well). It's just an unsupported case in this version, it is not a bug.
        Hide
        Matthias Althaus added a comment -

        I can understand both sides, but it's a pity that the QueryExpressionVisitor has such issues with the Criteria API (which is basically quite nice). We've just build some complex filter management around the Criteria API and now it seems more and more like a bad decision.

        Show
        Matthias Althaus added a comment - I can understand both sides, but it's a pity that the QueryExpressionVisitor has such issues with the Criteria API (which is basically quite nice). We've just build some complex filter management around the Criteria API and now it seems more and more like a bad decision.

        This list may be incomplete, as errors occurred whilst retrieving source from linked applications:

        • Request to http://www.doctrine-project.org/fisheye/ failed: Error in remote call to 'FishEye 0 (http://www.doctrine-project.org/fisheye/)' (http://www.doctrine-project.org/fisheye) [AbstractRestCommand{path='/rest-service-fe/search-v1/crossRepositoryQuery', params={query=DDC-2394, expand=changesets[0:20].revisions[0:29],reviews}, methodType=GET}] : Received status code 503 (Service Temporarily Unavailable)

          People

          • Assignee:
            Benjamin Eberlei
            Reporter:
            Boris Guéry
          • Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: