From 5b9728282b184f0cc66616fc142c1d5666007c0d Mon Sep 17 00:00:00 2001 From: vran Date: Thu, 12 May 2022 13:42:28 +0800 Subject: [PATCH] feat: pre compile regex when sync document (#171) --- .../main/java/com/databasir/core/Databasir.java | 14 ++++++++++++-- .../core/meta/provider/condition/Condition.java | 10 ++++++---- .../meta/provider/condition/TableCondition.java | 4 ++-- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/meta/src/main/java/com/databasir/core/Databasir.java b/meta/src/main/java/com/databasir/core/Databasir.java index 36ea9f9..16f4c9b 100644 --- a/meta/src/main/java/com/databasir/core/Databasir.java +++ b/meta/src/main/java/com/databasir/core/Databasir.java @@ -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 get(Connection connection, String databaseName, String schemaName) { + // pre compile regex + List ignoreTableColumnPatterns = config.getIgnoreTableColumnNameRegex().stream() + .map(Pattern::compile) + .collect(Collectors.toList()); + List 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) diff --git a/meta/src/main/java/com/databasir/core/meta/provider/condition/Condition.java b/meta/src/main/java/com/databasir/core/meta/provider/condition/Condition.java index d2d457f..2ff7523 100644 --- a/meta/src/main/java/com/databasir/core/meta/provider/condition/Condition.java +++ b/meta/src/main/java/com/databasir/core/meta/provider/condition/Condition.java @@ -19,16 +19,18 @@ public class Condition { private String schemaName; @Builder.Default - private Collection ignoreTableNameRegex = Collections.emptyList(); + @Builder.ObtainVia(method = "ignoreTableNameRegexes") + private Collection ignoreTableNamePatterns = Collections.emptyList(); @Builder.Default - private Collection ignoreTableColumnNameRegex = Collections.emptyList(); + @Builder.ObtainVia(method = "ignoreTableColumnNameRegexes") + private Collection 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()); } } diff --git a/meta/src/main/java/com/databasir/core/meta/provider/condition/TableCondition.java b/meta/src/main/java/com/databasir/core/meta/provider/condition/TableCondition.java index 21cdcd3..590e64e 100644 --- a/meta/src/main/java/com/databasir/core/meta/provider/condition/TableCondition.java +++ b/meta/src/main/java/com/databasir/core/meta/provider/condition/TableCondition.java @@ -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(); }