1 package in.co.daffodil.db.jdbc; 2 3 import java.sql.*; 4 import com.daffodilwoods.daffodildb.server.datadictionarysystem.SystemTables; 5 import com.daffodilwoods.daffodildb.server.sql99.common.*; 6 import com.daffodilwoods.database.general.SystemFieldsInfo; 7 8 public class DatabaseProperties { 9 10 private int charLiteralLength = 0; 11 private int binaryLiteralLength = 0; 12 public static final boolean allProceduresAreCallable = true; 13 public static final boolean allTablesAreSelectable = true; 14 public static final boolean nullsAreSortedHigh = false; 15 public static final boolean nullsAreSortedLow = true; 16 public static final boolean nullsAreSortedAtStart = false; 17 public static final boolean nullsAreSortedAtEnd = false; 18 public static final String databaseProductName = "DaffodilDB"; 19 public static final String databaseProductVersion = "4.1"; 20 public static final int databaseMajorVersion = 4; 21 public static final int databaseMinorVersion = 1; 22 public static final int driverMajorVersion = 1; 23 public static final int driverMinorVersion = 0; 24 public static final String driverName = "DaffodilDBDriver"; 25 public static final String driverVersion = "1.0"; 26 public static final int JDBCMajorVersion = 2; 27 public static final int JDBCMinorVersion = 1; 28 29 public static final boolean usesLocalFiles = true; 30 public static final boolean usesLocalFilePerTable = false; 31 public static final boolean supportsMixedCaseIdentifiers = false; 32 public static final boolean storesUpperCaseIdentifiers = false; 33 public static final boolean storesLowerCaseIdentifiers = false; 34 public static final boolean storesMixedCaseIdentifiers = true; 35 public static final boolean supportsMixedCaseQuotedIdentifiers = false; 36 public static final boolean storesUpperCaseQuotedIdentifiers = false; 37 public static final boolean storesLowerCaseQuotedIdentifiers = false; 38 public static final boolean storesMixedCaseQuotedIdentifiers = false; 39 public static final String identifierQuoteString = " "; 40 41 public static final boolean supportsAlterTableWithAddColumn = true; 42 public static final boolean supportsAlterTableWithDropColumn = true; 43 public static final boolean supportsColumnAliasing = true; 44 public static final boolean nullPlusNonNullIsNull = true; 45 public static final boolean supportsConvert = true; 46 public static final boolean supportsTableCorrelationNames = true; 47 public static final boolean supportsDifferentTableCorrelationNames = true; 48 public static final boolean supportsExpressionsInOrderBy = true; 49 public static final boolean supportsOrderByUnrelated = true; 50 public static final boolean supportsGroupBy = true; 51 public static final boolean supportsGroupByUnrelated = false; 52 public static final boolean supportsGroupByBeyondSelect = true; 53 public static final boolean supportsLikeEscapeClause = true; 54 public static final boolean supportsMultipleResultSets = true; 55 public static final boolean supportsMultipleTransactions = true; 56 public static final boolean supportsNonNullableColumns = true; 57 public static final boolean supportsMinimumSQLGrammar = true; 58 public static final boolean supportsCoreSQLGrammar = true; 59 public static final boolean supportsExtendedSQLGrammar = true; 60 public static final boolean supportsANSI92EntryLevelSQL = true; 61 public static final boolean supportsANSI92IntermediateSQL = true; 62 public static final boolean supportsANSI92FullSQL = true; 63 public static final boolean supportsIntegrityEnhancementFacility = true; 64 public static final boolean supportsOuterJoins = true; 65 public static final boolean supportsFullOuterJoins = false; 66 public static final boolean supportsLimitedOuterJoins = true; 67 public static final String schemaTerm = "Schema"; 68 public static final String procedureTerm = "Procedure"; 69 public static final String catalogTerm = "Catalog"; 70 public static final boolean isCatalogAtStart = true; 71 public static final String catalogSeparator = "."; 72 public static final boolean supportsSchemasInDataManipulation = true; 73 public static final boolean supportsSchemasInProcedureCalls = true; 74 public static final boolean supportsSchemasInTableDefinitions = true; 75 public static final boolean supportsSchemasInIndexDefinitions = true; 76 public static final boolean supportsSchemasInPrivilegeDefinitions = true; 77 public static final boolean supportsCatalogsInDataManipulation = true; 78 public static final boolean supportsCatalogsInProcedureCalls = true; 79 public static final boolean supportsCatalogsInTableDefinitions = true; 80 public static final boolean supportsCatalogsInIndexDefinitions = true; 81 public static final boolean supportsCatalogsInPrivilegeDefinitions = true; 82 public static final boolean supportsPositionedDelete = false; public static final boolean supportsPositionedUpdate = false; public static final boolean supportsSelectForUpdate = true; public static final boolean supportsStoredProcedures = true; 86 public static final boolean supportsSubqueriesInComparisons = true; 87 public static final boolean supportsSubqueriesInExists = true; 88 public static final boolean supportsSubqueriesInIns = true; 89 public static final boolean supportsSubqueriesInQuantifieds = true; 90 public static final boolean supportsCorrelatedSubqueries = true; 91 public static final boolean supportsUnion = true; 92 public static final boolean supportsUnionAll = true; 93 public static final boolean supportsOpenCursorsAcrossCommit = true; 94 public static final boolean supportsOpenCursorsAcrossRollback = true; 95 public static final boolean supportsOpenStatementsAcrossCommit = true; 96 public static final boolean supportsOpenStatementsAcrossRollback = true; 97 98 public static final int maxBinaryLiteralLength = 0; 99 public static final int maxCharLiteralLength = 4192; 100 public static final int maxColumnNameLength = 128; public static final int maxColumnsInGroupBy = 0; 102 public static final int maxColumnsInIndex = 0; 103 public static final int maxColumnsInOrderBy = 0; 104 public static final int maxColumnsInSelect = 0; 105 public static final int maxColumnsInTable = 0; 106 public static final int maxConnections = 0; 107 public static final int maxCursorNameLength = 0; 108 public static final int maxIndexLength = 0; 109 public static final int maxSchemaNameLength = 128; public static final int maxProcedureNameLength = 128; public static final int maxCatalogNameLength = 128; public static final int maxRowSize = 0; 113 public static final boolean doesMaxRowSizeIncludeBlobs = false; 114 public static final int maxStatementLength = 0; 115 public static final int maxStatements = 0; 116 public static final int maxTableNameLength = 128; public static final int maxTablesInSelect = 0; 118 public static final int maxUserNameLength = 128; 120 public static final int defaultTransactionIsolation = 0; 121 public static final boolean supportsTransactions = true; 122 public static final boolean supportsDataDefinitionAndDataManipulationTransactions = true; 123 public static final boolean supportsDataManipulationTransactionsOnly = true; 124 public static final boolean dataDefinitionCausesTransactionCommit = true; 125 public static final boolean dataDefinitionIgnoredInTransactions = false; 126 public static final boolean supportsBatchUpdates = true; 127 public static final boolean supportsSavepoints = true; 128 129 public static final boolean supportsNamedParameters = false; 130 131 public static final boolean supportsMultipleOpenResults = false; 132 133 public static final boolean supportsGetGeneratedKeys = false; 134 public static final boolean jdbcCompliant = true; 135 136 public static boolean deletesAreDetected(int type) { 137 return type != java.sql.ResultSet.TYPE_FORWARD_ONLY; 138 } 139 140 public static boolean insertsAreDetected(int type) { 141 return type != java.sql.ResultSet.TYPE_FORWARD_ONLY; 142 } 143 144 public static boolean updatesAreDetected(int type) { 145 return type != java.sql.ResultSet.TYPE_FORWARD_ONLY; 146 } 147 148 public static boolean othersDeletesAreVisible(int type) { 149 return type == java.sql.ResultSet.TYPE_SCROLL_SENSITIVE; 150 } 151 152 public static boolean othersInsertsAreVisible(int type) { 153 return type == java.sql.ResultSet.TYPE_SCROLL_SENSITIVE; 154 } 155 156 public static boolean othersUpdatesAreVisible(int type) { 157 return type == java.sql.ResultSet.TYPE_SCROLL_SENSITIVE; 158 } 159 160 public static boolean ownDeletesAreVisible(int type) { 161 return type != java.sql.ResultSet.TYPE_FORWARD_ONLY; 162 } 163 164 public static boolean ownInsertsAreVisible(int type) { 165 return type != java.sql.ResultSet.TYPE_FORWARD_ONLY; 166 } 167 168 public static boolean ownUpdatesAreVisible(int type) { 169 return type != java.sql.ResultSet.TYPE_FORWARD_ONLY; 170 } 171 172 public static String getSQLKeywords() { 173 return "ABSOLUTE,ACTION,ADD,ADMIN,AFTER,AGGREGATE,ALIAS,ALL,ALLOCATE,ALTER," 174 + "AND,ANY,ARE,ARRAY,AS,ASC,ASSERTION,AT,AUTHORIZATION,AVG,BEFORE,BEGIN," 175 + "BIGINT,BINARY,BIT,BLOB,BOOLEAN,BOTH,BREADTH,BY,BYTE,CALL,CASCADE,CASCADED," 176 + "CASE,CAST,CATALOG,CHAR,CHARACTER,CHECK,CLASS,CLOB,CLOSE,COLLATE,COLLATION," 177 + "COLUMN,COMMIT,COMPLETION,CONNECT,CONNECTION,CONSTRAINT,CONSTRAINTS," 178 + "CONSTRUCTOR,CONTINUE,CORRESPONDING,COUNT,CREATE,CROSS,CUBE,CURRENT," 179 + "CURRENTDATE,CURRENTPATH,CURRENTROLE,CURRENTTIMESTAMP,CURRENTTIME," 180 + "CURRENTUSER,CURSOR,CYCLE,DATA,DATE,DAY,DEALLOCATE,DEC,DECIMAL,DECLARE," 181 + "DEFAULT,DEFERRABLE,DEFERRED,DELETE,DEPTH,DEREF,DESC,DESCRIBE,DESCRIPTOR," 182 + "DESTROY,DESTRUCTOR,DETERMINISTIC,DIAGNOSTICS,DICTIONARY,DISCONNECT," 183 + "DISTINCT,DOMAIN,DOUBLE,DROP,DYNAMIC,EACH,ELSE,END,ENDEXEC,EQUALS,ESCAPE," 184 + "EVERY,EXCEPT,EXCEPTION,EXEC,EXECUTE,EXTERNAL,FALSE,FETCH,FIRST,FLOAT," 185 + "FOR,FOREIGN,FOUND,FREE,FROM,FULL,FUNCTION,GENERAL,GET,GLOBAL,GO,GOTO," 186 + "GRANT,GROUP,GROUPING,HAVING,HOST,HOUR,IDENTITY,IGNORE,IMMEDIATE,IN," 187 + "INDICATOR,INITIALIZE,INITIALLY,INNER,INOUT,INPUT,INSERT,INT,INTEGER," 188 + "INTERSECT,INTERVAL,INTO,IS,ISOLATION,ITERATE,JOIN,KEY,LANGUAGE,LARGE," 189 + "LAST,LATERAL,LEADING,LEFT,LESS,LEVEL,LIKE,LIMIT,LOCAL,LOCALTIME," 190 + "LOCALTIMESTAMP,LOCATOR,LONG,MAP,MATCH,MAX,MIN,MINUTE,MODIFIES,MODIFY," 191 + "MODULE,MONTH,NAMES,NATIONAL,NATURAL,NCHAR,NCLOB,NEW,NEXT,NO,NONE,NOT," 192 + "NULL,NUMERIC,OBJECT,OF,OFF,OLD,ON,ONLY,OPEN,OPERATION,OR,ORDER," 193 + "ORDINALITY,OUT,OUTER,OUTPUT,PAD,PARAMETER,PARAMETERS,PARTIAL,PATH," 194 + "POSTFIX,PRECISION,PREFIX,PREORDER,PREPARE,PRESERVE,PRIMARY,PRIOR," 195 + "PRIVILEGES,PROCEDURE,PUBLIC,READ,READS,REAL,RECURSIVE,REF,REFERENCES," 196 + "REFERENCING,RELATIVE,RESTRICT,RESULT,RETURNS,RETURN,REVOKE,RIGHT,ROLE," 197 + "ROLLBACK,ROLLUP,ROUTINE,ROW,ROWS,SAVEPOINT,SCHEMA,SCOPE,SCROLL,SEARCH," 198 + "SECOND,SECTION,SELECT,SEQUENCE,SESSION,SESSIONUSER,SET,SETS,SIZE," 199 + "SMALLINT,SOME,SPACE,SPECIFICTYPE,SPECIFIC,SQL,SQLEXCEPTION,SQLSTATE," 200 + "SQLWARNING,START,STATE,STATEMENT,STATIC,STRUCTURE,SUM,SYSTEMUSER,TABLE," 201 + "TEMPORARY,TERMINATE,THAN,THEN,TIME,TIMESTAMP,TIMEZONEHOUR," 202 + "TIMEZONEMINUTE,TO,TRAILING,TRANSACTION,TRANSLATION,TREAT,TRIGGER,TRUE," 203 + "UNDER,UNION,UNIQUE,UNKNOWN,UNNEST,UPDATE,USAGE,USER,USING,VALUE,VALUES," 204 + "VARBINARY,VARCHAR,VARIABLE,VARYING,VIEW,WHEN,WHENEVER,WHERE,WITH," 205 + "WITHOUT,WORK,WRITE,YEAR,ZONE,CONDITION,DO,ELSEIF,EXIT,HANDLER,IF,ITERATE," 206 + "LEAVE,LOOP,REDO,REPEAT,RESIGNAL,SIGNAL,UNDO,UNTIL,WHILE"; 207 } 208 209 public static String getNumericFunctions() { 210 return "ABS, ACOS, ASIN, ATAN, ATAN2, CEILING, COS, COT, DEGREES, EXP, FLOOR," 211 + " LOG,MOD, PI, POWER, RADIANS, RAND, ROUND, SIGN, SIN, SQRT, TAN, TRUNCATE"; 212 } 213 214 public static String getStringFunctions() { 215 return "ASCII, CHAR, CONCAT,INSERT, LCASE, LEFT, LENGTH, LOCATE, LTRIM, REPEAT," 216 + " REPLACE, RIGHT, RTRIM, SPACE, SUBSTRING, UCASE"; 217 } 218 219 public static String getSystemFunctions() { 220 return "IFNULL"; 221 } 222 223 public static String getTimeDateFunctions() { 224 return "CURDATE, CURTIME, DAYNAME, DAYOFMONTH, DAYOFWEEK, DAYOFYEAR, HOUR, MINUTE, MONTH, MONTHNAME,SECOND, WEEK, YEAR,TIMESTAMPADD,TIMESTAMPDIFF"; 225 } 226 227 public static String getSearchStringEscape() { 228 return "_%"; 229 } 230 231 public static String getExtraNameCharacters() { 232 return ""; 233 } 234 235 public static boolean supportsConvert(int fromType, int toType) throws java. 236 sql.SQLException { 237 return Utilities.isConvertable(fromType, toType); 238 } 239 240 public static boolean supportsTransactionIsolationLevel(int level) { 241 return true; 242 } 243 244 public static boolean supportsResultSetType(int type) { 245 return true; 246 } 247 248 public static boolean supportsResultSetConcurrency(int type, int concurrency) { 249 return true; 250 } 251 252 public static boolean supportsResultSetHoldability(int holdability) { 253 return false; 254 } 255 256 public static String [] getTableTypes() { 257 return new String [] { 258 "Table", "View", "System Table"}; 259 } 260 261 public static Object [][] getTypeInfo() { 262 return new Object [][] { {"character", new Short ("" + Types.CHAR), new Integer (4192), "\'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.CHAR), null, null} 263 , {"char", new Short ("" + Types.CHAR), new Integer (4192), "\'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.CHAR), null, null} 264 , {"character varying", new Short ("" + Types.VARCHAR), new Integer (4192), "\'", "\'", "max length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.VARCHAR), null, null} 265 , {"char varying", new Short ("" + Types.VARCHAR), new Integer (4192), "\'", "\'", "max length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.VARCHAR), null, null} 266 , {"varchar", new Short ("" + Types.VARCHAR), new Integer (4192), "\'", "\'", "max length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.VARCHAR), null, null} 267 , {"character large object", new Short ("" + Types.CLOB), new Integer (1073741823), "\'", "\'", "max length", new Short ("1"), Boolean.TRUE, new Short ("0"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.CLOB), null, null} 268 , {"char large object", new Short ("" + Types.CLOB), new Integer (1073741823), "\'", "\'", "max length", new Short ("1"), Boolean.TRUE, new Short ("0"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.CLOB), null, null} 269 , {"clob", new Short ("" + Types.CLOB), new Integer (1073741823), "\'", "\'", "max length", new Short ("1"), Boolean.TRUE, new Short ("0"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.CLOB), null, null} 270 , {"blob", new Short ("" + Types.BLOB), new Integer (1073741823), "X'", "\'", "max length", new Short ("1"), Boolean.TRUE, new Short ("0"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.BLOB), null, null} 271 , {"bit", new Short ("" + Types.BINARY), new Integer (4192), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.BINARY), null, null} 272 , {"bit varying", new Short ("" + Types.VARBINARY), new Integer (4192), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.VARBINARY), null, null} 273 , {"numeric", new Short ("" + Types.NUMERIC), new Integer (28), null, null, "precision,scale", new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("28"), new Integer ("" + Types.NUMERIC), null, new Integer (10)} 274 , {"decimal", new Short ("" + Types.DECIMAL), new Integer (28), null, null, "precision,scale", new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("28"), new Integer ("" + Types.DECIMAL), null, new Integer (10)} 275 , {"dec", new Short ("" + Types.DECIMAL), new Integer (28), null, null, "precision,scale", new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("28"), new Integer ("" + Types.DECIMAL), null, new Integer (10)} 276 , {"int", new Short ("" + Types.INTEGER), new Integer (10), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.INTEGER), null, new Integer (10)} 277 , {"integer", new Short ("" + Types.INTEGER), new Integer (10), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.INTEGER), null, new Integer (10)} 278 , {"long", new Short ("" + Types.BIGINT), new Integer (19), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.BIGINT), null, new Integer (10)} 279 , {"bigint", new Short ("" + Types.BIGINT), new Integer (19), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.BIGINT), null, new Integer (10)} 280 , {"smallint", new Short ("" + Types.SMALLINT), new Integer (5), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.SMALLINT), null, new Integer (10)} 281 , {"float", new Short ("" + Types.FLOAT), new Integer (15), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.FLOAT), null, new Integer (10)} 282 , {"real", new Short ("" + Types.REAL), new Integer (7), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.REAL), null, new Integer (10)} 283 , {"double precision", new Short ("" + Types.DOUBLE), new Integer (15), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.DOUBLE), null, new Integer (10)} 284 , {"boolean", new Short ("" + Types.BIT), new Integer (1), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.BIT), null, null} 285 , {"date", new Short ("" + Types.DATE), new Integer (10), "DATE '", "\'", null, new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, new Short ("0"), new Short ("0"), new Integer (91), new Integer ("" + Types.DATE), null} 286 , {"time", new Short ("" + Types.TIME), new Integer (9), "TIME '", "\'", "timeprecision", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, new Short ("0"), new Short ("0"), new Integer (92), new Integer ("" + Types.TIME), null} 287 , {"timeStamp", new Short ("" + Types.TIMESTAMP), new Integer (9), "TIMESTAMP '", "\'", "timestampprecision", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, new Short ("0"), new Short ("0"), new Integer (93), new Integer ("" + Types.TIMESTAMP), null} 288 , {"binary", new Short ("" + Types.BINARY), new Integer (4192), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.BINARY), null, null} 289 , {"varbinary", new Short ("" + Types.VARBINARY), new Integer (4192), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.VARBINARY), null, null} 290 , {"long varbinary", new Short ("" + Types.LONGVARBINARY), new Integer (1073741823), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.LONGVARBINARY), null, null} 291 , {"long varbinary", new Short ("" + Types.JAVA_OBJECT), new Integer (1073741823), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.JAVA_OBJECT), null, null} 292 , {"long varbinary", new Short ("" + Types.OTHER), new Integer (1073741823), "B'| X'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.JAVA_OBJECT), null, null} 293 , {"null", new Short ("" + Types.NULL), new Integer (0), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.NULL), null, null} 294 , {"tinyint", new Short ("" + Types.TINYINT), new Integer (5), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.TINYINT), null, new Integer (10)} 295 , {"byte", new Short ("" + Types.TINYINT), new Integer (5), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.TINYINT), null, new Integer (10)} 296 , {"long varchar", new Short ("" + Types.LONGVARCHAR), new Integer (1073741823), "\'", "\'", "length", new Short ("1"), Boolean.FALSE, new Short ("3"), null, Boolean.FALSE, null, null, null, null, new Integer ("" + Types.LONGVARCHAR), null, null} 297 , {"boolean", new Short ("" + Types.BOOLEAN), new Integer (1), null, null, null, new Short ("1"), Boolean.FALSE, new Short ("2"), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, new Short ("0"), new Short ("0"), new Integer ("" + Types.BOOLEAN), null, null} 298 , 299 }; 300 } 301 302 public static String getProceduresQuery(String catalog, String schemaPattern, 303 String procedureNamePattern) { 304 StringBuffer buffer = new StringBuffer (); 305 buffer.append("select routine_catalog as PROCEDURE_CAT,routine_schema as PROCEDURE_SCHEM, ") 306 .append(" routine_name as PROCEDURE_NAME,'reserved1' as RESERVED1,'reserved2' as RESERVED2, ") 307 .append(" 'reserved3' as RESERVED3,'nocomments' as REMARKS," + DatabaseMetaData.procedureNoResult + " as PROCEDURE_TYPE from ") 308 .append(SystemTables.routines_TableName) 309 .append(" where routine_type='").append(SqlKeywords.PROCEDURE).append("' "); 310 311 StringBuffer whereClause = new StringBuffer (); 312 if (catalog != null) { 313 whereClause.append(shouldUseLikePredicate(catalog) ? " and routine_catalog like '" : " and routine_catalog = '") 314 .append(catalog) 315 .append("' "); 316 } 317 if (schemaPattern != null) { 318 whereClause.append(shouldUseLikePredicate(schemaPattern) ? " and routine_schema like '" : " and routine_schema = '") 319 .append(schemaPattern) 320 .append("' "); 321 } 322 if (procedureNamePattern != null) { 323 whereClause.append(shouldUseLikePredicate(procedureNamePattern) ? " and routine_name like '" : " and routine_name = '") 324 .append(procedureNamePattern) 325 .append("' "); 326 } 327 buffer.append(whereClause.toString()); 328 return buffer.toString(); 329 } 330 331 public static String getProcedureColumnsQuery(String catalog, 332 String schemaPattern, 333 String procedureNamePattern, 334 String columnNamePattern) { 335 return null; 336 } 337 338 public static String getTablesQuery(String catalog, String schemaPattern, 339 String tableNamePattern, String types[]) { 340 StringBuffer query = new StringBuffer (); 341 StringBuffer whereClause = new StringBuffer (""); 342 if (catalog != null) 343 whereClause.append( (shouldUseLikePredicate(catalog) ? "and table_catalog Like '" : "and table_catalog = '")) 344 .append(catalog).append("' "); 345 if (schemaPattern != null) 346 whereClause.append( (shouldUseLikePredicate(schemaPattern) ? "and table_schema Like '" : "and table_schema = '")) 347 .append(schemaPattern).append("' "); 348 if (tableNamePattern != null) 349 whereClause.append( (shouldUseLikePredicate(tableNamePattern) ? "and table_name Like '" : "and table_name = '")) 350 .append(tableNamePattern).append("' "); 351 if (types != null) { 352 whereClause.append("and ( table_type = '").append(types[0]).append("'"); 353 for (int i = 1, size = types.length; i < size; i++) 354 whereClause.append(" or table_type = '").append(types[i]).append("'"); 355 whereClause.append(")"); 356 } 357 String selectClause = " select table_catalog as TABLE_CAT,table_schema as TABLE_SCHEM,table_name as TABLE_NAME,table_type as TABLE_TYPE, 'nocomments' as REMARKS"; 358 String orderBy = " order by table_type, table_schema, table_name "; 359 query.append(selectClause); 360 query.append(" from ").append(SystemTables.tables_TableName); 361 String whereStr = whereClause.toString(); 362 if (!whereStr.equals("")) 363 query.append(" where ").append(whereStr.substring(4)); 364 query.append(orderBy); 365 return query.toString(); 366 } 367 368 public static String getSchemasQuery() { 369 StringBuffer query = new StringBuffer (); 370 query.append(" Select schema_name as TABLE_SCHEM,catalog_name as TABLE_CATALOG "); 371 query.append(" from ").append(SystemTables.schema_TableName); 372 query.append(" order by schema_name"); 373 return query.toString(); 374 } 375 376 public static String getCatalogsQuery() { 377 String query = "Select distinct catalog_name as TABLE_CAT from " + SystemTables.schema_TableName; 378 return query; 379 } 380 381 public static String getColumnsQuery(String catalog, String schemaPattern, 382 String tableNamePattern, 383 String columnNamePattern) { 384 StringBuffer selectClause = new StringBuffer ("select "); 385 selectClause.append(SystemTables.columns_TableName).append(".table_catalog,"); 386 selectClause.append(SystemTables.columns_TableName).append(".table_schema ,"); 387 selectClause.append(SystemTables.columns_TableName).append(".table_name,"); 388 selectClause.append(SystemTables.columns_TableName).append(".column_name,"); 389 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".data_type,"); 390 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".numeric_scale,"); 391 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".numeric_precision_radix,"); 392 selectClause.append(SystemTables.columns_TableName).append(".column_default,"); 393 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".character_maximum_length,"); 394 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".character_octet_length,"); 395 selectClause.append(SystemTables.columns_TableName).append(".ordinal_position,"); 396 selectClause.append(SystemTables.columns_TableName).append(".is_nullable,"); 397 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".numeric_precision,"); 398 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".datetime_precision,"); 399 selectClause.append(SystemTables.dataTypeDescriptor_TableName).append(".interval_precision"); 400 401 StringBuffer whereClause = new StringBuffer (""); 402 if (catalog != null) 403 whereClause.append("and ").append(SystemTables.columns_TableName) 404 .append( (shouldUseLikePredicate(catalog) ? ".table_catalog Like '" : ".table_catalog = '")) 405 .append(catalog).append("' "); 406 if (schemaPattern != null) 407 whereClause.append("and ").append(SystemTables.columns_TableName) 408 .append( (shouldUseLikePredicate(schemaPattern) ? ".table_schema Like '" : ".table_schema = '")) 409 .append(schemaPattern).append("' "); 410 if (tableNamePattern != null) whereClause.append("and ").append(SystemTables.columns_TableName) 412 .append( (shouldUseLikePredicate(tableNamePattern) ? ".table_name Like '" : ".table_name = '")) 413 .append(tableNamePattern).append("' "); 414 if (columnNamePattern != null) whereClause.append("and ").append(SystemTables.columns_TableName) 416 .append( (shouldUseLikePredicate(columnNamePattern) ? ".column_name Like '" : ".column_name = '")) 417 .append(columnNamePattern).append("' "); 418 whereClause.append("and ").append(SystemTables.columns_TableName).append(".column_name != '").append(SystemFieldsInfo.systemFields[SystemFieldsInfo.rowId]).append("' "); 419 420 StringBuffer relation = new StringBuffer (); 421 relation.append("and (").append(SystemTables.columns_TableName).append(".table_catalog = ").append(SystemTables.dataTypeDescriptor_TableName).append(".object_catalog and "); 422 relation.append(SystemTables.columns_TableName).append(".table_schema = ").append(SystemTables.dataTypeDescriptor_TableName).append(".object_schema and "); 423 relation.append(SystemTables.columns_TableName).append(".table_name = ").append(SystemTables.dataTypeDescriptor_TableName).append(".object_name and "); 424 relation.append(SystemTables.columns_TableName).append(".dtd_identifier = ").append(SystemTables.dataTypeDescriptor_TableName).append(".dtd_identifier )"); 425 whereClause.append(relation.toString()); 426 427 StringBuffer orderby = new StringBuffer (" order by "); 428 orderby.append(SystemTables.columns_TableName).append(".table_schema,"); 429 orderby.append(SystemTables.columns_TableName).append(".table_name,"); 430 orderby.append(SystemTables.columns_TableName).append(".ordinal_position "); 431 StringBuffer query = new StringBuffer (); 432 query.append(selectClause.toString()); 433 query.append(" from ").append(SystemTables.columns_TableName).append(",").append(SystemTables.dataTypeDescriptor_TableName); 434 query.append(" where ").append(whereClause.substring(4)); 435 query.append(orderby.toString()); 436 return query.toString(); 437 } 438 439 public static String getColumnPrivilegesQuery(String catalog, String schema, 440 String table, 441 String columnNamePattern) { 442 String selectClause = "select table_catalog as TABLE_CAT,table_schema as TABLE_SCHEM,table_name as TABLE_NAME,column_name as COLUMN_NAME,grantor as GRANTOR,grantee as GRANTEE,privilege_type as PRIVILEGE,is_grantable as IS_GRANTABLE"; 443 StringBuffer whereClause = new StringBuffer (""); 444 if (catalog != null) 445 whereClause.append( (shouldUseLikePredicate(catalog) ? "and table_catalog Like '" : "and table_catalog = '")) 446 .append(catalog).append("' "); 447 if (schema != null) 448 whereClause.append( (shouldUseLikePredicate(schema) ? "and table_schema Like '" : "and table_schema = '")) 449 .append(schema).append("' "); 450 if (table != null) 451 whereClause.append( (shouldUseLikePredicate(table) ? "and table_name Like '" : "and table_name = '")) 452 .append(table).append("' "); 453 if (columnNamePattern != null) 454 whereClause.append( (shouldUseLikePredicate(columnNamePattern) ? "and column_name Like '" : "and column_name = '")) 455 .append(columnNamePattern).append("' "); 456 String orderBy = " order by column_name,privilege_type"; 457 StringBuffer query = new StringBuffer (); 458 query.append(selectClause); 459 query.append(" from ").append(SystemTables.column_privileges_TableName); 460 String whereStr = whereClause.toString(); 461 if (!whereStr.equals("")) 462 query.append(" where ").append(whereStr.substring(4)); 463 query.append(orderBy); 464 return query.toString(); 465 } 466 467 public static String getTablePrivilegesQuery(String catalog, 468 String schemaPattern, 469 String tableNamePattern) { 470 String selectClause = "select table_catalog as TABLE_CAT,table_schema as TABLE_SCHEM,table_name as TABLE_NAME,grantor as GRANTOR,grantee as GRANTEE,privilege_type as PRIVILEGE,is_grantable as IS_GRANTABLE"; 471 StringBuffer whereClause = new StringBuffer (""); 472 if (catalog != null) 473 whereClause.append( (shouldUseLikePredicate(catalog) ? "and table_catalog Like '" : "and table_catalog = '")) 474 .append(catalog).append("' "); 475 if (schemaPattern != null) 476 whereClause.append( (shouldUseLikePredicate(schemaPattern) ? "and table_schema Like '" : "and table_schema = '")) 477 .append(schemaPattern).append("' "); 478 if (tableNamePattern != null) 479 whereClause.append( (shouldUseLikePredicate(tableNamePattern) ? "and table_name Like '" : "and table_name = '")) 480 .append(tableNamePattern).append("'"); 481 String orderBy = " order by table_schema,table_name,privilege_type"; 482 StringBuffer query = new StringBuffer (); 483 query.append(selectClause); 484 query.append(" from ").append(SystemTables.table_privileges_TableName); 485 String whereStr = whereClause.toString(); 486 if (!whereStr.equals("")) 487 query.append(" where ").append(whereStr.substring(4)); 488 query.append(orderBy); 489 return query.toString(); 490 } 491 492 public static String getBestRowIdentifierQuery(String catalog, String schema, 493 String table, int scope, 494 boolean nullable) { 495 return null; 496 } 497 498 public static String getVersionColumnsQuery(String catalog, String schema, 499 String table) { 500 return null; 501 } 502 503 public static String getPrimaryKeysQuery(String catalog, String schema, 504 String table) { 505 StringBuffer selectClause = new StringBuffer ("select "); 506 selectClause.append(SystemTables.table_constraints_TableName).append(".table_catalog as TABLE_CAT,"); 507 selectClause.append(SystemTables.table_constraints_TableName).append(".table_schema as TABLE_SCHEM,"); 508 selectClause.append(SystemTables.table_constraints_TableName).append(".table_name as TABLE_NAME,"); 509 selectClause.append(SystemTables.key_column_usage_TableName).append(".column_name as COLUMN_NAME,"); 510 selectClause.append(SystemTables.key_column_usage_TableName).append(".ordinal_position as KEY_SEQ,"); 511 selectClause.append(SystemTables.table_constraints_TableName).append(".constraint_name as PK_NAME"); 512 513 StringBuffer orderBy = new StringBuffer (" order by "); 514 orderBy.append(SystemTables.key_column_usage_TableName).append(".column_name "); 515 516 StringBuffer query = new StringBuffer (); 517 query.append(selectClause.toString()); 518 query.append(" from ").append(SystemTables.table_constraints_TableName).append(","); 519 query.append(SystemTables.key_column_usage_TableName); 520 String whereStr = getPrimary_OR_Foreign_KeyWhereClause(catalog, schema, table); 521 query.append(" where "); 522 if (!whereStr.equals("")) 523 query.append(whereStr.substring(4)).append(" and "); 524 query.append(getTable_Constraints_And_KeyColumnUsageRelation()); 525 query.append(" and ").append(SystemTables.table_constraints_TableName).append(".constraint_type = 'primary key' "); 526 query.append(orderBy.toString()); 527 return query.toString(); 528 } 529 530 private static String getFromClauseForKeysQuery() { 531 StringBuffer fromClause = new StringBuffer (); 532 fromClause.append(SystemTables.table_constraints_TableName).append(" as PTC ,"); 533 fromClause.append(SystemTables.key_column_usage_TableName).append(" as PKC ,"); 534 fromClause.append(SystemTables.table_constraints_TableName).append(" as FTC ,"); 535 fromClause.append(SystemTables.key_column_usage_TableName).append(" as FKC ,"); 536 fromClause.append(SystemTables.referential_constraints_TableName).append(" as RC "); 537 return fromClause.toString(); 538 } 539 540 static String getSelectColumnsClauseForKeysQuery() { 541 StringBuffer selectClause = new StringBuffer (" select "); 542 selectClause.append("PTC.table_catalog as PKTABLE_CAT,"); 543 selectClause.append("PTC.table_schema as PKTABLE_SCHEM ,"); 544 selectClause.append("PTC.table_name as PKTABLE_NAME,"); 545 selectClause.append("PKC.column_name AS PKCOLUMN_NAME ,"); 546 selectClause.append("FTC.TABLE_CATALOG AS FKTABLE_CAT,FTC.TABLE_SCHEMA AS FKTABLE_SCHEM ,FTC.TABLE_NAME AS FKTABLE_NAME,FKC.COLUMN_NAME AS FKCOLUMN_NAME,FKC.ORDINAL_POSITION AS KEY_SEQ,"); 547 selectClause.append("RC.update_rule ,"); 548 selectClause.append("RC.delete_rule,"); 549 selectClause.append("FTC.constraint_name as FK_NAME,"); 550 selectClause.append("PTC.constraint_name as PK_NAME,"); 551 selectClause.append("PTC.is_deferrable,"); 552 selectClause.append("PTC.initially_deferred "); 553 return selectClause.toString(); 554 } 555 556 557 static String getPrimaryTableClause() { 558 StringBuffer query = new StringBuffer (); 559 query.append(" PTC.CONSTRAINT_CATALOG = PKC.CONSTRAINT_CATALOG ") 560 .append(" AND PTC.CONSTRAINT_SCHEMA = PKC.CONSTRAINT_SCHEMA ") 561 .append(" AND PTC.CONSTRAINT_NAME = PKC.CONSTRAINT_NAME ") 562 .append(" AND PTC.CONSTRAINT_TYPE IN ('PRIMARY KEY' , 'UNIQUE' )"); 563 return query.toString(); 564 } 565 566 static String getForeignTableClause() { 567 StringBuffer query = new StringBuffer (); 568 query.append(" FTC.CONSTRAINT_CATALOG = FKC.CONSTRAINT_CATALOG ") 569 .append(" AND FTC.CONSTRAINT_SCHEMA = FKC.CONSTRAINT_SCHEMA ") 570 .append(" AND FTC.CONSTRAINT_NAME = FKC.CONSTRAINT_NAME ") 571 .append(" AND FTC.CONSTRAINT_TYPE = 'FOREIGN KEY'"); 572 return query.toString(); 573 } 574 575 static String getPrimaryReferentialClause() { 576 StringBuffer query = new StringBuffer (); 577 query.append(" PTC.CONSTRAINT_CATALOG = RC.UNIQUE_CONSTRAINT_CATALOG ") 578 .append(" AND PTC.CONSTRAINT_SCHEMA = RC.UNIQUE_CONSTRAINT_SCHEMA ") 579 .append(" AND PTC.CONSTRAINT_NAME = RC.UNIQUE_CONSTRAINT_NAME "); 580 return query.toString(); 581 } 582 583 static String getForeignTableReferentialClause() { 584 StringBuffer query = new StringBuffer (); 585 query.append(" FTC.CONSTRAINT_CATALOG = RC.CONSTRAINT_CATALOG ") 586 .append(" AND FTC.CONSTRAINT_SCHEMA = RC.CONSTRAINT_SCHEMA ") 587 .append(" AND FTC.CONSTRAINT_NAME = RC.CONSTRAINT_NAME "); 588 return query.toString(); 589 } 590 591 static String getKeyColumnUsageMatchClause() { 592 String query = "(PKC.ORDINAL_POSITION = FKC.ORDINAL_POSITION)"; 593 return query; 594 } 595 596 static String getOrderClause() { 597 String query = "order by PTC.TABLE_CATALOG,PTC.TABLE_SCHEMA,PTC.TABLE_NAME"; 598 return query; 599 } 600 601 static String getWhereClauseForImportedKeys(String catalog, String schema, 602 String table) { 603 StringBuffer clause = new StringBuffer (); 604 if (catalog != null) 605 clause.append("and FTC.table_catalog = '").append(catalog).append("' "); 606 if (schema != null) 607 clause.append( (shouldUseLikePredicate(schema) ? "and FTC.table_schema like '" : "and FTC.table_schema = '")) 608 .append(schema).append("' "); 609 if (table != null) 610 clause.append( (shouldUseLikePredicate(table) ? "and FTC.table_name like '" : "and FTC.table_name = '")) 611 .append(table).append("' "); 612 return clause.toString(); 613 } 614 615 public static String getImportedKeysQuery(String catalog, String schema, 616 String table) { 617 StringBuffer query = new StringBuffer (); 618 query.append(getSelectColumnsClauseForKeysQuery()); 619 query.append(" from ").append(getFromClauseForKeysQuery()).append(" where "); 620 String whereClause = getWhereClauseForImportedKeys(catalog, schema, table); 621 if (!whereClause.equals("")) { 622 query.append(whereClause.substring(4)); 623 query.append(" and "); 624 } 625 query.append(getPrimaryTableClause()); 626 query.append(" and "); 627 query.append(getForeignTableClause()); 628 query.append(" and "); 629 query.append(getPrimaryReferentialClause()); 630 query.append(" and "); 631 query.append(getForeignTableReferentialClause()); 632 query.append(" and "); 633 query.append(getKeyColumnUsageMatchClause()); 634 query.append(getOrderClause()); 635 return query.toString(); 636 } 637 638 static String getWhereClauseForExportedKeys(String catalog, String schema, 639 String table) { 640 StringBuffer clause = new StringBuffer (); 641 if (catalog != null) 642 clause.append("and PTC.table_catalog = '").append(catalog).append("' "); 643 if (schema != null) 644 clause.append( (shouldUseLikePredicate(schema) ? "and PTC.table_schema like '" : "and PTC.table_schema = '")) 645 .append(schema).append("' "); 646 if (table != null) 647 clause.append( (shouldUseLikePredicate(table) ? "and PTC.table_name like '" : "and PTC.table_name = '")) 648 .append(table).append("' "); 649 return clause.toString(); 650 } 651 652 public static String getExportedKeysQuery(String catalog, String schema, 653 String table) { 654 StringBuffer query = new StringBuffer (); 655 query.append(getSelectColumnsClauseForKeysQuery()); 656 query.append(" from ").append(getFromClauseForKeysQuery()).append(" where "); 657 String whereClause = getWhereClauseForExportedKeys(catalog, schema, table); 658 if (!whereClause.equals("")) { 659 query.append(whereClause.substring(4)); 660 query.append(" and "); 661 } 662 query.append(getPrimaryTableClause()); 663 query.append(" and "); 664 query.append(getForeignTableClause()); 665 query.append(" and "); 666 query.append(getPrimaryReferentialClause()); 667 query.append(" and "); 668 query.append(getForeignTableReferentialClause()); 669 query.append(" and "); 670 query.append(getKeyColumnUsageMatchClause()); 671 query.append(getOrderClause()); 672 return query.toString(); 673 } 674 675 public static String getCrossReferenceQuery(String primaryCatalog, 676 String primarySchema, 677 String primaryTable, 678 String foreignCatalog, 679 String foreignSchema, 680 String foreignTable) { 681 StringBuffer query = new StringBuffer (); 682 query.append(getSelectColumnsClauseForKeysQuery()); 683 query.append(" from ").append(getFromClauseForKeysQuery()).append(" where "); 684 String exportedKeysWhereClause = getWhereClauseForExportedKeys(primaryCatalog, primarySchema, primaryTable); 685 if (!exportedKeysWhereClause.equals("")) { 686 query.append(exportedKeysWhereClause.substring(4)); 687 query.append(" and "); 688 } 689 String importedKeysWhereClause = getWhereClauseForImportedKeys(foreignCatalog, foreignSchema, foreignTable); 690 if (!importedKeysWhereClause.equals("")) { 691 query.append(importedKeysWhereClause.substring(4)); 692 query.append(" and "); 693 } 694 query.append(getPrimaryTableClause()); 695 query.append(" and "); 696 query.append(getForeignTableClause()); 697 query.append(" and "); 698 query.append(getPrimaryReferentialClause()); 699 query.append(" and "); 700 query.append(getForeignTableReferentialClause()); 701 query.append(" and "); 702 query.append(getKeyColumnUsageMatchClause()); 703 query.append(getOrderClause()); 704 return query.toString(); 705 } 706 707 static String getForeign_Referential_Constaints_table_Relation() { 708 StringBuffer relationClause = new StringBuffer (); 709 relationClause.append(SystemTables.referential_constraints_TableName). 710 append(".unique_constraint_catalog = FOREIGNTABLE.FKT_CAT and "); 711 relationClause.append(SystemTables.referential_constraints_TableName). 712 append(".unique_constraint_schema = FOREIGNTABLE.FKT_SCHEM and "); 713 relationClause.append(SystemTables.referential_constraints_TableName). 714 append(".unique_constraint_name = FOREIGNTABLE.FK_NAME and "); 715 relationClause.append(SystemTables.key_column_usage_TableName).append( 716 ".ordinal_position = FOREIGNTABLE.KEY_SEQ"); 717 return relationClause.toString(); 718 } 719 720 static String getTable_Constraints_And_KeyColumnUsageRelation() { 721 StringBuffer relationClause = new StringBuffer (); 722 relationClause.append(SystemTables.table_constraints_TableName).append( 723 ".constraint_catalog = ").append(SystemTables. 724 key_column_usage_TableName).append( 725 ".constraint_catalog and "); 726 relationClause.append(SystemTables.table_constraints_TableName).append( 727 ".constraint_schema = ").append(SystemTables.key_column_usage_TableName). 728 append(".constraint_schema and "); 729 relationClause.append(SystemTables.table_constraints_TableName).append( 730 ".constraint_name = ").append(SystemTables.key_column_usage_TableName). 731 append(".constraint_name "); 732 return relationClause.toString(); 733 } 734 735 static String getReferential_Constraints_And_KeyColumnUsageRelation() { 736 StringBuffer relationClause = new StringBuffer (); 737 relationClause.append(SystemTables.referential_constraints_TableName). 738 append(".constraint_catalog = ").append(SystemTables. 739 key_column_usage_TableName). 740 append(".constraint_catalog and "); 741 relationClause.append(SystemTables.referential_constraints_TableName). 742 append(".constraint_schema = ").append(SystemTables. 743 key_column_usage_TableName). 744 append(".constraint_schema and "); 745 relationClause.append(SystemTables.referential_constraints_TableName). 746 append(".constraint_name = ").append(SystemTables. 747 key_column_usage_TableName).append( 748 ".constraint_name "); 749 return relationClause.toString(); 750 } 751 752 static String getFromClause(String foreignCatalog, String foreignSchema, 753 String foreignTable, boolean chekCondiiton) { 754 StringBuffer from = new StringBuffer (); 755 from.append(" from ").append(SystemTables.table_constraints_TableName).append(","); 756 from.append(SystemTables.key_column_usage_TableName).append(","); 757 from.append(SystemTables.referential_constraints_TableName).append(","); 758 from.append(" (").append(chekCondiiton ? getForeignKeyClause(foreignCatalog, foreignSchema, foreignTable) : getForeignKeyClause()).append(") ").append(" as FOREIGNTABLE "); 759 return from.toString(); 760 } 761 762 static String getForeignKeyClause() { 763 StringBuffer foreignKeyClause = new StringBuffer (); 764 foreignKeyClause.append(getForeignKeySelectClauseWithFrom()); 765 foreignKeyClause.append(" where ").append( 766 getTable_Constraints_And_KeyColumnUsageRelation()); 767 return foreignKeyClause.toString(); 768 769 } 770 771 static String getForeignKeyClause(String foreignCatalog, String foreignSchema, 772 String foreignTable) { 773 StringBuffer foreignKeyClause = new StringBuffer (); 774 foreignKeyClause.append(getForeignKeySelectClauseWithFrom()); 775 String whereStr = getPrimary_OR_Foreign_KeyWhereClause(foreignCatalog, foreignSchema, foreignTable); 776 foreignKeyClause.append(" where "); 777 if (!whereStr.equals("")) 778 foreignKeyClause.append(whereStr.substring(4)).append(" and "); 779 foreignKeyClause.append(" (").append(getTable_Constraints_And_KeyColumnUsageRelation()).append(" )"); 780 return foreignKeyClause.toString(); 781 } 782 783 static String getForeignKeySelectClauseWithFrom() { 784 StringBuffer selectClause = new StringBuffer (" select "); 785 selectClause.append(SystemTables.table_constraints_TableName).append( 786 ".constraint_catalog as FKT_CAT,"); 787 selectClause.append(SystemTables.table_constraints_TableName).append( 788 ".constraint_schema as FKT_SCHEM,"); 789 selectClause.append(SystemTables.table_constraints_TableName).append( 790 ".constraint_name as FK_NAME,"); 791 selectClause.append(SystemTables.table_constraints_TableName).append( 792 ".table_catalog as FKTABLE_CAT,"); 793 selectClause.append(SystemTables.table_constraints_TableName).append( 794 ".table_schema as FKTABLE_SCHEM,"); 795 selectClause.append(SystemTables.table_constraints_TableName).append( 796 ".table_name as FKTABLE_NAME,"); 797 selectClause.append(SystemTables.key_column_usage_TableName).append( 798 ".column_name as FKCOLUMN_NAME,"); 799 selectClause.append(SystemTables.key_column_usage_TableName).append( 800 ".ordinal_position as KEY_SEQ"); 801 selectClause.append(" from ").append(SystemTables. 802 table_constraints_TableName).append( 803 ",").append(SystemTables.key_column_usage_TableName); 804 return selectClause.toString(); 805 } 806 807 static String getPrimaryAndForeignKeySelectClause() { 808 StringBuffer selectClause = new StringBuffer (" select "); 809 selectClause.append(SystemTables.table_constraints_TableName).append( 810 ".table_catalog,"); 811 selectClause.append(SystemTables.table_constraints_TableName).append( 812 ".table_schema,"); 813 selectClause.append(SystemTables.table_constraints_TableName).append( 814 ".table_name,"); 815 selectClause.append(SystemTables.key_column_usage_TableName).append( 816 ".column_name,"); 817 selectClause.append("FOREIGNTABLE.FKTABLE_CAT,FOREIGNTABLE.FKTABLE_SCHEM as FKTABLE_SCHEM,FOREIGNTABLE.FKTABLE_NAME as FKTABLE_NAME,FOREIGNTABLE.FKCOLUMN_NAME as FKCOLUMN_NAME,FOREIGNTABLE.KEY_SEQ as KEY_SEQ,"); 818 selectClause.append(SystemTables.referential_constraints_TableName).append( 819 ".update_rule,"); 820 selectClause.append(SystemTables.referential_constraints_TableName).append( 821 ".delete_rule,"); 822 selectClause.append(SystemTables.table_constraints_TableName).append( 823 ".constraint_name,"); 824 selectClause.append("FOREIGNTABLE.FK_NAME as FK_NAME,"); 825 selectClause.append(SystemTables.table_constraints_TableName).append( 826 ".is_deferrable,"); 827 selectClause.append(SystemTables.table_constraints_TableName).append( 828 ".initially_deferred "); 829 return selectClause.toString(); 830 } 831 832 static String getPrimary_OR_Foreign_KeyWhereClause(String catalog, 833 String schema, String table) { 834 StringBuffer foreignKeyWhereClause = new StringBuffer (""); 835 if (catalog != null) 836 foreignKeyWhereClause.append("and ").append(SystemTables.table_constraints_TableName) 837 .append( (shouldUseLikePredicate(catalog) ? ".table_catalog Like '" : ".table_catalog = '")) 838 .append(catalog).append("' "); 839 if (schema != null) 840 foreignKeyWhereClause.append("and ").append(SystemTables.table_constraints_TableName) 841 .append( (shouldUseLikePredicate(schema) ? ".table_schema Like '" : ".table_schema = '")) 842 .append(schema).append("' "); 843 if (table != null) 844 foreignKeyWhereClause.append("and ").append(SystemTables.table_constraints_TableName) 845 .append( (shouldUseLikePredicate(table) ? ".table_name Like '" : ".table_name = '")) 846 .append(table).append("' "); 847 return foreignKeyWhereClause.toString(); 848 } 849 850 public static String getTypeInfoQuery() { 851 return null; 852 } 853 854 public static String getIndexInfoQuery(String catalog, String schema, 855 String table, 856 boolean unique, boolean approximate) { 857 StringBuffer selectClause = new StringBuffer ("select "); 858 selectClause.append(SystemTables.INDEXINFO).append(".table_catalog,"); 859 selectClause.append(SystemTables.INDEXINFO).append(".table_schema ,"); 860 selectClause.append(SystemTables.INDEXINFO).append(".table_name,"); 861 selectClause.append(SystemTables.INDEXINFO).append(".indexname,"); 862 selectClause.append(SystemTables.INDEXCOLUMNS).append(".ordinal_position,"); 863 selectClause.append(SystemTables.INDEXCOLUMNS).append(".column_name,"); 864 selectClause.append(SystemTables.INDEXCOLUMNS).append(".ordertype "); 865 StringBuffer whereClause = new StringBuffer (""); 866 whereClause.append(" is_system_generated = False "); 867 if (catalog != null) 868 whereClause.append("and ").append(SystemTables.INDEXINFO) 869 .append( (shouldUseLikePredicate(catalog) ? ".table_catalog Like '" : ".table_catalog = '")) 870 .append(catalog).append("' "); 871 if (schema != null) 872 whereClause.append("and ").append(SystemTables.INDEXINFO) 873 .append( (shouldUseLikePredicate(schema) ? ".table_schema Like '" : ".table_schema = '")) 874 .append(schema).append("' "); 875 if (table != null) whereClause.append("and ").append(SystemTables.INDEXINFO) 877 .append( (shouldUseLikePredicate(table) ? ".table_name Like '" : ".table_name = '")) 878 .append(table).append("' "); 879 880 StringBuffer relation = new StringBuffer (); 881 relation.append("and (").append(SystemTables.INDEXINFO).append(".table_catalog = ").append(SystemTables.INDEXCOLUMNS).append(".table_catalog and "); 882 relation.append(SystemTables.INDEXINFO).append(".table_schema = ").append(SystemTables.INDEXCOLUMNS).append(".table_schema and "); 883 relation.append(SystemTables.INDEXINFO).append(".table_name = ").append(SystemTables.INDEXCOLUMNS).append(".table_name and "); 884 relation.append(SystemTables.INDEXINFO).append(".indexname = ").append(SystemTables.INDEXCOLUMNS).append(".indexname )"); 885 whereClause.append(relation.toString()); 886 887 StringBuffer orderby = new StringBuffer (" order by "); 888 orderby.append(SystemTables.INDEXINFO).append(".indexname,"); 889 orderby.append(SystemTables.INDEXCOLUMNS).append(".ordinal_position "); 890 StringBuffer query = new StringBuffer (); 891 query.append(selectClause.toString()); 892 query.append(" from ").append(SystemTables.INDEXINFO).append(",").append(SystemTables.INDEXCOLUMNS); 893 query.append(" where ").append(whereClause.substring(0)); 894 query.append(orderby.toString()); 895 return query.toString(); 896 } 897 898 public static String getUDTsQuery(String catalog, String schemaPattern, 899 String typeNamePattern, int[] types) { 900 return null; 901 } 902 903 public static String getSuperTypesQuery(String catalog, String schemaPattern, 904 String typeNamePattern) { 905 return null; 906 } 907 908 public static String getSuperTablesQuery(String catalog, String schemaPattern, 909 String tableNamePattern) { 910 return null; 911 } 912 913 private static boolean shouldUseLikePredicate(String query) { 914 return query.indexOf("%") != -1 || query.indexOf("_") != -1; 915 } 916 } 917 | Popular Tags |