@@ -109,31 +109,6 @@ public Map<String, OpenSearchDataType> getFieldTypes() {
109109 return fieldTypes ;
110110 }
111111
112- private void mergeObjectAndArrayInsideMap (
113- Map <String , OpenSearchDataType > target , Map <String , OpenSearchDataType > source ) {
114- for (Map .Entry <String , OpenSearchDataType > entry : source .entrySet ()) {
115- String key = entry .getKey ();
116- OpenSearchDataType value = entry .getValue ();
117-
118- if (target .containsKey (key ) && checkWhetherToMerge (value , target .get (key ))) {
119- OpenSearchDataType merged = target .get (key );
120- mergeObjectAndArrayInsideMap (merged .getProperties (), value .getProperties ());
121- target .put (key , merged );
122- } else {
123- target .put (key , value );
124- }
125- }
126- }
127-
128- private Boolean checkWhetherToMerge (OpenSearchDataType first , OpenSearchDataType second ) {
129- if (first .getExprCoreType () == second .getExprCoreType ()
130- && (first .getExprCoreType () == ExprCoreType .STRUCT
131- || first .getExprCoreType () == ExprCoreType .ARRAY )) {
132- return true ;
133- }
134- return false ;
135- }
136-
137112 /**
138113 * Get the minimum of the max result windows of the indices.
139114 *
@@ -185,6 +160,46 @@ private String clusterName(Map<String, String> meta) {
185160 return meta .getOrDefault (META_CLUSTER_NAME , DEFAULT_TABLE_CAT );
186161 }
187162
163+ /**
164+ * The function accept two map and merge them. It will merge object/nested DataType if they're
165+ * under same key
166+ *
167+ * @param target The target map we will merge into
168+ * @param source The candidate map
169+ */
170+ private void mergeObjectAndArrayInsideMap (
171+ Map <String , OpenSearchDataType > target , Map <String , OpenSearchDataType > source ) {
172+ for (Map .Entry <String , OpenSearchDataType > entry : source .entrySet ()) {
173+ String key = entry .getKey ();
174+ OpenSearchDataType value = entry .getValue ();
175+
176+ if (target .containsKey (key ) && checkWhetherToMerge (value , target .get (key ))) {
177+ OpenSearchDataType merged = target .get (key );
178+ mergeObjectAndArrayInsideMap (merged .getProperties (), value .getProperties ());
179+ target .put (key , merged );
180+ } else {
181+ target .put (key , value );
182+ }
183+ }
184+ }
185+
186+ /**
187+ * The function check whether the two DataType need to be merged if they are under same key.
188+ * currently we only merge nested and object
189+ *
190+ * @param first the
191+ * @param second
192+ * @return
193+ */
194+ private Boolean checkWhetherToMerge (OpenSearchDataType first , OpenSearchDataType second ) {
195+ if (first .getExprCoreType () == second .getExprCoreType ()
196+ && (first .getExprCoreType () == ExprCoreType .STRUCT
197+ || first .getExprCoreType () == ExprCoreType .ARRAY )) {
198+ return true ;
199+ }
200+ return false ;
201+ }
202+
188203 @ Override
189204 public String toString () {
190205 return "OpenSearchDescribeIndexRequest{indexName='" + indexName + "\' }" ;
0 commit comments