This is an automated email from the ASF dual-hosted git repository.

volodymyr pushed a commit to branch mongo
in repository https://gitbox.apache.org/repos/asf/drill.git

commit 7ea77fd6e49cb2602566c836d885345319207e28
Author: Volodymyr Vysotskyi <[email protected]>
AuthorDate: Thu Aug 5 19:56:54 2021 +0300

    Rename and cleanup
---
 .../drill/exec/store/mongo/MongoStoragePlugin.java |  65 ++++---
 .../drill/exec/store/PlannableStoragePlugin.java   | 201 ---------------------
 .../exec/store/StoragePluginRulesSupplier.java     | 167 +++++++++++++++++
 3 files changed, 209 insertions(+), 224 deletions(-)

diff --git 
a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoStoragePlugin.java
 
b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoStoragePlugin.java
index df0588d..52531c0 100644
--- 
a/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoStoragePlugin.java
+++ 
b/contrib/storage-mongo/src/main/java/org/apache/drill/exec/store/mongo/MongoStoragePlugin.java
@@ -21,26 +21,29 @@ import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.mongodb.ConnectionString;
 import com.mongodb.MongoClientSettings;
+import com.mongodb.client.MongoClient;
 import com.mongodb.MongoCredential;
 import com.mongodb.ServerAddress;
-import com.mongodb.client.MongoClient;
 import com.mongodb.client.MongoClients;
 import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptRule;
 import org.apache.calcite.schema.SchemaPlus;
 import org.apache.drill.common.JSONOptions;
 import org.apache.drill.common.exceptions.DrillRuntimeException;
-import org.apache.drill.common.logical.security.CredentialsProvider;
-import org.apache.drill.common.logical.security.PlainCredentialsProvider;
+import org.apache.drill.exec.ops.OptimizerRulesContext;
 import org.apache.drill.exec.physical.base.AbstractGroupScan;
+import org.apache.drill.exec.planner.PlannerPhase;
 import org.apache.drill.exec.server.DrillbitContext;
-import org.apache.drill.exec.store.PlannableStoragePlugin;
+import org.apache.drill.exec.store.AbstractStoragePlugin;
+import org.apache.drill.exec.store.PluginRulesProviderImpl;
 import org.apache.drill.exec.store.SchemaConfig;
-import org.apache.drill.exec.store.StoragePlugin;
+import org.apache.drill.exec.store.StoragePluginRulesSupplier;
 import org.apache.drill.exec.store.mongo.plan.MongoPluginImplementor;
-import org.apache.drill.exec.store.PluginRulesProviderImpl;
 import org.apache.drill.exec.store.mongo.schema.MongoSchemaFactory;
+import org.apache.drill.common.logical.security.CredentialsProvider;
 import org.apache.drill.exec.store.plan.rel.PluginRel;
 import org.apache.drill.exec.store.security.HadoopCredentialsProvider;
+import org.apache.drill.common.logical.security.PlainCredentialsProvider;
 import org.apache.drill.exec.store.security.UsernamePasswordCredentials;
 import org.apache.drill.shaded.guava.com.google.common.cache.Cache;
 import org.apache.drill.shaded.guava.com.google.common.cache.CacheBuilder;
@@ -53,23 +56,26 @@ import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
 import java.net.URLEncoder;
+import java.util.Collections;
 import java.util.List;
+import java.util.Set;
 import java.util.concurrent.ExecutionException;
 import java.util.concurrent.TimeUnit;
 
