blob: 7a8773274b1ad94661e910695ae56f4b5230f720 [file] [log] [blame]
/*
* Copyright (c) 1998, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// Mike Norman - from Proof-of-concept, become production code
package dbws.testing.shadowddlgeneration.oldjpub;
//javase imports
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;
public class Util {
public static final int CASE_SAME = 1;
public static final int CASE_UPPER = 2;
public static final int CASE_LOWER = 3;
public static final int CASE_MIXED = 4;
public static final int CASE_OPPOSITE = 5;
public static final String ALL_OBJECTS = "ALL_OBJECTS";
public static final String ALL_ARGUMENTS = "ALL_ARGUMENTS";
public static final String USER_ARGUMENTS = "USER_ARGUMENTS";
public static final String ALL_TYPES = "ALL_TYPES";
public static final String ALL_TYPE_ATTRS = "ALL_TYPE_ATTRS";
public static final String ALL_COLL_TYPES = "ALL_COLL_TYPES";
public static final int SCHEMA_ALWAYS = 1;
public static final int SCHEMA_IF_NEEDED = 2;
public static final int SCHEMA_FROM_INTYPE = 3;
public static final int SCHEMA_OMIT = 4;
public static final String DUAL = "DUAL";
public static final String PACKAGE_NAME = "PACKAGE_NAME";
public static final String OBJECT_NAME = "OBJECT_NAME";
public static final String ARGUMENT_NAME = "ARGUMENT_NAME";
public static final String DATA_LEVEL = "DATA_LEVEL";
public static final String POSITION = "POSITION";
public static final String SEQUENCE = "SEQUENCE";
public static final String OWNER = "OWNER";
public static final String OVERLOAD = "OVERLOAD";
public static final String NOT_NULL = "NOT NULL";
public static final String IS_NULL = "IS NULL";
public static final int METHODS_NONE = 1;
public static final int METHODS_NAMED = 2;
public static final int METHODS_ALL = 4;
public static final int METHODS_ALWAYS = 8;
public static final int METHODS_OVERLOAD = 16;
public static final int METHODS_UNIQUE = 32;
public static final int METHODS_RETRY = 64;
public static final int METHODS_PARAM_INTERFACE = 128;
public static final int JDBC_USERTYPES = 16;
public static final int USERTYPES_MASK = JDBC_USERTYPES;
public static final String TOPLEVEL = "TOPLEVEL";
public static final int IS_OBJECT = 1;
public static final int IS_COLLECTION = 2;
public static final int IS_TYPE = 3;
public static final int IS_PACKAGE = 4;
public static final int IS_TYPE_OR_PACKAGE = IS_TYPE | IS_PACKAGE;
private static final int IS_TOPLEVEL_FUNCTION_ONLY = 8;
public static final int IS_TOPLEVEL = IS_TOPLEVEL_FUNCTION_ONLY | IS_PACKAGE;
private static final int IS_SQLSTATEMENT_ONLY = 16;
public static final int IS_SQLSTATEMENTS = IS_TYPE | IS_TOPLEVEL_FUNCTION_ONLY
| IS_SQLSTATEMENT_ONLY;
public static final String TYPE_NAME = "TYPE_NAME";
public static final String ATTR_NAME = "ATTR_NAME";
public static final String ATTR_TYPE_NAME = "ATTR_TYPE_NAME";
public static final String ELEM_TYPE_NAME = "ELEM_TYPE_NAME";
public static final String ALL_TYPE_METHODS = "ALL_TYPE_METHODS";
public static final String ALL_METHOD_RESULTS = "ALL_METHOD_RESULTS";
public static final String ALL_METHOD_PARAMS = "ALL_METHOD_PARAMS";
public static final String ALL_QUEUE_TABLES = "ALL_QUEUE_TABLES";
public static final String ALL_SYNONYMS = "ALL_SYNONYMS";
public static final String ALL_TAB_PRIVS = "ALL_TAB_PRIVS";
public static final String TABLE_OWNER = "TABLE_OWNER";
public static final String TABLE_NAME = "TABLE_NAME";
public static final String TABLE_SCHEMA = "TABLE_SCHEMA";
public static final String PRIVILEGE = "PRIVILEGE";
public static final String GRANTEE = "GRANTEE";
public static final String SYNONYM_NAME = "SYNONYM_NAME";
public static final String SUPERTYPE_NAME = "SUPERTYPE_NAME";
public static final int MAX_IDENTIFIER_LENGTH = 29;
public static final String DEFAULT_VARCHAR_LEN = "4000";
public static final String DEFAULT_RAW_LEN = "1000";
public static final String DEFAULT_LONG_LEN = "32767";
private static Map<String, String> m_defaultTypeLen = new HashMap<String, String>();
static {
m_defaultTypeLen.put("VARCHAR", DEFAULT_VARCHAR_LEN);
m_defaultTypeLen.put("VARCHAR2", DEFAULT_VARCHAR_LEN);
m_defaultTypeLen.put("NVARCHAR2", DEFAULT_VARCHAR_LEN);
m_defaultTypeLen.put("RAW", DEFAULT_RAW_LEN);
m_defaultTypeLen.put("LONG", DEFAULT_LONG_LEN);
m_defaultTypeLen.put("LONG_CHAR", DEFAULT_LONG_LEN);
m_defaultTypeLen.put("LONG_RAW", DEFAULT_LONG_LEN);
}
public static String getDefaultTypeLen(String type) {
return m_defaultTypeLen.get(type.toUpperCase().replace(' ', '_'));
}
public static String printTypeWithLength(String type, int length, int precision, int scale) {
if (type == null) {
return "<unsupported type>";
}
if (type.equalsIgnoreCase("NCHAR")) {
type = "CHAR";
}
if (type.equalsIgnoreCase("NVARCHAR2")) {
type = "VARCHAR2";
}
if (type.equalsIgnoreCase("NCLOB")) {
type = "CLOB";
}
if (length != 0) {
if (type.equals("NUMBER")) {
if (precision != 0 && scale != 0) {
return type + "(" + precision + ", " + scale + ")";
}
else if (precision != 0) {
return type + "(" + precision + ")";
}
}
else if (type.equals("FLOAT")) {
if (precision != 0) {
return type + "(" + precision + ")";
}
}
else if (type.equals("NCHAR") || type.equals("NVARCHAR2")) {
return type + "(" + (length / 2) + ")";
}
else {
return type + "(" + length + ")";
}
}
if (getDefaultTypeLen(type) == null) {
return type;
}
else {
return type + "(" + getDefaultTypeLen(type) + ")";
}
}
public static String getWrappedType(String s) {
if (m_wrappedTypes == null) {
initWrappedTypes();
}
return (String)m_wrappedTypes.get(s);
}
public static String getWrappedType(Class<?> c) {
if (m_wrappedTypes == null) {
initWrappedTypes();
}
return (String)m_wrappedTypes.get(c);
}
public static boolean isWrappedType(String s) {
if (m_wrappedTypes == null) {
initWrappedTypes();
}
return m_wrappedTypes.get(s) != null;
}
private static void initWrappedTypes() {
m_wrappedTypes = new HashMap<Object, Object>();
m_wrappedTypes.put("java.lang.Boolean", "boolean");
m_wrappedTypes.put("Boolean", "boolean");
m_wrappedTypes.put(Boolean.class, "boolean");
m_wrappedTypes.put("java.lang.Byte", "byte");
m_wrappedTypes.put("Byte", "byte");
m_wrappedTypes.put(Byte.class, "byte");
m_wrappedTypes.put("java.lang.Short", "short");
m_wrappedTypes.put("Short", "short");
m_wrappedTypes.put(Short.class, "short");
m_wrappedTypes.put("java.lang.Integer", "int");
m_wrappedTypes.put("Integer", "int");
m_wrappedTypes.put(Integer.class, "int");
m_wrappedTypes.put("java.lang.Long", "long");
m_wrappedTypes.put("Long", "long");
m_wrappedTypes.put(Long.class, "long");
m_wrappedTypes.put("java.lang.Character", "char");
m_wrappedTypes.put("Character", "char");
m_wrappedTypes.put(Character.class, "char");
m_wrappedTypes.put("java.lang.Float", "float");
m_wrappedTypes.put("Float", "float");
m_wrappedTypes.put(Float.class, "float");
m_wrappedTypes.put("java.lang.Double", "double");
m_wrappedTypes.put("Double", "double");
m_wrappedTypes.put(Double.class, "double");
}
private static Map<Object, Object> m_wrappedTypes = null;
/*
* Common utilities
*/
private static Map<String, String> uniqueResultTypeNames = new HashMap<String, String>();
public static String uniqueResultTypeName(String methodName, String suffix) {
String resultTypeName = methodName + suffix;
int count = 0;
while (uniqueResultTypeNames.containsKey(resultTypeName)) {
resultTypeName = methodName + (count++) + suffix;
}
uniqueResultTypeNames.put(resultTypeName, resultTypeName);
return resultTypeName;
}
public static String quote(String text) {
return "\"" + escapeQuote(text) + "\"";
}
public static String escapeQuote(String text) {
if (text == null) {
return text;
}
String textQuoted = "";
if (text.startsWith("\"")) {
textQuoted += "\\\"";
}
StringTokenizer stn = new StringTokenizer(text, "\"");
while (stn.hasMoreTokens()) {
String token = stn.nextToken();
textQuoted += token;
if (stn.hasMoreTokens()) {
textQuoted += "\\\"";
}
}
if (text.endsWith("\"")) {
textQuoted += "\\\"";
}
return textQuoted;
}
public static String getSchema(String schema, String type) {
if (schema == null || schema.equals("")) {
if (type.indexOf('.') >= 0) {
return type.substring(0, type.indexOf('.'));
}
}
return schema;
}
public static String getType(String schema, String type) {
if (schema == null || schema.equals("")) {
if (type.indexOf('.') >= 0) {
return type.substring(type.indexOf('.') + 1);
}
}
return type;
}
public static String unreserveSql(String word) {
String unreserve = m_sqlReservedMap.get(word.toUpperCase());
if (unreserve == null) {
unreserve = word;
}
return unreserve;
}
private static final String[] SQL_RESERVED = new String[]{"ALL", "ALTER", "AND", "ANY",
"ARRAY", "AS", "ASC", "AT", "AUTHID", "AVG", "BEGIN", "BETWEEN", "BINARY_INTEGER", "BODY",
"BOOLEAN", "BULK", "BY", "CASE", "CHAR", "CHAR_BASE", "CHECK", "CLOSE", "CLUSTER",
"COALESCE", "COLLECT", "COMMENT", "COMMIT", "COMPRESS", "CONNECT", "CONSTANT", "CREATE",
"CURRENT", "CURRVAL", "CURSOR", "DATE", "DAY", "DECLARE", "DECIMAL", "DEFAULT", "DELETE",
"DESC", "DISTINCT", "DO", "DROP", "ELSE", "ELSIF", "END", "EXCEPTION", "EXCLUSIVE",
"EXECUTE", "EXISTS", "EXIT", "EXTENDS", "EXTRACT", "FALSE", "FETCH", "FLOAT", "FOR",
"FORALL", "FROM", "FUNCTION", "GOTO", "GROUP", "HAVING", "HEAP", "HOUR", "IF", "IMMEDIATE",
"IN", "INDEX", "INDICATOR", "INSERT", "INTEGER", "INTERFACE", "INTERSECT", "INTERVAL",
"INTO", "IS", "ISOLATION", "JAVA", "LEVEL", "LIKE", "LIMITED", "LOCK", "LONG", "LOOP",
"MAX", "MIN", "MINUS", "MINUTE", "MLSLABEL", "MOD", "MODE", "MONTH", "NATURAL", "NATURALN",
"NEW", "NEXTVAL", "NOCOPY", "NOT", "NOWAIT", "NULL", "NULLIF", "NUMBER", "NUMBER_BASE",
"OCIROWID", "OF", "ON", "OPAQUE", "OPEN", "OPERATOR", "OPTION", "OR", "ORDER",
"ORGANIZATION", "OTHERS", "OUT", "PACKAGE", "PARTITION", "PCTFREE", "PLS_INTEGER",
"POSITIVE", "POSITIVEN", "PRAGMA", "PRIOR", "PRIVATE", "PROCEDURE", "PUBLIC", "RAISE",
"RANGE", "RAW", "REAL", "RECORD", "REF", "RELEASE", "RETURN", "REVERSE", "ROLLBACK", "ROW",
"ROWID", "ROWNUM", "ROWTYPE", "SAVEPOINT", "SECOND", "SELECT", "SEPARATE", "SET", "SHARE",
"SMALLINT", "SPACE", "SQL", "SQLCODE", "SQLERRM", "START", "STDDEV", "SUBTYPE",
"SUCCESSFUL", "SUM", "SYNONYM", "SYSDATE", "TABLE", "THEN", "TIME", "TIMESTAMP",
"TIMEZONE_REGION", "TIMEZONE_ABBR", "TIMEZONE_MINUTE", "TIMEZONE_HOUR", "TO", "TRIGGER",
"TRUE", "TYPE", "UID", "UNION", "UNIQUE", "UPDATE", "USE", "USER", "VALIDATE", "VALUES",
"VARCHAR", "VARCHAR2", "VARIANCE", "VIEW", "WHEN", "WHENEVER", "WHERE", "WHILE", "WITH",
"WORK", "WRITE", "YEAR", "ZONE"};
private static Map<String, String> m_sqlReservedMap;
static {
m_sqlReservedMap = new HashMap<String, String>();
for (int i = 0; i < SQL_RESERVED.length; i++) {
m_sqlReservedMap
.put(SQL_RESERVED[i].toUpperCase(), SQL_RESERVED[i].toUpperCase() + "_");
}
}
}