Search in sources :

Example 1 with Row

use of org.kie.api.runtime.rule.Row in project drools by kiegroup.

the class LiveQueriesBadResultTest method testAccessToNotExistingVariable.

@Test
public void testAccessToNotExistingVariable() {
    ViewChangedEventListener listener = new ViewChangedEventListener() {

        @Override
        public void rowUpdated(Row row) {
            updated.add(row.get("bad"));
        }

        @Override
        public void rowInserted(Row row) {
            inserted.add(row.get("bad"));
        }

        @Override
        public void rowDeleted(Row row) {
            deleted.add(row.get("bad"));
        }
    };
    final KieBase kieBase = KieBaseUtil.getKieBaseFromClasspathResources(getClass(), kieBaseTestConfiguration, "query.drl");
    KieSession ksession = kieBase.newKieSession();
    ksession.insert(new Person("Petr", 25));
    Assertions.assertThatThrownBy(() -> ksession.openLiveQuery("simple query with no parameters", new Object[] {}, listener)).isInstanceOf(RuntimeException.class).hasMessage("The identifier 'bad' does not exist as a bound variable for this query");
}
Also used : ViewChangedEventListener(org.kie.api.runtime.rule.ViewChangedEventListener) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Row(org.kie.api.runtime.rule.Row) Person(org.drools.testcoverage.common.model.Person) Test(org.junit.Test)

Example 2 with Row

use of org.kie.api.runtime.rule.Row in project drools by kiegroup.

the class IndexingTest method testFullFastIteratorResume.

@Test(timeout = 10000)
public void testFullFastIteratorResume() {
    final String drl = "package org.drools.compiler.test  \n" + "import " + Person.class.getCanonicalName() + "\n" + "query peeps( String $name, int $age ) \n" + "    not $p2 : Person( $name := name, age > $age ) \n" + "end\n";
    final KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("indexing-test", kieBaseTestConfiguration, drl);
    final StatefulKnowledgeSessionImpl wm = (StatefulKnowledgeSessionImpl) kbase.newKieSession();
    try {
        final List<ObjectTypeNode> nodes = ((RuleBase) kbase).getRete().getObjectTypeNodes();
        ObjectTypeNode node = null;
        for (final ObjectTypeNode n : nodes) {
            if (((ClassObjectType) n.getObjectType()).getClassType() == DroolsQuery.class) {
                node = n;
                break;
            }
        }
        assertNotNull(node);
        final AlphaNode alphanode = (AlphaNode) node.getObjectSinkPropagator().getSinks()[0];
        final LeftInputAdapterNode liaNode = (LeftInputAdapterNode) alphanode.getObjectSinkPropagator().getSinks()[0];
        final NotNode n = (NotNode) liaNode.getSinkPropagator().getSinks()[0];
        final DoubleNonIndexSkipBetaConstraints c = (DoubleNonIndexSkipBetaConstraints) n.getRawConstraints();
        assertTrue(c.isIndexed());
        final BetaMemory bm = (BetaMemory) wm.getNodeMemory(n);
        assertTrue(bm.getLeftTupleMemory() instanceof TupleIndexHashTable);
        assertTrue(bm.getRightTupleMemory() instanceof TupleIndexHashTable);
        wm.openLiveQuery("peeps", new Object[] { Variable.v, 99 }, new ViewChangedEventListener() {

            @Override
            public void rowInserted(final Row row) {
            }

            @Override
            public void rowDeleted(final Row row) {
            }

            @Override
            public void rowUpdated(final Row row) {
            }
        });
        Person p = new Person("x0", 100);
        wm.insert(p);
        for (int i = 1; i < 100; i++) {
            p = new Person("x" + i, 101);
            wm.insert(p);
            wm.fireAllRules();
        }
        final List<RightTuple> list = new ArrayList<>(100);
        FastIterator it = n.getRightIterator(bm.getRightTupleMemory());
        for (RightTuple rt = n.getFirstRightTuple(null, bm.getRightTupleMemory(), it); rt != null; rt = (RightTuple) it.next(rt)) {
            list.add(rt);
        }
        assertEquals(100, list.size());
        // check we can resume from each entry in the list above.
        for (int i = 0; i < 100; i++) {
            final RightTuple rightTuple = list.get(i);
            // resumes from the current rightTuple
            it = n.getRightIterator(bm.getRightTupleMemory(), rightTuple);
            int j = i + 1;
            for (RightTuple rt = (RightTuple) it.next(rightTuple); rt != null; rt = (RightTuple) it.next(rt)) {
                assertSame(list.get(j), rt);
                j++;
            }
        }
    } finally {
        wm.dispose();
    }
}
Also used : NotNode(org.drools.core.reteoo.NotNode) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) ArrayList(java.util.ArrayList) BetaMemory(org.drools.core.reteoo.BetaMemory) TupleIndexHashTable(org.drools.core.util.index.TupleIndexHashTable) AlphaNode(org.drools.core.reteoo.AlphaNode) RightTuple(org.drools.core.reteoo.RightTuple) DoubleNonIndexSkipBetaConstraints(org.drools.core.common.DoubleNonIndexSkipBetaConstraints) ViewChangedEventListener(org.kie.api.runtime.rule.ViewChangedEventListener) KieBase(org.kie.api.KieBase) StatefulKnowledgeSessionImpl(org.drools.kiesession.session.StatefulKnowledgeSessionImpl) Row(org.kie.api.runtime.rule.Row) FastIterator(org.drools.core.util.FastIterator) Person(org.drools.testcoverage.common.model.Person) LeftInputAdapterNode(org.drools.core.reteoo.LeftInputAdapterNode) Test(org.junit.Test)

