|
@@ -9,6 +9,7 @@ import org.dbsyncer.connector.constant.DatabaseConstant;
|
|
|
import org.dbsyncer.connector.database.AbstractDatabaseConnector;
|
|
|
import org.dbsyncer.connector.database.DatabaseConnectorMapper;
|
|
|
import org.dbsyncer.connector.enums.TableTypeEnum;
|
|
|
+import org.dbsyncer.connector.model.Field;
|
|
|
import org.dbsyncer.connector.model.PageSql;
|
|
|
import org.dbsyncer.connector.model.Table;
|
|
|
|
|
@@ -29,6 +30,11 @@ public final class SqlServerConnector extends AbstractDatabaseConnector {
|
|
|
*/
|
|
|
private final String SYS_EXPRESSION = "(convert\\().+?(\\))|(varchar\\().+?(\\))|(getdate\\(\\))";
|
|
|
|
|
|
+ /**
|
|
|
+ * 系统关键字段名
|
|
|
+ */
|
|
|
+ private final String SYS_FIELD_EXPRESSION = "(convert)";
|
|
|
+
|
|
|
@Override
|
|
|
public List<Table> getTable(DatabaseConnectorMapper connectorMapper) {
|
|
|
DatabaseConfig config = connectorMapper.getConfig();
|
|
@@ -51,15 +57,20 @@ public final class SqlServerConnector extends AbstractDatabaseConnector {
|
|
|
return new Object[]{(pageIndex - 1) * pageSize + 1, pageIndex * pageSize};
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public String buildFieldName(Field field) {
|
|
|
+ // 处理系统关键字
|
|
|
+ if (containsKeyword(SYS_FIELD_EXPRESSION, field.getName())) {
|
|
|
+ return new StringBuilder("[").append(field.getName()).append("]").toString();
|
|
|
+ }
|
|
|
+ return field.getName();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
protected String buildSqlFilterWithQuotation(String value) {
|
|
|
- if (StringUtil.isNotBlank(value)) {
|
|
|
- String val = value.toLowerCase();
|
|
|
- // 支持SqlServer系统函数, Example: (select CONVERT(varchar(10),GETDATE(),120))
|
|
|
- Matcher matcher = Pattern.compile(SYS_EXPRESSION).matcher(val);
|
|
|
- if (matcher.find()) {
|
|
|
- return StringUtil.EMPTY;
|
|
|
- }
|
|
|
+ // 支持SqlServer系统函数, Example: (select CONVERT(varchar(10),GETDATE(),120))
|
|
|
+ if (containsKeyword(SYS_EXPRESSION, value)) {
|
|
|
+ return StringUtil.EMPTY;
|
|
|
}
|
|
|
return super.buildSqlFilterWithQuotation(value);
|
|
|
}
|
|
@@ -84,4 +95,19 @@ public final class SqlServerConnector extends AbstractDatabaseConnector {
|
|
|
}
|
|
|
return new ArrayList<>();
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 是否包含系统关键字
|
|
|
+ *
|
|
|
+ * @param regex
|
|
|
+ * @param val
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean containsKeyword(String regex, String val) {
|
|
|
+ if (StringUtil.isNotBlank(val)) {
|
|
|
+ Matcher matcher = Pattern.compile(regex).matcher(val.toLowerCase());
|
|
|
+ return matcher.find();
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
}
|