-public class MongoStoragePlugin extends PlannableStoragePlugin implements 
StoragePlugin {
+public class MongoStoragePlugin extends AbstractStoragePlugin {
   private static final Logger logger = 
LoggerFactory.getLogger(MongoStoragePlugin.class);
 
   private final MongoStoragePluginConfig mongoConfig;
   private final MongoSchemaFactory schemaFactory;
   private final Cache<MongoCnxnKey, MongoClient> addressClientMap;
   private final ConnectionString clientURI;
+  private final StoragePluginRulesSupplier storagePluginRulesSupplier;
 
   public MongoStoragePlugin(
       MongoStoragePluginConfig mongoConfig,
       DrillbitContext context,
       String name) {
-    super(mongoStoragePluginBuilder(name).context(context));
+    super(context, name);
     this.mongoConfig = mongoConfig;
     String connection = 
addCredentialsFromCredentialsProvider(this.mongoConfig.getConnection(), name);
     this.clientURI = new ConnectionString(connection);
@@ -78,20 +84,21 @@ public class MongoStoragePlugin extends 
PlannableStoragePlugin implements Storag
         .removalListener(new AddressCloser())
         .build();
     this.schemaFactory = new MongoSchemaFactory(this, name);
+    this.storagePluginRulesSupplier = storagePluginRulesSupplier(name);
   }
 
-  private static MongoStoragePluginConfigs mongoStoragePluginBuilder(String 
name) {
+  private static StoragePluginRulesSupplier storagePluginRulesSupplier(String 
name) {
     Convention convention = new Convention.Impl("MONGO." + name, 
PluginRel.class);
-    return new MongoStoragePluginConfigs()
-        .rulesProvider(new PluginRulesProviderImpl(convention, 
MongoPluginImplementor::new))
-        .supportsProjectPushdown(true)
-        .supportsSortPushdown(true)
-        .supportsAggregatePushdown(true)
-        .supportsFilterPushdown(true)
-        .supportsLimitPushdown(true)
-        .supportsUnionPushdown(true)
-        .convention(convention)
-        .name(name);
+    return StoragePluginRulesSupplier.builder()
+      .rulesProvider(new PluginRulesProviderImpl(convention, 
MongoPluginImplementor::new))
+      .supportsProjectPushdown(true)
+      .supportsSortPushdown(true)
+      .supportsAggregatePushdown(true)
+      .supportsFilterPushdown(true)
+      .supportsLimitPushdown(true)
+      .supportsUnionPushdown(true)
+      .convention(convention)
+      .build();
   }
 
   private String addCredentialsFromCredentialsProvider(String connection, 
String name) {
@@ -150,13 +157,25 @@ public class MongoStoragePlugin extends 
PlannableStoragePlugin implements Storag
     return new MongoGroupScan(userName, this, mongoScanSpec, null, false);
   }
 
-  private static class MongoStoragePluginConfigs extends 
PlannableStoragePluginConfigs<MongoStoragePluginConfigs> {
-    @Override
-    public MongoStoragePluginConfigs self() {
-      return this;
+  @Override
+  public Set<? extends RelOptRule> getOptimizerRules(OptimizerRulesContext 
optimizerContext, PlannerPhase phase) {
+    switch (phase) {
+      case PHYSICAL:
+      case LOGICAL:
+        return storagePluginRulesSupplier.getOptimizerRules();
+      case LOGICAL_PRUNE_AND_JOIN:
+      case LOGICAL_PRUNE:
+      case PARTITION_PRUNING:
+      case JOIN_PLANNING:
+      default:
+        return Collections.emptySet();
     }
   }
 
+  public Convention convention() {
+    return storagePluginRulesSupplier.convention();
+  }
+
   private static class AddressCloser implements
     RemovalListener<MongoCnxnKey, MongoClient> {
     @Override
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/PlannableStoragePlugin.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/PlannableStoragePlugin.java
deleted file mode 100644
index 7219921..0000000
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/PlannableStoragePlugin.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- * 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.drill.exec.store;
-
-import org.apache.calcite.plan.Convention;
-import org.apache.calcite.plan.RelOptRule;
-import org.apache.drill.exec.ops.OptimizerRulesContext;
-import org.apache.drill.exec.planner.PlannerPhase;
-import org.apache.drill.exec.server.DrillbitContext;
-import org.apache.drill.shaded.guava.com.google.common.collect.ImmutableSet;
-
-import java.util.Collections;
-import java.util.Set;
-
-/**
- * Abstract class for StorePlugin implementations.
- * See StoragePlugin for description of the interface intent and its methods.
- */
-public abstract class PlannableStoragePlugin extends AbstractStoragePlugin {
-
-  private final PlannableStoragePluginConfigs<?> plannableStoragePluginConfigs;
-
-  protected PlannableStoragePlugin(PlannableStoragePluginConfigs<? extends 
PlannableStoragePluginConfigs<?>> plannableStoragePluginConfigs) {
-    super(plannableStoragePluginConfigs.context(), 
plannableStoragePluginConfigs.name());
-    this.plannableStoragePluginConfigs = plannableStoragePluginConfigs;
-  }
-
-  @Override
-  public Set<? extends RelOptRule> getOptimizerRules(OptimizerRulesContext 
optimizerContext, PlannerPhase phase) {
-    switch (phase) {
-      case PHYSICAL:
-      case LOGICAL:
-        ImmutableSet.Builder<RelOptRule> builder = ImmutableSet.builder();
-        PluginRulesProvider rulesProvider = 
plannableStoragePluginConfigs.rulesProvider;
-        if (plannableStoragePluginConfigs.supportsProjectPushdown) {
-          builder.addAll(rulesProvider.projectRules());
-        }
-        if (plannableStoragePluginConfigs.supportsFilterPushdown) {
-          builder.addAll(rulesProvider.filterRules());
-        }
-        if (plannableStoragePluginConfigs.supportsSortPushdown) {
-          builder.addAll(rulesProvider.sortRules());
-        }
-        if (plannableStoragePluginConfigs.supportsUnionPushdown) {
-          builder.addAll(rulesProvider.unionRules());
-        }
-        if (plannableStoragePluginConfigs.supportsJoinPushdown) {
-          builder.addAll(rulesProvider.joinRules());
-        }
-        if (plannableStoragePluginConfigs.supportsAggregatePushdown) {
-          builder.addAll(rulesProvider.aggregateRules());
-        }
-        if (plannableStoragePluginConfigs.supportsLimitPushdown) {
-          builder.addAll(rulesProvider.limitRules());
-        }
-        builder.add(rulesProvider.vertexRule());
-        builder.add(rulesProvider.prelConverterRule());
-        return builder.build();
-      case LOGICAL_PRUNE_AND_JOIN:
-      case LOGICAL_PRUNE:
-      case PARTITION_PRUNING:
-      case JOIN_PLANNING:
-      default:
-        return Collections.emptySet();
-    }
-  }
-
-  public Convention convention() {
-    return plannableStoragePluginConfigs.convention();
-  }
-
-  public static abstract class PlannableStoragePluginConfigs<T extends 
PlannableStoragePluginConfigs<?>> {
-    private DrillbitContext context;
-    private String name;
-    private boolean supportsProjectPushdown;
-    private boolean supportsFilterPushdown;
-    private boolean supportsAggregatePushdown;
-    private boolean supportsSortPushdown;
-    private boolean supportsUnionPushdown;
-    private boolean supportsJoinPushdown;
-    private boolean supportsLimitPushdown;
-    private PluginRulesProvider rulesProvider;
-    private Convention convention;
-
-    public abstract T self();
-
-    public DrillbitContext context() {
-      return context;
-    }
-
-    public T context(DrillbitContext inContext) {
-      this.context = inContext;
-      return self();
-    }
-
-    public String name() {
-      return name;
-    }
-
-    public T name(String inName) {
-      this.name = inName;
-      return self();
-    }
-
-    public boolean supportsProjectPushdown() {
-      return supportsProjectPushdown;
-    }
-
-    public T supportsProjectPushdown(boolean supportsProjectPushdown) {
-      this.supportsProjectPushdown = supportsProjectPushdown;
-      return self();
-    }
-
-    public boolean supportsFilterPushdown() {
-      return supportsFilterPushdown;
-    }
-
-    public T supportsFilterPushdown(boolean supportsFilterPushdown) {
-      this.supportsFilterPushdown = supportsFilterPushdown;
-      return self();
-    }
-
-    public boolean supportsAggregatePushdown() {
-      return supportsAggregatePushdown;
-    }
-
-    public T supportsAggregatePushdown(boolean supportsAggregatePushdown) {
-      this.supportsAggregatePushdown = supportsAggregatePushdown;
-      return self();
-    }
-
-    public boolean supportsSortPushdown() {
-      return supportsSortPushdown;
-    }
-
-    public T supportsSortPushdown(boolean supportsSortPushdown) {
-      this.supportsSortPushdown = supportsSortPushdown;
-      return self();
-    }
-
-    public boolean supportsUnionPushdown() {
-      return supportsUnionPushdown;
-    }
-
-    public T supportsUnionPushdown(boolean supportsUnionPushdown) {
-      this.supportsUnionPushdown = supportsUnionPushdown;
-      return self();
-    }
-
-    public boolean supportsJoinPushdown() {
-      return supportsJoinPushdown;
-    }
-
-    public T supportsJoinPushdown(boolean supportsJoinPushdown) {
-      this.supportsJoinPushdown = supportsJoinPushdown;
-      return self();
-    }
-
-    public boolean supportsLimitPushdown() {
-      return supportsLimitPushdown;
-    }
-
-    public PlannableStoragePluginConfigs<T> supportsLimitPushdown(boolean 
supportsLimitPushdown) {
-      this.supportsLimitPushdown = supportsLimitPushdown;
-      return this;
-    }
-
-    public PluginRulesProvider rulesProvider() {
-      return rulesProvider;
-    }
-
-    public T rulesProvider(PluginRulesProvider rulesProvider) {
-      this.rulesProvider = rulesProvider;
-      return self();
-    }
-
-    public Convention convention() {
-      return convention;
-    }
-
-    public PlannableStoragePluginConfigs<T> convention(Convention convention) {
-      this.convention = convention;
-      return this;
-    }
-  }
-}
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRulesSupplier.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRulesSupplier.java
new file mode 100644
index 0000000..972a5a3
--- /dev/null
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/store/StoragePluginRulesSupplier.java
@@ -0,0 +1,167 @@
+/*
+ * 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.drill.exec.store;
+
+import org.apache.calcite.plan.Convention;
+import org.apache.calcite.plan.RelOptRule;
+import org.apache.drill.shaded.guava.com.google.common.collect.ImmutableSet;
+
+import java.util.Set;
+
+public class StoragePluginRulesSupplier {
+
+  private final StoragePluginRulesSupplierBuilder 
storagePluginRulesSupplierBuilder;
+
+  private StoragePluginRulesSupplier(StoragePluginRulesSupplierBuilder 
storagePluginRulesSupplierBuilder) {
+    this.storagePluginRulesSupplierBuilder = storagePluginRulesSupplierBuilder;
+  }
+
+  public Set<? extends RelOptRule> getOptimizerRules() {
+    ImmutableSet.Builder<RelOptRule> builder = ImmutableSet.builder();
+    PluginRulesProvider rulesProvider = 
storagePluginRulesSupplierBuilder.rulesProvider();
+    if (storagePluginRulesSupplierBuilder.supportsProjectPushdown()) {
+      builder.addAll(rulesProvider.projectRules());
+    }
+    if (storagePluginRulesSupplierBuilder.supportsFilterPushdown()) {
+      builder.addAll(rulesProvider.filterRules());
+    }
+    if (storagePluginRulesSupplierBuilder.supportsSortPushdown()) {
+      builder.addAll(rulesProvider.sortRules());
+    }
+    if (storagePluginRulesSupplierBuilder.supportsUnionPushdown()) {
+      builder.addAll(rulesProvider.unionRules());
+    }
+    if (storagePluginRulesSupplierBuilder.supportsJoinPushdown()) {
+      builder.addAll(rulesProvider.joinRules());
+    }
+    if (storagePluginRulesSupplierBuilder.supportsAggregatePushdown()) {
+      builder.addAll(rulesProvider.aggregateRules());
+    }
+    if (storagePluginRulesSupplierBuilder.supportsLimitPushdown()) {
+      builder.addAll(rulesProvider.limitRules());
+    }
+    builder.add(rulesProvider.vertexRule());
+    builder.add(rulesProvider.prelConverterRule());
+    return builder.build();
+  }
+
+  public Convention convention() {
+    return storagePluginRulesSupplierBuilder.convention();
+  }
+
+  public static StoragePluginRulesSupplierBuilder builder() {
+    return new StoragePluginRulesSupplierBuilder();
+  }
+
+  public static class StoragePluginRulesSupplierBuilder {
+    private boolean supportsProjectPushdown;
+    private boolean supportsFilterPushdown;
+    private boolean supportsAggregatePushdown;
+    private boolean supportsSortPushdown;
+    private boolean supportsUnionPushdown;
+    private boolean supportsJoinPushdown;
+    private boolean supportsLimitPushdown;
+    private PluginRulesProvider rulesProvider;
+    private Convention convention;
+
+    public boolean supportsProjectPushdown() {
+      return supportsProjectPushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsProjectPushdown(boolean 
supportsProjectPushdown) {
+      this.supportsProjectPushdown = supportsProjectPushdown;
+      return this;
+    }
+
+    public boolean supportsFilterPushdown() {
+      return supportsFilterPushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsFilterPushdown(boolean 
supportsFilterPushdown) {
+      this.supportsFilterPushdown = supportsFilterPushdown;
+      return this;
+    }
+
+    public boolean supportsAggregatePushdown() {
+      return supportsAggregatePushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsAggregatePushdown(boolean 
supportsAggregatePushdown) {
+      this.supportsAggregatePushdown = supportsAggregatePushdown;
+      return this;
+    }
+
+    public boolean supportsSortPushdown() {
+      return supportsSortPushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsSortPushdown(boolean 
supportsSortPushdown) {
+      this.supportsSortPushdown = supportsSortPushdown;
+      return this;
+    }
+
+    public boolean supportsUnionPushdown() {
+      return supportsUnionPushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsUnionPushdown(boolean 
supportsUnionPushdown) {
+      this.supportsUnionPushdown = supportsUnionPushdown;
+      return this;
+    }
+
+    public boolean supportsJoinPushdown() {
+      return supportsJoinPushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsJoinPushdown(boolean 
supportsJoinPushdown) {
+      this.supportsJoinPushdown = supportsJoinPushdown;
+      return this;
+    }
+
+    public boolean supportsLimitPushdown() {
+      return supportsLimitPushdown;
+    }
+
+    public StoragePluginRulesSupplierBuilder supportsLimitPushdown(boolean 
supportsLimitPushdown) {
+      this.supportsLimitPushdown = supportsLimitPushdown;
+      return this;
+    }
+
+    public PluginRulesProvider rulesProvider() {
+      return rulesProvider;
+    }
+
+    public StoragePluginRulesSupplierBuilder rulesProvider(PluginRulesProvider 
rulesProvider) {
+      this.rulesProvider = rulesProvider;
+      return this;
+    }
+
+    public Convention convention() {
+      return convention;
+    }
+
+    public StoragePluginRulesSupplierBuilder convention(Convention convention) 
{
+      this.convention = convention;
+      return this;
+    }
+
+    public StoragePluginRulesSupplier build() {
+      return new StoragePluginRulesSupplier(this);
+    }
+  }
+}

Reply via email to