Example 3 with Row

use of org.kie.api.runtime.rule.Row in project drools by kiegroup.

the class DroolsEventList method rowDeleted.

public void rowDeleted(Row row) {
    int index = this.data.indexOf(row);
    // create the change event
    updates.beginEvent();
    // do the actual remove
    Row removed = data.remove(index);
    updates.elementDeleted(index, removed);
    updates.commitEvent();
}
Also used : Row(org.kie.api.runtime.rule.Row)

Example 4 with Row

use of org.kie.api.runtime.rule.Row in project drools by kiegroup.

the class QueryTest method testOpenQueryNoParams.

@Test
public void testOpenQueryNoParams() throws Exception {
    // RHDM-717
    String str = "";
    str += "package org.drools.mvel.compiler.test  \n";
    str += "import org.drools.mvel.compiler.Cheese \n";
    str += "query cheeses \n";
    str += "    stilton : Cheese(type == 'stilton') \n";
    str += "    cheddar : Cheese(type == 'cheddar', price == stilton.price) \n";
    str += "end\n";
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, str);
    KieSession ksession = kbase.newKieSession();
    Cheese stilton1 = new Cheese("stilton", 1);
    Cheese cheddar1 = new Cheese("cheddar", 1);
    Cheese stilton2 = new Cheese("stilton", 2);
    Cheese cheddar2 = new Cheese("cheddar", 2);
    Cheese stilton3 = new Cheese("stilton", 3);
    Cheese cheddar3 = new Cheese("cheddar", 3);
    FactHandle s1Fh = ksession.insert(stilton1);
    ksession.insert(stilton2);
    ksession.insert(stilton3);
    ksession.insert(cheddar1);
    ksession.insert(cheddar2);
    FactHandle c3Fh = ksession.insert(cheddar3);
    final List<Object[]> updated = new ArrayList<Object[]>();
    final List<Object[]> removed = new ArrayList<Object[]>();
    final List<Object[]> added = new ArrayList<Object[]>();
    ViewChangedEventListener listener = new ViewChangedEventListener() {

        public void rowUpdated(Row row) {
            Object[] array = new Object[2];
            array[0] = row.get("stilton");
            array[1] = row.get("cheddar");
            updated.add(array);
        }

        public void rowDeleted(Row row) {
            Object[] array = new Object[2];
            array[0] = row.get("stilton");
            array[1] = row.get("cheddar");
            removed.add(array);
        }

        public void rowInserted(Row row) {
            Object[] array = new Object[2];
            array[0] = row.get("stilton");
            array[1] = row.get("cheddar");
            added.add(array);
        }
    };
    // Open the LiveQuery
    LiveQuery query = ksession.openLiveQuery("cheeses", null, listener);
    ksession.fireAllRules();
    // Assert that on opening we have three rows added
    assertEquals(3, added.size());
    assertEquals(0, removed.size());
    assertEquals(0, updated.size());
    // Do an update that causes a match to become untrue, thus triggering a removed
    cheddar3.setPrice(4);
    ksession.update(c3Fh, cheddar3);
    ksession.fireAllRules();
    assertEquals(3, added.size());
    assertEquals(1, removed.size());
    assertEquals(0, updated.size());
    // Now make that partial true again, and thus another added
    cheddar3.setPrice(3);
    ksession.update(c3Fh, cheddar3);
    ksession.fireAllRules();
    assertEquals(4, added.size());
    assertEquals(1, removed.size());
    assertEquals(0, updated.size());
    // check a standard update
    cheddar3.setOldPrice(0);
    ksession.update(c3Fh, cheddar3);
    ksession.fireAllRules();
    assertEquals(4, added.size());
    assertEquals(1, removed.size());
    assertEquals(1, updated.size());
    // Check a standard retract
    ksession.retract(s1Fh);
    ksession.fireAllRules();
    assertEquals(4, added.size());
    assertEquals(2, removed.size());
    assertEquals(1, updated.size());
    // Close the query, we should get removed events for each row
    query.close();
    ksession.fireAllRules();
    assertEquals(4, added.size());
    assertEquals(4, removed.size());
    assertEquals(1, updated.size());
    // Check that updates no longer have any impact.
    ksession.update(c3Fh, cheddar3);
    assertEquals(4, added.size());
    assertEquals(4, removed.size());
    assertEquals(1, updated.size());
}
Also used : ViewChangedEventListener(org.kie.api.runtime.rule.ViewChangedEventListener) InternalFactHandle(org.drools.core.common.InternalFactHandle) FactHandle(org.kie.api.runtime.rule.FactHandle) KieBase(org.kie.api.KieBase) ArrayList(java.util.ArrayList) KieSession(org.kie.api.runtime.KieSession) Cheese(org.drools.mvel.compiler.Cheese) DomainObject(org.drools.mvel.compiler.DomainObject) InsertedObject(org.drools.mvel.compiler.InsertedObject) Row(org.kie.api.runtime.rule.Row) QueryResultsRow(org.kie.api.runtime.rule.QueryResultsRow) LiveQuery(org.kie.api.runtime.rule.LiveQuery) Test(org.junit.Test)

