/*
* ModeShape (http://www.modeshape.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.modeshape.jcr;
import javax.jcr.PathNotFoundException;
import javax.jcr.query.Query;
import org.junit.BeforeClass;
import org.junit.Test;
public class JcrRelikeQueryTest extends MultiUseAbstractTest {
@BeforeClass
public static void beforeAll() throws Exception {
MultiUseAbstractTest.beforeAll();
registerNodeTypes("cnd/relike.cnd");
}
protected void removeCars() throws Exception {
for (int i = 1; i != 11; ++i) {
String absPath = "/car" + i;
try {
session.getNode(absPath).remove();
} catch (PathNotFoundException e) {
// do nothing
}
}
session.save();
}
@Test
public void testRelikeWithoutPatternNotMatch() throws Exception {
removeCars();
AbstractJcrNode n1 = session.getRootNode().addNode("car1", "relike:Car");
n1.setProperty("relike:maker", "avtovaz");
n1.setProperty("relike:model", "lada");
session.save();
String queryString = "SELECT * from [relike:Car] as c where relike('no nodes with this text', c.[relike:maker])";
assertNodesNotFound(queryString, Query.JCR_SQL2);
}
@Test
public void testRelikeWithoutPatternMatch() throws Exception {
removeCars();
AbstractJcrNode n1 = session.getRootNode().addNode("car2", "relike:Car");
n1.setProperty("relike:maker", "avtovaz");
n1.setProperty("relike:model", "lada");
AbstractJcrNode n2 = session.getRootNode().addNode("car3", "relike:Car");
n2.setProperty("relike:maker", "ford");
n2.setProperty("relike:model", "focus");
session.save();
String queryString = "SELECT * from [relike:Car] as c where relike('ford', c.[relike:maker])";
assertNodesAreFound(queryString, Query.JCR_SQL2, "/car3");
}
@Test
public void testRelikeWithPatternTypes() throws Exception {
removeCars();
AbstractJcrNode n1 = session.getRootNode().addNode("car4", "relike:Car");
n1.setProperty("relike:maker", "avtovaz");
n1.setProperty("relike:model", "lada");
AbstractJcrNode n2 = session.getRootNode().addNode("car5", "relike:Car");
n2.setProperty("relike:maker", "_ord australia");
n2.setProperty("relike:model", "focus");
AbstractJcrNode n3 = session.getRootNode().addNode("car6", "relike:Car");
n3.setProperty("relike:maker", "%ford au%");
n3.setProperty("relike:model", "Mustang");
AbstractJcrNode n4 = session.getRootNode().addNode("car7", "relike:Car");
n4.setProperty("relike:maker", "%ford australia");
n4.setProperty("relike:model", "Sierra");
AbstractJcrNode n5 = session.getRootNode().addNode("car8", "relike:Car");
n5.setProperty("relike:maker", "_ord au%");
n5.setProperty("relike:model", "torino");
AbstractJcrNode n6 = session.getRootNode().addNode("car9", "relike:Car");
n6.setProperty("relike:maker", "1_3_5_");
n6.setProperty("relike:model", "torino");
session.save();
String queryString = "SELECT * from [relike:Car] as c where relike('ford australia', c.[relike:maker])";
assertNodesAreFound(queryString, Query.JCR_SQL2, "/car5", "/car6", "/car7", "/car8");
String queryString2 = "SELECT * from [relike:Car] as c where relike('avtovaz', c.[relike:maker])";
assertNodesAreFound(queryString2, Query.JCR_SQL2, "/car4");
String queryString3 = "SELECT * from [relike:Car] as c where relike('123456', c.[relike:maker])";
assertNodesAreFound(queryString3, Query.JCR_SQL2, "/car9");
String queryStringNotFound = "SELECT * from [relike:Car] as c where relike('idkfa', c.[relike:maker])";
assertNodesNotFound(queryStringNotFound, Query.JCR_SQL2);
}
@Test
public void testRelikeWithMultyContraints() throws Exception {
removeCars();
AbstractJcrNode n1 = session.getRootNode().addNode("car10", "relike:Car");
n1.setProperty("relike:maker", "avtovaz");
n1.setProperty("relike:model", "lada");
AbstractJcrNode n2 = session.getRootNode().addNode("car11", "relike:Car");
n2.setProperty("relike:maker", "123%");
n2.setProperty("relike:model", "concept");
session.save();
String queryString = "SELECT * " + "from [relike:Car] as c " + "where " + " relike('1234', c.[relike:maker]) or "
+ " relike('12345678', c.[relike:maker]) or " + " relike('test', c.[relike:maker])";
assertNodesAreFound(queryString, Query.JCR_SQL2, "/car11");
String queryString2 = "SELECT * " + "from [relike:Car] as c " + "where " + " (relike('1234', c.[relike:maker]) or "
+ " relike('12345678', c.[relike:maker]) or " + " relike('test', c.[relike:maker])) and "
+ " c.[relike:model] = 'lada'";
assertNodesNotFound(queryString2, Query.JCR_SQL2);
}
}