mirror of
https://github.com/alibaba/DataX.git
synced 2025-05-03 03:59:07 +08:00
修复了由于SQL中的保留字作为表名或者字段名而引起的sql错误
This commit is contained in:
parent
4e916b0f4b
commit
738c11e0e3
@ -37,20 +37,17 @@ public class OceanBaseReader extends Reader {
|
||||
if (userConfigedFetchSize != null) {
|
||||
LOG.warn("The [fetchSize] is not recognized, please use readBatchSize instead.");
|
||||
}
|
||||
|
||||
this.originalConfig.set(Constant.FETCH_SIZE, Integer.MIN_VALUE);
|
||||
|
||||
setDatabaseType(originalConfig);
|
||||
|
||||
|
||||
|
||||
this.readerJob = new ReaderJob();
|
||||
this.readerJob.init(this.originalConfig, DATABASE_TYPE);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void prepare() {
|
||||
//ObReaderUtils.DATABASE_TYPE获取当前数据库的语法模式
|
||||
}
|
||||
|
||||
@Override
|
||||
public void preCheck() {
|
||||
init();
|
||||
@ -97,10 +94,10 @@ public class OceanBaseReader extends Reader {
|
||||
if (ObReaderUtils.isOracleMode(compatibleMode)) {
|
||||
ObReaderUtils.DATABASE_TYPE = DataBaseType.OceanBase;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
LOG.warn("error in get compatible mode, using mysql as default: " + e.getMessage());
|
||||
}
|
||||
finally {
|
||||
} finally {
|
||||
DATABASE_TYPE = ObReaderUtils.DATABASE_TYPE;
|
||||
}
|
||||
}
|
||||
|
@ -1,24 +1,31 @@
|
||||
package com.alibaba.datax.plugin.reader.oceanbasev10reader.util;
|
||||
|
||||
//java api
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
//dataX api
|
||||
import com.alibaba.datax.plugin.rdbms.util.DataBaseType;
|
||||
|
||||
//该类用于转义数据库中的关键字
|
||||
/**
|
||||
* 该类用于转义数据库中的关键字
|
||||
*
|
||||
* @author:qianzhang
|
||||
*/
|
||||
public class DatabaseKeywordTransformer {
|
||||
private static DataBaseType databaseType;
|
||||
static HashSet<String> databaseKeywords;
|
||||
private static HashSet<String> keywordsFromString2HashSet(final String Keywords){
|
||||
String[] keywordArray =Keywords.split(",");
|
||||
|
||||
private static HashSet<String> keywordsFromString2HashSet(final String keywords) {
|
||||
String[] keywordArray = keywords.split(",");
|
||||
HashSet<String> res = new HashSet<String>();
|
||||
for (String keyword : keywordArray) {
|
||||
res.add(keyword);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
public static void setDatabaseType(final DataBaseType databaseType) throws Exception {
|
||||
if (databaseType == DatabaseKeywordTransformer.databaseType) {
|
||||
return;
|
||||
@ -26,14 +33,11 @@ public class DatabaseKeywordTransformer {
|
||||
DatabaseKeywordTransformer.databaseType = databaseType;
|
||||
if (databaseType == DataBaseType.MySql) {
|
||||
databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.MYSQL_KEYWORDS);
|
||||
}
|
||||
else if(databaseType==DataBaseType.Oracle || databaseType==DataBaseType.OceanBase){
|
||||
} else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) {
|
||||
databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.ORACLE_KEYWORDS);
|
||||
}
|
||||
else if(databaseType==DataBaseType.SQLServer){
|
||||
} else if (databaseType == DataBaseType.SQLServer) {
|
||||
databaseKeywords = keywordsFromString2HashSet(DatabaseKeywords.SQLSERVER_KEYWORDS);
|
||||
}
|
||||
else{
|
||||
} else {
|
||||
throw new Exception("sorry,unknown database tpye...");
|
||||
}
|
||||
}
|
||||
@ -44,11 +48,9 @@ public class DatabaseKeywordTransformer {
|
||||
if (databaseKeywords.contains(keyword)) {
|
||||
if (databaseType == DataBaseType.MySql) {
|
||||
keyword = '`' + keyword + '`';
|
||||
}
|
||||
else if(databaseType==DataBaseType.Oracle || databaseType==DataBaseType.OceanBase){
|
||||
} else if (databaseType == DataBaseType.Oracle || databaseType == DataBaseType.OceanBase) {
|
||||
keyword = '"' + keyword + '"';
|
||||
}
|
||||
else if(databaseType==DataBaseType.SQLServer){
|
||||
} else if (databaseType == DataBaseType.SQLServer) {
|
||||
keyword = '[' + keyword + ']';
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user