Example 5 with Row

use of org.kie.api.runtime.rule.Row in project drools by kiegroup.

the class QueryTest method testQueryWithFrom.

@Test
public void testQueryWithFrom() {
    final String drl = "import org.drools.mvel.compiler.oopath.model.Thing;\n" + "query isContainedIn( Thing $x, Thing $y )\n" + "    $y := Thing() from $x.children\n" + "or\n" + "    ( $z := Thing() from $x.children and isContainedIn( $z, $y; ) )\n" + "end\n";
    final Thing smartphone = new Thing("smartphone");
    final List<String> itemList = Arrays.asList(new String[] { "display", "keyboard", "processor" });
    itemList.stream().map(item -> new Thing(item)).forEach((thing) -> smartphone.addChild(thing));
    KieBase kbase = KieBaseUtil.getKieBaseFromKieModuleFromDrl("test", kieBaseTestConfiguration, drl);
    KieSession ksession = kbase.newKieSession();
    ReteDumper.dumpRete(ksession);
    ksession.insert(smartphone);
    final QueryResults queryResults = ksession.getQueryResults("isContainedIn", new Object[] { smartphone, Variable.v });
    final List<String> resultList = StreamSupport.stream(queryResults.spliterator(), false).map(row -> ((Thing) row.get("$y")).getName()).collect(Collectors.toList());
    assertThat(resultList).as("Query does not contain all items").containsAll(itemList);
    ksession.dispose();
}
Also used : Arrays(java.util.Arrays) InternalFactHandle(org.drools.core.common.InternalFactHandle) Assertions.assertThat(org.assertj.core.api.Assertions.assertThat) Variable(org.kie.api.runtime.rule.Variable) DroolsQuery(org.drools.core.base.DroolsQuery) DomainObject(org.drools.mvel.compiler.DomainObject) Worker(org.drools.mvel.compiler.Worker) ByteArrayInputStream(java.io.ByteArrayInputStream) InsertedObject(org.drools.mvel.compiler.InsertedObject) QueryResults(org.kie.api.runtime.rule.QueryResults) Map(java.util.Map) Address(org.drools.mvel.compiler.Address) KieSession(org.kie.api.runtime.KieSession) Parameterized(org.junit.runners.Parameterized) QueryListenerOption(org.kie.api.runtime.conf.QueryListenerOption) FlatQueryResults(org.drools.core.runtime.rule.impl.FlatQueryResults) Collection(java.util.Collection) ReteDumper(org.drools.core.reteoo.ReteDumper) Set(java.util.Set) Row(org.kie.api.runtime.rule.Row) Thing(org.drools.mvel.compiler.oopath.model.Thing) Collectors(java.util.stream.Collectors) QueryResultsImpl(org.drools.core.QueryResultsImpl) List(java.util.List) ObjectTypeNodeMemory(org.drools.core.reteoo.ObjectTypeNode.ObjectTypeNodeMemory) Cheese(org.drools.mvel.compiler.Cheese) Assert.assertFalse(org.junit.Assert.assertFalse) KieBaseUtil(org.drools.testcoverage.common.util.KieBaseUtil) Person(org.drools.mvel.compiler.Person) QueryResultsRow(org.kie.api.runtime.rule.QueryResultsRow) ClassObjectType(org.drools.core.base.ClassObjectType) ObjectType(org.drools.core.spi.ObjectType) RunWith(org.junit.runner.RunWith) StatefulKnowledgeSessionImpl(org.drools.kiesession.session.StatefulKnowledgeSessionImpl) KieBaseTestConfiguration(org.drools.testcoverage.common.util.KieBaseTestConfiguration) TreeSet(java.util.TreeSet) ArrayList(java.util.ArrayList) HashSet(java.util.HashSet) Assert.assertSame(org.junit.Assert.assertSame) Charset(java.nio.charset.Charset) TestName(org.junit.rules.TestName) Assert.assertArrayEquals(org.junit.Assert.assertArrayEquals) Message(org.kie.api.builder.Message) StreamSupport(java.util.stream.StreamSupport) EntryPointNode(org.drools.core.reteoo.EntryPointNode) TestParametersUtil(org.drools.testcoverage.common.util.TestParametersUtil) KieBase(org.kie.api.KieBase) JAXBContext(javax.xml.bind.JAXBContext) Before(org.junit.Before) ViewChangedEventListener(org.kie.api.runtime.rule.ViewChangedEventListener) KieBuilder(org.kie.api.builder.KieBuilder) Iterator(java.util.Iterator) Assert.assertNotNull(org.junit.Assert.assertNotNull) StringWriter(java.io.StringWriter) LiveQuery(org.kie.api.runtime.rule.LiveQuery) Assert.assertTrue(org.junit.Assert.assertTrue) IOException(java.io.IOException) Test(org.junit.Test) Interval(org.drools.mvel.compiler.Interval) FactHandle(org.kie.api.runtime.rule.FactHandle) KieUtil(org.drools.testcoverage.common.util.KieUtil) ObjectTypeNode(org.drools.core.reteoo.ObjectTypeNode) Assert.assertEquals(org.junit.Assert.assertEquals) KieBase(org.kie.api.KieBase) KieSession(org.kie.api.runtime.KieSession) Thing(org.drools.mvel.compiler.oopath.model.Thing) QueryResults(org.kie.api.runtime.rule.QueryResults) FlatQueryResults(org.drools.core.runtime.rule.impl.FlatQueryResults) Test(org.junit.Test)

