diff --git a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml
index bd852ab831..a75d3b942d 100644
--- a/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml
+++ b/config/alfresco/ibatis/org.hibernate.dialect.Dialect/solr-common-SqlMap.xml
@@ -134,7 +134,7 @@
= #{fromTxnId} and txn.id <= #{toTxnId}]]>
-
+
diff --git a/source/test-java/org/alfresco/repo/domain/solr/SOLRDAOTest.java b/source/test-java/org/alfresco/repo/domain/solr/SOLRDAOTest.java
index c2a1ed85af..2cba887de9 100644
--- a/source/test-java/org/alfresco/repo/domain/solr/SOLRDAOTest.java
+++ b/source/test-java/org/alfresco/repo/domain/solr/SOLRDAOTest.java
@@ -29,6 +29,7 @@ import junit.framework.TestCase;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.domain.node.Node;
+import org.alfresco.repo.domain.node.NodeDAO;
import org.alfresco.repo.domain.permissions.AclDAO;
import org.alfresco.repo.security.authentication.AuthenticationComponent;
import org.alfresco.repo.security.permissions.ACLType;
@@ -43,6 +44,8 @@ import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.security.MutableAuthenticationService;
import org.alfresco.service.cmr.security.PersonService;
+import org.alfresco.service.namespace.NamespaceService;
+import org.alfresco.service.namespace.QName;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.test_category.OwnJVMTestsCategory;
import org.alfresco.util.ApplicationContextHelper;
@@ -67,11 +70,13 @@ public class SOLRDAOTest extends TestCase
private NodeService nodeService;
private AclDAO aclDaoComponent;
private SOLRDAO solrDAO;
+ private NodeDAO nodeDAO;
@Override
public void setUp() throws Exception
{
solrDAO = (SOLRDAO)ctx.getBean("solrDAO");
+ nodeDAO = (NodeDAO)ctx.getBean("nodeDAO");
authenticationComponent = (AuthenticationComponent)ctx.getBean("authenticationComponent");
authenticationService = (MutableAuthenticationService)ctx.getBean("authenticationService");
@@ -455,4 +460,64 @@ public class SOLRDAOTest extends TestCase
});
}
}
+
+ /**
+ * MNT-12798
+ */
+ public void testGetNodesFromTxnId()
+ {
+ final StoreRef storeRef = nodeService.createStore(StoreRef.PROTOCOL_WORKSPACE, "Test_" + System.nanoTime());
+
+ try
+ {
+ RetryingTransactionCallback createNodeWork1 = new RetryingTransactionCallback()
+ {
+ @Override
+ public Long execute() throws Throwable
+ {
+ createTestNode(nodeService.getRootNode(storeRef));
+ return nodeDAO.getCurrentTransactionId(true);
+ }
+ };
+
+ RetryingTransactionCallback createNodeWork2 = new RetryingTransactionCallback()
+ {
+ @Override
+ public Long execute() throws Throwable
+ {
+ createTestNode(nodeService.getRootNode(storeRef));
+ return nodeDAO.getCurrentTransactionId(true);
+ }
+ };
+
+ Long txnId1 = transactionService.getRetryingTransactionHelper().doInTransaction(createNodeWork1);
+ Long txnId2 = transactionService.getRetryingTransactionHelper().doInTransaction(createNodeWork2);
+
+ NodeParameters nodeParameters = new NodeParameters();
+ nodeParameters.setFromTxnId(txnId1);
+ nodeParameters.setToTxnId(null);
+ List nodes1 = getNodes(nodeParameters);
+ assertTrue("Expect 'some' nodes associated with txns", nodes1.size() > 0);
+
+ NodeParameters nodeParameters2 = new NodeParameters();
+ nodeParameters2.setFromTxnId(txnId2);
+ nodeParameters2.setToTxnId(null);
+ List nodes2 = getNodes(nodeParameters2);
+
+ assertTrue("Higher 'fromTxnId' param should yield fewer results", nodes2.size() < nodes1.size());
+ }
+ finally
+ {
+ nodeService.deleteStore(storeRef);
+ }
+ }
+
+ private NodeRef createTestNode(NodeRef parent)
+ {
+ NodeRef nodeRef = nodeService.createNode(parent,
+ ContentModel.ASSOC_CHILDREN,
+ QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, this.getClass().getName()),
+ ContentModel.TYPE_CONTAINER).getChildRef();
+ return nodeRef;
+ }
}