You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-issues@jackrabbit.apache.org by "Marco Piovesana (JIRA)" <ji...@apache.org> on 2017/07/04 13:22:00 UTC

[jira] [Created] (OAK-6418) CONTAINS SQL2 parameter does not work

Marco Piovesana created OAK-6418:
------------------------------------

             Summary: CONTAINS SQL2 parameter does not work
                 Key: OAK-6418
                 URL: https://issues.apache.org/jira/browse/OAK-6418
             Project: Jackrabbit Oak
          Issue Type: Bug
          Components: jcr
    Affects Versions: 1.6.1
            Reporter: Marco Piovesana


Query result is wrong when using the "CONTAINS" operator. See the following test example:
{code:borderStyle=solid}

    @Test
    public void shouldFindOneElement() throws Exception {
        File driveFile = new File("/tmp/oakTest", "oakrepo");
        File repositoryFile = new File(driveFile, "repository");
        File dataStoreFile = new File(driveFile, "datastore");
        BlobStore blobStore = new FileBlobStore(dataStoreFile.getAbsolutePath());
        FileStore fileStore = FileStoreBuilder.fileStoreBuilder(repositoryFile).withBlobStore(blobStore).build();
        SegmentNodeStore segmentNodeStore = SegmentNodeStoreBuilders.builder(fileStore).build();
        Jcr jcr = new Jcr(segmentNodeStore).with(new InitialContent()).with(new SecurityProviderImpl());
        Repository repository = jcr.createRepository();

        Session session = repository.login(ADMIN_CREDENTIALS);
        Node myNode = session.getRootNode().addNode("myNode");
        myNode.setProperty("text", "hello_world");
        session.save();

        QueryManager qm = session.getWorkspace().getQueryManager();
        Query q = qm.createQuery("select * from [nt:base] where CONTAINS([text],'hello_world')", Query.JCR_SQL2);
        QueryResult execute = q.execute();
        long foundNodes = execute.getNodes().getSize();

        session.logout();
        fileStore.close();
        ((JackrabbitRepository) repository).shutdown();

        assertEquals(1L, foundNodes);
    }

{code}
The test fails because the query return 0 results while it should return 1. It works fine if instead of executing:
{code} select * from [nt:base] where CONTAINS([text],'hello_world') {code}
I run it using the LIKE operator:
{code} select * from [nt:base] where [text] LIKE 'hello_world' {code}

I also tried to run the same test inside the _org.apache.jackrabbit.oak.jcr.query.QueryTest.java_, but there it works fine. Here the test i run:
{code}
    @Test
    public void shouldFindNodeUsingContainsOperator() throws RepositoryException {
        Session session = getAdminSession();
        Node hello = session.getRootNode().addNode("hello");
        hello.setProperty("text", "hello_world");
        session.save();
        QueryManager qm = session.getWorkspace().getQueryManager();
        Query q = qm.createQuery("select * from [nt:base] where CONTAINS([text],'hello_world')", Query.JCR_SQL2);
        QueryResult r = q.execute();
        NodeIterator nodes = r.getNodes();
        assertEquals(1, nodes.getSize());
    }
{code}

Marco.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)