/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package ro.nextreports.engine.querybuilder.sql.dialect; import java.sql.Types; import ro.nextreports.engine.util.ProcUtil; /** * An SQL dialect for Oracle. * * @author Decebal Suiu */ public class OracleDialect extends AbstractDialect { // property used by oracle driver to allow for jdbc url of type : // jdbc:oracle:thin:@<database> // where <database> is the database name in the tnsnames.ora file public static String ORACLE_CLIENT_PROPERTY = "oracle.net.tns_admin"; public OracleDialect() { super(); registerColumnType("bit", Types.BIT); registerColumnType("bigint", Types.INTEGER); registerColumnType("smallint", Types.SMALLINT); registerColumnType("tinyint", Types.TINYINT); registerColumnType("integer", Types.INTEGER); registerColumnType("int", Types.INTEGER); registerColumnType("float", Types.FLOAT); registerColumnType("decimal", Types.INTEGER); registerColumnType("double", Types.DOUBLE); registerColumnType("numeric", Types.NUMERIC); registerColumnType("number(*, <0)", Types.NUMERIC); registerColumnType("number(*, 0)", Types.INTEGER); registerColumnType("number(*, >0)", Types.DOUBLE); registerColumnType("char", Types.CHAR); registerColumnType("varchar", Types.VARCHAR); registerColumnType("varchar2", Types.VARCHAR); registerColumnType("date", Types.DATE); registerColumnType("datetime", Types.TIMESTAMP); registerColumnType("timestamp", Types.TIMESTAMP); registerColumnType("blob", Types.BLOB); registerColumnType("varbinary", Types.BLOB); registerColumnType("clob", Types.CLOB); // registerColumnType("number(1, 0)", Types.BIT); // registerColumnType("number(19, 0)", Types.BIGINT); // registerColumnType("number(5, 0)", Types.SMALLINT); // registerColumnType("number(3, 0)", Types.TINYINT); // registerColumnType("number(10, 0)", Types.INTEGER); // registerColumnType("char(1, *)", Types.CHAR); // registerColumnType("number", Types.NUMERIC); } public String getCurrentDate() throws DialectException { return "sysdate"; } public String getCurrentDateSelect() { return "select sysdate from dual"; } public String getRecycleBinTablePrefix() { return "BIN$"; } public String getCursorSqlTypeName() { return ProcUtil.REF_CURSOR; } public int getCursorSqlType() { return -10; // OracleTypes.CURSOR } @Override public boolean hasProcedureWithCursor() { return true; } public String getSqlChecker() { return "SELECT 1 FROM DUAL"; } protected void setKeywords() { keywords = new String[] { "ADMIN", "CURSOR", "FOUND", "MOUNT", "AFTER", "CYCLE", "FUNCTION", "NEXT", "ALLOCATE", "DATABASE", "GO", "NEW", "ANALYZE", "DATAFILE", "GOTO", "NOARCHIVELOG", "ARCHIVE", "DBA", "GROUPS", "NOCACHE", "ARCHIVELOG", "DEC", "INCLUDING", "NOCYCLE", "AUTHORIZATION", "DECLARE", "INDICATOR", "NOMAXVALUE", "AVG", "DISABLE", "INITRANS", "NOMINVALUE", "BACKUP", "DISMOUNT", "INSTANCE", "NONE", "BEGIN", "DOUBLE", "INT", "NOORDER", "BECOME", "DUMP", "KEY", "NORESETLOGS", "BEFORE", "EACH", "LANGUAGE", "NORMAL", "BLOCK", "ENABLE", "LAYER", "NOSORT", "BODY", "END", "LINK", "NUMERIC", "CACHE", "ESCAPE", "LISTS", "OFF", "CANCEL", "EVENTS", "LOGFILE", "OLD", "CASCADE", "EXCEPT", "MANAGE", "ONLY", "CHANGE", "EXCEPTIONS", "MANUAL", "OPEN", "CHARACTER", "EXEC", "MAX", "OPTIMAL", "CHECKPOINT", "EXPLAIN", "MAXDATAFILES", "OWN", "CLOSE", "EXECUTE", "MAXINSTANCES", "PACKAGE", "COBOL", "EXTENT", "MAXLOGFILES", "PARALLEL", "COMMIT", "EXTERNALLY", "MAXLOGHISTORY", "PCTINCREASE", "COMPILE", "FETCH", "MAXLOGMEMBERS", "PCTUSED", "CONSTRAINT", "FLUSH", "MAXTRANS", "PLAN", "CONSTRAINTS", "FREELIST", "MAXVALUE", "PLI", "CONTENTS", "FREELISTS", "MIN", "PRECISION", "CONTINUE", "FORCE", "MINEXTENTS", "PRIMARY", "CONTROLFILE", "FOREIGN", "MINVALUE", "PRIVATE", "COUNT", "FORTRAN", "MODULE", "PROCEDURE", "PROFILE", "SAVEPOINT", "SQLSTATE", "TRACING", "QUOTA", "SCHEMA", "STATEMENT_ID", "TRANSACTION", "READ", "SCN", "STATISTICS", "TRIGGERS", "REAL", "SECTION", "STOP", "TRUNCATE", "RECOVER", "SEGMENT", "STORAGE", "UNDER", "REFERENCES", "SEQUENCE", "SUM", "UNLIMITED", "REFERENCING", "SHARED", "SWITCH", "UNTIL", "RESETLOGS", "SNAPSHOT", "SYSTEM", "USE", "RESTRICTED", "SOME", "TABLES", "USING", "REUSE", "SORT", "TABLESPACE", "WHEN", "ROLE", "SQL", "TEMPORARY", "WRITE", "ROLES", "SQLCODE", "THREAD", "WORK", "ROLLBACK", "SQLERROR", "TIME" }; } public String getEscapedKeyWord(String keyword) { if (keyword == null) { throw new IllegalArgumentException("Keyword cannot be null!"); } return "\"" + keyword.toUpperCase() + "\""; } }