Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion libs/commcare
3 changes: 3 additions & 0 deletions src/main/java/engine/FormplayerCaseInstanceTreeElement.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import database.models.FormplayerCaseIndexTable;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.commcare.cases.query.handlers.LogicalValueIndexHandler;
import org.commcare.modern.engine.cases.CaseIndexQuerySetTransform;
import org.commcare.modern.engine.cases.query.CaseIndexPrefetchHandler;
import sandbox.SqlHelper;
Expand Down Expand Up @@ -58,6 +59,8 @@ protected void initBasicQueryHandlers(QueryPlanner queryPlanner) {
CaseModelQuerySetMatcher matcher = new CaseModelQuerySetMatcher(multiplicityIdMapping);
matcher.addQuerySetTransform(new CaseIndexQuerySetTransform(formplayerCaseIndexTable));
queryPlanner.addQueryHandler(new ModelQueryLookupHandler(matcher));

queryPlanner.addQueryHandler(new LogicalValueIndexHandler(this.getStorageIndexMap(), this.getStorage()));
}

@Override
Expand Down
24 changes: 15 additions & 9 deletions src/test/java/tests/CaseDbOptimizationsTest.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package tests;

import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.trace.ReducingTraceReporter;
import org.javarosa.core.model.utils.InstrumentationUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
Expand Down Expand Up @@ -38,14 +40,18 @@ public void testDbOptimizations() throws Exception {
UserSqlSandbox sandbox = restoreFactoryMock.getSqlSandbox();
EvaluationContext ec = TestStorageUtils.getEvaluationContextWithoutSession(sandbox);
ec.setDebugModeOn();
evaluate("join(',',instance('casedb')/casedb/case[index/parent = 'test_case_parent']/@case_id)", "child_one,child_two,child_three", ec);
evaluate("join(',',instance('casedb')/casedb/case[index/parent = 'test_case_parent'][@case_id = 'child_two']/@case_id)", "child_two", ec);
evaluate("join(',',instance('casedb')/casedb/case[index/parent = 'test_case_parent'][@case_id != 'child_two']/@case_id)", "child_one,child_three", ec);

evaluate("join(',',instance('casedb')/casedb/case[selected('test_case_parent', index/parent)]/@case_id)", "child_one,child_two,child_three", ec);
evaluate("join(',',instance('casedb')/casedb/case[selected('test_case_parent test_case_parent_2', index/parent)]/@case_id)", "child_one,child_two,child_three", ec);
evaluate("join(',',instance('casedb')/casedb/case[selected('test_case_parent_2 test_case_parent', index/parent)]/@case_id)", "child_one,child_two,child_three", ec);
evaluate("join(',',instance('casedb')/casedb/case[selected('test_case_parent_2 test_case_parent_3', index/parent)]/@case_id)", "", ec);
evaluate("join(',',instance('casedb')/casedb/case[selected('', index/parent)]/@case_id)", "", ec);
evaluate("sort(join(' ',instance('casedb')/casedb/case[index/parent = 'test_case_parent']/@case_id))", "child_one child_three child_two", ec);
evaluate("sort(join(',',instance('casedb')/casedb/case[index/parent = 'test_case_parent'][@case_id = 'child_two']/@case_id))", "child_two", ec);
evaluate("sort(join(' ',instance('casedb')/casedb/case[index/parent = 'test_case_parent'][@case_id != 'child_two']/@case_id))", "child_one child_three", ec);

evaluate("sort(join(' ',instance('casedb')/casedb/case[selected('test_case_parent', index/parent)]/@case_id))", "child_one child_three child_two", ec);
evaluate("sort(join(' ',instance('casedb')/casedb/case[selected('test_case_parent test_case_parent_2', index/parent)]/@case_id))", "child_one child_three child_two", ec);
evaluate("sort(join(' ',instance('casedb')/casedb/case[selected('test_case_parent_2 test_case_parent', index/parent)]/@case_id))", "child_one child_three child_two", ec);
evaluate("join(' ',instance('casedb')/casedb/case[selected('test_case_parent_2 test_case_parent_3', index/parent)]/@case_id)", "", ec);
evaluate("join(' ',instance('casedb')/casedb/case[selected('', index/parent)]/@case_id)", "", ec);

evaluate("sort(join(' ', instance('casedb')/casedb/case[@case_id='child_one' or @case_id='child_two']/case_name))", "One Two", ec);

evaluate("sort(join(' ', instance('casedb')/casedb/case[@owner_id='test_user_id' and @external_id='three']/@case_id))", "child_three", ec);
}
}
13 changes: 11 additions & 2 deletions src/test/resources/restores/dbtests/case_test_db_optimizations.xml
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,12 @@
user_id="test_user_id" xmlns="http://commcarehq.org/case/transaction/v2">
<create>
<case_type>unit_test_child</case_type>
<case_name>Test Case</case_name>
<case_name>One</case_name>
<owner_id>test_user_id</owner_id>
</create>
<update>
<external_id>one</external_id>
</update>
<index>
<parent case_type="unit_test_parent">test_case_parent</parent>
</index>
Expand All @@ -31,9 +34,12 @@
user_id="test_user_id" xmlns="http://commcarehq.org/case/transaction/v2">
<create>
<case_type>unit_test_child</case_type>
<case_name>Test Case</case_name>
<case_name>Two</case_name>
<owner_id>test_user_id</owner_id>
</create>
<update>
<external_id>two</external_id>
</update>
<index>
<parent case_type="unit_test_parent">test_case_parent</parent>
</index>
Expand All @@ -45,6 +51,9 @@
<case_name>Test Case</case_name>
<owner_id>test_user_id</owner_id>
</create>
<update>
<external_id>three</external_id>
</update>
<index>
<parent case_type="unit_test_parent">test_case_parent</parent>
</index>
Expand Down