/* * Copyright 2016, Red Hat Inc. and/or its affiliates. * * 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.infinispan.objectfilter.impl.ql.test; import org.junit.Test; public class ParserTest extends TestBase { @Test public void testFromNote1() { expectParserSuccess("from Note n where ! n.text = 'foo'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (! (= (PATH (. n text)) (CONST_STRING_VALUE foo))))))"); expectParserSuccess("from Note n where ! (n.text = 'foo')", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (! (= (PATH (. n text)) (CONST_STRING_VALUE foo))))))"); expectParserSuccess("from Note n where not n.text = 'foo'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (not (= (PATH (. n text)) (CONST_STRING_VALUE foo))))))"); expectParserSuccess("from Note n where not (n.text = 'foo')", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (not (= (PATH (. n text)) (CONST_STRING_VALUE foo))))))"); } @Test public void testFromNote2() { expectParserSuccess("from Note where text : 'bar'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note <gen:0>))) (SELECT (SELECT_LIST (SELECT_ITEM <gen:0>)))) " + "(where (: (PATH text) (FT_TERM (CONST_STRING_VALUE bar))))))"); expectParserSuccess("from Note where #text : 'bar'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note <gen:0>))) (SELECT (SELECT_LIST (SELECT_ITEM <gen:0>)))) " + "(where (: (PATH text) (# (FT_TERM (CONST_STRING_VALUE bar)))))))"); expectParserSuccess("from Note where text : ('bar')", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note <gen:0>))) (SELECT (SELECT_LIST (SELECT_ITEM <gen:0>)))) " + "(where (: (PATH text) (FT_TERM (CONST_STRING_VALUE bar))))))"); expectParserSuccess("from Note n where - n.text : (-'foo' +'bar')", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (: (PATH (. n text)) (- (OR (- (FT_TERM (CONST_STRING_VALUE foo))) (+ (FT_TERM (CONST_STRING_VALUE bar)))))))))"); expectParserSuccess("from Note n where not n.text : (-'foo' +'bar')", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (not (: (PATH (. n text)) (OR (- (FT_TERM (CONST_STRING_VALUE foo))) (+ (FT_TERM (CONST_STRING_VALUE bar)))))))))"); } @Test public void testFromNote3() { expectParserSuccess("from Note n where ! n.text : (-'foo' +'bar')", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (! (: (PATH (. n text)) (OR (- (FT_TERM (CONST_STRING_VALUE foo))) (+ (FT_TERM (CONST_STRING_VALUE bar)))))))))"); } @Test public void testFromNote4() { expectParserSuccess("from Note n where + n.text : 'foo'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Note n))) (SELECT (SELECT_LIST (SELECT_ITEM n)))) " + "(where (: (PATH (. n text)) (+ (FT_TERM (CONST_STRING_VALUE foo)))))))"); } @Test public void testFromAnimal() { //generated alias: expectParserSuccess("from Animal", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF Animal <gen:0>))) (SELECT (SELECT_LIST (SELECT_ITEM <gen:0>))))))"); } @Test public void testSuperSimpleQuery() { //generated alias: expectParserSuccess("from EntityName", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF EntityName <gen:0>))) (SELECT (SELECT_LIST (SELECT_ITEM <gen:0>))))))"); } @Test public void testSimpleQuery() { //full selection with specified alias: expectParserSuccess("select e from com. acme . EntityName e", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (select (SELECT_LIST (SELECT_ITEM (PATH e)))))))"); } @Test public void testSimpleFromQuery() { //abbreviated form: expectParserSuccess("from com.acme.EntityName e", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e))))))"); } @Test public void testSimpleQueryDefaultContext() { //generated alias: expectParserSuccess("from com.acme.EntityName e", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e))))))"); } @Test public void testOneCriteriaQuery() { //generated alias: expectParserSuccess("from com.acme.EntityName e where e.name = 'same'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e)))) (where (= (PATH (. e name)) (CONST_STRING_VALUE same)))))"); } @Test public void testOrderByAsc() { //generated alias: expectParserSuccess("from com.acme.EntityName e order by e.name asc", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e))))) (order (SORT_SPEC (PATH (. e name)) asc)))"); } @Test public void testOrderByDefault() { //generated alias: expectParserSuccess("from com.acme.EntityName e order by e.name", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e))))) (order (SORT_SPEC (PATH (. e name)) asc)))"); } @Test public void testOrderByDesc() { //generated alias: expectParserSuccess("from com.acme.EntityName e order by e.name DESC", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e))))) (order (SORT_SPEC (PATH (. e name)) desc)))"); } @Test public void testStringLiteralSingleQuoteEscape() { //generated alias: expectParserSuccess("from com.acme.EntityName e where e.name = 'Jack Daniel''s Old No. 7'", "(QUERY (QUERY_SPEC (SELECT_FROM (from (PERSISTER_SPACE (ENTITY_PERSISTER_REF com.acme.EntityName e))) (SELECT (SELECT_LIST (SELECT_ITEM e)))) (where (= (PATH (. e name)) (CONST_STRING_VALUE Jack Daniel's Old No. 7)))))"); } @Test public void testJoinOnEmbedded() { //generated alias: expectParserSuccess("SELECT e.author.name FROM IndexedEntity e JOIN e.contactDetails d JOIN e.alternativeContactDetails a WHERE d.address.postCode='EA123' AND a.email='mail@mail.af'", "(QUERY (QUERY_SPEC (SELECT_FROM (FROM (PERSISTER_SPACE (ENTITY_PERSISTER_REF IndexedEntity e) (property-join INNER d (PATH (. e contactDetails))) (property-join INNER a (PATH (. e alternativeContactDetails))))) (SELECT (SELECT_LIST (SELECT_ITEM (PATH (. (. e author) name)))))) (WHERE (AND (= (PATH (. (. d address) postCode)) (CONST_STRING_VALUE EA123)) (= (PATH (. a email)) (CONST_STRING_VALUE mail@mail.af))))))"); } @Test public void testProjectionOnEmbeddedAndUnqualifiedProperties() { //generated alias: expectParserSuccess("SELECT name, text, e.author.name FROM IndexedEntity e JOIN e.contactDetails d", "(QUERY (QUERY_SPEC (SELECT_FROM (FROM (PERSISTER_SPACE (ENTITY_PERSISTER_REF IndexedEntity e) (property-join INNER d (PATH (. e contactDetails))))) (SELECT (SELECT_LIST (SELECT_ITEM (PATH name)) (SELECT_ITEM (PATH text)) (SELECT_ITEM (PATH (. (. e author) name))))))))"); } @Test public void testNamedParam() { expectParserSuccess("FROM IndexedEntity e where e.name = :nameParam", "(QUERY (QUERY_SPEC (SELECT_FROM (FROM (PERSISTER_SPACE (ENTITY_PERSISTER_REF IndexedEntity e))) (SELECT (SELECT_LIST (SELECT_ITEM e)))) (where (= (PATH (. e name)) nameParam))))"); } }