feat: pre compile regex when sync document (#171)

This commit is contained in:
vran 2022-05-12 13:42:28 +08:00 committed by GitHub
parent 1f185321fe
commit 5b9728282b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 20 additions and 8 deletions

View File

@ -11,7 +11,10 @@ import lombok.RequiredArgsConstructor;
import java.io.IOException;
import java.io.OutputStream;
import java.sql.Connection;
import java.util.List;
import java.util.Optional;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
@RequiredArgsConstructor
@Getter
@ -20,11 +23,18 @@ public class Databasir {
private final DatabasirConfig config;
public Optional<DatabaseMeta> get(Connection connection, String databaseName, String schemaName) {
// pre compile regex
List<Pattern> ignoreTableColumnPatterns = config.getIgnoreTableColumnNameRegex().stream()
.map(Pattern::compile)
.collect(Collectors.toList());
List<Pattern> ignoreTableNamePatterns = config.getIgnoreTableNameRegex().stream()
.map(Pattern::compile)
.collect(Collectors.toList());
Condition condition = Condition.builder()
.databaseName(databaseName)
.schemaName(schemaName)
.ignoreTableNameRegex(config.getIgnoreTableNameRegex())
.ignoreTableColumnNameRegex(config.getIgnoreTableColumnNameRegex())
.ignoreTableNamePatterns(ignoreTableNamePatterns)
.ignoreTableColumnNamePatterns(ignoreTableColumnPatterns)
.build();
return MetaProviders
.of(connection)

View File

@ -19,16 +19,18 @@ public class Condition {
private String schemaName;
@Builder.Default
private Collection<String> ignoreTableNameRegex = Collections.emptyList();
@Builder.ObtainVia(method = "ignoreTableNameRegexes")
private Collection<Pattern> ignoreTableNamePatterns = Collections.emptyList();
@Builder.Default
private Collection<String> ignoreTableColumnNameRegex = Collections.emptyList();
@Builder.ObtainVia(method = "ignoreTableColumnNameRegexes")
private Collection<Pattern> ignoreTableColumnNamePatterns = Collections.emptyList();
public boolean tableIsIgnored(String tableName) {
return ignoreTableNameRegex.stream().anyMatch(regex -> Pattern.matches(regex, tableName));
return ignoreTableNamePatterns.stream().anyMatch(regex -> regex.matcher(tableName).matches());
}
public boolean columnIsIgnored(String column) {
return ignoreTableColumnNameRegex.stream().anyMatch(regex -> Pattern.matches(regex, column));
return ignoreTableColumnNamePatterns.stream().anyMatch(regex -> regex.matcher(column).matches());
}
}

View File

@ -16,8 +16,8 @@ public class TableCondition extends Condition {
.databaseName(condition.getDatabaseName())
.tableName(tableName)
.schemaName(condition.getSchemaName())
.ignoreTableNameRegex(condition.getIgnoreTableNameRegex())
.ignoreTableColumnNameRegex(condition.getIgnoreTableColumnNameRegex())
.ignoreTableNamePatterns(condition.getIgnoreTableNamePatterns())
.ignoreTableColumnNamePatterns(condition.getIgnoreTableColumnNamePatterns())
.build();
}