Subject: [PATCH] ISPN-15753 Test aggregation query with index embedded --- Index: client/hotrod-client/src/test/java/org/infinispan/client/hotrod/query/embedded/RemoteEmbeddedPredicateTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/query/embedded/RemoteEmbeddedPredicateTest.java b/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/query/embedded/RemoteEmbeddedPredicateTest.java new file mode 100644 --- /dev/null (revision 32a48df0e41630a5e29a836d30edffce3e36993d) +++ b/client/hotrod-client/src/test/java/org/infinispan/client/hotrod/query/embedded/RemoteEmbeddedPredicateTest.java (revision 32a48df0e41630a5e29a836d30edffce3e36993d) @@ -0,0 +1,56 @@ +package org.infinispan.client.hotrod.query.embedded; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.infinispan.configuration.cache.IndexStorage.LOCAL_HEAP; + +import org.infinispan.client.hotrod.RemoteCache; +import org.infinispan.client.hotrod.test.SingleHotRodServerTest; +import org.infinispan.commons.api.query.Query; +import org.infinispan.commons.api.query.QueryResult; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.manager.EmbeddedCacheManager; +import org.infinispan.protostream.SerializationContextInitializer; +import org.infinispan.query.model.Team; +import org.infinispan.test.fwk.TestCacheManagerFactory; +import org.testng.annotations.Test; + +@Test(groups = "functional", testName = "org.infinispan.client.hotrod.query.embedded.RemoteEmbeddedPredicateTest") +public class RemoteEmbeddedPredicateTest extends SingleHotRodServerTest { + + @Override + protected EmbeddedCacheManager createCacheManager() throws Exception { + ConfigurationBuilder indexed = new ConfigurationBuilder(); + indexed.indexing().enable() + .storage(LOCAL_HEAP) + .addIndexedEntity("Team"); + return TestCacheManagerFactory.createServerModeCacheManager(indexed); + } + + @Override + protected SerializationContextInitializer contextInitializer() { + return Team.TeamSchema.INSTANCE; + } + + @Test + public void test() { + RemoteCache games = remoteCacheManager.getCache(); + Query query; + QueryResult result; + + query = games.query("from Team t where t.name = 'fax' and t.captain.nick = 'fabio' and t.players.nick is null"); + result = query.execute(); + assertThat(result.count().value()).isZero(); + + query = games.query("select t.name from Team t where t.name = 'fax' and t.captain.nick = 'mark' and t.players.nick is null"); + result = query.execute(); + assertThat(result.count().value()).isZero(); + + query = games.query("select count(t) from Team t where t.name = 'fax' and t.captain.nick = 'mark' and t.players.nick is null group by t.name"); + result = query.execute(); + assertThat(result.count().value()).isZero(); + + query = games.query("select count(t) from Team t where t.name = 'fax'"); + result = query.execute(); + assertThat(result.count().value()).isOne(); + } +} Index: query/src/test/java/org/infinispan/query/indexedembedded/EmbeddedPredicateTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/query/src/test/java/org/infinispan/query/indexedembedded/EmbeddedPredicateTest.java b/query/src/test/java/org/infinispan/query/indexedembedded/EmbeddedPredicateTest.java new file mode 100644 --- /dev/null (revision 32a48df0e41630a5e29a836d30edffce3e36993d) +++ b/query/src/test/java/org/infinispan/query/indexedembedded/EmbeddedPredicateTest.java (revision 32a48df0e41630a5e29a836d30edffce3e36993d) @@ -0,0 +1,35 @@ +package org.infinispan.query.indexedembedded; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.infinispan.configuration.cache.IndexStorage.LOCAL_HEAP; + +import java.util.List; + +import org.infinispan.commons.api.query.Query; +import org.infinispan.configuration.cache.ConfigurationBuilder; +import org.infinispan.manager.EmbeddedCacheManager; +import org.infinispan.query.model.Team; +import org.infinispan.test.SingleCacheManagerTest; +import org.infinispan.test.fwk.TestCacheManagerFactory; +import org.testng.annotations.Test; + +@Test(groups = "functional", testName = "query.indexedembedded.EmbeddedPredicateTest") +public class EmbeddedPredicateTest extends SingleCacheManagerTest { + + @Override + protected EmbeddedCacheManager createCacheManager() throws Exception { + ConfigurationBuilder indexed = new ConfigurationBuilder(); + indexed.indexing().enable() + .storage(LOCAL_HEAP) + .addIndexedEntity(Team.class); + + return TestCacheManagerFactory.createCacheManager(indexed); + } + + @Test + public void test() { + Query query = cache.query("from org.infinispan.query.model.Team t where t.name = 'fax' and t.captain.nick = 'mark' and t.players.nick is null"); + List hits = query.list(); + assertThat(hits).isEmpty(); + } +} Index: query/src/test/java/org/infinispan/query/model/Player.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/query/src/test/java/org/infinispan/query/model/Player.java b/query/src/test/java/org/infinispan/query/model/Player.java new file mode 100644 --- /dev/null (revision 32a48df0e41630a5e29a836d30edffce3e36993d) +++ b/query/src/test/java/org/infinispan/query/model/Player.java (revision 32a48df0e41630a5e29a836d30edffce3e36993d) @@ -0,0 +1,26 @@ +package org.infinispan.query.model; + +import org.infinispan.api.annotations.indexing.Basic; +import org.infinispan.protostream.annotations.ProtoFactory; +import org.infinispan.protostream.annotations.ProtoField; + +public class Player { + + private String nick; + + @ProtoFactory + public Player(String nick) { + this.nick = nick; + } + + @Basic + @ProtoField(value = 1, required = true) + public String getNick() { + return nick; + } + + @Override + public String toString() { + return nick; + } +} Index: query/src/test/java/org/infinispan/query/model/Team.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/query/src/test/java/org/infinispan/query/model/Team.java b/query/src/test/java/org/infinispan/query/model/Team.java new file mode 100644 --- /dev/null (revision 32a48df0e41630a5e29a836d30edffce3e36993d) +++ b/query/src/test/java/org/infinispan/query/model/Team.java (revision 32a48df0e41630a5e29a836d30edffce3e36993d) @@ -0,0 +1,55 @@ +package org.infinispan.query.model; + +import java.util.List; + +import org.infinispan.api.annotations.indexing.Basic; +import org.infinispan.api.annotations.indexing.Embedded; +import org.infinispan.api.annotations.indexing.Indexed; +import org.infinispan.api.annotations.indexing.option.Structure; +import org.infinispan.protostream.GeneratedSchema; +import org.infinispan.protostream.annotations.AutoProtoSchemaBuilder; +import org.infinispan.protostream.annotations.ProtoFactory; +import org.infinispan.protostream.annotations.ProtoField; + +@Indexed(index = "team") +public class Team { + + private String name; + private Player captain; + private List players; + + @ProtoFactory + public Team(String name, Player captain, List players) { + this.name = name; + this.captain = captain; + this.players = players; + } + + @Basic + @ProtoField(value = 1, required = true) + public String getName() { + return name; + } + + @Embedded(includeDepth = 2, structure = Structure.NESTED) + @ProtoField(value = 2) + public Player getCaptain() { + return captain; + } + + @Embedded(includeDepth = 2, structure = Structure.NESTED) + @ProtoField(value = 3) + public List getPlayers() { + return players; + } + + @Override + public String toString() { + return name; + } + + @AutoProtoSchemaBuilder(includeClasses = {Team.class, Player.class}, schemaFileName = "team.proto", schemaFilePath = "proto") + public interface TeamSchema extends GeneratedSchema { + TeamSchema INSTANCE = new TeamSchemaImpl(); + } +}