Revert "optimize MysqlValueProcessor & OracleValueProcessor"

This reverts commit 0d80a36a6fc11c6b360387c7a998f602ed2a0ab4.
This commit is contained in:
zgq
2024-06-28 22:27:05 +08:00
parent 0d80a36a6f
commit c4955bc72b
29 changed files with 347 additions and 415 deletions

View File

@ -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"
}
],

View File

@ -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);
}

View File

@ -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;
}
}

View File

@ -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();
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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());
}
}

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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());
}
}

View File

@ -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)";
}