Aggregations

Row (org.kie.api.runtime.rule.Row)14 Test (org.junit.Test)12 KieBase (org.kie.api.KieBase)11 KieSession (org.kie.api.runtime.KieSession)10 ViewChangedEventListener (org.kie.api.runtime.rule.ViewChangedEventListener)10 FactHandle (org.kie.api.runtime.rule.FactHandle)7 LiveQuery (org.kie.api.runtime.rule.LiveQuery)7 ArrayList (java.util.ArrayList)6 InternalFactHandle (org.drools.core.common.InternalFactHandle)6 Person (org.drools.testcoverage.common.model.Person)5 QueryResultsRow (org.kie.api.runtime.rule.QueryResultsRow)5 ObjectTypeNode (org.drools.core.reteoo.ObjectTypeNode)4 Cheese (org.drools.mvel.compiler.Cheese)4 BetaMemory (org.drools.core.reteoo.BetaMemory)3 StatefulKnowledgeSessionImpl (org.drools.kiesession.session.StatefulKnowledgeSessionImpl)3 DomainObject (org.drools.mvel.compiler.DomainObject)3 InsertedObject (org.drools.mvel.compiler.InsertedObject)3 SortedList (ca.odell.glazedlists.SortedList)2 Collection (java.util.Collection)2 HashMap (java.util.HashMap)2