diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlValueProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlValueProcessor.java index 473af423..5e53f0e8 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlValueProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlValueProcessor.java @@ -1,11 +1,10 @@ package ai.chat2db.plugin.mysql.value; -import ai.chat2db.plugin.mysql.type.MysqlColumnTypeEnum; +import ai.chat2db.plugin.mysql.value.factory.MysqlValueProcessorFactory; import ai.chat2db.spi.jdbc.DefaultValueProcessor; import ai.chat2db.spi.model.JDBCDataValue; import ai.chat2db.spi.model.SQLDataValue; -import java.util.Map; import java.util.Set; /** @@ -16,31 +15,6 @@ import java.util.Set; * attribute: [zerofill] example tinyint[5] zerofill 34->00034 */ public class MysqlValueProcessor extends DefaultValueProcessor { - - private static final Set GEOMETRY_TYPE = Set.of(MysqlColumnTypeEnum.GEOMETRY.name() - , MysqlColumnTypeEnum.POINT.name() - , MysqlColumnTypeEnum.LINESTRING.name() - , MysqlColumnTypeEnum.POLYGON.name() - , MysqlColumnTypeEnum.MULTIPOINT.name() - , MysqlColumnTypeEnum.MULTILINESTRING.name() - , MysqlColumnTypeEnum.MULTIPOLYGON.name() - , MysqlColumnTypeEnum.GEOMETRYCOLLECTION.name()); - - public static final Set BINARY_TYPE = Set.of(MysqlColumnTypeEnum.VARBINARY.name() - , MysqlColumnTypeEnum.BLOB.name() - , MysqlColumnTypeEnum.LONGBLOB.name() - , MysqlColumnTypeEnum.TINYBLOB.name() - , MysqlColumnTypeEnum.MEDIUMBLOB.name()); - - public static final Set DATE_TYPE = Set.of(MysqlColumnTypeEnum.TIMESTAMP.name(), - MysqlColumnTypeEnum.DATETIME.name()); - - private static final Map PROCESSOR_MAP = Map.of( - MysqlColumnTypeEnum.BIT.name(), new MysqlBitProcessor(), - MysqlColumnTypeEnum.YEAR.name(), new MysqlYearProcessor(), - MysqlColumnTypeEnum.DECIMAL.name(), new MysqlDecimalProcessor(), - MysqlColumnTypeEnum.BINARY.name(), new MysqlBinaryProcessor() - ); public static final Set FUNCTION_SET = Set.of("now()", "default"); @Override @@ -48,46 +22,16 @@ public class MysqlValueProcessor extends DefaultValueProcessor { if (FUNCTION_SET.contains(dataValue.getValue().toLowerCase())) { return dataValue.getValue(); } - String dataType = dataValue.getDateTypeName(); - if (GEOMETRY_TYPE.contains(dataType.toUpperCase())) { - return new MysqlGeometryProcessor().convertSQLValueByType(dataValue); - } - if (BINARY_TYPE.contains(dataType)) { - return new MysqlVarBinaryProcessor().convertSQLValueByType(dataValue); - } - if (DATE_TYPE.contains(dataType)) { - return new MysqlTimestampProcessor().convertSQLValueByType(dataValue); - } - return PROCESSOR_MAP.getOrDefault(dataType, new DefaultValueProcessor()).convertSQLValueByType(dataValue); + return MysqlValueProcessorFactory.getValueProcessor(dataValue.getDateTypeName()).convertSQLValueByType(dataValue); } @Override public String convertJDBCValueByType(JDBCDataValue dataValue) { - String dataType = dataValue.getType(); - if (GEOMETRY_TYPE.contains(dataType.toUpperCase())) { - return new MysqlGeometryProcessor().convertJDBCValueByType(dataValue); - } - if (BINARY_TYPE.contains(dataType)) { - return new MysqlVarBinaryProcessor().convertJDBCValueByType(dataValue); - } - if (DATE_TYPE.contains(dataType)) { - return new MysqlTimestampProcessor().convertJDBCValueByType(dataValue); - } - return PROCESSOR_MAP.getOrDefault(dataType, new DefaultValueProcessor()).convertJDBCValueByType(dataValue); + return MysqlValueProcessorFactory.getValueProcessor(dataValue.getType()).convertJDBCValueByType(dataValue); } @Override public String convertJDBCValueStrByType(JDBCDataValue dataValue) { - String dataType = dataValue.getType(); - if (GEOMETRY_TYPE.contains(dataType.toUpperCase())) { - return new MysqlGeometryProcessor().convertJDBCValueStrByType(dataValue); - } - if (BINARY_TYPE.contains(dataType)) { - return new MysqlVarBinaryProcessor().convertJDBCValueStrByType(dataValue); - } - if (DATE_TYPE.contains(dataType)) { - return new MysqlTimestampProcessor().convertJDBCValueStrByType(dataValue); - } - return PROCESSOR_MAP.getOrDefault(dataType, new DefaultValueProcessor()).convertJDBCValueStrByType(dataValue); + return MysqlValueProcessorFactory.getValueProcessor(dataValue.getType()).convertJDBCValueStrByType(dataValue); } } diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/factory/MysqlValueProcessorFactory.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/factory/MysqlValueProcessorFactory.java new file mode 100644 index 00000000..43f29e54 --- /dev/null +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/factory/MysqlValueProcessorFactory.java @@ -0,0 +1,52 @@ +package ai.chat2db.plugin.mysql.value.factory; + +import ai.chat2db.plugin.mysql.type.MysqlColumnTypeEnum; +import ai.chat2db.plugin.mysql.value.sub.*; +import ai.chat2db.plugin.mysql.value.template.sub.*; +import ai.chat2db.spi.jdbc.DefaultValueProcessor; + +import java.util.Map; + +/** + * @author: zgq + * @date: 2024年06月03日 23:16 + */ +public class MysqlValueProcessorFactory { + + private static final Map PROCESSOR_MAP; + + static { + MysqlGeometryProcessor mysqlGeometryProcessor = new MysqlGeometryProcessor(); + MysqlVarBinaryProcessor mysqlVarBinaryProcessor = new MysqlVarBinaryProcessor(); + MysqlTimestampProcessor mysqlTimestampProcessor = new MysqlTimestampProcessor(); + PROCESSOR_MAP = Map.ofEntries( + // geometry + Map.entry(MysqlColumnTypeEnum.GEOMETRY.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.POINT.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.LINESTRING.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.POLYGON.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.MULTIPOINT.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.MULTILINESTRING.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.MULTIPOLYGON.name(), mysqlGeometryProcessor), + Map.entry(MysqlColumnTypeEnum.GEOMETRYCOLLECTION.name(), mysqlGeometryProcessor), + // binary + Map.entry(MysqlColumnTypeEnum.BLOB.name(), mysqlVarBinaryProcessor), + Map.entry(MysqlColumnTypeEnum.LONGBLOB.name(), mysqlVarBinaryProcessor), + Map.entry(MysqlColumnTypeEnum.TINYBLOB.name(), mysqlVarBinaryProcessor), + Map.entry(MysqlColumnTypeEnum.MEDIUMBLOB.name(), mysqlVarBinaryProcessor), + // timestamp + Map.entry(MysqlColumnTypeEnum.TIMESTAMP.name(), mysqlTimestampProcessor), + Map.entry(MysqlColumnTypeEnum.DATETIME.name(), mysqlTimestampProcessor), + //others + Map.entry(MysqlColumnTypeEnum.BIT.name(), new MysqlBitProcessor()), + Map.entry(MysqlColumnTypeEnum.YEAR.name(), new MysqlYearProcessor()), + Map.entry(MysqlColumnTypeEnum.DECIMAL.name(), new MysqlDecimalProcessor()), + Map.entry(MysqlColumnTypeEnum.BINARY.name(), new MysqlBinaryProcessor()) + ); + } + + public static DefaultValueProcessor getValueProcessor(String type) { + DefaultValueProcessor processor = PROCESSOR_MAP.get(type); + return processor==null?new DefaultValueProcessor():processor; + } +} diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlBinaryProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlBinaryProcessor.java similarity index 95% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlBinaryProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlBinaryProcessor.java index a378e0d5..411d7d4f 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlBinaryProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlBinaryProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.plugin.mysql.value.template.MysqlDmlValueTemplate; import ai.chat2db.spi.jdbc.DefaultValueProcessor; diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlBitProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlBitProcessor.java similarity index 97% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlBitProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlBitProcessor.java index 0389d3f4..2cba0e86 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlBitProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlBitProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.plugin.mysql.value.template.MysqlDmlValueTemplate; import ai.chat2db.server.tools.common.util.EasyStringUtils; diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlDecimalProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlDecimalProcessor.java similarity index 93% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlDecimalProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlDecimalProcessor.java index 436a444e..9b29f23e 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlDecimalProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlDecimalProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.spi.jdbc.DefaultValueProcessor; import ai.chat2db.spi.model.JDBCDataValue; diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlGeometryProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlGeometryProcessor.java similarity index 98% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlGeometryProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlGeometryProcessor.java index 3021ea93..76f05f98 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlGeometryProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlGeometryProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.plugin.mysql.value.template.MysqlDmlValueTemplate; import ai.chat2db.spi.jdbc.DefaultValueProcessor; diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlTimestampProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlTimestampProcessor.java similarity index 96% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlTimestampProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlTimestampProcessor.java index 9af8510e..93f0897f 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlTimestampProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlTimestampProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.plugin.mysql.value.template.MysqlDmlValueTemplate; import ai.chat2db.spi.jdbc.DefaultValueProcessor; diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlVarBinaryProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlVarBinaryProcessor.java similarity index 98% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlVarBinaryProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlVarBinaryProcessor.java index 187631b8..1624daec 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlVarBinaryProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlVarBinaryProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.plugin.mysql.value.template.MysqlDmlValueTemplate; import ai.chat2db.spi.model.JDBCDataValue; diff --git a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlYearProcessor.java b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlYearProcessor.java similarity index 97% rename from chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlYearProcessor.java rename to chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlYearProcessor.java index d47419b7..db9f7831 100644 --- a/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/MysqlYearProcessor.java +++ b/chat2db-server/chat2db-plugins/chat2db-mysql/src/main/java/ai/chat2db/plugin/mysql/value/sub/MysqlYearProcessor.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.mysql.value; +package ai.chat2db.plugin.mysql.value.sub; import ai.chat2db.spi.jdbc.DefaultValueProcessor; import ai.chat2db.spi.model.JDBCDataValue; diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/OracleValueProcessor.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/OracleValueProcessor.java new file mode 100644 index 00000000..25bf8540 --- /dev/null +++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/OracleValueProcessor.java @@ -0,0 +1,30 @@ +package ai.chat2db.plugin.oracle.value; + +import ai.chat2db.spi.jdbc.DefaultValueProcessor; +import ai.chat2db.spi.model.JDBCDataValue; +import ai.chat2db.spi.model.SQLDataValue; + +/** + * @author: zgq + * @date: 2024年06月03日 22:30 + */ +public class OracleValueProcessor extends DefaultValueProcessor { + + + @Override + public String convertSQLValueByType(SQLDataValue dataValue) { + return super.convertSQLValueByType(dataValue); + } + + + @Override + public String convertJDBCValueByType(JDBCDataValue dataValue) { + return super.convertJDBCValueByType(dataValue); + } + + + @Override + public String convertJDBCValueStrByType(JDBCDataValue dataValue) { + return super.convertJDBCValueStrByType(dataValue); + } +} diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/factory/OracleValueProcessorFactory.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/factory/OracleValueProcessorFactory.java new file mode 100644 index 00000000..4ed86f2b --- /dev/null +++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/factory/OracleValueProcessorFactory.java @@ -0,0 +1,9 @@ +package ai.chat2db.plugin.oracle.value.factory; + +/** + * @author: zgq + * @date: 2024年06月03日 23:21 + */ +public class OracleValueProcessorFactory { + +} diff --git a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/template/OracleDmlValueTemplate.java b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/template/OracleDmlValueTemplate.java similarity index 79% rename from chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/template/OracleDmlValueTemplate.java rename to chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/template/OracleDmlValueTemplate.java index 52da8412..eb9a70db 100644 --- a/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/template/OracleDmlValueTemplate.java +++ b/chat2db-server/chat2db-plugins/chat2db-oracle/src/main/java/ai/chat2db/plugin/oracle/value/template/OracleDmlValueTemplate.java @@ -1,4 +1,4 @@ -package ai.chat2db.plugin.oracle.template; +package ai.chat2db.plugin.oracle.value.template; /** * @author: zgq