/* * Copyright (C) 2003-2007 eXo Platform SAS. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Affero General Public License * as published by the Free Software Foundation; either version 3 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, see<http://www.gnu.org/licenses/>. */ package org.exoplatform.services.jcr.usecases.query; import org.exoplatform.services.jcr.usecases.BaseUsecasesTest; import java.util.Calendar; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.query.InvalidQueryException; import javax.jcr.query.Query; import javax.jcr.query.QueryManager; import javax.jcr.query.QueryResult; /** * Created by The eXo Platform SAS Author : Ly Dinh Quang quang.ly@exoplatform.com xxx5669@yahoo.com * Jul 23, 2008 */ public class TestQueryWithNumberAndSpace extends BaseUsecasesTest { /** * Test of number as path in query. * * @throws Exception */ public void testQuery1() throws Exception { Node document = root.addNode("Document", "nt:unstructured"); Node testNode1 = document.addNode("Test1", "nt:unstructured"); Node testNode11 = testNode1.addNode("Test11", "nt:file"); Node content1 = testNode11.addNode("jcr:content", "nt:resource"); content1.setProperty("jcr:lastModified", Calendar.getInstance()); content1.setProperty("jcr:mimeType", "text/xml"); content1.setProperty("jcr:data", ""); Node testNode2 = document.addNode("2008", "nt:unstructured"); Node testNode21 = testNode2.addNode("Test21", "nt:file"); Node content2 = testNode21.addNode("jcr:content", "nt:resource"); content2.setProperty("jcr:lastModified", Calendar.getInstance()); content2.setProperty("jcr:mimeType", "text/xml"); content2.setProperty("jcr:data", ""); session.save(); Query query = null; QueryResult result = null; NodeIterator iterate = null; QueryManager queryManager = session.getWorkspace().getQueryManager(); query = queryManager.createQuery("/jcr:root/Document/element(Test1, nt:unstructured)", Query.XPATH); result = query.execute(); iterate = result.getNodes(); assertEquals(1, iterate.getSize()); query = queryManager.createQuery("SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/Document/2008'", Query.SQL); result = query.execute(); assertEquals(1, result.getNodes().getSize()); try { query = queryManager.createQuery("/jcr:root/document/element(2008, nt:unstructured)", Query.XPATH); result = query.execute(); fail(); // there must be InvalidQueryException - XPATH do not support numbers in path } catch (InvalidQueryException e) { // correct } // remove data document.remove(); session.save(); } /** * Test of string with whitespace as path in query. * * @throws Exception */ public void testQuery2() throws Exception { Node document = root.addNode("Document", "nt:unstructured"); Node testNode3 = document.addNode("test A", "nt:unstructured"); Node testNode31 = testNode3.addNode("Test31", "nt:file"); Node content3 = testNode31.addNode("jcr:content", "nt:resource"); content3.setProperty("jcr:lastModified", Calendar.getInstance()); content3.setProperty("jcr:mimeType", "text/xml"); content3.setProperty("jcr:data", ""); session.save(); QueryManager queryManager = session.getWorkspace().getQueryManager(); Query query = queryManager.createQuery("SELECT * FROM nt:unstructured WHERE jcr:path LIKE '/Document/test A'", Query.SQL); QueryResult result = query.execute(); assertEquals(1, result.getNodes().getSize()); try { query = queryManager.createQuery("/jcr:root/document/element('test A', nt:unstructured)", Query.XPATH); result = query.execute(); NodeIterator iterate = result.getNodes(); assertEquals(1, iterate.getSize()); } catch (InvalidQueryException e) { // correct } // remove data document.remove(); session.save(); } }