refactor: rename plugin module to meta

This commit is contained in:
vran 2022-05-08 22:34:43 +08:00
parent e43cd43a7a
commit 582dddf17d
20 changed files with 131 additions and 113 deletions

View File

@ -55,7 +55,6 @@ subprojects {
implementation "com.alibaba:easyexcel:${easyExcelVersion}" implementation "com.alibaba:easyexcel:${easyExcelVersion}"
implementation "org.freemarker:freemarker:${freemarkerVersion}" implementation "org.freemarker:freemarker:${freemarkerVersion}"
implementation "commons-io:commons-io:${commonsIoVersion}" implementation "commons-io:commons-io:${commonsIoVersion}"
} }
test { test {

View File

@ -7,6 +7,8 @@ import org.mapstruct.Mapper;
import org.mapstruct.Mapping; import org.mapstruct.Mapping;
import org.mapstruct.ReportingPolicy; import org.mapstruct.ReportingPolicy;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -61,6 +63,9 @@ public interface DocumentPojoConverter {
TableTriggerDocumentPojo toTriggerPojo(Integer databaseDocumentId, TableTriggerDocumentPojo toTriggerPojo(Integer databaseDocumentId,
Integer tableDocumentId, Integer tableDocumentId,
TriggerMeta meta); TriggerMeta meta);
default LocalDateTime toLocalDateTime(String dateTime) {
return LocalDateTime.parse(dateTime, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
}
default List<TableForeignKeyDocumentPojo> toForeignKeyPojo(Integer docId, default List<TableForeignKeyDocumentPojo> toForeignKeyPojo(Integer docId,
Integer tableMetaId, Integer tableMetaId,

View File

@ -1,9 +1,8 @@
package com.databasir.core; package com.databasir.core;
import com.databasir.core.meta.data.DatabaseMeta; import com.databasir.core.meta.data.DatabaseMeta;
import com.databasir.core.meta.repository.*; import com.databasir.core.meta.provider.MetaProviders;
import com.databasir.core.meta.repository.condition.Condition; import com.databasir.core.meta.provider.condition.Condition;
import com.databasir.core.meta.repository.impl.jdbc.*;
import com.databasir.core.render.Render; import com.databasir.core.render.Render;
import com.databasir.core.render.RenderConfig; import com.databasir.core.render.RenderConfig;
import lombok.Getter; import lombok.Getter;
@ -27,7 +26,9 @@ public class Databasir {
.ignoreTableNameRegex(config.getIgnoreTableNameRegex()) .ignoreTableNameRegex(config.getIgnoreTableNameRegex())
.ignoreTableColumnNameRegex(config.getIgnoreTableColumnNameRegex()) .ignoreTableColumnNameRegex(config.getIgnoreTableColumnNameRegex())
.build(); .build();
return config.getDatabaseMetaRepository().select(connection, condition); return MetaProviders
.of(connection)
.select(connection, condition);
} }
public void renderAsMarkdown(DatabaseMeta meta, OutputStream out) throws IOException { public void renderAsMarkdown(DatabaseMeta meta, OutputStream out) throws IOException {
@ -43,40 +44,6 @@ public class Databasir {
} }
public static Databasir of(DatabasirConfig config) { public static Databasir of(DatabasirConfig config) {
TriggerMetaRepository triggerMetaRepository = config.getTriggerMetaRepository();
if (triggerMetaRepository == null) {
triggerMetaRepository = new JdbcTriggerMetaRepository();
}
IndexMetaRepository indexMetaRepository = config.getIndexMetaRepository();
if (indexMetaRepository == null) {
indexMetaRepository = new JdbcIndexMetaRepository();
}
ColumnMetaRepository columnMetaRepository = config.getColumnMetaRepository();
if (columnMetaRepository == null) {
columnMetaRepository = new JdbcColumnMetaRepository();
}
ForeignKeyMetaRepository foreignKeyMetaRepository = config.getForeignKeyMetaRepository();
if (foreignKeyMetaRepository == null) {
foreignKeyMetaRepository = new JdbcForeignKeyMetaRepository();
}
TableMetaRepository tableMetaRepository = config.getTableMetaRepository();
if (tableMetaRepository == null) {
tableMetaRepository = new JdbcTableMetaRepository(
columnMetaRepository,
indexMetaRepository,
triggerMetaRepository,
foreignKeyMetaRepository
);
}
DatabaseMetaRepository databaseMetaRepository = config.getDatabaseMetaRepository();
if (databaseMetaRepository == null) {
databaseMetaRepository = new JdbcDatabaseMetaRepository(tableMetaRepository);
}
config.setTriggerMetaRepository(triggerMetaRepository);
config.setIndexMetaRepository(indexMetaRepository);
config.setColumnMetaRepository(columnMetaRepository);
config.setTableMetaRepository(tableMetaRepository);
config.setDatabaseMetaRepository(databaseMetaRepository);
return new Databasir(config); return new Databasir(config);
} }

View File

@ -1,6 +1,5 @@
package com.databasir.core; package com.databasir.core;
import com.databasir.core.meta.repository.*;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
@ -11,18 +10,6 @@ import java.util.HashSet;
@Setter @Setter
public class DatabasirConfig { public class DatabasirConfig {
private IndexMetaRepository indexMetaRepository;
private TriggerMetaRepository triggerMetaRepository;
private ColumnMetaRepository columnMetaRepository;
private ForeignKeyMetaRepository foreignKeyMetaRepository;
private TableMetaRepository tableMetaRepository;
private DatabaseMetaRepository databaseMetaRepository;
private Collection<String> ignoreTableNameRegex = new HashSet<>(); private Collection<String> ignoreTableNameRegex = new HashSet<>();
private Collection<String> ignoreTableColumnNameRegex = new HashSet<>(); private Collection<String> ignoreTableColumnNameRegex = new HashSet<>();

View File

@ -1,12 +1,12 @@
package com.databasir.core.meta.repository; package com.databasir.core.meta.provider;
import com.databasir.core.meta.data.ColumnMeta; import com.databasir.core.meta.data.ColumnMeta;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import java.sql.Connection; import java.sql.Connection;
import java.util.List; import java.util.List;
public interface ColumnMetaRepository { public interface ColumnMetaProvider {
List<ColumnMeta> selectColumns(Connection connection, TableCondition condition); List<ColumnMeta> selectColumns(Connection connection, TableCondition condition);

View File

@ -1,12 +1,12 @@
package com.databasir.core.meta.repository; package com.databasir.core.meta.provider;
import com.databasir.core.meta.data.DatabaseMeta; import com.databasir.core.meta.data.DatabaseMeta;
import com.databasir.core.meta.repository.condition.Condition; import com.databasir.core.meta.provider.condition.Condition;
import java.sql.Connection; import java.sql.Connection;
import java.util.Optional; import java.util.Optional;
public interface DatabaseMetaRepository { public interface DatabaseMetaProvider {
Optional<DatabaseMeta> select(Connection connection, Condition condition); Optional<DatabaseMeta> select(Connection connection, Condition condition);

View File

@ -1,12 +1,12 @@
package com.databasir.core.meta.repository; package com.databasir.core.meta.provider;
import com.databasir.core.meta.data.ForeignKeyMeta; import com.databasir.core.meta.data.ForeignKeyMeta;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import java.sql.Connection; import java.sql.Connection;
import java.util.List; import java.util.List;
public interface ForeignKeyMetaRepository { public interface ForeignKeyMetaProvider {
List<ForeignKeyMeta> selectForeignKeys(Connection connection, TableCondition condition); List<ForeignKeyMeta> selectForeignKeys(Connection connection, TableCondition condition);

View File

@ -1,12 +1,12 @@
package com.databasir.core.meta.repository; package com.databasir.core.meta.provider;
import com.databasir.core.meta.data.IndexMeta; import com.databasir.core.meta.data.IndexMeta;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import java.sql.Connection; import java.sql.Connection;
import java.util.List; import java.util.List;
public interface IndexMetaRepository { public interface IndexMetaProvider {
List<IndexMeta> selectIndexes(Connection connection, TableCondition condition); List<IndexMeta> selectIndexes(Connection connection, TableCondition condition);
} }

View File

@ -0,0 +1,60 @@
package com.databasir.core.meta.provider;
import com.databasir.core.meta.provider.jdbc.*;
import com.databasir.core.meta.provider.mysql.MysqlTableTriggerMetaProvider;
import lombok.extern.slf4j.Slf4j;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
@Slf4j
public class MetaProviders {
public static DatabaseMetaProvider jdbc() {
var columnMetaProvider = new JdbcColumnMetaProvider();
var foreignKeyMetaProvider = new JdbcForeignKeyMetaProvider();
var indexMetaProvider = new JdbcIndexMetaProvider();
var triggerMetaProvider = new JdbcTriggerMetaProvider();
var tableMetaProvider = new JdbcTableMetaProvider(
columnMetaProvider,
indexMetaProvider,
triggerMetaProvider,
foreignKeyMetaProvider
);
return new JdbcDatabaseMetaProvider(tableMetaProvider);
}
public static DatabaseMetaProvider of(Connection connection) {
String url;
try {
DatabaseMetaData metaData = connection.getMetaData();
url = metaData.getURL();
} catch (SQLException e) {
log.warn("failed to get connect url, {}, fallback to jdbc provider", e.getMessage());
return jdbc();
}
if (url.contains(":sqlserver:")) {
return jdbc();
}
if (url.contains(":mysql:")) {
return mysql();
}
return jdbc();
}
private static DatabaseMetaProvider mysql() {
var columnMetaProvider = new JdbcColumnMetaProvider();
var foreignKeyMetaProvider = new JdbcForeignKeyMetaProvider();
var indexMetaProvider = new JdbcIndexMetaProvider();
var triggerMetaProvider = new MysqlTableTriggerMetaProvider();
var tableMetaProvider = new JdbcTableMetaProvider(
columnMetaProvider,
indexMetaProvider,
triggerMetaProvider,
foreignKeyMetaProvider
);
return new JdbcDatabaseMetaProvider(tableMetaProvider);
}
}

View File

@ -1,12 +1,12 @@
package com.databasir.core.meta.repository; package com.databasir.core.meta.provider;
import com.databasir.core.meta.data.TableMeta; import com.databasir.core.meta.data.TableMeta;
import com.databasir.core.meta.repository.condition.Condition; import com.databasir.core.meta.provider.condition.Condition;
import java.sql.Connection; import java.sql.Connection;
import java.util.List; import java.util.List;
public interface TableMetaRepository { public interface TableMetaProvider {
List<TableMeta> selectTables(Connection connection, Condition condition); List<TableMeta> selectTables(Connection connection, Condition condition);

View File

@ -1,12 +1,12 @@
package com.databasir.core.meta.repository; package com.databasir.core.meta.provider;
import com.databasir.core.meta.data.TriggerMeta; import com.databasir.core.meta.data.TriggerMeta;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import java.sql.Connection; import java.sql.Connection;
import java.util.List; import java.util.List;
public interface TriggerMetaRepository { public interface TriggerMetaProvider {
List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition); List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition);

View File

@ -1,4 +1,4 @@
package com.databasir.core.meta.repository.condition; package com.databasir.core.meta.provider.condition;
import lombok.Builder; import lombok.Builder;
import lombok.Getter; import lombok.Getter;

View File

@ -1,4 +1,4 @@
package com.databasir.core.meta.repository.condition; package com.databasir.core.meta.provider.condition;
import lombok.Getter; import lombok.Getter;
import lombok.NonNull; import lombok.NonNull;

View File

@ -1,8 +1,8 @@
package com.databasir.core.meta.repository.impl.jdbc; package com.databasir.core.meta.provider.jdbc;
import com.databasir.core.meta.data.ColumnMeta; import com.databasir.core.meta.data.ColumnMeta;
import com.databasir.core.meta.repository.ColumnMetaRepository; import com.databasir.core.meta.provider.ColumnMetaProvider;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -15,7 +15,7 @@ import java.util.List;
@Slf4j @Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
public class JdbcColumnMetaRepository implements ColumnMetaRepository { public class JdbcColumnMetaProvider implements ColumnMetaProvider {
@Override @Override
public List<ColumnMeta> selectColumns(Connection connection, TableCondition tableCondition) { public List<ColumnMeta> selectColumns(Connection connection, TableCondition tableCondition) {

View File

@ -1,10 +1,10 @@
package com.databasir.core.meta.repository.impl.jdbc; package com.databasir.core.meta.provider.jdbc;
import com.databasir.core.meta.data.DatabaseMeta; import com.databasir.core.meta.data.DatabaseMeta;
import com.databasir.core.meta.data.TableMeta; import com.databasir.core.meta.data.TableMeta;
import com.databasir.core.meta.repository.DatabaseMetaRepository; import com.databasir.core.meta.provider.DatabaseMetaProvider;
import com.databasir.core.meta.repository.TableMetaRepository; import com.databasir.core.meta.provider.TableMetaProvider;
import com.databasir.core.meta.repository.condition.Condition; import com.databasir.core.meta.provider.condition.Condition;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import java.sql.Connection; import java.sql.Connection;
@ -16,9 +16,9 @@ import java.util.Objects;
import java.util.Optional; import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class JdbcDatabaseMetaRepository implements DatabaseMetaRepository { public class JdbcDatabaseMetaProvider implements DatabaseMetaProvider {
private final TableMetaRepository tableMetaRepository; private final TableMetaProvider tableMetaProvider;
@Override @Override
public Optional<DatabaseMeta> select(Connection connection, Condition condition) { public Optional<DatabaseMeta> select(Connection connection, Condition condition) {
@ -28,7 +28,7 @@ public class JdbcDatabaseMetaRepository implements DatabaseMetaRepository {
while (catalogs.next()) { while (catalogs.next()) {
String catalogName = catalogs.getString("TABLE_CAT"); String catalogName = catalogs.getString("TABLE_CAT");
if (Objects.equals(condition.getDatabaseName(), catalogName)) { if (Objects.equals(condition.getDatabaseName(), catalogName)) {
List<TableMeta> tableDocs = tableMetaRepository.selectTables(connection, condition); List<TableMeta> tableDocs = tableMetaProvider.selectTables(connection, condition);
DatabaseMeta meta = DatabaseMeta.builder() DatabaseMeta meta = DatabaseMeta.builder()
.productName(metaData.getDatabaseProductName()) .productName(metaData.getDatabaseProductName())
.productVersion(metaData.getDatabaseProductVersion()) .productVersion(metaData.getDatabaseProductVersion())
@ -44,7 +44,7 @@ public class JdbcDatabaseMetaRepository implements DatabaseMetaRepository {
while (schemas.next()) { while (schemas.next()) {
String schemaName = schemas.getString("TABLE_SCHEM"); String schemaName = schemas.getString("TABLE_SCHEM");
if (Objects.equals(condition.getSchemaName(), schemaName)) { if (Objects.equals(condition.getSchemaName(), schemaName)) {
List<TableMeta> tableDocs = tableMetaRepository.selectTables(connection, condition); List<TableMeta> tableDocs = tableMetaProvider.selectTables(connection, condition);
DatabaseMeta meta = DatabaseMeta.builder() DatabaseMeta meta = DatabaseMeta.builder()
.productName(metaData.getDatabaseProductName()) .productName(metaData.getDatabaseProductName())
.productVersion(metaData.getDatabaseProductVersion()) .productVersion(metaData.getDatabaseProductVersion())

View File

@ -1,8 +1,8 @@
package com.databasir.core.meta.repository.impl.jdbc; package com.databasir.core.meta.provider.jdbc;
import com.databasir.core.meta.data.ForeignKeyMeta; import com.databasir.core.meta.data.ForeignKeyMeta;
import com.databasir.core.meta.repository.ForeignKeyMetaRepository; import com.databasir.core.meta.provider.ForeignKeyMetaProvider;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.sql.Connection; import java.sql.Connection;
@ -13,7 +13,7 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
public class JdbcForeignKeyMetaRepository implements ForeignKeyMetaRepository { public class JdbcForeignKeyMetaProvider implements ForeignKeyMetaProvider {
@Override @Override
public List<ForeignKeyMeta> selectForeignKeys(Connection connection, TableCondition condition) { public List<ForeignKeyMeta> selectForeignKeys(Connection connection, TableCondition condition) {

View File

@ -1,8 +1,8 @@
package com.databasir.core.meta.repository.impl.jdbc; package com.databasir.core.meta.provider.jdbc;
import com.databasir.core.meta.data.IndexMeta; import com.databasir.core.meta.data.IndexMeta;
import com.databasir.core.meta.repository.IndexMetaRepository; import com.databasir.core.meta.provider.IndexMetaProvider;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.sql.Connection; import java.sql.Connection;
@ -11,7 +11,7 @@ import java.sql.SQLException;
import java.util.*; import java.util.*;
@Slf4j @Slf4j
public class JdbcIndexMetaRepository implements IndexMetaRepository { public class JdbcIndexMetaProvider implements IndexMetaProvider {
@Override @Override
public List<IndexMeta> selectIndexes(Connection connection, TableCondition condition) { public List<IndexMeta> selectIndexes(Connection connection, TableCondition condition) {
try { try {

View File

@ -1,10 +1,10 @@
package com.databasir.core.meta.repository.impl.jdbc; package com.databasir.core.meta.provider.jdbc;
import com.databasir.core.meta.data.ColumnMeta; import com.databasir.core.meta.data.ColumnMeta;
import com.databasir.core.meta.data.TableMeta; import com.databasir.core.meta.data.TableMeta;
import com.databasir.core.meta.repository.*; import com.databasir.core.meta.provider.*;
import com.databasir.core.meta.repository.condition.Condition; import com.databasir.core.meta.provider.condition.Condition;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -16,15 +16,15 @@ import java.util.List;
@RequiredArgsConstructor @RequiredArgsConstructor
@Slf4j @Slf4j
public class JdbcTableMetaRepository implements TableMetaRepository { public class JdbcTableMetaProvider implements TableMetaProvider {
private final ColumnMetaRepository columnMetaRepository; private final ColumnMetaProvider columnMetaProvider;
private final IndexMetaRepository indexMetaRepository; private final IndexMetaProvider indexMetaProvider;
private final TriggerMetaRepository triggerMetaRepository; private final TriggerMetaProvider triggerMetaProvider;
private final ForeignKeyMetaRepository foreignKeyMetaRepository; private final ForeignKeyMetaProvider foreignKeyMetaProvider;
@Override @Override
public List<TableMeta> selectTables(Connection connection, Condition condition) { public List<TableMeta> selectTables(Connection connection, Condition condition) {
@ -51,7 +51,7 @@ public class JdbcTableMetaRepository implements TableMetaRepository {
String tableType = tablesResult.getString("TABLE_TYPE"); String tableType = tablesResult.getString("TABLE_TYPE");
String tableComment = tablesResult.getString("REMARKS"); String tableComment = tablesResult.getString("REMARKS");
TableCondition tableCondition = TableCondition.of(condition, tableName); TableCondition tableCondition = TableCondition.of(condition, tableName);
List<ColumnMeta> columns = columnMetaRepository.selectColumns(connection, tableCondition); List<ColumnMeta> columns = columnMetaProvider.selectColumns(connection, tableCondition);
if (columns.isEmpty()) { if (columns.isEmpty()) {
if (log.isWarnEnabled()) { if (log.isWarnEnabled()) {
log.warn("ignored table: " + databaseName + "." + tableName log.warn("ignored table: " + databaseName + "." + tableName
@ -64,9 +64,9 @@ public class JdbcTableMetaRepository implements TableMetaRepository {
.type(tableType) .type(tableType)
.comment(tableComment) .comment(tableComment)
.columns(columns) .columns(columns)
.foreignKeys(foreignKeyMetaRepository.selectForeignKeys(connection, tableCondition)) .foreignKeys(foreignKeyMetaProvider.selectForeignKeys(connection, tableCondition))
.indexes(indexMetaRepository.selectIndexes(connection, tableCondition)) .indexes(indexMetaProvider.selectIndexes(connection, tableCondition))
.triggers(triggerMetaRepository.selectTriggers(connection, tableCondition)) .triggers(triggerMetaProvider.selectTriggers(connection, tableCondition))
.build(); .build();
tableMetas.add(tableMeta); tableMetas.add(tableMeta);
} }

View File

@ -1,14 +1,14 @@
package com.databasir.core.meta.repository.impl.jdbc; package com.databasir.core.meta.provider.jdbc;
import com.databasir.core.meta.data.TriggerMeta; import com.databasir.core.meta.data.TriggerMeta;
import com.databasir.core.meta.repository.TriggerMetaRepository; import com.databasir.core.meta.provider.TriggerMetaProvider;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import java.sql.Connection; import java.sql.Connection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
public class JdbcTriggerMetaRepository implements TriggerMetaRepository { public class JdbcTriggerMetaProvider implements TriggerMetaProvider {
@Override @Override
public List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition) { public List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition) {

View File

@ -1,8 +1,8 @@
package com.databasir.core.meta.repository.impl.extension; package com.databasir.core.meta.provider.mysql;
import com.databasir.core.meta.data.TriggerMeta; import com.databasir.core.meta.data.TriggerMeta;
import com.databasir.core.meta.repository.TriggerMetaRepository; import com.databasir.core.meta.provider.TriggerMetaProvider;
import com.databasir.core.meta.repository.condition.TableCondition; import com.databasir.core.meta.provider.condition.TableCondition;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import java.sql.Connection; import java.sql.Connection;
@ -14,7 +14,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
@Slf4j @Slf4j
public class MysqlTableTriggerMetaRepository implements TriggerMetaRepository { public class MysqlTableTriggerMetaProvider implements TriggerMetaProvider {
@Override @Override
public List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition) { public List<TriggerMeta> selectTriggers(Connection connection, TableCondition condition) {