Skip to content

Commit 2f0424d

Browse files
committed
format source code and fix the clp doc
1 parent 1b51c3f commit 2f0424d

File tree

17 files changed

+350
-276
lines changed

17 files changed

+350
-276
lines changed

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpConfig.java

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,15 +20,7 @@
2020

2121
public class ClpConfig
2222
{
23-
public enum MetadataProviderType
24-
{
25-
MYSQL
26-
}
27-
28-
public enum SplitProviderType
29-
{
30-
MYSQL
31-
}
23+
public static final Pattern SAFE_SQL_TABLE_NAME_PATTERN = Pattern.compile("^[a-zA-Z0-9_]+$");
3224

3325
private boolean polymorphicTypeEnabled = true;
3426
private MetadataProviderType metadataProviderType = MetadataProviderType.MYSQL;
@@ -41,8 +33,6 @@ public enum SplitProviderType
4133
private long metadataExpireInterval = 600;
4234
private SplitProviderType splitProviderType = SplitProviderType.MYSQL;
4335

44-
public static final Pattern SAFE_SQL_IDENTIFIER = Pattern.compile("^[a-zA-Z0-9_]+$");
45-
4636
public boolean isPolymorphicTypeEnabled()
4737
{
4838
return polymorphicTypeEnabled;
@@ -123,7 +113,7 @@ public String getMetadataTablePrefix()
123113
@Config("clp.metadata-table-prefix")
124114
public ClpConfig setMetadataTablePrefix(String metadataTablePrefix)
125115
{
126-
if (metadataTablePrefix == null || !SAFE_SQL_IDENTIFIER.matcher(metadataTablePrefix).matches()) {
116+
if (metadataTablePrefix == null || !SAFE_SQL_TABLE_NAME_PATTERN.matcher(metadataTablePrefix).matches()) {
127117
throw new PrestoException(ClpErrorCode.CLP_UNSUPPORTED_CONFIG_OPTION, "Invalid metadataTablePrefix: " +
128118
metadataTablePrefix + ". Only alphanumeric characters and underscores are allowed.");
129119
}
@@ -167,4 +157,14 @@ public ClpConfig setSplitProviderType(SplitProviderType splitProviderType)
167157
this.splitProviderType = splitProviderType;
168158
return this;
169159
}
160+
161+
public enum MetadataProviderType
162+
{
163+
MYSQL
164+
}
165+
166+
public enum SplitProviderType
167+
{
168+
MYSQL
169+
}
170170
}

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpConnector.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,13 @@ public class ClpConnector
3535
private final ClpMetadata metadata;
3636
private final ClpRecordSetProvider recordSetProvider;
3737
private final ClpSplitManager splitManager;
38+
3839
@Inject
39-
public ClpConnector(LifeCycleManager lifeCycleManager,
40-
ClpMetadata metadata,
41-
ClpRecordSetProvider recordSetProvider,
42-
ClpSplitManager splitManager)
40+
public ClpConnector(
41+
LifeCycleManager lifeCycleManager,
42+
ClpMetadata metadata,
43+
ClpRecordSetProvider recordSetProvider,
44+
ClpSplitManager splitManager)
4345
{
4446
this.lifeCycleManager = requireNonNull(lifeCycleManager, "lifeCycleManager is null");
4547
this.metadata = requireNonNull(metadata, "metadata is null");

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpMetadata.java

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,20 @@
4343
import static java.util.Objects.requireNonNull;
4444
import static java.util.concurrent.TimeUnit.SECONDS;
4545

46+
/**
47+
* For efficiency, this class maintains two caches for metadata from the
48+
* {@link ClpMetadataProvider}:
49+
* <ul>
50+
* <li>columnHandleCache: Maps {@link SchemaTableName} to a list of {@link ClpColumnHandle}s.
51+
* </li>
52+
* <li>tableHandleCache: Maps schema names to a list of {@link ClpTableHandle}s.</li>
53+
* </ul>
54+
*/
4655
public class ClpMetadata
4756
implements ConnectorMetadata
4857
{
4958
public static final String DEFAULT_SCHEMA_NAME = "default";
59+
5060
private final ClpMetadataProvider clpMetadataProvider;
5161
private final LoadingCache<SchemaTableName, List<ClpColumnHandle>> columnHandleCache;
5262
private final LoadingCache<String, List<ClpTableHandle>> tableHandleCache;
@@ -66,26 +76,6 @@ public ClpMetadata(ClpConfig clpConfig, ClpMetadataProvider clpMetadataProvider)
6676
this.clpMetadataProvider = requireNonNull(clpMetadataProvider, "ClpMetadataProvider is null");
6777
}
6878

69-
private List<ClpColumnHandle> loadColumnHandles(SchemaTableName schemaTableName)
70-
{
71-
return clpMetadataProvider.listColumnHandles(schemaTableName);
72-
}
73-
74-
private List<ClpTableHandle> loadTableHandles(String schemaName)
75-
{
76-
return clpMetadataProvider.listTableHandles(schemaName);
77-
}
78-
79-
private List<ClpTableHandle> listTables(String schemaName)
80-
{
81-
return tableHandleCache.getUnchecked(schemaName);
82-
}
83-
84-
private List<ClpColumnHandle> listColumns(SchemaTableName schemaTableName)
85-
{
86-
return columnHandleCache.getUnchecked(schemaTableName);
87-
}
88-
8979
@Override
9080
public List<String> listSchemaNames(ConnectorSession session)
9181
{
@@ -120,10 +110,11 @@ public ConnectorTableHandle getTableHandle(ConnectorSession session, SchemaTable
120110
}
121111

122112
@Override
123-
public ConnectorTableLayoutResult getTableLayoutForConstraint(ConnectorSession session,
124-
ConnectorTableHandle table,
125-
Constraint<ColumnHandle> constraint,
126-
Optional<Set<ColumnHandle>> desiredColumns)
113+
public ConnectorTableLayoutResult getTableLayoutForConstraint(
114+
ConnectorSession session,
115+
ConnectorTableHandle table,
116+
Constraint<ColumnHandle> constraint,
117+
Optional<Set<ColumnHandle>> desiredColumns)
127118
{
128119
ClpTableHandle tableHandle = (ClpTableHandle) table;
129120
ConnectorTableLayout layout = new ConnectorTableLayout(new ClpTableLayoutHandle(tableHandle, Optional.empty()));
@@ -149,8 +140,7 @@ public ConnectorTableMetadata getTableMetadata(ConnectorSession session, Connect
149140
}
150141

151142
@Override
152-
public Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(ConnectorSession session,
153-
SchemaTablePrefix prefix)
143+
public Map<SchemaTableName, List<ColumnMetadata>> listTableColumns(ConnectorSession session, SchemaTablePrefix prefix)
154144
{
155145
requireNonNull(prefix, "prefix is null");
156146
String schemaName = prefix.getSchemaName();
@@ -189,11 +179,29 @@ public Map<String, ColumnHandle> getColumnHandles(ConnectorSession session, Conn
189179
}
190180

191181
@Override
192-
public ColumnMetadata getColumnMetadata(ConnectorSession session,
193-
ConnectorTableHandle tableHandle,
194-
ColumnHandle columnHandle)
182+
public ColumnMetadata getColumnMetadata(ConnectorSession session, ConnectorTableHandle tableHandle, ColumnHandle columnHandle)
195183
{
196184
ClpColumnHandle clpColumnHandle = (ClpColumnHandle) columnHandle;
197185
return clpColumnHandle.getColumnMetadata();
198186
}
187+
188+
private List<ClpColumnHandle> loadColumnHandles(SchemaTableName schemaTableName)
189+
{
190+
return clpMetadataProvider.listColumnHandles(schemaTableName);
191+
}
192+
193+
private List<ClpTableHandle> loadTableHandles(String schemaName)
194+
{
195+
return clpMetadataProvider.listTableHandles(schemaName);
196+
}
197+
198+
private List<ClpTableHandle> listTables(String schemaName)
199+
{
200+
return tableHandleCache.getUnchecked(schemaName);
201+
}
202+
203+
private List<ClpColumnHandle> listColumns(SchemaTableName schemaTableName)
204+
{
205+
return columnHandleCache.getUnchecked(schemaTableName);
206+
}
199207
}

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpRecordSetProvider.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,11 @@ public class ClpRecordSetProvider
2626
implements ConnectorRecordSetProvider
2727
{
2828
@Override
29-
public RecordSet getRecordSet(ConnectorTransactionHandle transactionHandle,
30-
ConnectorSession session,
31-
ConnectorSplit split,
32-
List<? extends ColumnHandle> columns)
29+
public RecordSet getRecordSet(
30+
ConnectorTransactionHandle transactionHandle,
31+
ConnectorSession session,
32+
ConnectorSplit split,
33+
List<? extends ColumnHandle> columns)
3334
{
3435
throw new UnsupportedOperationException("getRecordSet is not supported");
3536
}

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpSplitManager.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,11 @@ public ClpSplitManager(ClpSplitProvider clpSplitProvider)
3737
}
3838

3939
@Override
40-
public ConnectorSplitSource getSplits(ConnectorTransactionHandle transactionHandle,
41-
ConnectorSession session,
42-
ConnectorTableLayoutHandle layout,
43-
SplitSchedulingContext splitSchedulingContext)
40+
public ConnectorSplitSource getSplits(
41+
ConnectorTransactionHandle transactionHandle,
42+
ConnectorSession session,
43+
ConnectorTableLayoutHandle layout,
44+
SplitSchedulingContext splitSchedulingContext)
4445
{
4546
ClpTableLayoutHandle layoutHandle = (ClpTableLayoutHandle) layout;
4647
return new FixedSplitSource(clpSplitProvider.listSplits(layoutHandle));

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpTableHandle.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,15 @@
2525
public class ClpTableHandle
2626
implements ConnectorTableHandle
2727
{
28-
public enum StorageType
29-
{
30-
FS, // Local File System
31-
S3
32-
}
33-
3428
private final SchemaTableName schemaTableName;
3529
private final String tablePath;
3630
private final StorageType storageType;
3731

3832
@JsonCreator
39-
public ClpTableHandle(@JsonProperty("schemaTableName") SchemaTableName schemaTableName,
40-
@JsonProperty("tablePath") String tablePath,
41-
@JsonProperty("storageType") StorageType storageType)
33+
public ClpTableHandle(
34+
@JsonProperty("schemaTableName") SchemaTableName schemaTableName,
35+
@JsonProperty("tablePath") String tablePath,
36+
@JsonProperty("storageType") StorageType storageType)
4237
{
4338
this.schemaTableName = schemaTableName;
4439
this.tablePath = tablePath;
@@ -93,4 +88,10 @@ public String toString()
9388
.add("storageType", storageType)
9489
.toString();
9590
}
91+
92+
public enum StorageType
93+
{
94+
FS, // Local File System
95+
S3
96+
}
9697
}

presto-clp/src/main/java/com/facebook/presto/plugin/clp/ClpTableLayoutHandle.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,7 @@ public class ClpTableLayoutHandle
2929
private final Optional<String> kqlQuery;
3030

3131
@JsonCreator
32-
public ClpTableLayoutHandle(@JsonProperty("table") ClpTableHandle table,
33-
@JsonProperty("kqlQuery") Optional<String> kqlQuery)
32+
public ClpTableLayoutHandle(@JsonProperty("table") ClpTableHandle table, @JsonProperty("kqlQuery") Optional<String> kqlQuery)
3433
{
3534
this.table = table;
3635
this.kqlQuery = kqlQuery;

presto-clp/src/main/java/com/facebook/presto/plugin/clp/metadata/ClpMetadataProvider.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,21 @@
1919

2020
import java.util.List;
2121

22+
/**
23+
* A provider for metadata that describes what tables exist in the CLP connector, and what columns
24+
* exist in each of those tables.
25+
*/
2226
public interface ClpMetadataProvider
2327
{
2428
/**
25-
* Returns the list of column handles for the given table.
29+
* @param schemaTableName the name of the schema and the table
30+
* @return the list of column handles for the given table.
2631
*/
2732
List<ClpColumnHandle> listColumnHandles(SchemaTableName schemaTableName);
2833

2934
/**
30-
* Returns the list of table handles in the given schema.
35+
* @param schema the name of the schema
36+
* @return the list of table handles in the specified schema
3137
*/
3238
List<ClpTableHandle> listTableHandles(String schema);
3339
}

presto-clp/src/main/java/com/facebook/presto/plugin/clp/metadata/ClpMySqlMetadataProvider.java

Lines changed: 32 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -30,31 +30,34 @@
3030
import java.util.ArrayList;
3131
import java.util.List;
3232

33+
import static java.lang.String.format;
34+
3335
public class ClpMySqlMetadataProvider
3436
implements ClpMetadataProvider
3537
{
36-
private static final Logger log = Logger.get(ClpMySqlMetadataProvider.class);
37-
private final ClpConfig config;
38-
3938
// Column names
40-
private static final String COLUMN_METADATA_TABLE_COLUMN_NAME = "name";
41-
private static final String COLUMN_METADATA_TABLE_COLUMN_TYPE = "type";
42-
private static final String DATASETS_TABLE_COLUMN_NAME = "name";
43-
private static final String DATASETS_TABLE_COLUMN_ARCHIVE_STORAGE_TYPE = "archive_storage_type";
44-
private static final String DATASETS_TABLE_COLUMN_ARCHIVE_STORAGE_DIRECTORY = "archive_storage_directory";
39+
public static final String COLUMN_METADATA_TABLE_COLUMN_NAME = "name";
40+
public static final String COLUMN_METADATA_TABLE_COLUMN_TYPE = "type";
41+
public static final String DATASETS_TABLE_COLUMN_NAME = "name";
42+
public static final String DATASETS_TABLE_COLUMN_ARCHIVE_STORAGE_TYPE = "archive_storage_type";
43+
public static final String DATASETS_TABLE_COLUMN_ARCHIVE_STORAGE_DIRECTORY = "archive_storage_directory";
4544

4645
// Table suffixes
47-
private static final String COLUMN_METADATA_TABLE_SUFFIX = "_column_metadata";
48-
private static final String DATASETS_TABLE_SUFFIX = "datasets";
46+
public static final String COLUMN_METADATA_TABLE_SUFFIX = "_column_metadata";
47+
public static final String DATASETS_TABLE_SUFFIX = "datasets";
4948

5049
// SQL templates
5150
private static final String SQL_SELECT_COLUMN_METADATA_TEMPLATE = "SELECT * FROM `%s%s" +
5251
COLUMN_METADATA_TABLE_SUFFIX + "`";
5352
private static final String SQL_SELECT_DATASETS_TEMPLATE =
54-
String.format("SELECT `%s`, `%s`, `%s` FROM `%%s%s`", DATASETS_TABLE_COLUMN_NAME,
53+
format("SELECT `%s`, `%s`, `%s` FROM `%%s%s`", DATASETS_TABLE_COLUMN_NAME,
5554
DATASETS_TABLE_COLUMN_ARCHIVE_STORAGE_TYPE, DATASETS_TABLE_COLUMN_ARCHIVE_STORAGE_DIRECTORY,
5655
DATASETS_TABLE_SUFFIX);
5756

57+
private static final Logger log = Logger.get(ClpMySqlMetadataProvider.class);
58+
59+
private final ClpConfig config;
60+
5861
@Inject
5962
public ClpMySqlMetadataProvider(ClpConfig config)
6063
{
@@ -68,25 +71,10 @@ public ClpMySqlMetadataProvider(ClpConfig config)
6871
this.config = config;
6972
}
7073

71-
private Connection getConnection() throws SQLException
72-
{
73-
Connection connection = DriverManager.getConnection(config.getMetadataDbUrl(), config.getMetadataDbUser(), config.getMetadataDbPassword());
74-
String dbName = config.getMetadataDbName();
75-
if (dbName != null && !dbName.isEmpty()) {
76-
connection.createStatement().execute(String.format("USE `%s`", dbName));
77-
}
78-
return connection;
79-
}
80-
81-
private boolean isValidIdentifier(String identifier)
82-
{
83-
return identifier != null && ClpConfig.SAFE_SQL_IDENTIFIER.matcher(identifier).matches();
84-
}
85-
8674
@Override
8775
public List<ClpColumnHandle> listColumnHandles(SchemaTableName schemaTableName)
8876
{
89-
String query = String.format(SQL_SELECT_COLUMN_METADATA_TEMPLATE,
77+
String query = format(SQL_SELECT_COLUMN_METADATA_TEMPLATE,
9078
config.getMetadataTablePrefix(), schemaTableName.getTableName());
9179
ClpSchemaTree schemaTree = new ClpSchemaTree(config.isPolymorphicTypeEnabled());
9280
try (Connection connection = getConnection();
@@ -108,7 +96,7 @@ public List<ClpColumnHandle> listColumnHandles(SchemaTableName schemaTableName)
10896
public List<ClpTableHandle> listTableHandles(String schemaName)
10997
{
11098
List<ClpTableHandle> tableHandles = new ArrayList<>();
111-
String query = String.format(SQL_SELECT_DATASETS_TEMPLATE, config.getMetadataTablePrefix());
99+
String query = format(SQL_SELECT_DATASETS_TEMPLATE, config.getMetadataTablePrefix());
112100
try (Connection connection = getConnection();
113101
Statement statement = connection.createStatement();
114102
ResultSet resultSet = statement.executeQuery(query)) {
@@ -132,4 +120,20 @@ public List<ClpTableHandle> listTableHandles(String schemaName)
132120
}
133121
return tableHandles;
134122
}
123+
124+
private Connection getConnection()
125+
throws SQLException
126+
{
127+
Connection connection = DriverManager.getConnection(config.getMetadataDbUrl(), config.getMetadataDbUser(), config.getMetadataDbPassword());
128+
String dbName = config.getMetadataDbName();
129+
if (dbName != null && !dbName.isEmpty()) {
130+
connection.createStatement().execute(format("USE `%s`", dbName));
131+
}
132+
return connection;
133+
}
134+
135+
private boolean isValidIdentifier(String identifier)
136+
{
137+
return identifier != null && ClpConfig.SAFE_SQL_TABLE_NAME_PATTERN.matcher(identifier).matches();
138+
}
135139
}

0 commit comments

Comments
 (0)