001/** 002 * Copyright (c) 2022-2023, Mybatis-Flex (fuhai999@gmail.com). 003 * <p> 004 * Licensed under the Apache License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * <p> 008 * http://www.apache.org/licenses/LICENSE-2.0 009 * <p> 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016package com.mybatisflex.core.dialect.impl; 017 018import com.mybatisflex.core.dialect.KeywordWrap; 019import com.mybatisflex.core.dialect.LimitOffsetProcesser; 020import com.mybatisflex.core.util.CollectionUtil; 021import com.mybatisflex.core.util.StringUtil; 022 023import java.util.*; 024 025public class OracleDialect extends CommonsDialectImpl { 026 027 private boolean caseSensitive; 028 private final Set<String> keywords = CollectionUtil.newHashSet( 029 "ACCESS", "ADD", "ALL", "ALTER", 030 "AND", "ANY", "ARRAYLEN", "AS", 031 "ASC", "AUDIT", "BETWEEN", "BY", 032 "CHAR", "CHECK", "CLUSTER", "COLUMN", 033 "COMMENT", "COMPRESS", "CONNECT", "CREATE", 034 "CURRENT", "DATE", "DECIMAL", "DEFAULT", 035 "DELETE", "DESC", "DISTINCT", "DROP", 036 "ELSE", "EXCLUSIVE", "EXISTS", "FILE", 037 "FLOAT", "FOR", "FROM", "GRANT", 038 "GROUP", "HAVING", "IDENTIFIED", "IMMEDIATE", 039 "IN", "INCREMENT", "INDEX", "INITIAL", 040 "INSERT", "INTEGER", "INTERSECT", "INTO", 041 "IS", "LEVEL", "LIKE", "LOCK", 042 "LONG", "MAXEXTENTS", "MINUS", "MODE", 043 "MODIFY", "NOAUDIT", "NOCOMPRESS", "NOT", 044 "NOTFOUND", "NOWAIT", "NULL", "NUMBER", 045 "OF", "OFFLINE", "ON", "ONLINE", 046 "OPTION", "OR", "ORDER", "PCTFREE", 047 "PRIOR", "PRIVILEGES", "PUBLIC", "RAW", 048 "RENAME", "RESOURCE", "REVOKE", "ROW", 049 "ROWID", "ROWLABEL", "ROWNUM", "ROWS", 050 "START", "SELECT", "SESSION", "SET", 051 "SHARE", "SIZE", "SMALLINT", "SQLBUF", 052 "SUCCESSFUL", "SYNONYM", "SYSDATE", "TABLE", 053 "THEN", "TO", "TRIGGER", "UID", 054 "UNION", "UNIQUE", "UPDATE", "USER", 055 "VALIDATE", "VALUES", "VARCHAR", "VARCHAR2" 056 ); 057 058 public OracleDialect(LimitOffsetProcesser limitOffsetProcesser) { 059 super(KeywordWrap.NONE, limitOffsetProcesser); 060 } 061 062 public boolean isCaseSensitive() { 063 return caseSensitive; 064 } 065 066 public void setCaseSensitive(boolean caseSensitive) { 067 this.caseSensitive = caseSensitive; 068 } 069 070 @Override 071 public String wrap(String keyword) { 072 if (StringUtil.isBlank(keyword)) { 073 return ""; 074 } 075 if (caseSensitive || keywords.contains(keyword.toUpperCase(Locale.ENGLISH))) { 076 return "\"" + keyword + "\""; 077 } 078 return keyword; 079 } 080}