mirror of
https://github.com/CodePhiliaX/Chat2DB.git
synced 2025-07-29 18:53:12 +08:00
Revert "optimize MysqlValueProcessor & OracleValueProcessor"
This reverts commit 0d80a36a6fc11c6b360387c7a998f602ed2a0ab4.
This commit is contained in:
@ -8,12 +8,10 @@
|
||||
"custom": false,
|
||||
"defaultDriver": true,
|
||||
"downloadJdbcDriverUrls": [
|
||||
"https://cdn.chat2db-ai.com/lib/ojdbc11-21.5.0.0.jar",
|
||||
"https://cdn.chat2db-ai.com/lib/orai18n-21.5.0.0.jar",
|
||||
"https://cdn.chat2db-ai.com/lib/xmlparserv2-21.5.0.0.jar",
|
||||
"https://cdn.chat2db-ai.com/lib/xdb-21.5.0.0.jar"
|
||||
"https://cdn.chat2db-ai.com/lib/ojdbc8-19.3.0.0.jar",
|
||||
"https://cdn.chat2db-ai.com/lib/orai18n-19.3.0.0.jar"
|
||||
],
|
||||
"jdbcDriver": "ojdbc11-21.5.0.0.jar,orai18n-21.5.0.0.jar,xmlparserv2-21.5.0.0.jar,xdb-21.5.0.0.jar",
|
||||
"jdbcDriver": "ojdbc8-19.3.0.0.jar,orai18n-19.3.0.0.jar",
|
||||
"jdbcDriverClass": "oracle.jdbc.driver.OracleDriver"
|
||||
}
|
||||
],
|
||||
|
@ -21,7 +21,7 @@ public class OracleValueProcessor extends DefaultValueProcessor {
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
String type = dataValue.getType();
|
||||
return OracleValueProcessorFactory.getValueProcessor(type).convertJDBCValueByType(dataValue);
|
||||
return OracleValueProcessorFactory.getValueProcessor(dataValue.getType()).convertJDBCValueByType(dataValue);
|
||||
}
|
||||
|
||||
|
||||
|
@ -9,7 +9,7 @@ import java.util.Map;
|
||||
/**
|
||||
* @author: zgq
|
||||
* @date: 2024年06月03日 23:21
|
||||
*/ // TODO: 1.空间数据类型 2.动态类型数据
|
||||
*/ // TODO: 1.空间数据类型 2.XML数据类型 3.动态类型数据 4.ANSI、DB2 和 SQL/DS 数据
|
||||
public class OracleValueProcessorFactory {
|
||||
|
||||
private static final Map<String, DefaultValueProcessor> PROCESSOR_MAP;
|
||||
@ -17,8 +17,6 @@ public class OracleValueProcessorFactory {
|
||||
static {
|
||||
OracleClobProcessor oracleClobProcessor = new OracleClobProcessor();
|
||||
OracleTimeStampProcessor oracleTimeStampProcessor = new OracleTimeStampProcessor();
|
||||
OracleBlobProcessor oracleBlobProcessor = new OracleBlobProcessor();
|
||||
OracleRawValueProcessor oracleRawValueProcessor = new OracleRawValueProcessor();
|
||||
PROCESSOR_MAP = Map.ofEntries(
|
||||
//clob
|
||||
Map.entry(OracleColumnTypeEnum.CLOB.name(), oracleClobProcessor),
|
||||
@ -36,18 +34,14 @@ public class OracleValueProcessorFactory {
|
||||
//number
|
||||
Map.entry(OracleColumnTypeEnum.NUMBER.name(), new OracleNumberProcessor()),
|
||||
//blob
|
||||
Map.entry(OracleColumnTypeEnum.BLOB.name(), oracleBlobProcessor),
|
||||
//raw
|
||||
Map.entry(OracleColumnTypeEnum.RAW.name(), oracleRawValueProcessor),
|
||||
Map.entry(OracleColumnTypeEnum.LONG_RAW.getColumnType().getTypeName(), oracleRawValueProcessor),
|
||||
//xml
|
||||
Map.entry("SYS.XMLTYPE", new OracleXmlValueProcessor())
|
||||
Map.entry(OracleColumnTypeEnum.BLOB.name(), new OracleBlobProcessor())
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
public static DefaultValueProcessor getValueProcessor(String type) {
|
||||
return PROCESSOR_MAP.getOrDefault(type, new DefaultValueProcessor());
|
||||
DefaultValueProcessor processor = PROCESSOR_MAP.get(type);
|
||||
return processor == null ? new DefaultValueProcessor() : processor;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,9 +1,9 @@
|
||||
package ai.chat2db.plugin.oracle.value.sub;
|
||||
|
||||
import ai.chat2db.server.tools.common.util.EasyStringUtils;
|
||||
import ai.chat2db.spi.jdbc.DefaultValueProcessor;
|
||||
import ai.chat2db.spi.model.JDBCDataValue;
|
||||
import ai.chat2db.spi.model.SQLDataValue;
|
||||
import ai.chat2db.spi.sql.Chat2DBContext;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
||||
/**
|
||||
@ -15,17 +15,24 @@ public class OracleBlobProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return EasyStringUtils.quoteString(dataValue.getBlobHexString());
|
||||
return dataValue.getBlobHexString();
|
||||
}
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getBlobString();
|
||||
try {
|
||||
return dataValue.getBlobString();
|
||||
} catch (Exception e) {
|
||||
log.warn("convertJDBCValueByType error database: {} , error dataType: {} ",
|
||||
Chat2DBContext.getDBConfig().getDbType(), dataValue.getType(), e);
|
||||
return super.convertJDBCValueByType(dataValue);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return EasyStringUtils.quoteString(dataValue.getBlobHexString());
|
||||
return dataValue.getBlobHexString();
|
||||
}
|
||||
}
|
||||
|
@ -13,7 +13,7 @@ public class OracleClobProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return EasyStringUtils.escapeAndQuoteString(dataValue.getValue());
|
||||
return wrap(dataValue.getValue());
|
||||
}
|
||||
|
||||
|
||||
@ -25,6 +25,10 @@ public class OracleClobProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return EasyStringUtils.escapeAndQuoteString(dataValue.getClobString());
|
||||
return wrap(dataValue.getClobString());
|
||||
}
|
||||
|
||||
private String wrap(String value) {
|
||||
return EasyStringUtils.escapeAndQuoteString(value);
|
||||
}
|
||||
}
|
||||
|
@ -21,7 +21,7 @@ public class OracleDateProcessor extends DefaultValueProcessor {
|
||||
*/
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapDate(dataValue.getValue());
|
||||
return wrap(dataValue.getValue());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -41,9 +41,16 @@ public class OracleDateProcessor extends DefaultValueProcessor {
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param dataValue
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapDate(convertJDBCValueByType(dataValue));
|
||||
return wrap(convertJDBCValueByType(dataValue));
|
||||
}
|
||||
|
||||
private String wrap(String value) {
|
||||
return String.format(OracleDmlValueTemplate.DATE_TEMPLATE, value);
|
||||
}
|
||||
}
|
||||
|
@ -14,19 +14,22 @@ public class OracleIntervalDSProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapIntervalDayToSecond(dataValue.getValue(), dataValue.getPrecision(), dataValue.getScale());
|
||||
return wrap(dataValue.getValue(), dataValue.getPrecision(), dataValue.getScale());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getStringValue();
|
||||
return super.convertJDBCValueByType(dataValue);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapIntervalDayToSecond(convertJDBCValueByType(dataValue), dataValue.getPrecision(), dataValue.getScale());
|
||||
return wrap(convertJDBCValueByType(dataValue), dataValue.getPrecision(), dataValue.getScale());
|
||||
}
|
||||
|
||||
private String wrap(String value, int precision, int scale) {
|
||||
return String.format(OracleDmlValueTemplate.INTEGER_DAY_TO_SECOND_TEMPLATE, value, precision, scale);
|
||||
}
|
||||
}
|
||||
|
@ -15,18 +15,22 @@ public class OracleIntervalYMProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapIntervalYearToMonth(dataValue.getValue(), dataValue.getPrecision());
|
||||
return wrap(dataValue.getValue(), dataValue.getPrecision());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getStringValue();
|
||||
return super.convertJDBCValueByType(dataValue);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapIntervalYearToMonth(dataValue.getStringValue(), dataValue.getPrecision());
|
||||
return wrap(convertJDBCValueByType(dataValue), dataValue.getPrecision());
|
||||
}
|
||||
|
||||
public String wrap(String value, int precision) {
|
||||
return String.format(OracleDmlValueTemplate.INTEGER_YEAR_TO_MONTH_TEMPLATE, value, precision);
|
||||
}
|
||||
}
|
||||
|
@ -14,7 +14,7 @@ public class OracleNumberProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return dataValue.getValue();
|
||||
return super.convertSQLValueByType(dataValue);
|
||||
}
|
||||
|
||||
|
||||
@ -26,6 +26,6 @@ public class OracleNumberProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getBigDecimalString();
|
||||
return convertJDBCValueByType(dataValue);
|
||||
}
|
||||
}
|
||||
|
@ -1,31 +0,0 @@
|
||||
package ai.chat2db.plugin.oracle.value.sub;
|
||||
|
||||
import ai.chat2db.server.tools.common.util.EasyStringUtils;
|
||||
import ai.chat2db.spi.jdbc.DefaultValueProcessor;
|
||||
import ai.chat2db.spi.model.JDBCDataValue;
|
||||
import ai.chat2db.spi.model.SQLDataValue;
|
||||
|
||||
/**
|
||||
* @author: zgq
|
||||
* @date: 2024年06月28日 下午1:59
|
||||
*/
|
||||
public class OracleRawValueProcessor extends DefaultValueProcessor {
|
||||
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return EasyStringUtils.quoteString(dataValue.getValue());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getBinaryDataString();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return EasyStringUtils.quoteString(dataValue.getBlobHexString());
|
||||
}
|
||||
}
|
@ -24,6 +24,7 @@ public class OracleTimeStampProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
// TODO: datagrip对timestampLTZ的处理是不受时区影响的,但其实这个字段就是为了可以协同时区问题的,有待商讨
|
||||
Timestamp timestamp = dataValue.getTimestamp();
|
||||
int scale = dataValue.getScale();
|
||||
LocalDateTime localDateTime = timestamp.toLocalDateTime();
|
||||
@ -44,8 +45,8 @@ public class OracleTimeStampProcessor extends DefaultValueProcessor {
|
||||
|
||||
private String wrap(String value, int scale) {
|
||||
if (scale == 0) {
|
||||
return OracleDmlValueTemplate.wrapDate(value);
|
||||
return String.format(OracleDmlValueTemplate.DATE_TEMPLATE, value);
|
||||
}
|
||||
return OracleDmlValueTemplate.wrapTimestamp(value, scale);
|
||||
return String.format(OracleDmlValueTemplate.TIMESTAMP_TEMPLATE, value, scale);
|
||||
}
|
||||
}
|
||||
|
@ -21,19 +21,21 @@ public class OracleTimeStampTZProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getStringValue();
|
||||
// TODO: return:2024-06-05 17:32:52.849 +8:00 but it actually is 2024-06-05 17:32:52.849000 +8:00
|
||||
return super.convertJDBCValueByType(dataValue);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return wrap(dataValue.getStringValue(), dataValue.getScale());
|
||||
return wrap(convertJDBCValueByType(dataValue), dataValue.getScale());
|
||||
}
|
||||
|
||||
private String wrap(String value, int scale) {
|
||||
if (scale == 0) {
|
||||
return OracleDmlValueTemplate.wrapTimestampTzWithOutNanos(value);
|
||||
return String.format(OracleDmlValueTemplate.TIMESTAMP_TZ_WITHOUT_NANOS_TEMPLATE, value);
|
||||
}
|
||||
return OracleDmlValueTemplate.wrapTimestampTz(value, scale);
|
||||
return String.format(OracleDmlValueTemplate.TIMESTAMP_TZ_TEMPLATE, value, scale);
|
||||
}
|
||||
}
|
||||
|
@ -1,30 +0,0 @@
|
||||
package ai.chat2db.plugin.oracle.value.sub;
|
||||
|
||||
import ai.chat2db.plugin.oracle.value.template.OracleDmlValueTemplate;
|
||||
import ai.chat2db.spi.jdbc.DefaultValueProcessor;
|
||||
import ai.chat2db.spi.model.JDBCDataValue;
|
||||
import ai.chat2db.spi.model.SQLDataValue;
|
||||
|
||||
/**
|
||||
* @author: zgq
|
||||
* @date: 2024年06月21日 12:55
|
||||
*/
|
||||
public class OracleXmlValueProcessor extends DefaultValueProcessor {
|
||||
|
||||
@Override
|
||||
public String convertSQLValueByType(SQLDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapXml(dataValue.getValue());
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueByType(JDBCDataValue dataValue) {
|
||||
return dataValue.getStringValue();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String convertJDBCValueStrByType(JDBCDataValue dataValue) {
|
||||
return OracleDmlValueTemplate.wrapXml(dataValue.getString());
|
||||
}
|
||||
}
|
@ -13,38 +13,6 @@ public class OracleDmlValueTemplate {
|
||||
public static final String TIMESTAMP_TZ_TEMPLATE = "TO_TIMESTAMP_TZ('%s', 'YYYY-MM-DD HH24:MI:SS.FF%d TZH:TZM')";
|
||||
public static final String TIMESTAMP_TZ_WITHOUT_NANOS_TEMPLATE = "TO_TIMESTAMP_TZ('%s', 'YYYY-MM-DD HH24:MI:SS TZH:TZM')";
|
||||
|
||||
public static final String INTERVAL_YEAR_TO_MONTH_TEMPLATE = "INTERVAL '%s' YEAR(%d) TO MONTH";
|
||||
public static final String INTERVAL_DAY_TO_SECOND_TEMPLATE = "INTERVAL '%s' DAY(%d) TO SECOND(%d)";
|
||||
|
||||
public static final String XML_TEMPLATE = "XMLType('%s')";
|
||||
|
||||
|
||||
public static String wrapDate(String date) {
|
||||
return String.format(DATE_TEMPLATE, date);
|
||||
}
|
||||
|
||||
public static String wrapTimestamp(String timestamp, int scale) {
|
||||
return String.format(TIMESTAMP_TEMPLATE, timestamp, scale);
|
||||
}
|
||||
|
||||
public static String wrapTimestampTz(String timestamp, int scale) {
|
||||
return String.format(TIMESTAMP_TZ_TEMPLATE, timestamp, scale);
|
||||
}
|
||||
|
||||
public static String wrapTimestampTzWithOutNanos(String timestamp) {
|
||||
return String.format(TIMESTAMP_TZ_WITHOUT_NANOS_TEMPLATE, timestamp);
|
||||
}
|
||||
|
||||
public static String wrapIntervalYearToMonth(String year, int precision) {
|
||||
return String.format(INTERVAL_YEAR_TO_MONTH_TEMPLATE, year, precision);
|
||||
}
|
||||
|
||||
public static String wrapIntervalDayToSecond(String day, int precision, int scale) {
|
||||
return String.format(INTERVAL_DAY_TO_SECOND_TEMPLATE, day, precision, scale);
|
||||
}
|
||||
|
||||
public static String wrapXml(String xml) {
|
||||
return String.format(XML_TEMPLATE, xml);
|
||||
}
|
||||
|
||||
public static final String INTEGER_YEAR_TO_MONTH_TEMPLATE = "INTERVAL '%s' YEAR(%d) TO MONTH";
|
||||
public static final String INTEGER_DAY_TO_SECOND_TEMPLATE = "INTERVAL '%s' DAY(%d) TO SECOND(%d)";
|
||||
}
|
||||
|
Reference in New Issue
Block a user