Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
5582899
Init
anlowee Jul 21, 2025
e51aa97
Refactoring
anlowee Jul 21, 2025
14e61d2
Refactor
anlowee Jul 21, 2025
72cf371
Fix format check
anlowee Jul 21, 2025
1e5c256
Add docs
anlowee Jul 21, 2025
2079250
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Jul 21, 2025
bc6633e
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Jul 22, 2025
13caaa5
Apply suggestions from code review
anlowee Jul 29, 2025
df82f0f
Address comments
anlowee Jul 29, 2025
53fc10d
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Jul 29, 2025
36b2659
Update presto-clp/src/main/java/com/facebook/presto/plugin/clp/metada…
anlowee Jul 29, 2025
d639958
Address coderabbitai comments
anlowee Jul 29, 2025
190afeb
Merge branch 'xwei/refactor-metadatafilter-1' of github.com:anlowee/p…
anlowee Jul 29, 2025
aef56b4
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Jul 30, 2025
854401f
Fix the issue that when there are no filters in the query the require…
anlowee Jul 30, 2025
da18503
Merge branch 'xwei/refactor-metadatafilter-1' of github.com:anlowee/p…
anlowee Jul 30, 2025
eb70c70
Skip check for trieval queries
anlowee Jul 30, 2025
0a9f83e
Refactor the first parameter of checkContainsRequiredFilters to scope…
anlowee Jul 30, 2025
2e990ba
Make checkContainsRequiredFilters check for multiple table scopes and…
anlowee Jul 30, 2025
6586e25
Rename metadataDatabaseSpecific to metadataProviderSpecific
anlowee Jul 31, 2025
860b06f
Apply coderabbitai comments
anlowee Jul 31, 2025
dc6f9fc
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Aug 11, 2025
baf0053
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Aug 13, 2025
d1f34bf
Refactor docs.
kirkrodrigues Aug 14, 2025
c302fbe
Rename and address comments
anlowee Aug 14, 2025
6925011
Add a new config option clp.metadata-filter-provider-type
anlowee Aug 14, 2025
9289bd7
Renmae the metadata filter and metadata query to split filter and spl…
anlowee Aug 14, 2025
c72c0dc
Fix a format issue
anlowee Aug 15, 2025
bb68029
Update template config
anlowee Aug 15, 2025
4efe0b1
Address coderabbitai comment
anlowee Aug 15, 2025
528f5d0
Merge branch 'release-0.293-clp-connector' into xwei/refactor-metadat…
anlowee Aug 19, 2025
ee4ea9b
Address comments
anlowee Aug 20, 2025
5601349
Apply suggestions from code review
anlowee Aug 25, 2025
df37d2a
Renamed
anlowee Aug 25, 2025
1871733
Fix typo
anlowee Aug 25, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@

import com.facebook.airlift.bootstrap.LifeCycleManager;
import com.facebook.airlift.log.Logger;
import com.facebook.presto.plugin.clp.metadata.filter.ClpMetadataFilterProvider;
import com.facebook.presto.spi.connector.Connector;
import com.facebook.presto.spi.connector.ConnectorMetadata;
import com.facebook.presto.spi.connector.ConnectorPlanOptimizerProvider;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
import com.facebook.airlift.configuration.AbstractConfigurationAwareModule;
import com.facebook.presto.plugin.clp.metadata.ClpMetadataProvider;
import com.facebook.presto.plugin.clp.metadata.ClpMySqlMetadataProvider;
import com.facebook.presto.plugin.clp.metadata.filter.ClpMetadataFilterProvider;
import com.facebook.presto.plugin.clp.metadata.filter.ClpMySqlMetadataFilterProvider;
import com.facebook.presto.plugin.clp.split.ClpMySqlSplitProvider;
import com.facebook.presto.plugin.clp.split.ClpSplitProvider;
import com.facebook.presto.spi.PrestoException;
Expand All @@ -37,13 +39,13 @@ protected void setup(Binder binder)
binder.bind(ClpConnector.class).in(Scopes.SINGLETON);
binder.bind(ClpMetadata.class).in(Scopes.SINGLETON);
binder.bind(ClpRecordSetProvider.class).in(Scopes.SINGLETON);
binder.bind(ClpMetadataFilterProvider.class).in(Scopes.SINGLETON);
binder.bind(ClpSplitManager.class).in(Scopes.SINGLETON);
configBinder(binder).bindConfig(ClpConfig.class);

