!22 OracleDialect默认不加双引号

Merge pull request !22 from MyronLi/main
This commit is contained in:
Michael Yang 2023-05-03 03:39:15 +00:00 committed by Gitee
commit 7eddc8eeae
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 47 additions and 18 deletions

View File

@ -106,7 +106,7 @@ public class DialectFactory {
case CSIIDB: case CSIIDB:
return new CommonsDialectImpl(KeywordWrap.BACKQUOTE, LimitOffsetProcesser.MYSQL); return new CommonsDialectImpl(KeywordWrap.BACKQUOTE, LimitOffsetProcesser.MYSQL);
case ORACLE: case ORACLE:
return new OracleDialect(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.ORACLE); return new OracleDialect(LimitOffsetProcesser.ORACLE);
case DM: case DM:
case GAUSS: case GAUSS:
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.ORACLE); return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.ORACLE);
@ -125,7 +125,7 @@ public class DialectFactory {
case UXDB: case UXDB:
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.POSTGRESQL); return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.POSTGRESQL);
case ORACLE_12C: case ORACLE_12C:
return new OracleDialect(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.DERBY); return new OracleDialect(LimitOffsetProcesser.DERBY);
case FIREBIRD: case FIREBIRD:
return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.DERBY); return new CommonsDialectImpl(KeywordWrap.DOUBLE_QUOTATION, LimitOffsetProcesser.DERBY);
case SQLSERVER: case SQLSERVER:

View File

@ -19,34 +19,63 @@ import com.mybatisflex.core.dialect.KeywordWrap;
import com.mybatisflex.core.dialect.LimitOffsetProcesser; import com.mybatisflex.core.dialect.LimitOffsetProcesser;
import com.mybatisflex.core.util.StringUtil; import com.mybatisflex.core.util.StringUtil;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
public class OracleDialect extends CommonsDialectImpl { public class OracleDialect extends CommonsDialectImpl {
private boolean toUpperCase = true; private boolean caseSensitive;
private final List<String> keywords = Arrays.asList(
public OracleDialect() { "ACCESS", "ADD", "ALL", "ALTER",
} "AND", "ANY", "ARRAYLEN", "AS",
"ASC", "AUDIT", "BETWEEN", "BY",
"CHAR", "CHECK", "CLUSTER", "COLUMN",
"COMMENT", "COMPRESS", "CONNECT", "CREATE",
"CURRENT", "DATE", "DECIMAL", "DEFAULT",
"DELETE", "DESC", "DISTINCT", "DROP",
"ELSE", "EXCLUSIVE", "EXISTS", "FILE",
"FLOAT", "FOR", "FROM", "GRANT",
"GROUP", "HAVING", "IDENTIFIED", "IMMEDIATE",
"IN", "INCREMENT", "INDEX", "INITIAL",
"INSERT", "INTEGER", "INTERSECT", "INTO",
"IS", "LEVEL", "LIKE", "LOCK",
"LONG", "MAXEXTENTS", "MINUS", "MODE",
"MODIFY", "NOAUDIT", "NOCOMPRESS", "NOT",
"NOTFOUND", "NOWAIT", "NULL", "NUMBER",
"OF", "OFFLINE", "ON", "ONLINE",
"OPTION", "OR", "ORDER", "PCTFREE",
"PRIOR", "PRIVILEGES", "PUBLIC", "RAW",
"RENAME", "RESOURCE", "REVOKE", "ROW",
"ROWID", "ROWLABEL", "ROWNUM", "ROWS",
"START", "SELECT", "SESSION", "SET",
"SHARE", "SIZE", "SMALLINT", "SQLBUF",
"SUCCESSFUL", "SYNONYM", "SYSDATE", "TABLE",
"THEN", "TO", "TRIGGER", "UID",
"UNION", "UNIQUE", "UPDATE", "USER",
"VALIDATE", "VALUES", "VARCHAR", "VARCHAR2"
);
public OracleDialect(LimitOffsetProcesser limitOffsetProcesser) { public OracleDialect(LimitOffsetProcesser limitOffsetProcesser) {
super(limitOffsetProcesser); super(KeywordWrap.NONE, limitOffsetProcesser);
} }
public OracleDialect(KeywordWrap keywordWrap, LimitOffsetProcesser limitOffsetProcesser) { public boolean isCaseSensitive() {
super(keywordWrap, limitOffsetProcesser); return caseSensitive;
} }
public boolean isToUpperCase() { public void setCaseSensitive(boolean caseSensitive) {
return toUpperCase; this.caseSensitive = caseSensitive;
}
public void setToUpperCase(boolean toUpperCase) {
this.toUpperCase = toUpperCase;
} }
@Override @Override
public String wrap(String keyword) { public String wrap(String keyword) {
if (StringUtil.isNotBlank(keyword)) { if (StringUtil.isBlank(keyword)) {
return super.wrap(toUpperCase ? keyword.toUpperCase() : keyword);
}
return ""; return "";
} }
if (caseSensitive || keywords.contains(keyword.toUpperCase(Locale.ENGLISH))) {
return "\"" + keyword + "\"";
}
return keyword;
}
} }