Github user dsmiley commented on a diff in the pull request:
https://github.com/apache/lucene-solr/pull/410#discussion_r197859682
--- Diff:
solr/core/src/java/org/apache/solr/update/processor/DeeplyNestedUpdateProcessor.java
---
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.solr.update.processor;
+
+import java.io.IOException;
+import java.util.Collection;
+import java.util.EnumSet;
+import java.util.Locale;
+import java.util.Objects;
+
+import org.apache.solr.common.SolrInputDocument;
+import org.apache.solr.common.SolrInputField;
+import org.apache.solr.request.SolrQueryRequest;
+import org.apache.solr.response.SolrQueryResponse;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.update.AddUpdateCommand;
+import static
org.apache.solr.update.processor.DeeplyNestedUpdateProcessorFactory.NestedFlag;
+
+public class DeeplyNestedUpdateProcessor extends UpdateRequestProcessor {
+ private EnumSet<NestedFlag> fields;
+ SolrQueryRequest req;
+
+
+ protected DeeplyNestedUpdateProcessor(SolrQueryRequest req,
SolrQueryResponse rsp, EnumSet<NestedFlag> fields, UpdateRequestProcessor next)
{
+ super(next);
+ this.req = req;
+ this.fields = fields;
+ }
+
+ @Override
+ public void processAdd(AddUpdateCommand cmd) throws IOException {
+ SolrInputDocument doc = cmd.getSolrInputDocument();
+ processDocChildren(doc, null);
+ super.processAdd(cmd);
+ }
+
+ private void processDocChildren(SolrInputDocument doc, String fullPath) {
+ for(SolrInputField field: doc.values()) {
+ if(field.getFirstValue() instanceof SolrInputDocument) {
+ Object val = field.getValue();
+ fullPath = Objects.isNull(fullPath) ? field.getName():
String.format(Locale.ROOT,"%s.%s", fullPath, field.getName());
--- End diff --
I can't say I'm a fan of String.format -- it usually is just a more verbose
& complex way to do trivial string concatenation. Granted String.format
_sometimes_ has value (e.g. formatting floating point); it isn't exercised here.
Shouldn't we throw a BAD_REQUEST exception if field.getName() contains the
character we're using to join ('.')?
There's an O(N^2) string concatenation here where N is the depth of the
tree but hopefully the docs won't be *that* nested to worry about this. We
could add a comment to at least acknowledge this.
---
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]