ClpConfig config = buildConfigObject(ClpConfig.class);
if (config.getMetadataProviderType() == MetadataProviderType.MYSQL) {
binder.bind(ClpMetadataProvider.class).to(ClpMySqlMetadataProvider.class).in(Scopes.SINGLETON);
binder.bind(ClpMetadataFilterProvider.class).to(ClpMySqlMetadataFilterProvider.class).in(Scopes.SINGLETON);
}
else {
throw new PrestoException(CLP_UNSUPPORTED_METADATA_SOURCE, "Unsupported metadata provider type: " + config.getMetadataProviderType());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
package com.facebook.presto.plugin.clp;

import com.facebook.airlift.log.Logger;
import com.facebook.presto.plugin.clp.metadata.filter.ClpMetadataFilterProvider;
import com.facebook.presto.spi.ColumnHandle;
import com.facebook.presto.spi.ConnectorPlanOptimizer;
import com.facebook.presto.spi.ConnectorPlanRewriter;
Expand Down Expand Up @@ -94,7 +95,7 @@ public PlanNode visitFilter(FilterNode node, RewriteContext<Void> context)
// isn't present, we'll return early, skipping subsequent checks).
metadataFilterProvider.checkContainsRequiredFilters(clpTableHandle.getSchemaTableName(), metadataSqlQuery.orElse(""));
if (metadataSqlQuery.isPresent()) {
metadataSqlQuery = Optional.of(metadataFilterProvider.remapFilterSql(scope, metadataSqlQuery.get()));
metadataSqlQuery = Optional.of(metadataFilterProvider.remapMetadataFilterPushDown(scope, metadataSqlQuery.get()));
log.debug("Metadata SQL query: %s", metadataSqlQuery);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
*/
package com.facebook.presto.plugin.clp;

import com.facebook.presto.plugin.clp.metadata.filter.ClpMetadataFilterProvider;
import com.facebook.presto.spi.ConnectorPlanOptimizer;
import com.facebook.presto.spi.connector.ConnectorPlanOptimizerProvider;
import com.facebook.presto.spi.function.FunctionMetadataManager;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Licensed 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 com.facebook.presto.plugin.clp.metadata.filter;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.IOException;

import static com.facebook.presto.plugin.clp.metadata.filter.ClpMetadataFilter.MetadataDatabaseSpecific;

/**
* Uses the given implementation of {@link MetadataDatabaseSpecific} to deserialize the
* {@code "metadataDatabaseSpecific"} field in the filter. The implementation is originally chosen
* by the {@code clp.metadata-provider-type} config option.
*/
public class ClpMetadataDatabaseSpecificDeserializer
extends JsonDeserializer<MetadataDatabaseSpecific>
{
private final Class<? extends MetadataDatabaseSpecific> actualMetadataDatabaseSpecificClass;

public ClpMetadataDatabaseSpecificDeserializer(Class<? extends MetadataDatabaseSpecific> actualMetadataDatabaseSpecificClass)
{
this.actualMetadataDatabaseSpecificClass = actualMetadataDatabaseSpecificClass;
}

@Override
public MetadataDatabaseSpecific deserialize(JsonParser p, DeserializationContext ctxt) throws IOException
{
ObjectNode node = p.getCodec().readTree(p);
ObjectMapper mapper = (ObjectMapper) p.getCodec();

return mapper.treeToValue(node, actualMetadataDatabaseSpecificClass);
}
}
Loading
Loading