doctrine / phpcr-odm

Doctrine PHPCR ODM
http://www.doctrine-project.org/projects/phpcr-odm.html
MIT License
182 stars 96 forks source link

QueryBuilder throws InvalidQueryException if node path contains '-<num>e' #779

Open SalvatorePollaci opened 6 years ago

SalvatorePollaci commented 6 years ago

When querying for children of node with path which contains -<num>e, Query Builder throws InvalidQueryException.

$path = '/cms/site1/routes/it/home/test-1e';
$qb = $this->manager->createQueryBuilder();
                $qb->fromDocument(AutoRoute::class, 'a');
                $qb->where()->child($path, 'a');
                $out = $qb->getQuery()->execute();

STEP 1: /vendor/jackalope/jackalope-jackrabbit/src/Jackalope/Transport/Jackrabbit/Client.php line 888 $querystring = $query->getStatement();

$querystring has value:

SELECT * FROM [nt:unstructured] AS a WHERE (ISCHILDNODE(a, [/cms/site1/routes/it/home/test-1e]) AND (a.[phpcr:class] = 'MyCompany\Bundle\CMSBundle\Document\CMS\AutoRoute' OR a.[phpcr:classparents] = 'MyCompany\Bundle\CMSBundle\Document\CMS\AutoRoute'))

STEP 2: /vendor/jackalope/jackalope-jackrabbit/src/Jackalope/Transport/Jackrabbit/Request.php line 529 $response = $curl->exec();

$response has value:

<?xml version="1.0" encoding="UTF-8" standalone="no"?><D:error xmlns:D="DAV:"><dcr:exception xmlns:dcr="http://www.day.com/jcr/webdav/1.0"><dcr:class>javax.jcr.query.InvalidQueryException</dcr:class><dcr:message>Query:
SELECT * FROM [nt:unstructured] AS a WHERE (ISCHILDNODE(a, [/cms/site1/routes/it/home/test-(*)1e]) AND (a.[phpcr:class] = 'MyCompany\Bundle\CMSBundle\Document\CMS\AutoRoute' OR a.[phpcr:classparents] = 'MyCompany\Bundle\CMSBundle\Document\CMS\AutoRoute'))</dcr:message></dcr:exception></D:error>

As you can see above, it seems that someone is adding '(*)' to the JCR query.

This only happens if node's path contains -<num>e.

Does anyone have any solutions?

dbu commented 6 years ago

what is the exception message? i remember that there is a bug in jackrabbit where it mis interprets those as codes even when url encoded. i think you are seeing https://github.com/jackalope/jackalope/issues/313 - unfortunately that is a bug in the java jackrabbit server and they seem to not care to fix it.

the sulu cms did this: https://github.com/sulu/sulu-document-manager/pull/91