You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by re...@apache.org on 2023/07/11 14:45:29 UTC

svn commit: r1910939 - in /jackrabbit/trunk: jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java jackrabbit-parent/pom.xml

Author: reschke
Date: Tue Jul 11 14:45:28 2023
New Revision: 1910939

URL: http://svn.apache.org/viewvc?rev=1910939&view=rev
Log:
JCR-4352: Update lucene-core dependency to 3.6.2

Modified:
    jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
    jackrabbit/trunk/jackrabbit-parent/pom.xml

Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java?rev=1910939&r1=1910938&r2=1910939&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/PredicateDerefQuery.java Tue Jul 11 14:45:28 2023
@@ -74,6 +74,11 @@ public class PredicateDerefQuery extends
      * The scorer of the name test query
      */
     private Scorer nameTestScorer;
+
+    /**
+     *  Flag indicating if the children have already been calculated
+     */
+    private boolean childrenCalculated = false;
     /**
      * Creates a new <code>DerefQuery</code> based on a <code>context</code>
      * query.
@@ -203,6 +208,7 @@ public class PredicateDerefQuery extends
         public Scorer scorer(IndexReader reader, boolean scoreDocsInOrder,
                 boolean topScorer) throws IOException {
             subQueryScorer = subQuery.weight(searcher).scorer(reader, scoreDocsInOrder, false);
+            childrenCalculated = false;
             if (nameTest != null) {
                 nameTestScorer = new NameQuery(nameTest, version, nsMappings).weight(searcher).scorer(reader, scoreDocsInOrder, false);
             }
@@ -311,58 +317,62 @@ public class PredicateDerefQuery extends
          * @throws IOException
          */
         private void calculateChildren() throws IOException {
+
+            if (!childrenCalculated) {
 //                subQueryHits.clear();
 //                hits.clear();
-            subQueryScorer.score(new AbstractHitCollector() {
-                @Override
-                protected void collect(int doc, float score) {
-                    subQueryHits.set(doc);
-                }
-            });
+                subQueryScorer.score(new AbstractHitCollector() {
+                    @Override
+                    protected void collect(int doc, float score) {
+                        subQueryHits.set(doc);
+                    }
+                });
 
-            TermDocs termDocs = reader.termDocs(new Term(FieldNames.PROPERTIES_SET, refProperty));
-            String prefix = FieldNames.createNamedValue(refProperty, "");
-            while (termDocs.next()) {
-                int doc = termDocs.doc();
-
-                String[] values = reader.document(doc).getValues(FieldNames.PROPERTIES);
-                if (values == null) {
-                    // no reference properties at all on this node
-                    continue;
-                }
-                for (int v = 0; v < values.length; v++) {
-                    if (values[v].startsWith(prefix)) {
-                        String uuid = values[v].substring(prefix.length());
-
-                        TermDocs node = reader.termDocs(TermFactory.createUUIDTerm(uuid));
-                        try {
-                            while (node.next()) {
-                                if (subQueryHits.get(node.doc())) {
-                                    hits.set(doc);
+                TermDocs termDocs = reader.termDocs(new Term(FieldNames.PROPERTIES_SET, refProperty));
+                String prefix = FieldNames.createNamedValue(refProperty, "");
+                while (termDocs.next()) {
+                    int doc = termDocs.doc();
+
+                    String[] values = reader.document(doc).getValues(FieldNames.PROPERTIES);
+                    if (values == null) {
+                        // no reference properties at all on this node
+                        continue;
+                    }
+                    for (int v = 0; v < values.length; v++) {
+                        if (values[v].startsWith(prefix)) {
+                            String uuid = values[v].substring(prefix.length());
+
+                            TermDocs node = reader.termDocs(TermFactory.createUUIDTerm(uuid));
+                            try {
+                                while (node.next()) {
+                                    if (subQueryHits.get(node.doc())) {
+                                        hits.set(doc);
+                                    }
                                 }
+                            } finally {
+                                node.close();
                             }
-                        } finally {
-                            node.close();
                         }
                     }
                 }
-            }
 
-            // collect nameTest hits
-            final BitSet nameTestHits = new BitSet();
-            if (nameTestScorer != null) {
-                nameTestScorer.score(new AbstractHitCollector() {
-                    @Override
-                    protected void collect(int doc, float score) {
-                        nameTestHits.set(doc);
-                    }
-                });
-            }
+                // collect nameTest hits
+                final BitSet nameTestHits = new BitSet();
+                if (nameTestScorer != null) {
+                    nameTestScorer.score(new AbstractHitCollector() {
+                        @Override
+                        protected void collect(int doc, float score) {
+                            nameTestHits.set(doc);
+                        }
+                    });
+                }
 
-            // filter out the target nodes that do not match the name test
-            // if there is any name test at all.
-            if (nameTestScorer != null) {
-                hits.and(nameTestHits);
+                // filter out the target nodes that do not match the name test
+                // if there is any name test at all.
+                if (nameTestScorer != null) {
+                    hits.and(nameTestHits);
+                }
+                childrenCalculated = true;
             }
         }
     }

Modified: jackrabbit/trunk/jackrabbit-parent/pom.xml
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-parent/pom.xml?rev=1910939&r1=1910938&r2=1910939&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-parent/pom.xml (original)
+++ jackrabbit/trunk/jackrabbit-parent/pom.xml Tue Jul 11 14:45:28 2023
@@ -499,7 +499,7 @@
       <dependency>
         <groupId>org.apache.lucene</groupId>
         <artifactId>lucene-core</artifactId>
-        <version>3.6.0</version>
+        <version>3.6.2</version>
       </dependency>
       <dependency>
         <groupId>org.apache.tika</groupId>