/* * 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; // // Created by IntelliJ IDEA. // User: mihai.panaitescu // Date: 01-Sep-2009 // Time: 13:31:36 import ro.nextreports.engine.util.ProcUtil; // PostgreSQL gotchas : // // Quoting an identifier also makes it case-sensitive, whereas unquoted names are always // folded to lower case. For example, the identifiers FOO, foo, and "foo" are considered // the same by PostgreSQL, but "Foo" and "FOO" are different from these three and each other public class PostrgreSQLDialect extends AbstractDialect { public PostrgreSQLDialect() { super(); registerColumnType("boolean", Types.BIT); registerColumnType("bool", Types.BIT); registerColumnType("bigint", Types.BIGINT); registerColumnType("int8", Types.BIGINT); registerColumnType("bigserial", Types.BIGINT); registerColumnType("smallint", Types.SMALLINT); registerColumnType("int2", Types.SMALLINT); registerColumnType("integer", Types.INTEGER); registerColumnType("int", Types.INTEGER); registerColumnType("int4", Types.INTEGER); registerColumnType("serial", Types.INTEGER); registerColumnType("character(1, *)", Types.CHAR); registerColumnType("char(1, *)", Types.CHAR); registerColumnType("character(>1, *)", Types.VARCHAR); registerColumnType("char(>1, *)", Types.VARCHAR); registerColumnType("varchar", Types.VARCHAR); registerColumnType("bpchar", Types.VARCHAR); registerColumnType("json", Types.VARCHAR); registerColumnType("real", Types.FLOAT); registerColumnType("float4", Types.FLOAT); registerColumnType("double precision", Types.DOUBLE); registerColumnType("float8", Types.DOUBLE); registerColumnType("date", Types.DATE); registerColumnType("time", Types.TIME); registerColumnType("timestamp", Types.TIMESTAMP); registerColumnType("timestamptz", Types.TIMESTAMP); registerColumnType("bytea", Types.VARBINARY); registerColumnType("text", Types.CLOB); registerColumnType("oid", Types.BLOB); registerColumnType("numeric", Types.NUMERIC); registerColumnType("interval", Types.TIME); registerColumnType("money", Types.DECIMAL); } public String getCurrentDate() throws DialectException { return "current_date"; } public String getCurrentDateSelect() { return "select current_date"; } public String getRecycleBinTablePrefix() { return null; } public String getCursorSqlTypeName() { return ProcUtil.REF_CURSOR; } public int getCursorSqlType() { return Types.OTHER; } public String getSqlChecker() { return "select 1"; } protected void setKeywords() { keywords = new String[] { "ABORT", "ABSOLUTE", "ACCESS", "ACTION", "ADD", "ADMIN", "AFTER", "AGGREGATE", "ALSO", "ALTER", "ALWAYS", "ASSERTION", "ASSIGNMENT", "AT", "BACKWARD", "BEFORE", "BEGIN", "BETWEEN", "BIGINT", "BIT", "BOOLEAN", "BY", "CACHE", "CALLED", "CASCADE", "CASCADED", "CATALOG", "CHAIN", "CHAR", "CHARACTER", "CHARACTERISTICS", "CHECKPOINT", "CLASS", "CLOSE", "CLUSTER", "COALESCE", "COMMENT", "COMMENTS", "COMMIT", "COMMITED", "CONFIGURATION", "CONNECTION", "CONSTRAINTS", "CONTENT", "CONTINUE", "CONVERSION", "COPY", "COST", "CREATEDB", "CREATEROLE", "CREATEUSER", "CSV", "CURRENT", "CURSOR", "CYCLE", "DATA", "DATABASE", "DAY", "DEALLOCATE", "DEC", "DECIMAL", "DECLARE", "DEFAULTS", "DEFERRED", "DEFINER", "DELETE", "DELIMITER", "DELIMITERS", "DICTIONARY", "DISABLE", "DISCARD", "DOCUMENT", "DOMAIN", "DOUBLE", "DROP", "EACH", "ENABLE", "ENCODING", "ENCRYPTED", "ENUM", "ESCAPE", "EXCLUDE", "EXCLUDING", "EXCLUSIVE", "EXECUTE", "EXISTS", "EXPLAIN", "EXTERNAL", "EXTRACT", "FAMILY", "FIRST", "FLOAT", "FOLLOWING", "FORCE", "FORWARD", "FUNCTION", "FUNCTIONS", "GLOBAL", "GRANTED", "GREATEST", "HANDLER", "HEADER", "HOLD", "HOUR", "IDENTITY", "IF", "IMMEDIATE", "IMMUTABLE", "IMPLICIT", "INCLUDING", "INCREMENT", "INDEX", "INDEXES", "INHERIT", "INHERITS", "INLINE", "INOUT", "INPUT", "INSENSITIVE", "INSERT", "INSTEAD", "INT", "INTEGER", "INTERVAL", "INVOKER", "ISOLATION", "KEY", "LANGUAGE", "LARGE", "LAST", "LC_COLLATE", "LC_CTYPE", "LEAST", "LEVEL", "LISTEN", "LOAD", "LOCAL", "LOCATION", "LOCK", "LOGIN", "MAPPING", "MATCH", "MAXVALUE", "MINUTE", "MINVALUE", "MODE", "MONTH", "MOVE", "NAME", "NAMES", "NATIONAL", "NCHAR", "NEXT", "NOCREATEDB", "NOCREATEROLE", "NOCREATEUSER", "NOINHERIT", "NOLOGIN", "NONE", "NOSUPERUSER", "NOTHING", "NOTIFY", "NOWAIT", "NULLIF", "NULLS", "NUMERIC", "OBJECT", "OF", "OIDS", "OPERATOR", "OPTION", "OPTIONS", "OUT", "OVER", "OVERLAY", "OWNED", "OWNER", "PARSER", "PARTIAL", "PARTITION", "PASSWORD", "PLANS", "POSITION", "PRECEDING", "PRECISION", "PREPARE", "PREPARED", "PRESERVE", "PRIOR", "PRIVILEGES", "PROCEDURAL", "PROCEDURE", "QUOTE", "RANGE", "READ", "REAL", "REASSIGN", "RECHECK", "RECURSIVE", "REINDEX", "RELATIVE", "RELEASE", "RENAME", "REPEATABLE", "REPLACE", "REPLICA", "RESET", "RESTART", "RESTRICT", "RETURNS", "REVOKE", "ROLE", "ROLLBACK", "ROW", "ROWS", "RULE", "SAVEPOINT", "SCHEMA", "SCROLL", "SEARCH", "SECOND", "SECURITY", "SEQUENCE", "SEQUENCES", "SERIALIZABLE", "SERVER", "SESSION", "SET", "SETOF", "SHARE", "SHOW", "SIMPLE", "SMALLINT", "STABLE", "STANDALONE", "START", "STATEMENT", "STATISTICS", "STDIN", "STDOUT", "STORAGE", "STRICT", "STRIP", "SUBSTRING", "SUPERUSER", "SYSID", "SYSTEM", "TABLES", "TABLESPACE", "TEMP", "TEMPLATE", "TEMPORARY", "TEXT", "TIME", "TIMESTAMP", "TRANSACTION", "TREAT", "TRIGGER", "TRIM", "TRUNCATE", "TRUSTED", "TYPE", "UNBOUNDED", "UNCOMMITED", "UNENCRYPTED", "UNKNOWN", "UNLISTEN", "UNTIL", "UPDATE", "VACUUM", "VALID", "VALIDATOR", "VALUE", "VALUES", "VARCHAR", "VARYING", "VERSION", "VIEW", "VOLATILE", "WHITESPACE", "WITHOUT", "WORK", "WRAPPER", "WRITE", "XML", "XMLATTRIBUTES", "XMLCONCAT", "XMLELEMENT", "XMLFOREST", "XMLPARSE", "XMLPI", "XMLROOT", "XMLSERIALIZE", "YEAR", "YES", "ZONE" }; } public String getEscapedKeyWord(String keyword) { if (keyword == null) { throw new IllegalArgumentException("Keyword cannot be null!"); } return "\"" + keyword + "\""; } }