blob: f8becee544d142fe07f8852058d701baef4179f2 [file] [log] [blame]
J. Duke319a3b92007-12-01 00:00:00 +00001/*
2 * Copyright 1996-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25
26
27package java.sql;
28
29/**
30 * Comprehensive information about the database as a whole.
31 * <P>
32 * This interface is implemented by driver vendors to let users know the capabilities
33 * of a Database Management System (DBMS) in combination with
34 * the driver based on JDBC<sup><font size=-2>TM</font></sup> technology
35 * ("JDBC driver") that is used with it. Different relational DBMSs often support
36 * different features, implement features in different ways, and use different
37 * data types. In addition, a driver may implement a feature on top of what the
38 * DBMS offers. Information returned by methods in this interface applies
39 * to the capabilities of a particular driver and a particular DBMS working
40 * together. Note that as used in this documentation, the term "database" is
41 * used generically to refer to both the driver and DBMS.
42 * <P>
43 * A user for this interface is commonly a tool that needs to discover how to
44 * deal with the underlying DBMS. This is especially true for applications
45 * that are intended to be used with more than one DBMS. For example, a tool might use the method
46 * <code>getTypeInfo</code> to find out what data types can be used in a
47 * <code>CREATE TABLE</code> statement. Or a user might call the method
48 * <code>supportsCorrelatedSubqueries</code> to see if it is possible to use
49 * a correlated subquery or <code>supportsBatchUpdates</code> to see if it is
50 * possible to use batch updates.
51 * <P>
52 * Some <code>DatabaseMetaData</code> methods return lists of information
53 * in the form of <code>ResultSet</code> objects.
54 * Regular <code>ResultSet</code> methods, such as
55 * <code>getString</code> and <code>getInt</code>, can be used
56 * to retrieve the data from these <code>ResultSet</code> objects. If
57 * a given form of metadata is not available, an empty <code>ResultSet</code>
58 * will be returned. Additional columns beyond the columns defined to be
59 * returned by the <code>ResultSet</code> object for a given method
60 * can be defined by the JDBC driver vendor and must be accessed
61 * by their <B>column label</B>.
62 * <P>
63 * Some <code>DatabaseMetaData</code> methods take arguments that are
64 * String patterns. These arguments all have names such as fooPattern.
65 * Within a pattern String, "%" means match any substring of 0 or more
66 * characters, and "_" means match any one character. Only metadata
67 * entries matching the search pattern are returned. If a search pattern
68 * argument is set to <code>null</code>, that argument's criterion will
69 * be dropped from the search.
70 * <P>
71 */
72public interface DatabaseMetaData extends Wrapper {
73
74 //----------------------------------------------------------------------
75 // First, a variety of minor information about the target database.
76
77 /**
78 * Retrieves whether the current user can call all the procedures
79 * returned by the method <code>getProcedures</code>.
80 *
81 * @return <code>true</code> if so; <code>false</code> otherwise
82 * @exception SQLException if a database access error occurs
83 */
84 boolean allProceduresAreCallable() throws SQLException;
85
86 /**
87 * Retrieves whether the current user can use all the tables returned
88 * by the method <code>getTables</code> in a <code>SELECT</code>
89 * statement.
90 *
91 * @return <code>true</code> if so; <code>false</code> otherwise
92 * @exception SQLException if a database access error occurs
93 */
94 boolean allTablesAreSelectable() throws SQLException;
95
96 /**
97 * Retrieves the URL for this DBMS.
98 *
99 * @return the URL for this DBMS or <code>null</code> if it cannot be
100 * generated
101 * @exception SQLException if a database access error occurs
102 */
103 String getURL() throws SQLException;
104
105 /**
106 * Retrieves the user name as known to this database.
107 *
108 * @return the database user name
109 * @exception SQLException if a database access error occurs
110 */
111 String getUserName() throws SQLException;
112
113 /**
114 * Retrieves whether this database is in read-only mode.
115 *
116 * @return <code>true</code> if so; <code>false</code> otherwise
117 * @exception SQLException if a database access error occurs
118 */
119 boolean isReadOnly() throws SQLException;
120
121 /**
122 * Retrieves whether <code>NULL</code> values are sorted high.
123 * Sorted high means that <code>NULL</code> values
124 * sort higher than any other value in a domain. In an ascending order,
125 * if this method returns <code>true</code>, <code>NULL</code> values
126 * will appear at the end. By contrast, the method
127 * <code>nullsAreSortedAtEnd</code> indicates whether <code>NULL</code> values
128 * are sorted at the end regardless of sort order.
129 *
130 * @return <code>true</code> if so; <code>false</code> otherwise
131 * @exception SQLException if a database access error occurs
132 */
133 boolean nullsAreSortedHigh() throws SQLException;
134
135 /**
136 * Retrieves whether <code>NULL</code> values are sorted low.
137 * Sorted low means that <code>NULL</code> values
138 * sort lower than any other value in a domain. In an ascending order,
139 * if this method returns <code>true</code>, <code>NULL</code> values
140 * will appear at the beginning. By contrast, the method
141 * <code>nullsAreSortedAtStart</code> indicates whether <code>NULL</code> values
142 * are sorted at the beginning regardless of sort order.
143 *
144 * @return <code>true</code> if so; <code>false</code> otherwise
145 * @exception SQLException if a database access error occurs
146 */
147 boolean nullsAreSortedLow() throws SQLException;
148
149 /**
150 * Retrieves whether <code>NULL</code> values are sorted at the start regardless
151 * of sort order.
152 *
153 * @return <code>true</code> if so; <code>false</code> otherwise
154 * @exception SQLException if a database access error occurs
155 */
156 boolean nullsAreSortedAtStart() throws SQLException;
157
158 /**
159 * Retrieves whether <code>NULL</code> values are sorted at the end regardless of
160 * sort order.
161 *
162 * @return <code>true</code> if so; <code>false</code> otherwise
163 * @exception SQLException if a database access error occurs
164 */
165 boolean nullsAreSortedAtEnd() throws SQLException;
166
167 /**
168 * Retrieves the name of this database product.
169 *
170 * @return database product name
171 * @exception SQLException if a database access error occurs
172 */
173 String getDatabaseProductName() throws SQLException;
174
175 /**
176 * Retrieves the version number of this database product.
177 *
178 * @return database version number
179 * @exception SQLException if a database access error occurs
180 */
181 String getDatabaseProductVersion() throws SQLException;
182
183 /**
184 * Retrieves the name of this JDBC driver.
185 *
186 * @return JDBC driver name
187 * @exception SQLException if a database access error occurs
188 */
189 String getDriverName() throws SQLException;
190
191 /**
192 * Retrieves the version number of this JDBC driver as a <code>String</code>.
193 *
194 * @return JDBC driver version
195 * @exception SQLException if a database access error occurs
196 */
197 String getDriverVersion() throws SQLException;
198
199 /**
200 * Retrieves this JDBC driver's major version number.
201 *
202 * @return JDBC driver major version
203 */
204 int getDriverMajorVersion();
205
206 /**
207 * Retrieves this JDBC driver's minor version number.
208 *
209 * @return JDBC driver minor version number
210 */
211 int getDriverMinorVersion();
212
213 /**
214 * Retrieves whether this database stores tables in a local file.
215 *
216 * @return <code>true</code> if so; <code>false</code> otherwise
217 * @exception SQLException if a database access error occurs
218 */
219 boolean usesLocalFiles() throws SQLException;
220
221 /**
222 * Retrieves whether this database uses a file for each table.
223 *
224 * @return <code>true</code> if this database uses a local file for each table;
225 * <code>false</code> otherwise
226 * @exception SQLException if a database access error occurs
227 */
228 boolean usesLocalFilePerTable() throws SQLException;
229
230 /**
231 * Retrieves whether this database treats mixed case unquoted SQL identifiers as
232 * case sensitive and as a result stores them in mixed case.
233 *
234 * @return <code>true</code> if so; <code>false</code> otherwise
235 * @exception SQLException if a database access error occurs
236 */
237 boolean supportsMixedCaseIdentifiers() throws SQLException;
238
239 /**
240 * Retrieves whether this database treats mixed case unquoted SQL identifiers as
241 * case insensitive and stores them in upper case.
242 *
243 * @return <code>true</code> if so; <code>false</code> otherwise
244 * @exception SQLException if a database access error occurs
245 */
246 boolean storesUpperCaseIdentifiers() throws SQLException;
247
248 /**
249 * Retrieves whether this database treats mixed case unquoted SQL identifiers as
250 * case insensitive and stores them in lower case.
251 *
252 * @return <code>true</code> if so; <code>false</code> otherwise
253 * @exception SQLException if a database access error occurs
254 */
255 boolean storesLowerCaseIdentifiers() throws SQLException;
256
257 /**
258 * Retrieves whether this database treats mixed case unquoted SQL identifiers as
259 * case insensitive and stores them in mixed case.
260 *
261 * @return <code>true</code> if so; <code>false</code> otherwise
262 * @exception SQLException if a database access error occurs
263 */
264 boolean storesMixedCaseIdentifiers() throws SQLException;
265
266 /**
267 * Retrieves whether this database treats mixed case quoted SQL identifiers as
268 * case sensitive and as a result stores them in mixed case.
269 *
270 * @return <code>true</code> if so; <code>false</code> otherwise
271 * @exception SQLException if a database access error occurs
272 */
273 boolean supportsMixedCaseQuotedIdentifiers() throws SQLException;
274
275 /**
276 * Retrieves whether this database treats mixed case quoted SQL identifiers as
277 * case insensitive and stores them in upper case.
278 *
279 * @return <code>true</code> if so; <code>false</code> otherwise
280 * @exception SQLException if a database access error occurs
281 */
282 boolean storesUpperCaseQuotedIdentifiers() throws SQLException;
283
284 /**
285 * Retrieves whether this database treats mixed case quoted SQL identifiers as
286 * case insensitive and stores them in lower case.
287 *
288 * @return <code>true</code> if so; <code>false</code> otherwise
289 * @exception SQLException if a database access error occurs
290 */
291 boolean storesLowerCaseQuotedIdentifiers() throws SQLException;
292
293 /**
294 * Retrieves whether this database treats mixed case quoted SQL identifiers as
295 * case insensitive and stores them in mixed case.
296 *
297 * @return <code>true</code> if so; <code>false</code> otherwise
298 * @exception SQLException if a database access error occurs
299 */
300 boolean storesMixedCaseQuotedIdentifiers() throws SQLException;
301
302 /**
303 * Retrieves the string used to quote SQL identifiers.
304 * This method returns a space " " if identifier quoting is not supported.
305 *
306 * @return the quoting string or a space if quoting is not supported
307 * @exception SQLException if a database access error occurs
308 */
309 String getIdentifierQuoteString() throws SQLException;
310
311 /**
312 * Retrieves a comma-separated list of all of this database's SQL keywords
313 * that are NOT also SQL:2003 keywords.
314 *
315 * @return the list of this database's keywords that are not also
316 * SQL:2003 keywords
317 * @exception SQLException if a database access error occurs
318 */
319 String getSQLKeywords() throws SQLException;
320
321 /**
322 * Retrieves a comma-separated list of math functions available with
323 * this database. These are the Open /Open CLI math function names used in
324 * the JDBC function escape clause.
325 *
326 * @return the list of math functions supported by this database
327 * @exception SQLException if a database access error occurs
328 */
329 String getNumericFunctions() throws SQLException;
330
331 /**
332 * Retrieves a comma-separated list of string functions available with
333 * this database. These are the Open Group CLI string function names used
334 * in the JDBC function escape clause.
335 *
336 * @return the list of string functions supported by this database
337 * @exception SQLException if a database access error occurs
338 */
339 String getStringFunctions() throws SQLException;
340
341 /**
342 * Retrieves a comma-separated list of system functions available with
343 * this database. These are the Open Group CLI system function names used
344 * in the JDBC function escape clause.
345 *
346 * @return a list of system functions supported by this database
347 * @exception SQLException if a database access error occurs
348 */
349 String getSystemFunctions() throws SQLException;
350
351 /**
352 * Retrieves a comma-separated list of the time and date functions available
353 * with this database.
354 *
355 * @return the list of time and date functions supported by this database
356 * @exception SQLException if a database access error occurs
357 */
358 String getTimeDateFunctions() throws SQLException;
359
360 /**
361 * Retrieves the string that can be used to escape wildcard characters.
362 * This is the string that can be used to escape '_' or '%' in
363 * the catalog search parameters that are a pattern (and therefore use one
364 * of the wildcard characters).
365 *
366 * <P>The '_' character represents any single character;
367 * the '%' character represents any sequence of zero or
368 * more characters.
369 *
370 * @return the string used to escape wildcard characters
371 * @exception SQLException if a database access error occurs
372 */
373 String getSearchStringEscape() throws SQLException;
374
375 /**
376 * Retrieves all the "extra" characters that can be used in unquoted
377 * identifier names (those beyond a-z, A-Z, 0-9 and _).
378 *
379 * @return the string containing the extra characters
380 * @exception SQLException if a database access error occurs
381 */
382 String getExtraNameCharacters() throws SQLException;
383
384 //--------------------------------------------------------------------
385 // Functions describing which features are supported.
386
387 /**
388 * Retrieves whether this database supports <code>ALTER TABLE</code>
389 * with add column.
390 *
391 * @return <code>true</code> if so; <code>false</code> otherwise
392 * @exception SQLException if a database access error occurs
393 */
394 boolean supportsAlterTableWithAddColumn() throws SQLException;
395
396 /**
397 * Retrieves whether this database supports <code>ALTER TABLE</code>
398 * with drop column.
399 *
400 * @return <code>true</code> if so; <code>false</code> otherwise
401 * @exception SQLException if a database access error occurs
402 */
403 boolean supportsAlterTableWithDropColumn() throws SQLException;
404
405 /**
406 * Retrieves whether this database supports column aliasing.
407 *
408 * <P>If so, the SQL AS clause can be used to provide names for
409 * computed columns or to provide alias names for columns as
410 * required.
411 *
412 * @return <code>true</code> if so; <code>false</code> otherwise
413 * @exception SQLException if a database access error occurs
414 */
415 boolean supportsColumnAliasing() throws SQLException;
416
417 /**
418 * Retrieves whether this database supports concatenations between
419 * <code>NULL</code> and non-<code>NULL</code> values being
420 * <code>NULL</code>.
421 *
422 * @return <code>true</code> if so; <code>false</code> otherwise
423 * @exception SQLException if a database access error occurs
424 */
425 boolean nullPlusNonNullIsNull() throws SQLException;
426
427 /**
428 * Retrieves whether this database supports the JDBC scalar function
429 * <code>CONVERT</code> for the conversion of one JDBC type to another.
430 * The JDBC types are the generic SQL data types defined
431 * in <code>java.sql.Types</code>.
432 *
433 * @return <code>true</code> if so; <code>false</code> otherwise
434 * @exception SQLException if a database access error occurs
435 */
436 boolean supportsConvert() throws SQLException;
437
438 /**
439 * Retrieves whether this database supports the JDBC scalar function
440 * <code>CONVERT</code> for conversions between the JDBC types <i>fromType</i>
441 * and <i>toType</i>. The JDBC types are the generic SQL data types defined
442 * in <code>java.sql.Types</code>.
443 *
444 * @param fromType the type to convert from; one of the type codes from
445 * the class <code>java.sql.Types</code>
446 * @param toType the type to convert to; one of the type codes from
447 * the class <code>java.sql.Types</code>
448 * @return <code>true</code> if so; <code>false</code> otherwise
449 * @exception SQLException if a database access error occurs
450 * @see Types
451 */
452 boolean supportsConvert(int fromType, int toType) throws SQLException;
453
454 /**
455 * Retrieves whether this database supports table correlation names.
456 *
457 * @return <code>true</code> if so; <code>false</code> otherwise
458 * @exception SQLException if a database access error occurs
459 */
460 boolean supportsTableCorrelationNames() throws SQLException;
461
462 /**
463 * Retrieves whether, when table correlation names are supported, they
464 * are restricted to being different from the names of the tables.
465 *
466 * @return <code>true</code> if so; <code>false</code> otherwise
467 * @exception SQLException if a database access error occurs
468 */
469 boolean supportsDifferentTableCorrelationNames() throws SQLException;
470
471 /**
472 * Retrieves whether this database supports expressions in
473 * <code>ORDER BY</code> lists.
474 *
475 * @return <code>true</code> if so; <code>false</code> otherwise
476 * @exception SQLException if a database access error occurs
477 */
478 boolean supportsExpressionsInOrderBy() throws SQLException;
479
480 /**
481 * Retrieves whether this database supports using a column that is
482 * not in the <code>SELECT</code> statement in an
483 * <code>ORDER BY</code> clause.
484 *
485 * @return <code>true</code> if so; <code>false</code> otherwise
486 * @exception SQLException if a database access error occurs
487 */
488 boolean supportsOrderByUnrelated() throws SQLException;
489
490 /**
491 * Retrieves whether this database supports some form of
492 * <code>GROUP BY</code> clause.
493 *
494 * @return <code>true</code> if so; <code>false</code> otherwise
495 * @exception SQLException if a database access error occurs
496 */
497 boolean supportsGroupBy() throws SQLException;
498
499 /**
500 * Retrieves whether this database supports using a column that is
501 * not in the <code>SELECT</code> statement in a
502 * <code>GROUP BY</code> clause.
503 *
504 * @return <code>true</code> if so; <code>false</code> otherwise
505 * @exception SQLException if a database access error occurs
506 */
507 boolean supportsGroupByUnrelated() throws SQLException;
508
509 /**
510 * Retrieves whether this database supports using columns not included in
511 * the <code>SELECT</code> statement in a <code>GROUP BY</code> clause
512 * provided that all of the columns in the <code>SELECT</code> statement
513 * are included in the <code>GROUP BY</code> clause.
514 *
515 * @return <code>true</code> if so; <code>false</code> otherwise
516 * @exception SQLException if a database access error occurs
517 */
518 boolean supportsGroupByBeyondSelect() throws SQLException;
519
520 /**
521 * Retrieves whether this database supports specifying a
522 * <code>LIKE</code> escape clause.
523 *
524 * @return <code>true</code> if so; <code>false</code> otherwise
525 * @exception SQLException if a database access error occurs
526 */
527 boolean supportsLikeEscapeClause() throws SQLException;
528
529 /**
530 * Retrieves whether this database supports getting multiple
531 * <code>ResultSet</code> objects from a single call to the
532 * method <code>execute</code>.
533 *
534 * @return <code>true</code> if so; <code>false</code> otherwise
535 * @exception SQLException if a database access error occurs
536 */
537 boolean supportsMultipleResultSets() throws SQLException;
538
539 /**
540 * Retrieves whether this database allows having multiple
541 * transactions open at once (on different connections).
542 *
543 * @return <code>true</code> if so; <code>false</code> otherwise
544 * @exception SQLException if a database access error occurs
545 */
546 boolean supportsMultipleTransactions() throws SQLException;
547
548 /**
549 * Retrieves whether columns in this database may be defined as non-nullable.
550 *
551 * @return <code>true</code> if so; <code>false</code> otherwise
552 * @exception SQLException if a database access error occurs
553 */
554 boolean supportsNonNullableColumns() throws SQLException;
555
556 /**
557 * Retrieves whether this database supports the ODBC Minimum SQL grammar.
558 *
559 * @return <code>true</code> if so; <code>false</code> otherwise
560 * @exception SQLException if a database access error occurs
561 */
562 boolean supportsMinimumSQLGrammar() throws SQLException;
563
564 /**
565 * Retrieves whether this database supports the ODBC Core SQL grammar.
566 *
567 * @return <code>true</code> if so; <code>false</code> otherwise
568 * @exception SQLException if a database access error occurs
569 */
570 boolean supportsCoreSQLGrammar() throws SQLException;
571
572 /**
573 * Retrieves whether this database supports the ODBC Extended SQL grammar.
574 *
575 * @return <code>true</code> if so; <code>false</code> otherwise
576 * @exception SQLException if a database access error occurs
577 */
578 boolean supportsExtendedSQLGrammar() throws SQLException;
579
580 /**
581 * Retrieves whether this database supports the ANSI92 entry level SQL
582 * grammar.
583 *
584 * @return <code>true</code> if so; <code>false</code> otherwise
585 * @exception SQLException if a database access error occurs
586 */
587 boolean supportsANSI92EntryLevelSQL() throws SQLException;
588
589 /**
590 * Retrieves whether this database supports the ANSI92 intermediate SQL grammar supported.
591 *
592 * @return <code>true</code> if so; <code>false</code> otherwise
593 * @exception SQLException if a database access error occurs
594 */
595 boolean supportsANSI92IntermediateSQL() throws SQLException;
596
597 /**
598 * Retrieves whether this database supports the ANSI92 full SQL grammar supported.
599 *
600 * @return <code>true</code> if so; <code>false</code> otherwise
601 * @exception SQLException if a database access error occurs
602 */
603 boolean supportsANSI92FullSQL() throws SQLException;
604
605 /**
606 * Retrieves whether this database supports the SQL Integrity
607 * Enhancement Facility.
608 *
609 * @return <code>true</code> if so; <code>false</code> otherwise
610 * @exception SQLException if a database access error occurs
611 */
612 boolean supportsIntegrityEnhancementFacility() throws SQLException;
613
614 /**
615 * Retrieves whether this database supports some form of outer join.
616 *
617 * @return <code>true</code> if so; <code>false</code> otherwise
618 * @exception SQLException if a database access error occurs
619 */
620 boolean supportsOuterJoins() throws SQLException;
621
622 /**
623 * Retrieves whether this database supports full nested outer joins.
624 *
625 * @return <code>true</code> if so; <code>false</code> otherwise
626 * @exception SQLException if a database access error occurs
627 */
628 boolean supportsFullOuterJoins() throws SQLException;
629
630 /**
631 * Retrieves whether this database provides limited support for outer
632 * joins. (This will be <code>true</code> if the method
633 * <code>supportsFullOuterJoins</code> returns <code>true</code>).
634 *
635 * @return <code>true</code> if so; <code>false</code> otherwise
636 * @exception SQLException if a database access error occurs
637 */
638 boolean supportsLimitedOuterJoins() throws SQLException;
639
640 /**
641 * Retrieves the database vendor's preferred term for "schema".
642 *
643 * @return the vendor term for "schema"
644 * @exception SQLException if a database access error occurs
645 */
646 String getSchemaTerm() throws SQLException;
647
648 /**
649 * Retrieves the database vendor's preferred term for "procedure".
650 *
651 * @return the vendor term for "procedure"
652 * @exception SQLException if a database access error occurs
653 */
654 String getProcedureTerm() throws SQLException;
655
656 /**
657 * Retrieves the database vendor's preferred term for "catalog".
658 *
659 * @return the vendor term for "catalog"
660 * @exception SQLException if a database access error occurs
661 */
662 String getCatalogTerm() throws SQLException;
663
664 /**
665 * Retrieves whether a catalog appears at the start of a fully qualified
666 * table name. If not, the catalog appears at the end.
667 *
668 * @return <code>true</code> if the catalog name appears at the beginning
669 * of a fully qualified table name; <code>false</code> otherwise
670 * @exception SQLException if a database access error occurs
671 */
672 boolean isCatalogAtStart() throws SQLException;
673
674 /**
675 * Retrieves the <code>String</code> that this database uses as the
676 * separator between a catalog and table name.
677 *
678 * @return the separator string
679 * @exception SQLException if a database access error occurs
680 */
681 String getCatalogSeparator() throws SQLException;
682
683 /**
684 * Retrieves whether a schema name can be used in a data manipulation statement.
685 *
686 * @return <code>true</code> if so; <code>false</code> otherwise
687 * @exception SQLException if a database access error occurs
688 */
689 boolean supportsSchemasInDataManipulation() throws SQLException;
690
691 /**
692 * Retrieves whether a schema name can be used in a procedure call statement.
693 *
694 * @return <code>true</code> if so; <code>false</code> otherwise
695 * @exception SQLException if a database access error occurs
696 */
697 boolean supportsSchemasInProcedureCalls() throws SQLException;
698
699 /**
700 * Retrieves whether a schema name can be used in a table definition statement.
701 *
702 * @return <code>true</code> if so; <code>false</code> otherwise
703 * @exception SQLException if a database access error occurs
704 */
705 boolean supportsSchemasInTableDefinitions() throws SQLException;
706
707 /**
708 * Retrieves whether a schema name can be used in an index definition statement.
709 *
710 * @return <code>true</code> if so; <code>false</code> otherwise
711 * @exception SQLException if a database access error occurs
712 */
713 boolean supportsSchemasInIndexDefinitions() throws SQLException;
714
715 /**
716 * Retrieves whether a schema name can be used in a privilege definition statement.
717 *
718 * @return <code>true</code> if so; <code>false</code> otherwise
719 * @exception SQLException if a database access error occurs
720 */
721 boolean supportsSchemasInPrivilegeDefinitions() throws SQLException;
722
723 /**
724 * Retrieves whether a catalog name can be used in a data manipulation statement.
725 *
726 * @return <code>true</code> if so; <code>false</code> otherwise
727 * @exception SQLException if a database access error occurs
728 */
729 boolean supportsCatalogsInDataManipulation() throws SQLException;
730
731 /**
732 * Retrieves whether a catalog name can be used in a procedure call statement.
733 *
734 * @return <code>true</code> if so; <code>false</code> otherwise
735 * @exception SQLException if a database access error occurs
736 */
737 boolean supportsCatalogsInProcedureCalls() throws SQLException;
738
739 /**
740 * Retrieves whether a catalog name can be used in a table definition statement.
741 *
742 * @return <code>true</code> if so; <code>false</code> otherwise
743 * @exception SQLException if a database access error occurs
744 */
745 boolean supportsCatalogsInTableDefinitions() throws SQLException;
746
747 /**
748 * Retrieves whether a catalog name can be used in an index definition statement.
749 *
750 * @return <code>true</code> if so; <code>false</code> otherwise
751 * @exception SQLException if a database access error occurs
752 */
753 boolean supportsCatalogsInIndexDefinitions() throws SQLException;
754
755 /**
756 * Retrieves whether a catalog name can be used in a privilege definition statement.
757 *
758 * @return <code>true</code> if so; <code>false</code> otherwise
759 * @exception SQLException if a database access error occurs
760 */
761 boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException;
762
763
764 /**
765 * Retrieves whether this database supports positioned <code>DELETE</code>
766 * statements.
767 *
768 * @return <code>true</code> if so; <code>false</code> otherwise
769 * @exception SQLException if a database access error occurs
770 */
771 boolean supportsPositionedDelete() throws SQLException;
772
773 /**
774 * Retrieves whether this database supports positioned <code>UPDATE</code>
775 * statements.
776 *
777 * @return <code>true</code> if so; <code>false</code> otherwise
778 * @exception SQLException if a database access error occurs
779 */
780 boolean supportsPositionedUpdate() throws SQLException;
781
782 /**
783 * Retrieves whether this database supports <code>SELECT FOR UPDATE</code>
784 * statements.
785 *
786 * @return <code>true</code> if so; <code>false</code> otherwise
787 * @exception SQLException if a database access error occurs
788 */
789 boolean supportsSelectForUpdate() throws SQLException;
790
791 /**
792 * Retrieves whether this database supports stored procedure calls
793 * that use the stored procedure escape syntax.
794 *
795 * @return <code>true</code> if so; <code>false</code> otherwise
796 * @exception SQLException if a database access error occurs
797 */
798 boolean supportsStoredProcedures() throws SQLException;
799
800 /**
801 * Retrieves whether this database supports subqueries in comparison
802 * expressions.
803 *
804 * @return <code>true</code> if so; <code>false</code> otherwise
805 * @exception SQLException if a database access error occurs
806 */
807 boolean supportsSubqueriesInComparisons() throws SQLException;
808
809 /**
810 * Retrieves whether this database supports subqueries in
811 * <code>EXISTS</code> expressions.
812 *
813 * @return <code>true</code> if so; <code>false</code> otherwise
814 * @exception SQLException if a database access error occurs
815 */
816 boolean supportsSubqueriesInExists() throws SQLException;
817
818 /**
819 * Retrieves whether this database supports subqueries in
820 * <code>IN</code> expressions.
821 *
822 * @return <code>true</code> if so; <code>false</code> otherwise
823 * @exception SQLException if a database access error occurs
824 */
825 boolean supportsSubqueriesInIns() throws SQLException;
826
827 /**
828 * Retrieves whether this database supports subqueries in quantified
829 * expressions.
830 *
831 * @return <code>true</code> if so; <code>false</code> otherwise
832 * @exception SQLException if a database access error occurs
833 */
834 boolean supportsSubqueriesInQuantifieds() throws SQLException;
835
836 /**
837 * Retrieves whether this database supports correlated subqueries.
838 *
839 * @return <code>true</code> if so; <code>false</code> otherwise
840 * @exception SQLException if a database access error occurs
841 */
842 boolean supportsCorrelatedSubqueries() throws SQLException;
843
844 /**
845 * Retrieves whether this database supports SQL <code>UNION</code>.
846 *
847 * @return <code>true</code> if so; <code>false</code> otherwise
848 * @exception SQLException if a database access error occurs
849 */
850 boolean supportsUnion() throws SQLException;
851
852 /**
853 * Retrieves whether this database supports SQL <code>UNION ALL</code>.
854 *
855 * @return <code>true</code> if so; <code>false</code> otherwise
856 * @exception SQLException if a database access error occurs
857 */
858 boolean supportsUnionAll() throws SQLException;
859
860 /**
861 * Retrieves whether this database supports keeping cursors open
862 * across commits.
863 *
864 * @return <code>true</code> if cursors always remain open;
865 * <code>false</code> if they might not remain open
866 * @exception SQLException if a database access error occurs
867 */
868 boolean supportsOpenCursorsAcrossCommit() throws SQLException;
869
870 /**
871 * Retrieves whether this database supports keeping cursors open
872 * across rollbacks.
873 *
874 * @return <code>true</code> if cursors always remain open;
875 * <code>false</code> if they might not remain open
876 * @exception SQLException if a database access error occurs
877 */
878 boolean supportsOpenCursorsAcrossRollback() throws SQLException;
879
880 /**
881 * Retrieves whether this database supports keeping statements open
882 * across commits.
883 *
884 * @return <code>true</code> if statements always remain open;
885 * <code>false</code> if they might not remain open
886 * @exception SQLException if a database access error occurs
887 */
888 boolean supportsOpenStatementsAcrossCommit() throws SQLException;
889
890 /**
891 * Retrieves whether this database supports keeping statements open
892 * across rollbacks.
893 *
894 * @return <code>true</code> if statements always remain open;
895 * <code>false</code> if they might not remain open
896 * @exception SQLException if a database access error occurs
897 */
898 boolean supportsOpenStatementsAcrossRollback() throws SQLException;
899
900
901
902 //----------------------------------------------------------------------
903 // The following group of methods exposes various limitations
904 // based on the target database with the current driver.
905 // Unless otherwise specified, a result of zero means there is no
906 // limit, or the limit is not known.
907
908 /**
909 * Retrieves the maximum number of hex characters this database allows in an
910 * inline binary literal.
911 *
912 * @return max the maximum length (in hex characters) for a binary literal;
913 * a result of zero means that there is no limit or the limit
914 * is not known
915 * @exception SQLException if a database access error occurs
916 */
917 int getMaxBinaryLiteralLength() throws SQLException;
918
919 /**
920 * Retrieves the maximum number of characters this database allows
921 * for a character literal.
922 *
923 * @return the maximum number of characters allowed for a character literal;
924 * a result of zero means that there is no limit or the limit is
925 * not known
926 * @exception SQLException if a database access error occurs
927 */
928 int getMaxCharLiteralLength() throws SQLException;
929
930 /**
931 * Retrieves the maximum number of characters this database allows
932 * for a column name.
933 *
934 * @return the maximum number of characters allowed for a column name;
935 * a result of zero means that there is no limit or the limit
936 * is not known
937 * @exception SQLException if a database access error occurs
938 */
939 int getMaxColumnNameLength() throws SQLException;
940
941 /**
942 * Retrieves the maximum number of columns this database allows in a
943 * <code>GROUP BY</code> clause.
944 *
945 * @return the maximum number of columns allowed;
946 * a result of zero means that there is no limit or the limit
947 * is not known
948 * @exception SQLException if a database access error occurs
949 */
950 int getMaxColumnsInGroupBy() throws SQLException;
951
952 /**
953 * Retrieves the maximum number of columns this database allows in an index.
954 *
955 * @return the maximum number of columns allowed;
956 * a result of zero means that there is no limit or the limit
957 * is not known
958 * @exception SQLException if a database access error occurs
959 */
960 int getMaxColumnsInIndex() throws SQLException;
961
962 /**
963 * Retrieves the maximum number of columns this database allows in an
964 * <code>ORDER BY</code> clause.
965 *
966 * @return the maximum number of columns allowed;
967 * a result of zero means that there is no limit or the limit
968 * is not known
969 * @exception SQLException if a database access error occurs
970 */
971 int getMaxColumnsInOrderBy() throws SQLException;
972
973 /**
974 * Retrieves the maximum number of columns this database allows in a
975 * <code>SELECT</code> list.
976 *
977 * @return the maximum number of columns allowed;
978 * a result of zero means that there is no limit or the limit
979 * is not known
980 * @exception SQLException if a database access error occurs
981 */
982 int getMaxColumnsInSelect() throws SQLException;
983
984 /**
985 * Retrieves the maximum number of columns this database allows in a table.
986 *
987 * @return the maximum number of columns allowed;
988 * a result of zero means that there is no limit or the limit
989 * is not known
990 * @exception SQLException if a database access error occurs
991 */
992 int getMaxColumnsInTable() throws SQLException;
993
994 /**
995 * Retrieves the maximum number of concurrent connections to this
996 * database that are possible.
997 *
998 * @return the maximum number of active connections possible at one time;
999 * a result of zero means that there is no limit or the limit
1000 * is not known
1001 * @exception SQLException if a database access error occurs
1002 */
1003 int getMaxConnections() throws SQLException;
1004
1005 /**
1006 * Retrieves the maximum number of characters that this database allows in a
1007 * cursor name.
1008 *
1009 * @return the maximum number of characters allowed in a cursor name;
1010 * a result of zero means that there is no limit or the limit
1011 * is not known
1012 * @exception SQLException if a database access error occurs
1013 */
1014 int getMaxCursorNameLength() throws SQLException;
1015
1016 /**
1017 * Retrieves the maximum number of bytes this database allows for an
1018 * index, including all of the parts of the index.
1019 *
1020 * @return the maximum number of bytes allowed; this limit includes the
1021 * composite of all the constituent parts of the index;
1022 * a result of zero means that there is no limit or the limit
1023 * is not known
1024 * @exception SQLException if a database access error occurs
1025 */
1026 int getMaxIndexLength() throws SQLException;
1027
1028 /**
1029 * Retrieves the maximum number of characters that this database allows in a
1030 * schema name.
1031 *
1032 * @return the maximum number of characters allowed in a schema name;
1033 * a result of zero means that there is no limit or the limit
1034 * is not known
1035 * @exception SQLException if a database access error occurs
1036 */
1037 int getMaxSchemaNameLength() throws SQLException;
1038
1039 /**
1040 * Retrieves the maximum number of characters that this database allows in a
1041 * procedure name.
1042 *
1043 * @return the maximum number of characters allowed in a procedure name;
1044 * a result of zero means that there is no limit or the limit
1045 * is not known
1046 * @exception SQLException if a database access error occurs
1047 */
1048 int getMaxProcedureNameLength() throws SQLException;
1049
1050 /**
1051 * Retrieves the maximum number of characters that this database allows in a
1052 * catalog name.
1053 *
1054 * @return the maximum number of characters allowed in a catalog name;
1055 * a result of zero means that there is no limit or the limit
1056 * is not known
1057 * @exception SQLException if a database access error occurs
1058 */
1059 int getMaxCatalogNameLength() throws SQLException;
1060
1061 /**
1062 * Retrieves the maximum number of bytes this database allows in
1063 * a single row.
1064 *
1065 * @return the maximum number of bytes allowed for a row; a result of
1066 * zero means that there is no limit or the limit is not known
1067 * @exception SQLException if a database access error occurs
1068 */
1069 int getMaxRowSize() throws SQLException;
1070
1071 /**
1072 * Retrieves whether the return value for the method
1073 * <code>getMaxRowSize</code> includes the SQL data types
1074 * <code>LONGVARCHAR</code> and <code>LONGVARBINARY</code>.
1075 *
1076 * @return <code>true</code> if so; <code>false</code> otherwise
1077 * @exception SQLException if a database access error occurs
1078 */
1079 boolean doesMaxRowSizeIncludeBlobs() throws SQLException;
1080
1081 /**
1082 * Retrieves the maximum number of characters this database allows in
1083 * an SQL statement.
1084 *
1085 * @return the maximum number of characters allowed for an SQL statement;
1086 * a result of zero means that there is no limit or the limit
1087 * is not known
1088 * @exception SQLException if a database access error occurs
1089 */
1090 int getMaxStatementLength() throws SQLException;
1091
1092 /**
1093 * Retrieves the maximum number of active statements to this database
1094 * that can be open at the same time.
1095 *
1096 * @return the maximum number of statements that can be open at one time;
1097 * a result of zero means that there is no limit or the limit
1098 * is not known
1099 * @exception SQLException if a database access error occurs
1100 */
1101 int getMaxStatements() throws SQLException;
1102
1103 /**
1104 * Retrieves the maximum number of characters this database allows in
1105 * a table name.
1106 *
1107 * @return the maximum number of characters allowed for a table name;
1108 * a result of zero means that there is no limit or the limit
1109 * is not known
1110 * @exception SQLException if a database access error occurs
1111 */
1112 int getMaxTableNameLength() throws SQLException;
1113
1114 /**
1115 * Retrieves the maximum number of tables this database allows in a
1116 * <code>SELECT</code> statement.
1117 *
1118 * @return the maximum number of tables allowed in a <code>SELECT</code>
1119 * statement; a result of zero means that there is no limit or
1120 * the limit is not known
1121 * @exception SQLException if a database access error occurs
1122 */
1123 int getMaxTablesInSelect() throws SQLException;
1124
1125 /**
1126 * Retrieves the maximum number of characters this database allows in
1127 * a user name.
1128 *
1129 * @return the maximum number of characters allowed for a user name;
1130 * a result of zero means that there is no limit or the limit
1131 * is not known
1132 * @exception SQLException if a database access error occurs
1133 */
1134 int getMaxUserNameLength() throws SQLException;
1135
1136 //----------------------------------------------------------------------
1137
1138 /**
1139 * Retrieves this database's default transaction isolation level. The
1140 * possible values are defined in <code>java.sql.Connection</code>.
1141 *
1142 * @return the default isolation level
1143 * @exception SQLException if a database access error occurs
1144 * @see Connection
1145 */
1146 int getDefaultTransactionIsolation() throws SQLException;
1147
1148 /**
1149 * Retrieves whether this database supports transactions. If not, invoking the
1150 * method <code>commit</code> is a noop, and the isolation level is
1151 * <code>TRANSACTION_NONE</code>.
1152 *
1153 * @return <code>true</code> if transactions are supported;
1154 * <code>false</code> otherwise
1155 * @exception SQLException if a database access error occurs
1156 */
1157 boolean supportsTransactions() throws SQLException;
1158
1159 /**
1160 * Retrieves whether this database supports the given transaction isolation level.
1161 *
1162 * @param level one of the transaction isolation levels defined in
1163 * <code>java.sql.Connection</code>
1164 * @return <code>true</code> if so; <code>false</code> otherwise
1165 * @exception SQLException if a database access error occurs
1166 * @see Connection
1167 */
1168 boolean supportsTransactionIsolationLevel(int level)
1169 throws SQLException;
1170
1171 /**
1172 * Retrieves whether this database supports both data definition and
1173 * data manipulation statements within a transaction.
1174 *
1175 * @return <code>true</code> if so; <code>false</code> otherwise
1176 * @exception SQLException if a database access error occurs
1177 */
1178 boolean supportsDataDefinitionAndDataManipulationTransactions()
1179 throws SQLException;
1180 /**
1181 * Retrieves whether this database supports only data manipulation
1182 * statements within a transaction.
1183 *
1184 * @return <code>true</code> if so; <code>false</code> otherwise
1185 * @exception SQLException if a database access error occurs
1186 */
1187 boolean supportsDataManipulationTransactionsOnly()
1188 throws SQLException;
1189
1190 /**
1191 * Retrieves whether a data definition statement within a transaction forces
1192 * the transaction to commit.
1193 *
1194 * @return <code>true</code> if so; <code>false</code> otherwise
1195 * @exception SQLException if a database access error occurs
1196 */
1197 boolean dataDefinitionCausesTransactionCommit()
1198 throws SQLException;
1199
1200 /**
1201 * Retrieves whether this database ignores a data definition statement
1202 * within a transaction.
1203 *
1204 * @return <code>true</code> if so; <code>false</code> otherwise
1205 * @exception SQLException if a database access error occurs
1206 */
1207 boolean dataDefinitionIgnoredInTransactions()
1208 throws SQLException;
1209
1210 /**
1211 * Retrieves a description of the stored procedures available in the given
1212 * catalog.
1213 * <P>
1214 * Only procedure descriptions matching the schema and
1215 * procedure name criteria are returned. They are ordered by
1216 * <code>PROCEDURE_CAT</code>, <code>PROCEDURE_SCHEM</code>,
1217 * <code>PROCEDURE_NAME</code> and <code>SPECIFIC_ NAME</code>.
1218 *
1219 * <P>Each procedure description has the the following columns:
1220 * <OL>
1221 * <LI><B>PROCEDURE_CAT</B> String => procedure catalog (may be <code>null</code>)
1222 * <LI><B>PROCEDURE_SCHEM</B> String => procedure schema (may be <code>null</code>)
1223 * <LI><B>PROCEDURE_NAME</B> String => procedure name
1224 * <LI> reserved for future use
1225 * <LI> reserved for future use
1226 * <LI> reserved for future use
1227 * <LI><B>REMARKS</B> String => explanatory comment on the procedure
1228 * <LI><B>PROCEDURE_TYPE</B> short => kind of procedure:
1229 * <UL>
1230 * <LI> procedureResultUnknown - Cannot determine if a return value
1231 * will be returned
1232 * <LI> procedureNoResult - Does not return a return value
1233 * <LI> procedureReturnsResult - Returns a return value
1234 * </UL>
1235 * <LI><B>SPECIFIC_NAME</B> String => The name which uniquely identifies this
1236 * procedure within its schema.
1237 * </OL>
1238 * <p>
1239 * A user may not have permissions to execute any of the procedures that are
1240 * returned by <code>getProcedures</code>
1241 *
1242 * @param catalog a catalog name; must match the catalog name as it
1243 * is stored in the database; "" retrieves those without a catalog;
1244 * <code>null</code> means that the catalog name should not be used to narrow
1245 * the search
1246 * @param schemaPattern a schema name pattern; must match the schema name
1247 * as it is stored in the database; "" retrieves those without a schema;
1248 * <code>null</code> means that the schema name should not be used to narrow
1249 * the search
1250 * @param procedureNamePattern a procedure name pattern; must match the
1251 * procedure name as it is stored in the database
1252 * @return <code>ResultSet</code> - each row is a procedure description
1253 * @exception SQLException if a database access error occurs
1254 * @see #getSearchStringEscape
1255 */
1256 ResultSet getProcedures(String catalog, String schemaPattern,
1257 String procedureNamePattern) throws SQLException;
1258
1259 /**
1260 * Indicates that it is not known whether the procedure returns
1261 * a result.
1262 * <P>
1263 * A possible value for column <code>PROCEDURE_TYPE</code> in the
1264 * <code>ResultSet</code> object returned by the method
1265 * <code>getProcedures</code>.
1266 */
1267 int procedureResultUnknown = 0;
1268
1269 /**
1270 * Indicates that the procedure does not return a result.
1271 * <P>
1272 * A possible value for column <code>PROCEDURE_TYPE</code> in the
1273 * <code>ResultSet</code> object returned by the method
1274 * <code>getProcedures</code>.
1275 */
1276 int procedureNoResult = 1;
1277
1278 /**
1279 * Indicates that the procedure returns a result.
1280 * <P>
1281 * A possible value for column <code>PROCEDURE_TYPE</code> in the
1282 * <code>ResultSet</code> object returned by the method
1283 * <code>getProcedures</code>.
1284 */
1285 int procedureReturnsResult = 2;
1286
1287 /**
1288 * Retrieves a description of the given catalog's stored procedure parameter
1289 * and result columns.
1290 *
1291 * <P>Only descriptions matching the schema, procedure and
1292 * parameter name criteria are returned. They are ordered by
1293 * PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value,
1294 * if any, is first. Next are the parameter descriptions in call
1295 * order. The column descriptions follow in column number order.
1296 *
1297 * <P>Each row in the <code>ResultSet</code> is a parameter description or
1298 * column description with the following fields:
1299 * <OL>
1300 * <LI><B>PROCEDURE_CAT</B> String => procedure catalog (may be <code>null</code>)
1301 * <LI><B>PROCEDURE_SCHEM</B> String => procedure schema (may be <code>null</code>)
1302 * <LI><B>PROCEDURE_NAME</B> String => procedure name
1303 * <LI><B>COLUMN_NAME</B> String => column/parameter name
1304 * <LI><B>COLUMN_TYPE</B> Short => kind of column/parameter:
1305 * <UL>
1306 * <LI> procedureColumnUnknown - nobody knows
1307 * <LI> procedureColumnIn - IN parameter
1308 * <LI> procedureColumnInOut - INOUT parameter
1309 * <LI> procedureColumnOut - OUT parameter
1310 * <LI> procedureColumnReturn - procedure return value
1311 * <LI> procedureColumnResult - result column in <code>ResultSet</code>
1312 * </UL>
1313 * <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
1314 * <LI><B>TYPE_NAME</B> String => SQL type name, for a UDT type the
1315 * type name is fully qualified
1316 * <LI><B>PRECISION</B> int => precision
1317 * <LI><B>LENGTH</B> int => length in bytes of data
1318 * <LI><B>SCALE</B> short => scale - null is returned for data types where
1319 * SCALE is not applicable.
1320 * <LI><B>RADIX</B> short => radix
1321 * <LI><B>NULLABLE</B> short => can it contain NULL.
1322 * <UL>
1323 * <LI> procedureNoNulls - does not allow NULL values
1324 * <LI> procedureNullable - allows NULL values
1325 * <LI> procedureNullableUnknown - nullability unknown
1326 * </UL>
1327 * <LI><B>REMARKS</B> String => comment describing parameter/column
1328 * <LI><B>COLUMN_DEF</B> String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be <code>null</code>)
1329 * <UL>
1330 * <LI> The string NULL (not enclosed in quotes) - if NULL was specified as the default value
1331 * <LI> TRUNCATE (not enclosed in quotes) - if the specified default value cannot be represented without truncation
1332 * <LI> NULL - if a default value was not specified
1333 * </UL>
1334 * <LI><B>SQL_DATA_TYPE</B> int => reserved for future use
1335 * <LI><B>SQL_DATETIME_SUB</B> int => reserved for future use
1336 * <LI><B>CHAR_OCTET_LENGTH</B> int => the maximum length of binary and character based columns. For any other datatype the returned value is a
1337 * NULL
1338 * <LI><B>ORDINAL_POSITION</B> int => the ordinal position, starting from 1, for the input and output parameters for a procedure. A value of 0
1339 *is returned if this row describes the procedure's return value. For result set columns, it is the
1340 *ordinal position of the column in the result set starting from 1. If there are
1341 *multiple result sets, the column ordinal positions are implementation
1342 * defined.
1343 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine the nullability for a column.
1344 * <UL>
1345 * <LI> YES --- if the parameter can include NULLs
1346 * <LI> NO --- if the parameter cannot include NULLs
1347 * <LI> empty string --- if the nullability for the
1348 * parameter is unknown
1349 * </UL>
1350 * <LI><B>SPECIFIC_NAME</B> String => the name which uniquely identifies this procedure within its schema.
1351 * </OL>
1352 *
1353 * <P><B>Note:</B> Some databases may not return the column
1354 * descriptions for a procedure.
1355 *
1356 * <p>The PRECISION column represents the specified column size for the given column.
1357 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1358 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1359 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1360 * this is the length in bytes. Null is returned for data types where the
1361 * column size is not applicable.
1362 * @param catalog a catalog name; must match the catalog name as it
1363 * is stored in the database; "" retrieves those without a catalog;
1364 * <code>null</code> means that the catalog name should not be used to narrow
1365 * the search
1366 * @param schemaPattern a schema name pattern; must match the schema name
1367 * as it is stored in the database; "" retrieves those without a schema;
1368 * <code>null</code> means that the schema name should not be used to narrow
1369 * the search
1370 * @param procedureNamePattern a procedure name pattern; must match the
1371 * procedure name as it is stored in the database
1372 * @param columnNamePattern a column name pattern; must match the column name
1373 * as it is stored in the database
1374 * @return <code>ResultSet</code> - each row describes a stored procedure parameter or
1375 * column
1376 * @exception SQLException if a database access error occurs
1377 * @see #getSearchStringEscape
1378 */
1379 ResultSet getProcedureColumns(String catalog,
1380 String schemaPattern,
1381 String procedureNamePattern,
1382 String columnNamePattern) throws SQLException;
1383
1384 /**
1385 * Indicates that type of the column is unknown.
1386 * <P>
1387 * A possible value for the column
1388 * <code>COLUMN_TYPE</code>
1389 * in the <code>ResultSet</code>
1390 * returned by the method <code>getProcedureColumns</code>.
1391 */
1392 int procedureColumnUnknown = 0;
1393
1394 /**
1395 * Indicates that the column stores IN parameters.
1396 * <P>
1397 * A possible value for the column
1398 * <code>COLUMN_TYPE</code>
1399 * in the <code>ResultSet</code>
1400 * returned by the method <code>getProcedureColumns</code>.
1401 */
1402 int procedureColumnIn = 1;
1403
1404 /**
1405 * Indicates that the column stores INOUT parameters.
1406 * <P>
1407 * A possible value for the column
1408 * <code>COLUMN_TYPE</code>
1409 * in the <code>ResultSet</code>
1410 * returned by the method <code>getProcedureColumns</code>.
1411 */
1412 int procedureColumnInOut = 2;
1413
1414 /**
1415 * Indicates that the column stores OUT parameters.
1416 * <P>
1417 * A possible value for the column
1418 * <code>COLUMN_TYPE</code>
1419 * in the <code>ResultSet</code>
1420 * returned by the method <code>getProcedureColumns</code>.
1421 */
1422 int procedureColumnOut = 4;
1423 /**
1424 * Indicates that the column stores return values.
1425 * <P>
1426 * A possible value for the column
1427 * <code>COLUMN_TYPE</code>
1428 * in the <code>ResultSet</code>
1429 * returned by the method <code>getProcedureColumns</code>.
1430 */
1431 int procedureColumnReturn = 5;
1432
1433 /**
1434 * Indicates that the column stores results.
1435 * <P>
1436 * A possible value for the column
1437 * <code>COLUMN_TYPE</code>
1438 * in the <code>ResultSet</code>
1439 * returned by the method <code>getProcedureColumns</code>.
1440 */
1441 int procedureColumnResult = 3;
1442
1443 /**
1444 * Indicates that <code>NULL</code> values are not allowed.
1445 * <P>
1446 * A possible value for the column
1447 * <code>NULLABLE</code>
1448 * in the <code>ResultSet</code> object
1449 * returned by the method <code>getProcedureColumns</code>.
1450 */
1451 int procedureNoNulls = 0;
1452
1453 /**
1454 * Indicates that <code>NULL</code> values are allowed.
1455 * <P>
1456 * A possible value for the column
1457 * <code>NULLABLE</code>
1458 * in the <code>ResultSet</code> object
1459 * returned by the method <code>getProcedureColumns</code>.
1460 */
1461 int procedureNullable = 1;
1462
1463 /**
1464 * Indicates that whether <code>NULL</code> values are allowed
1465 * is unknown.
1466 * <P>
1467 * A possible value for the column
1468 * <code>NULLABLE</code>
1469 * in the <code>ResultSet</code> object
1470 * returned by the method <code>getProcedureColumns</code>.
1471 */
1472 int procedureNullableUnknown = 2;
1473
1474
1475 /**
1476 * Retrieves a description of the tables available in the given catalog.
1477 * Only table descriptions matching the catalog, schema, table
1478 * name and type criteria are returned. They are ordered by
1479 * <code>TABLE_TYPE</code>, <code>TABLE_CAT</code>,
1480 * <code>TABLE_SCHEM</code> and <code>TABLE_NAME</code>.
1481 * <P>
1482 * Each table description has the following columns:
1483 * <OL>
1484 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1485 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1486 * <LI><B>TABLE_NAME</B> String => table name
1487 * <LI><B>TABLE_TYPE</B> String => table type. Typical types are "TABLE",
1488 * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
1489 * "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
1490 * <LI><B>REMARKS</B> String => explanatory comment on the table
1491 * <LI><B>TYPE_CAT</B> String => the types catalog (may be <code>null</code>)
1492 * <LI><B>TYPE_SCHEM</B> String => the types schema (may be <code>null</code>)
1493 * <LI><B>TYPE_NAME</B> String => type name (may be <code>null</code>)
1494 * <LI><B>SELF_REFERENCING_COL_NAME</B> String => name of the designated
1495 * "identifier" column of a typed table (may be <code>null</code>)
1496 * <LI><B>REF_GENERATION</B> String => specifies how values in
1497 * SELF_REFERENCING_COL_NAME are created. Values are
1498 * "SYSTEM", "USER", "DERIVED". (may be <code>null</code>)
1499 * </OL>
1500 *
1501 * <P><B>Note:</B> Some databases may not return information for
1502 * all tables.
1503 *
1504 * @param catalog a catalog name; must match the catalog name as it
1505 * is stored in the database; "" retrieves those without a catalog;
1506 * <code>null</code> means that the catalog name should not be used to narrow
1507 * the search
1508 * @param schemaPattern a schema name pattern; must match the schema name
1509 * as it is stored in the database; "" retrieves those without a schema;
1510 * <code>null</code> means that the schema name should not be used to narrow
1511 * the search
1512 * @param tableNamePattern a table name pattern; must match the
1513 * table name as it is stored in the database
1514 * @param types a list of table types, which must be from the list of table types
1515 * returned from {@link #getTableTypes},to include; <code>null</code> returns
1516 * all types
1517 * @return <code>ResultSet</code> - each row is a table description
1518 * @exception SQLException if a database access error occurs
1519 * @see #getSearchStringEscape
1520 */
1521 ResultSet getTables(String catalog, String schemaPattern,
1522 String tableNamePattern, String types[]) throws SQLException;
1523
1524 /**
1525 * Retrieves the schema names available in this database. The results
1526 * are ordered by <code>TABLE_CATALOG</code> and
1527 * <code>TABLE_SCHEM</code>.
1528 *
1529 * <P>The schema columns are:
1530 * <OL>
1531 * <LI><B>TABLE_SCHEM</B> String => schema name
1532 * <LI><B>TABLE_CATALOG</B> String => catalog name (may be <code>null</code>)
1533 * </OL>
1534 *
1535 * @return a <code>ResultSet</code> object in which each row is a
1536 * schema description
1537 * @exception SQLException if a database access error occurs
1538 *
1539 */
1540 ResultSet getSchemas() throws SQLException;
1541
1542 /**
1543 * Retrieves the catalog names available in this database. The results
1544 * are ordered by catalog name.
1545 *
1546 * <P>The catalog column is:
1547 * <OL>
1548 * <LI><B>TABLE_CAT</B> String => catalog name
1549 * </OL>
1550 *
1551 * @return a <code>ResultSet</code> object in which each row has a
1552 * single <code>String</code> column that is a catalog name
1553 * @exception SQLException if a database access error occurs
1554 */
1555 ResultSet getCatalogs() throws SQLException;
1556
1557 /**
1558 * Retrieves the table types available in this database. The results
1559 * are ordered by table type.
1560 *
1561 * <P>The table type is:
1562 * <OL>
1563 * <LI><B>TABLE_TYPE</B> String => table type. Typical types are "TABLE",
1564 * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY",
1565 * "LOCAL TEMPORARY", "ALIAS", "SYNONYM".
1566 * </OL>
1567 *
1568 * @return a <code>ResultSet</code> object in which each row has a
1569 * single <code>String</code> column that is a table type
1570 * @exception SQLException if a database access error occurs
1571 */
1572 ResultSet getTableTypes() throws SQLException;
1573
1574 /**
1575 * Retrieves a description of table columns available in
1576 * the specified catalog.
1577 *
1578 * <P>Only column descriptions matching the catalog, schema, table
1579 * and column name criteria are returned. They are ordered by
1580 * <code>TABLE_CAT</code>,<code>TABLE_SCHEM</code>,
1581 * <code>TABLE_NAME</code>, and <code>ORDINAL_POSITION</code>.
1582 *
1583 * <P>Each column description has the following columns:
1584 * <OL>
1585 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1586 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1587 * <LI><B>TABLE_NAME</B> String => table name
1588 * <LI><B>COLUMN_NAME</B> String => column name
1589 * <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
1590 * <LI><B>TYPE_NAME</B> String => Data source dependent type name,
1591 * for a UDT the type name is fully qualified
1592 * <LI><B>COLUMN_SIZE</B> int => column size.
1593 * <LI><B>BUFFER_LENGTH</B> is not used.
1594 * <LI><B>DECIMAL_DIGITS</B> int => the number of fractional digits. Null is returned for data types where
1595 * DECIMAL_DIGITS is not applicable.
1596 * <LI><B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2)
1597 * <LI><B>NULLABLE</B> int => is NULL allowed.
1598 * <UL>
1599 * <LI> columnNoNulls - might not allow <code>NULL</code> values
1600 * <LI> columnNullable - definitely allows <code>NULL</code> values
1601 * <LI> columnNullableUnknown - nullability unknown
1602 * </UL>
1603 * <LI><B>REMARKS</B> String => comment describing column (may be <code>null</code>)
1604 * <LI><B>COLUMN_DEF</B> String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be <code>null</code>)
1605 * <LI><B>SQL_DATA_TYPE</B> int => unused
1606 * <LI><B>SQL_DATETIME_SUB</B> int => unused
1607 * <LI><B>CHAR_OCTET_LENGTH</B> int => for char types the
1608 * maximum number of bytes in the column
1609 * <LI><B>ORDINAL_POSITION</B> int => index of column in table
1610 * (starting at 1)
1611 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine the nullability for a column.
1612 * <UL>
1613 * <LI> YES --- if the parameter can include NULLs
1614 * <LI> NO --- if the parameter cannot include NULLs
1615 * <LI> empty string --- if the nullability for the
1616 * parameter is unknown
1617 * </UL>
1618 * <LI><B>SCOPE_CATLOG</B> String => catalog of table that is the scope
1619 * of a reference attribute (<code>null</code> if DATA_TYPE isn't REF)
1620 * <LI><B>SCOPE_SCHEMA</B> String => schema of table that is the scope
1621 * of a reference attribute (<code>null</code> if the DATA_TYPE isn't REF)
1622 * <LI><B>SCOPE_TABLE</B> String => table name that this the scope
1623 * of a reference attribure (<code>null</code> if the DATA_TYPE isn't REF)
1624 * <LI><B>SOURCE_DATA_TYPE</B> short => source type of a distinct type or user-generated
1625 * Ref type, SQL type from java.sql.Types (<code>null</code> if DATA_TYPE
1626 * isn't DISTINCT or user-generated REF)
1627 * <LI><B>IS_AUTOINCREMENT</B> String => Indicates whether this column is auto incremented
1628 * <UL>
1629 * <LI> YES --- if the column is auto incremented
1630 * <LI> NO --- if the column is not auto incremented
1631 * <LI> empty string --- if it cannot be determined whether the column is auto incremented
1632 * parameter is unknown
1633 * </UL>
1634 * </OL>
1635 *
1636 * <p>The COLUMN_SIZE column the specified column size for the given column.
1637 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1638 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1639 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1640 * this is the length in bytes. Null is returned for data types where the
1641 * column size is not applicable.
1642 *
1643 * @param catalog a catalog name; must match the catalog name as it
1644 * is stored in the database; "" retrieves those without a catalog;
1645 * <code>null</code> means that the catalog name should not be used to narrow
1646 * the search
1647 * @param schemaPattern a schema name pattern; must match the schema name
1648 * as it is stored in the database; "" retrieves those without a schema;
1649 * <code>null</code> means that the schema name should not be used to narrow
1650 * the search
1651 * @param tableNamePattern a table name pattern; must match the
1652 * table name as it is stored in the database
1653 * @param columnNamePattern a column name pattern; must match the column
1654 * name as it is stored in the database
1655 * @return <code>ResultSet</code> - each row is a column description
1656 * @exception SQLException if a database access error occurs
1657 * @see #getSearchStringEscape
1658 */
1659 ResultSet getColumns(String catalog, String schemaPattern,
1660 String tableNamePattern, String columnNamePattern)
1661 throws SQLException;
1662
1663 /**
1664 * Indicates that the column might not allow <code>NULL</code> values.
1665 * <P>
1666 * A possible value for the column
1667 * <code>NULLABLE</code>
1668 * in the <code>ResultSet</code> returned by the method
1669 * <code>getColumns</code>.
1670 */
1671 int columnNoNulls = 0;
1672
1673 /**
1674 * Indicates that the column definitely allows <code>NULL</code> values.
1675 * <P>
1676 * A possible value for the column
1677 * <code>NULLABLE</code>
1678 * in the <code>ResultSet</code> returned by the method
1679 * <code>getColumns</code>.
1680 */
1681 int columnNullable = 1;
1682
1683 /**
1684 * Indicates that the nullability of columns is unknown.
1685 * <P>
1686 * A possible value for the column
1687 * <code>NULLABLE</code>
1688 * in the <code>ResultSet</code> returned by the method
1689 * <code>getColumns</code>.
1690 */
1691 int columnNullableUnknown = 2;
1692
1693 /**
1694 * Retrieves a description of the access rights for a table's columns.
1695 *
1696 * <P>Only privileges matching the column name criteria are
1697 * returned. They are ordered by COLUMN_NAME and PRIVILEGE.
1698 *
1699 * <P>Each privilige description has the following columns:
1700 * <OL>
1701 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1702 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1703 * <LI><B>TABLE_NAME</B> String => table name
1704 * <LI><B>COLUMN_NAME</B> String => column name
1705 * <LI><B>GRANTOR</B> String => grantor of access (may be <code>null</code>)
1706 * <LI><B>GRANTEE</B> String => grantee of access
1707 * <LI><B>PRIVILEGE</B> String => name of access (SELECT,
1708 * INSERT, UPDATE, REFRENCES, ...)
1709 * <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted
1710 * to grant to others; "NO" if not; <code>null</code> if unknown
1711 * </OL>
1712 *
1713 * @param catalog a catalog name; must match the catalog name as it
1714 * is stored in the database; "" retrieves those without a catalog;
1715 * <code>null</code> means that the catalog name should not be used to narrow
1716 * the search
1717 * @param schema a schema name; must match the schema name as it is
1718 * stored in the database; "" retrieves those without a schema;
1719 * <code>null</code> means that the schema name should not be used to narrow
1720 * the search
1721 * @param table a table name; must match the table name as it is
1722 * stored in the database
1723 * @param columnNamePattern a column name pattern; must match the column
1724 * name as it is stored in the database
1725 * @return <code>ResultSet</code> - each row is a column privilege description
1726 * @exception SQLException if a database access error occurs
1727 * @see #getSearchStringEscape
1728 */
1729 ResultSet getColumnPrivileges(String catalog, String schema,
1730 String table, String columnNamePattern) throws SQLException;
1731
1732 /**
1733 * Retrieves a description of the access rights for each table available
1734 * in a catalog. Note that a table privilege applies to one or
1735 * more columns in the table. It would be wrong to assume that
1736 * this privilege applies to all columns (this may be true for
1737 * some systems but is not true for all.)
1738 *
1739 * <P>Only privileges matching the schema and table name
1740 * criteria are returned. They are ordered by
1741 * <code>TABLE_CAT</code>,
1742 * <code>TABLE_SCHEM</code>, <code>TABLE_NAME</code>,
1743 * and <code>PRIVILEGE</code>.
1744 *
1745 * <P>Each privilige description has the following columns:
1746 * <OL>
1747 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1748 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1749 * <LI><B>TABLE_NAME</B> String => table name
1750 * <LI><B>GRANTOR</B> String => grantor of access (may be <code>null</code>)
1751 * <LI><B>GRANTEE</B> String => grantee of access
1752 * <LI><B>PRIVILEGE</B> String => name of access (SELECT,
1753 * INSERT, UPDATE, REFRENCES, ...)
1754 * <LI><B>IS_GRANTABLE</B> String => "YES" if grantee is permitted
1755 * to grant to others; "NO" if not; <code>null</code> if unknown
1756 * </OL>
1757 *
1758 * @param catalog a catalog name; must match the catalog name as it
1759 * is stored in the database; "" retrieves those without a catalog;
1760 * <code>null</code> means that the catalog name should not be used to narrow
1761 * the search
1762 * @param schemaPattern a schema name pattern; must match the schema name
1763 * as it is stored in the database; "" retrieves those without a schema;
1764 * <code>null</code> means that the schema name should not be used to narrow
1765 * the search
1766 * @param tableNamePattern a table name pattern; must match the
1767 * table name as it is stored in the database
1768 * @return <code>ResultSet</code> - each row is a table privilege description
1769 * @exception SQLException if a database access error occurs
1770 * @see #getSearchStringEscape
1771 */
1772 ResultSet getTablePrivileges(String catalog, String schemaPattern,
1773 String tableNamePattern) throws SQLException;
1774
1775 /**
1776 * Retrieves a description of a table's optimal set of columns that
1777 * uniquely identifies a row. They are ordered by SCOPE.
1778 *
1779 * <P>Each column description has the following columns:
1780 * <OL>
1781 * <LI><B>SCOPE</B> short => actual scope of result
1782 * <UL>
1783 * <LI> bestRowTemporary - very temporary, while using row
1784 * <LI> bestRowTransaction - valid for remainder of current transaction
1785 * <LI> bestRowSession - valid for remainder of current session
1786 * </UL>
1787 * <LI><B>COLUMN_NAME</B> String => column name
1788 * <LI><B>DATA_TYPE</B> int => SQL data type from java.sql.Types
1789 * <LI><B>TYPE_NAME</B> String => Data source dependent type name,
1790 * for a UDT the type name is fully qualified
1791 * <LI><B>COLUMN_SIZE</B> int => precision
1792 * <LI><B>BUFFER_LENGTH</B> int => not used
1793 * <LI><B>DECIMAL_DIGITS</B> short => scale - Null is returned for data types where
1794 * DECIMAL_DIGITS is not applicable.
1795 * <LI><B>PSEUDO_COLUMN</B> short => is this a pseudo column
1796 * like an Oracle ROWID
1797 * <UL>
1798 * <LI> bestRowUnknown - may or may not be pseudo column
1799 * <LI> bestRowNotPseudo - is NOT a pseudo column
1800 * <LI> bestRowPseudo - is a pseudo column
1801 * </UL>
1802 * </OL>
1803 *
1804 * <p>The COLUMN_SIZE column represents the specified column size for the given column.
1805 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1806 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1807 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1808 * this is the length in bytes. Null is returned for data types where the
1809 * column size is not applicable.
1810 *
1811 * @param catalog a catalog name; must match the catalog name as it
1812 * is stored in the database; "" retrieves those without a catalog;
1813 * <code>null</code> means that the catalog name should not be used to narrow
1814 * the search
1815 * @param schema a schema name; must match the schema name
1816 * as it is stored in the database; "" retrieves those without a schema;
1817 * <code>null</code> means that the schema name should not be used to narrow
1818 * the search
1819 * @param table a table name; must match the table name as it is stored
1820 * in the database
1821 * @param scope the scope of interest; use same values as SCOPE
1822 * @param nullable include columns that are nullable.
1823 * @return <code>ResultSet</code> - each row is a column description
1824 * @exception SQLException if a database access error occurs
1825 */
1826 ResultSet getBestRowIdentifier(String catalog, String schema,
1827 String table, int scope, boolean nullable) throws SQLException;
1828
1829 /**
1830 * Indicates that the scope of the best row identifier is
1831 * very temporary, lasting only while the
1832 * row is being used.
1833 * <P>
1834 * A possible value for the column
1835 * <code>SCOPE</code>
1836 * in the <code>ResultSet</code> object
1837 * returned by the method <code>getBestRowIdentifier</code>.
1838 */
1839 int bestRowTemporary = 0;
1840
1841 /**
1842 * Indicates that the scope of the best row identifier is
1843 * the remainder of the current transaction.
1844 * <P>
1845 * A possible value for the column
1846 * <code>SCOPE</code>
1847 * in the <code>ResultSet</code> object
1848 * returned by the method <code>getBestRowIdentifier</code>.
1849 */
1850 int bestRowTransaction = 1;
1851
1852 /**
1853 * Indicates that the scope of the best row identifier is
1854 * the remainder of the current session.
1855 * <P>
1856 * A possible value for the column
1857 * <code>SCOPE</code>
1858 * in the <code>ResultSet</code> object
1859 * returned by the method <code>getBestRowIdentifier</code>.
1860 */
1861 int bestRowSession = 2;
1862
1863 /**
1864 * Indicates that the best row identifier may or may not be a pseudo column.
1865 * <P>
1866 * A possible value for the column
1867 * <code>PSEUDO_COLUMN</code>
1868 * in the <code>ResultSet</code> object
1869 * returned by the method <code>getBestRowIdentifier</code>.
1870 */
1871 int bestRowUnknown = 0;
1872
1873 /**
1874 * Indicates that the best row identifier is NOT a pseudo column.
1875 * <P>
1876 * A possible value for the column
1877 * <code>PSEUDO_COLUMN</code>
1878 * in the <code>ResultSet</code> object
1879 * returned by the method <code>getBestRowIdentifier</code>.
1880 */
1881 int bestRowNotPseudo = 1;
1882
1883 /**
1884 * Indicates that the best row identifier is a pseudo column.
1885 * <P>
1886 * A possible value for the column
1887 * <code>PSEUDO_COLUMN</code>
1888 * in the <code>ResultSet</code> object
1889 * returned by the method <code>getBestRowIdentifier</code>.
1890 */
1891 int bestRowPseudo = 2;
1892
1893 /**
1894 * Retrieves a description of a table's columns that are automatically
1895 * updated when any value in a row is updated. They are
1896 * unordered.
1897 *
1898 * <P>Each column description has the following columns:
1899 * <OL>
1900 * <LI><B>SCOPE</B> short => is not used
1901 * <LI><B>COLUMN_NAME</B> String => column name
1902 * <LI><B>DATA_TYPE</B> int => SQL data type from <code>java.sql.Types</code>
1903 * <LI><B>TYPE_NAME</B> String => Data source-dependent type name
1904 * <LI><B>COLUMN_SIZE</B> int => precision
1905 * <LI><B>BUFFER_LENGTH</B> int => length of column value in bytes
1906 * <LI><B>DECIMAL_DIGITS</B> short => scale - Null is returned for data types where
1907 * DECIMAL_DIGITS is not applicable.
1908 * <LI><B>PSEUDO_COLUMN</B> short => whether this is pseudo column
1909 * like an Oracle ROWID
1910 * <UL>
1911 * <LI> versionColumnUnknown - may or may not be pseudo column
1912 * <LI> versionColumnNotPseudo - is NOT a pseudo column
1913 * <LI> versionColumnPseudo - is a pseudo column
1914 * </UL>
1915 * </OL>
1916 *
1917 * <p>The COLUMN_SIZE column represents the specified column size for the given column.
1918 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
1919 * For datetime datatypes, this is the length in characters of the String representation (assuming the
1920 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
1921 * this is the length in bytes. Null is returned for data types where the
1922 * column size is not applicable.
1923 * @param catalog a catalog name; must match the catalog name as it
1924 * is stored in the database; "" retrieves those without a catalog;
1925 * <code>null</code> means that the catalog name should not be used to narrow
1926 * the search
1927 * @param schema a schema name; must match the schema name
1928 * as it is stored in the database; "" retrieves those without a schema;
1929 * <code>null</code> means that the schema name should not be used to narrow
1930 * the search
1931 * @param table a table name; must match the table name as it is stored
1932 * in the database
1933 * @return a <code>ResultSet</code> object in which each row is a
1934 * column description
1935 * @exception SQLException if a database access error occurs
1936 */
1937 ResultSet getVersionColumns(String catalog, String schema,
1938 String table) throws SQLException;
1939
1940 /**
1941 * Indicates that this version column may or may not be a pseudo column.
1942 * <P>
1943 * A possible value for the column
1944 * <code>PSEUDO_COLUMN</code>
1945 * in the <code>ResultSet</code> object
1946 * returned by the method <code>getVersionColumns</code>.
1947 */
1948 int versionColumnUnknown = 0;
1949
1950 /**
1951 * Indicates that this version column is NOT a pseudo column.
1952 * <P>
1953 * A possible value for the column
1954 * <code>PSEUDO_COLUMN</code>
1955 * in the <code>ResultSet</code> object
1956 * returned by the method <code>getVersionColumns</code>.
1957 */
1958 int versionColumnNotPseudo = 1;
1959
1960 /**
1961 * Indicates that this version column is a pseudo column.
1962 * <P>
1963 * A possible value for the column
1964 * <code>PSEUDO_COLUMN</code>
1965 * in the <code>ResultSet</code> object
1966 * returned by the method <code>getVersionColumns</code>.
1967 */
1968 int versionColumnPseudo = 2;
1969
1970 /**
1971 * Retrieves a description of the given table's primary key columns. They
1972 * are ordered by COLUMN_NAME.
1973 *
1974 * <P>Each primary key column description has the following columns:
1975 * <OL>
1976 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
1977 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
1978 * <LI><B>TABLE_NAME</B> String => table name
1979 * <LI><B>COLUMN_NAME</B> String => column name
1980 * <LI><B>KEY_SEQ</B> short => sequence number within primary key( a value
1981 * of 1 represents the first column of the primary key, a value of 2 would
1982 * represent the second column within the primary key).
1983 * <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
1984 * </OL>
1985 *
1986 * @param catalog a catalog name; must match the catalog name as it
1987 * is stored in the database; "" retrieves those without a catalog;
1988 * <code>null</code> means that the catalog name should not be used to narrow
1989 * the search
1990 * @param schema a schema name; must match the schema name
1991 * as it is stored in the database; "" retrieves those without a schema;
1992 * <code>null</code> means that the schema name should not be used to narrow
1993 * the search
1994 * @param table a table name; must match the table name as it is stored
1995 * in the database
1996 * @return <code>ResultSet</code> - each row is a primary key column description
1997 * @exception SQLException if a database access error occurs
1998 */
1999 ResultSet getPrimaryKeys(String catalog, String schema,
2000 String table) throws SQLException;
2001
2002 /**
2003 * Retrieves a description of the primary key columns that are
2004 * referenced by the given table's foreign key columns (the primary keys
2005 * imported by a table). They are ordered by PKTABLE_CAT,
2006 * PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ.
2007 *
2008 * <P>Each primary key column description has the following columns:
2009 * <OL>
2010 * <LI><B>PKTABLE_CAT</B> String => primary key table catalog
2011 * being imported (may be <code>null</code>)
2012 * <LI><B>PKTABLE_SCHEM</B> String => primary key table schema
2013 * being imported (may be <code>null</code>)
2014 * <LI><B>PKTABLE_NAME</B> String => primary key table name
2015 * being imported
2016 * <LI><B>PKCOLUMN_NAME</B> String => primary key column name
2017 * being imported
2018 * <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
2019 * <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
2020 * <LI><B>FKTABLE_NAME</B> String => foreign key table name
2021 * <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
2022 * <LI><B>KEY_SEQ</B> short => sequence number within a foreign key( a value
2023 * of 1 represents the first column of the foreign key, a value of 2 would
2024 * represent the second column within the foreign key).
2025 * <LI><B>UPDATE_RULE</B> short => What happens to a
2026 * foreign key when the primary key is updated:
2027 * <UL>
2028 * <LI> importedNoAction - do not allow update of primary
2029 * key if it has been imported
2030 * <LI> importedKeyCascade - change imported key to agree
2031 * with primary key update
2032 * <LI> importedKeySetNull - change imported key to <code>NULL</code>
2033 * if its primary key has been updated
2034 * <LI> importedKeySetDefault - change imported key to default values
2035 * if its primary key has been updated
2036 * <LI> importedKeyRestrict - same as importedKeyNoAction
2037 * (for ODBC 2.x compatibility)
2038 * </UL>
2039 * <LI><B>DELETE_RULE</B> short => What happens to
2040 * the foreign key when primary is deleted.
2041 * <UL>
2042 * <LI> importedKeyNoAction - do not allow delete of primary
2043 * key if it has been imported
2044 * <LI> importedKeyCascade - delete rows that import a deleted key
2045 * <LI> importedKeySetNull - change imported key to NULL if
2046 * its primary key has been deleted
2047 * <LI> importedKeyRestrict - same as importedKeyNoAction
2048 * (for ODBC 2.x compatibility)
2049 * <LI> importedKeySetDefault - change imported key to default if
2050 * its primary key has been deleted
2051 * </UL>
2052 * <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
2053 * <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
2054 * <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
2055 * constraints be deferred until commit
2056 * <UL>
2057 * <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2058 * <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2059 * <LI> importedKeyNotDeferrable - see SQL92 for definition
2060 * </UL>
2061 * </OL>
2062 *
2063 * @param catalog a catalog name; must match the catalog name as it
2064 * is stored in the database; "" retrieves those without a catalog;
2065 * <code>null</code> means that the catalog name should not be used to narrow
2066 * the search
2067 * @param schema a schema name; must match the schema name
2068 * as it is stored in the database; "" retrieves those without a schema;
2069 * <code>null</code> means that the schema name should not be used to narrow
2070 * the search
2071 * @param table a table name; must match the table name as it is stored
2072 * in the database
2073 * @return <code>ResultSet</code> - each row is a primary key column description
2074 * @exception SQLException if a database access error occurs
2075 * @see #getExportedKeys
2076 */
2077 ResultSet getImportedKeys(String catalog, String schema,
2078 String table) throws SQLException;
2079
2080 /**
2081 * For the column <code>UPDATE_RULE</code>,
2082 * indicates that
2083 * when the primary key is updated, the foreign key (imported key)
2084 * is changed to agree with it.
2085 * For the column <code>DELETE_RULE</code>,
2086 * it indicates that
2087 * when the primary key is deleted, rows that imported that key
2088 * are deleted.
2089 * <P>
2090 * A possible value for the columns <code>UPDATE_RULE</code>
2091 * and <code>DELETE_RULE</code> in the
2092 * <code>ResultSet</code> objects returned by the methods
2093 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2094 * and <code>getCrossReference</code>.
2095 */
2096 int importedKeyCascade = 0;
2097
2098 /**
2099 * For the column <code>UPDATE_RULE</code>, indicates that
2100 * a primary key may not be updated if it has been imported by
2101 * another table as a foreign key.
2102 * For the column <code>DELETE_RULE</code>, indicates that
2103 * a primary key may not be deleted if it has been imported by
2104 * another table as a foreign key.
2105 * <P>
2106 * A possible value for the columns <code>UPDATE_RULE</code>
2107 * and <code>DELETE_RULE</code> in the
2108 * <code>ResultSet</code> objects returned by the methods
2109 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2110 * and <code>getCrossReference</code>.
2111 */
2112 int importedKeyRestrict = 1;
2113
2114 /**
2115 * For the columns <code>UPDATE_RULE</code>
2116 * and <code>DELETE_RULE</code>, indicates that
2117 * when the primary key is updated or deleted, the foreign key (imported key)
2118 * is changed to <code>NULL</code>.
2119 * <P>
2120 * A possible value for the columns <code>UPDATE_RULE</code>
2121 * and <code>DELETE_RULE</code> in the
2122 * <code>ResultSet</code> objects returned by the methods
2123 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2124 * and <code>getCrossReference</code>.
2125 */
2126 int importedKeySetNull = 2;
2127
2128 /**
2129 * For the columns <code>UPDATE_RULE</code>
2130 * and <code>DELETE_RULE</code>, indicates that
2131 * if the primary key has been imported, it cannot be updated or deleted.
2132 * <P>
2133 * A possible value for the columns <code>UPDATE_RULE</code>
2134 * and <code>DELETE_RULE</code> in the
2135 * <code>ResultSet</code> objects returned by the methods
2136 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2137 * and <code>getCrossReference</code>.
2138 */
2139 int importedKeyNoAction = 3;
2140
2141 /**
2142 * For the columns <code>UPDATE_RULE</code>
2143 * and <code>DELETE_RULE</code>, indicates that
2144 * if the primary key is updated or deleted, the foreign key (imported key)
2145 * is set to the default value.
2146 * <P>
2147 * A possible value for the columns <code>UPDATE_RULE</code>
2148 * and <code>DELETE_RULE</code> in the
2149 * <code>ResultSet</code> objects returned by the methods
2150 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2151 * and <code>getCrossReference</code>.
2152 */
2153 int importedKeySetDefault = 4;
2154
2155 /**
2156 * Indicates deferrability. See SQL-92 for a definition.
2157 * <P>
2158 * A possible value for the column <code>DEFERRABILITY</code>
2159 * in the <code>ResultSet</code> objects returned by the methods
2160 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2161 * and <code>getCrossReference</code>.
2162 */
2163 int importedKeyInitiallyDeferred = 5;
2164
2165 /**
2166 * Indicates deferrability. See SQL-92 for a definition.
2167 * <P>
2168 * A possible value for the column <code>DEFERRABILITY</code>
2169 * in the <code>ResultSet</code> objects returned by the methods
2170 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2171 * and <code>getCrossReference</code>.
2172 */
2173 int importedKeyInitiallyImmediate = 6;
2174
2175 /**
2176 * Indicates deferrability. See SQL-92 for a definition.
2177 * <P>
2178 * A possible value for the column <code>DEFERRABILITY</code>
2179 * in the <code>ResultSet</code> objects returned by the methods
2180 * <code>getImportedKeys</code>, <code>getExportedKeys</code>,
2181 * and <code>getCrossReference</code>.
2182 */
2183 int importedKeyNotDeferrable = 7;
2184
2185 /**
2186 * Retrieves a description of the foreign key columns that reference the
2187 * given table's primary key columns (the foreign keys exported by a
2188 * table). They are ordered by FKTABLE_CAT, FKTABLE_SCHEM,
2189 * FKTABLE_NAME, and KEY_SEQ.
2190 *
2191 * <P>Each foreign key column description has the following columns:
2192 * <OL>
2193 * <LI><B>PKTABLE_CAT</B> String => primary key table catalog (may be <code>null</code>)
2194 * <LI><B>PKTABLE_SCHEM</B> String => primary key table schema (may be <code>null</code>)
2195 * <LI><B>PKTABLE_NAME</B> String => primary key table name
2196 * <LI><B>PKCOLUMN_NAME</B> String => primary key column name
2197 * <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
2198 * being exported (may be <code>null</code>)
2199 * <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
2200 * being exported (may be <code>null</code>)
2201 * <LI><B>FKTABLE_NAME</B> String => foreign key table name
2202 * being exported
2203 * <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
2204 * being exported
2205 * <LI><B>KEY_SEQ</B> short => sequence number within foreign key( a value
2206 * of 1 represents the first column of the foreign key, a value of 2 would
2207 * represent the second column within the foreign key).
2208 * <LI><B>UPDATE_RULE</B> short => What happens to
2209 * foreign key when primary is updated:
2210 * <UL>
2211 * <LI> importedNoAction - do not allow update of primary
2212 * key if it has been imported
2213 * <LI> importedKeyCascade - change imported key to agree
2214 * with primary key update
2215 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2216 * its primary key has been updated
2217 * <LI> importedKeySetDefault - change imported key to default values
2218 * if its primary key has been updated
2219 * <LI> importedKeyRestrict - same as importedKeyNoAction
2220 * (for ODBC 2.x compatibility)
2221 * </UL>
2222 * <LI><B>DELETE_RULE</B> short => What happens to
2223 * the foreign key when primary is deleted.
2224 * <UL>
2225 * <LI> importedKeyNoAction - do not allow delete of primary
2226 * key if it has been imported
2227 * <LI> importedKeyCascade - delete rows that import a deleted key
2228 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2229 * its primary key has been deleted
2230 * <LI> importedKeyRestrict - same as importedKeyNoAction
2231 * (for ODBC 2.x compatibility)
2232 * <LI> importedKeySetDefault - change imported key to default if
2233 * its primary key has been deleted
2234 * </UL>
2235 * <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
2236 * <LI><B>PK_NAME</B> String => primary key name (may be <code>null</code>)
2237 * <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
2238 * constraints be deferred until commit
2239 * <UL>
2240 * <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2241 * <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2242 * <LI> importedKeyNotDeferrable - see SQL92 for definition
2243 * </UL>
2244 * </OL>
2245 *
2246 * @param catalog a catalog name; must match the catalog name as it
2247 * is stored in this database; "" retrieves those without a catalog;
2248 * <code>null</code> means that the catalog name should not be used to narrow
2249 * the search
2250 * @param schema a schema name; must match the schema name
2251 * as it is stored in the database; "" retrieves those without a schema;
2252 * <code>null</code> means that the schema name should not be used to narrow
2253 * the search
2254 * @param table a table name; must match the table name as it is stored
2255 * in this database
2256 * @return a <code>ResultSet</code> object in which each row is a
2257 * foreign key column description
2258 * @exception SQLException if a database access error occurs
2259 * @see #getImportedKeys
2260 */
2261 ResultSet getExportedKeys(String catalog, String schema,
2262 String table) throws SQLException;
2263
2264 /**
2265 * Retrieves a description of the foreign key columns in the given foreign key
2266 * table that reference the primary key or the columns representing a unique constraint of the parent table (could be the same or a different table).
2267 * The number of columns returned from the parent table must match the number of
2268 * columns that make up the foreign key. They
2269 * are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and
2270 * KEY_SEQ.
2271 *
2272 * <P>Each foreign key column description has the following columns:
2273 * <OL>
2274 * <LI><B>PKTABLE_CAT</B> String => parent key table catalog (may be <code>null</code>)
2275 * <LI><B>PKTABLE_SCHEM</B> String => parent key table schema (may be <code>null</code>)
2276 * <LI><B>PKTABLE_NAME</B> String => parent key table name
2277 * <LI><B>PKCOLUMN_NAME</B> String => parent key column name
2278 * <LI><B>FKTABLE_CAT</B> String => foreign key table catalog (may be <code>null</code>)
2279 * being exported (may be <code>null</code>)
2280 * <LI><B>FKTABLE_SCHEM</B> String => foreign key table schema (may be <code>null</code>)
2281 * being exported (may be <code>null</code>)
2282 * <LI><B>FKTABLE_NAME</B> String => foreign key table name
2283 * being exported
2284 * <LI><B>FKCOLUMN_NAME</B> String => foreign key column name
2285 * being exported
2286 * <LI><B>KEY_SEQ</B> short => sequence number within foreign key( a value
2287 * of 1 represents the first column of the foreign key, a value of 2 would
2288 * represent the second column within the foreign key).
2289 * <LI><B>UPDATE_RULE</B> short => What happens to
2290 * foreign key when parent key is updated:
2291 * <UL>
2292 * <LI> importedNoAction - do not allow update of parent
2293 * key if it has been imported
2294 * <LI> importedKeyCascade - change imported key to agree
2295 * with parent key update
2296 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2297 * its parent key has been updated
2298 * <LI> importedKeySetDefault - change imported key to default values
2299 * if its parent key has been updated
2300 * <LI> importedKeyRestrict - same as importedKeyNoAction
2301 * (for ODBC 2.x compatibility)
2302 * </UL>
2303 * <LI><B>DELETE_RULE</B> short => What happens to
2304 * the foreign key when parent key is deleted.
2305 * <UL>
2306 * <LI> importedKeyNoAction - do not allow delete of parent
2307 * key if it has been imported
2308 * <LI> importedKeyCascade - delete rows that import a deleted key
2309 * <LI> importedKeySetNull - change imported key to <code>NULL</code> if
2310 * its primary key has been deleted
2311 * <LI> importedKeyRestrict - same as importedKeyNoAction
2312 * (for ODBC 2.x compatibility)
2313 * <LI> importedKeySetDefault - change imported key to default if
2314 * its parent key has been deleted
2315 * </UL>
2316 * <LI><B>FK_NAME</B> String => foreign key name (may be <code>null</code>)
2317 * <LI><B>PK_NAME</B> String => parent key name (may be <code>null</code>)
2318 * <LI><B>DEFERRABILITY</B> short => can the evaluation of foreign key
2319 * constraints be deferred until commit
2320 * <UL>
2321 * <LI> importedKeyInitiallyDeferred - see SQL92 for definition
2322 * <LI> importedKeyInitiallyImmediate - see SQL92 for definition
2323 * <LI> importedKeyNotDeferrable - see SQL92 for definition
2324 * </UL>
2325 * </OL>
2326 *
2327 * @param parentCatalog a catalog name; must match the catalog name
2328 * as it is stored in the database; "" retrieves those without a
2329 * catalog; <code>null</code> means drop catalog name from the selection criteria
2330 * @param parentSchema a schema name; must match the schema name as
2331 * it is stored in the database; "" retrieves those without a schema;
2332 * <code>null</code> means drop schema name from the selection criteria
2333 * @param parentTable the name of the table that exports the key; must match
2334 * the table name as it is stored in the database
2335 * @param foreignCatalog a catalog name; must match the catalog name as
2336 * it is stored in the database; "" retrieves those without a
2337 * catalog; <code>null</code> means drop catalog name from the selection criteria
2338 * @param foreignSchema a schema name; must match the schema name as it
2339 * is stored in the database; "" retrieves those without a schema;
2340 * <code>null</code> means drop schema name from the selection criteria
2341 * @param foreignTable the name of the table that imports the key; must match
2342 * the table name as it is stored in the database
2343 * @return <code>ResultSet</code> - each row is a foreign key column description
2344 * @exception SQLException if a database access error occurs
2345 * @see #getImportedKeys
2346 */
2347 ResultSet getCrossReference(
2348 String parentCatalog, String parentSchema, String parentTable,
2349 String foreignCatalog, String foreignSchema, String foreignTable
2350 ) throws SQLException;
2351
2352 /**
2353 * Retrieves a description of all the data types supported by
2354 * this database. They are ordered by DATA_TYPE and then by how
2355 * closely the data type maps to the corresponding JDBC SQL type.
2356 *
2357 * <P>If the database supports SQL distinct types, then getTypeInfo() will return
2358 * a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT.
2359 * If the database supports SQL structured types, then getTypeInfo() will return
2360 * a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT.
2361 *
2362 * <P>If SQL distinct or structured types are supported, then information on the
2363 * individual types may be obtained from the getUDTs() method.
2364 *
2365
2366 *
2367 * <P>Each type description has the following columns:
2368 * <OL>
2369 * <LI><B>TYPE_NAME</B> String => Type name
2370 * <LI><B>DATA_TYPE</B> int => SQL data type from java.sql.Types
2371 * <LI><B>PRECISION</B> int => maximum precision
2372 * <LI><B>LITERAL_PREFIX</B> String => prefix used to quote a literal
2373 * (may be <code>null</code>)
2374 * <LI><B>LITERAL_SUFFIX</B> String => suffix used to quote a literal
2375 (may be <code>null</code>)
2376 * <LI><B>CREATE_PARAMS</B> String => parameters used in creating
2377 * the type (may be <code>null</code>)
2378 * <LI><B>NULLABLE</B> short => can you use NULL for this type.
2379 * <UL>
2380 * <LI> typeNoNulls - does not allow NULL values
2381 * <LI> typeNullable - allows NULL values
2382 * <LI> typeNullableUnknown - nullability unknown
2383 * </UL>
2384 * <LI><B>CASE_SENSITIVE</B> boolean=> is it case sensitive.
2385 * <LI><B>SEARCHABLE</B> short => can you use "WHERE" based on this type:
2386 * <UL>
2387 * <LI> typePredNone - No support
2388 * <LI> typePredChar - Only supported with WHERE .. LIKE
2389 * <LI> typePredBasic - Supported except for WHERE .. LIKE
2390 * <LI> typeSearchable - Supported for all WHERE ..
2391 * </UL>
2392 * <LI><B>UNSIGNED_ATTRIBUTE</B> boolean => is it unsigned.
2393 * <LI><B>FIXED_PREC_SCALE</B> boolean => can it be a money value.
2394 * <LI><B>AUTO_INCREMENT</B> boolean => can it be used for an
2395 * auto-increment value.
2396 * <LI><B>LOCAL_TYPE_NAME</B> String => localized version of type name
2397 * (may be <code>null</code>)
2398 * <LI><B>MINIMUM_SCALE</B> short => minimum scale supported
2399 * <LI><B>MAXIMUM_SCALE</B> short => maximum scale supported
2400 * <LI><B>SQL_DATA_TYPE</B> int => unused
2401 * <LI><B>SQL_DATETIME_SUB</B> int => unused
2402 * <LI><B>NUM_PREC_RADIX</B> int => usually 2 or 10
2403 * </OL>
2404 *
2405 * <p>The PRECISION column represents the maximum column size that the server supports for the given datatype.
2406 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
2407 * For datetime datatypes, this is the length in characters of the String representation (assuming the
2408 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
2409 * this is the length in bytes. Null is returned for data types where the
2410 * column size is not applicable.
2411 *
2412 * @return a <code>ResultSet</code> object in which each row is an SQL
2413 * type description
2414 * @exception SQLException if a database access error occurs
2415 */
2416 ResultSet getTypeInfo() throws SQLException;
2417
2418 /**
2419 * Indicates that a <code>NULL</code> value is NOT allowed for this
2420 * data type.
2421 * <P>
2422 * A possible value for column <code>NULLABLE</code> in the
2423 * <code>ResultSet</code> object returned by the method
2424 * <code>getTypeInfo</code>.
2425 */
2426 int typeNoNulls = 0;
2427
2428 /**
2429 * Indicates that a <code>NULL</code> value is allowed for this
2430 * data type.
2431 * <P>
2432 * A possible value for column <code>NULLABLE</code> in the
2433 * <code>ResultSet</code> object returned by the method
2434 * <code>getTypeInfo</code>.
2435 */
2436 int typeNullable = 1;
2437
2438 /**
2439 * Indicates that it is not known whether a <code>NULL</code> value
2440 * is allowed for this data type.
2441 * <P>
2442 * A possible value for column <code>NULLABLE</code> in the
2443 * <code>ResultSet</code> object returned by the method
2444 * <code>getTypeInfo</code>.
2445 */
2446 int typeNullableUnknown = 2;
2447
2448 /**
2449 * Indicates that <code>WHERE</code> search clauses are not supported
2450 * for this type.
2451 * <P>
2452 * A possible value for column <code>SEARCHABLE</code> in the
2453 * <code>ResultSet</code> object returned by the method
2454 * <code>getTypeInfo</code>.
2455 */
2456 int typePredNone = 0;
2457
2458 /**
2459 * Indicates that the data type
2460 * can be only be used in <code>WHERE</code> search clauses
2461 * that use <code>LIKE</code> predicates.
2462 * <P>
2463 * A possible value for column <code>SEARCHABLE</code> in the
2464 * <code>ResultSet</code> object returned by the method
2465 * <code>getTypeInfo</code>.
2466 */
2467 int typePredChar = 1;
2468
2469 /**
2470 * Indicates that the data type can be only be used in <code>WHERE</code>
2471 * search clauses
2472 * that do not use <code>LIKE</code> predicates.
2473 * <P>
2474 * A possible value for column <code>SEARCHABLE</code> in the
2475 * <code>ResultSet</code> object returned by the method
2476 * <code>getTypeInfo</code>.
2477 */
2478 int typePredBasic = 2;
2479
2480 /**
2481 * Indicates that all <code>WHERE</code> search clauses can be
2482 * based on this type.
2483 * <P>
2484 * A possible value for column <code>SEARCHABLE</code> in the
2485 * <code>ResultSet</code> object returned by the method
2486 * <code>getTypeInfo</code>.
2487 */
2488 int typeSearchable = 3;
2489
2490 /**
2491 * Retrieves a description of the given table's indices and statistics. They are
2492 * ordered by NON_UNIQUE, TYPE, INDEX_NAME, and ORDINAL_POSITION.
2493 *
2494 * <P>Each index column description has the following columns:
2495 * <OL>
2496 * <LI><B>TABLE_CAT</B> String => table catalog (may be <code>null</code>)
2497 * <LI><B>TABLE_SCHEM</B> String => table schema (may be <code>null</code>)
2498 * <LI><B>TABLE_NAME</B> String => table name
2499 * <LI><B>NON_UNIQUE</B> boolean => Can index values be non-unique.
2500 * false when TYPE is tableIndexStatistic
2501 * <LI><B>INDEX_QUALIFIER</B> String => index catalog (may be <code>null</code>);
2502 * <code>null</code> when TYPE is tableIndexStatistic
2503 * <LI><B>INDEX_NAME</B> String => index name; <code>null</code> when TYPE is
2504 * tableIndexStatistic
2505 * <LI><B>TYPE</B> short => index type:
2506 * <UL>
2507 * <LI> tableIndexStatistic - this identifies table statistics that are
2508 * returned in conjuction with a table's index descriptions
2509 * <LI> tableIndexClustered - this is a clustered index
2510 * <LI> tableIndexHashed - this is a hashed index
2511 * <LI> tableIndexOther - this is some other style of index
2512 * </UL>
2513 * <LI><B>ORDINAL_POSITION</B> short => column sequence number
2514 * within index; zero when TYPE is tableIndexStatistic
2515 * <LI><B>COLUMN_NAME</B> String => column name; <code>null</code> when TYPE is
2516 * tableIndexStatistic
2517 * <LI><B>ASC_OR_DESC</B> String => column sort sequence, "A" => ascending,
2518 * "D" => descending, may be <code>null</code> if sort sequence is not supported;
2519 * <code>null</code> when TYPE is tableIndexStatistic
2520 * <LI><B>CARDINALITY</B> int => When TYPE is tableIndexStatistic, then
2521 * this is the number of rows in the table; otherwise, it is the
2522 * number of unique values in the index.
2523 * <LI><B>PAGES</B> int => When TYPE is tableIndexStatisic then
2524 * this is the number of pages used for the table, otherwise it
2525 * is the number of pages used for the current index.
2526 * <LI><B>FILTER_CONDITION</B> String => Filter condition, if any.
2527 * (may be <code>null</code>)
2528 * </OL>
2529 *
2530 * @param catalog a catalog name; must match the catalog name as it
2531 * is stored in this database; "" retrieves those without a catalog;
2532 * <code>null</code> means that the catalog name should not be used to narrow
2533 * the search
2534 * @param schema a schema name; must match the schema name
2535 * as it is stored in this database; "" retrieves those without a schema;
2536 * <code>null</code> means that the schema name should not be used to narrow
2537 * the search
2538 * @param table a table name; must match the table name as it is stored
2539 * in this database
2540 * @param unique when true, return only indices for unique values;
2541 * when false, return indices regardless of whether unique or not
2542 * @param approximate when true, result is allowed to reflect approximate
2543 * or out of data values; when false, results are requested to be
2544 * accurate
2545 * @return <code>ResultSet</code> - each row is an index column description
2546 * @exception SQLException if a database access error occurs
2547 */
2548 ResultSet getIndexInfo(String catalog, String schema, String table,
2549 boolean unique, boolean approximate)
2550 throws SQLException;
2551
2552 /**
2553 * Indicates that this column contains table statistics that
2554 * are returned in conjunction with a table's index descriptions.
2555 * <P>
2556 * A possible value for column <code>TYPE</code> in the
2557 * <code>ResultSet</code> object returned by the method
2558 * <code>getIndexInfo</code>.
2559 */
2560 short tableIndexStatistic = 0;
2561
2562 /**
2563 * Indicates that this table index is a clustered index.
2564 * <P>
2565 * A possible value for column <code>TYPE</code> in the
2566 * <code>ResultSet</code> object returned by the method
2567 * <code>getIndexInfo</code>.
2568 */
2569 short tableIndexClustered = 1;
2570
2571 /**
2572 * Indicates that this table index is a hashed index.
2573 * <P>
2574 * A possible value for column <code>TYPE</code> in the
2575 * <code>ResultSet</code> object returned by the method
2576 * <code>getIndexInfo</code>.
2577 */
2578 short tableIndexHashed = 2;
2579
2580 /**
2581 * Indicates that this table index is not a clustered
2582 * index, a hashed index, or table statistics;
2583 * it is something other than these.
2584 * <P>
2585 * A possible value for column <code>TYPE</code> in the
2586 * <code>ResultSet</code> object returned by the method
2587 * <code>getIndexInfo</code>.
2588 */
2589 short tableIndexOther = 3;
2590
2591 //--------------------------JDBC 2.0-----------------------------
2592
2593 /**
2594 * Retrieves whether this database supports the given result set type.
2595 *
2596 * @param type defined in <code>java.sql.ResultSet</code>
2597 * @return <code>true</code> if so; <code>false</code> otherwise
2598 * @exception SQLException if a database access error occurs
2599 * @see Connection
2600 * @since 1.2
2601 */
2602 boolean supportsResultSetType(int type) throws SQLException;
2603
2604 /**
2605 * Retrieves whether this database supports the given concurrency type
2606 * in combination with the given result set type.
2607 *
2608 * @param type defined in <code>java.sql.ResultSet</code>
2609 * @param concurrency type defined in <code>java.sql.ResultSet</code>
2610 * @return <code>true</code> if so; <code>false</code> otherwise
2611 * @exception SQLException if a database access error occurs
2612 * @see Connection
2613 * @since 1.2
2614 */
2615 boolean supportsResultSetConcurrency(int type, int concurrency)
2616 throws SQLException;
2617
2618 /**
2619 *
2620 * Retrieves whether for the given type of <code>ResultSet</code> object,
2621 * the result set's own updates are visible.
2622 *
2623 * @param type the <code>ResultSet</code> type; one of
2624 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2625 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2626 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2627 * @return <code>true</code> if updates are visible for the given result set type;
2628 * <code>false</code> otherwise
2629 * @exception SQLException if a database access error occurs
2630 * @since 1.2
2631 */
2632 boolean ownUpdatesAreVisible(int type) throws SQLException;
2633
2634 /**
2635 * Retrieves whether a result set's own deletes are visible.
2636 *
2637 * @param type the <code>ResultSet</code> type; one of
2638 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2639 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2640 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2641 * @return <code>true</code> if deletes are visible for the given result set type;
2642 * <code>false</code> otherwise
2643 * @exception SQLException if a database access error occurs
2644 * @since 1.2
2645 */
2646 boolean ownDeletesAreVisible(int type) throws SQLException;
2647
2648 /**
2649 * Retrieves whether a result set's own inserts are visible.
2650 *
2651 * @param type the <code>ResultSet</code> type; one of
2652 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2653 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2654 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2655 * @return <code>true</code> if inserts are visible for the given result set type;
2656 * <code>false</code> otherwise
2657 * @exception SQLException if a database access error occurs
2658 * @since 1.2
2659 */
2660 boolean ownInsertsAreVisible(int type) throws SQLException;
2661
2662 /**
2663 * Retrieves whether updates made by others are visible.
2664 *
2665 * @param type the <code>ResultSet</code> type; one of
2666 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2667 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2668 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2669 * @return <code>true</code> if updates made by others
2670 * are visible for the given result set type;
2671 * <code>false</code> otherwise
2672 * @exception SQLException if a database access error occurs
2673 * @since 1.2
2674 */
2675 boolean othersUpdatesAreVisible(int type) throws SQLException;
2676
2677 /**
2678 * Retrieves whether deletes made by others are visible.
2679 *
2680 * @param type the <code>ResultSet</code> type; one of
2681 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2682 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2683 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2684 * @return <code>true</code> if deletes made by others
2685 * are visible for the given result set type;
2686 * <code>false</code> otherwise
2687 * @exception SQLException if a database access error occurs
2688 * @since 1.2
2689 */
2690 boolean othersDeletesAreVisible(int type) throws SQLException;
2691
2692 /**
2693 * Retrieves whether inserts made by others are visible.
2694 *
2695 * @param type the <code>ResultSet</code> type; one of
2696 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2697 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2698 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2699 * @return <code>true</code> if inserts made by others
2700 * are visible for the given result set type;
2701 * <code>false</code> otherwise
2702 * @exception SQLException if a database access error occurs
2703 * @since 1.2
2704 */
2705 boolean othersInsertsAreVisible(int type) throws SQLException;
2706
2707 /**
2708 * Retrieves whether or not a visible row update can be detected by
2709 * calling the method <code>ResultSet.rowUpdated</code>.
2710 *
2711 * @param type the <code>ResultSet</code> type; one of
2712 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2713 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2714 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2715 * @return <code>true</code> if changes are detected by the result set type;
2716 * <code>false</code> otherwise
2717 * @exception SQLException if a database access error occurs
2718 * @since 1.2
2719 */
2720 boolean updatesAreDetected(int type) throws SQLException;
2721
2722 /**
2723 * Retrieves whether or not a visible row delete can be detected by
2724 * calling the method <code>ResultSet.rowDeleted</code>. If the method
2725 * <code>deletesAreDetected</code> returns <code>false</code>, it means that
2726 * deleted rows are removed from the result set.
2727 *
2728 * @param type the <code>ResultSet</code> type; one of
2729 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2730 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2731 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2732 * @return <code>true</code> if deletes are detected by the given result set type;
2733 * <code>false</code> otherwise
2734 * @exception SQLException if a database access error occurs
2735 * @since 1.2
2736 */
2737 boolean deletesAreDetected(int type) throws SQLException;
2738
2739 /**
2740 * Retrieves whether or not a visible row insert can be detected
2741 * by calling the method <code>ResultSet.rowInserted</code>.
2742 *
2743 * @param type the <code>ResultSet</code> type; one of
2744 * <code>ResultSet.TYPE_FORWARD_ONLY</code>,
2745 * <code>ResultSet.TYPE_SCROLL_INSENSITIVE</code>, or
2746 * <code>ResultSet.TYPE_SCROLL_SENSITIVE</code>
2747 * @return <code>true</code> if changes are detected by the specified result
2748 * set type; <code>false</code> otherwise
2749 * @exception SQLException if a database access error occurs
2750 * @since 1.2
2751 */
2752 boolean insertsAreDetected(int type) throws SQLException;
2753
2754 /**
2755 * Retrieves whether this database supports batch updates.
2756 *
2757 * @return <code>true</code> if this database supports batch upcates;
2758 * <code>false</code> otherwise
2759 * @exception SQLException if a database access error occurs
2760 * @since 1.2
2761 */
2762 boolean supportsBatchUpdates() throws SQLException;
2763
2764 /**
2765 * Retrieves a description of the user-defined types (UDTs) defined
2766 * in a particular schema. Schema-specific UDTs may have type
2767 * <code>JAVA_OBJECT</code>, <code>STRUCT</code>,
2768 * or <code>DISTINCT</code>.
2769 *
2770 * <P>Only types matching the catalog, schema, type name and type
2771 * criteria are returned. They are ordered by <code>DATA_TYPE</code>,
2772 * <code>TYPE_CAT</code>, <code>TYPE_SCHEM</code> and
2773 * <code>TYPE_NAME</code>. The type name parameter may be a fully-qualified
2774 * name. In this case, the catalog and schemaPattern parameters are
2775 * ignored.
2776 *
2777 * <P>Each type description has the following columns:
2778 * <OL>
2779 * <LI><B>TYPE_CAT</B> String => the type's catalog (may be <code>null</code>)
2780 * <LI><B>TYPE_SCHEM</B> String => type's schema (may be <code>null</code>)
2781 * <LI><B>TYPE_NAME</B> String => type name
2782 * <LI><B>CLASS_NAME</B> String => Java class name
2783 * <LI><B>DATA_TYPE</B> int => type value defined in java.sql.Types.
2784 * One of JAVA_OBJECT, STRUCT, or DISTINCT
2785 * <LI><B>REMARKS</B> String => explanatory comment on the type
2786 * <LI><B>BASE_TYPE</B> short => type code of the source type of a
2787 * DISTINCT type or the type that implements the user-generated
2788 * reference type of the SELF_REFERENCING_COLUMN of a structured
2789 * type as defined in java.sql.Types (<code>null</code> if DATA_TYPE is not
2790 * DISTINCT or not STRUCT with REFERENCE_GENERATION = USER_DEFINED)
2791 * </OL>
2792 *
2793 * <P><B>Note:</B> If the driver does not support UDTs, an empty
2794 * result set is returned.
2795 *
2796 * @param catalog a catalog name; must match the catalog name as it
2797 * is stored in the database; "" retrieves those without a catalog;
2798 * <code>null</code> means that the catalog name should not be used to narrow
2799 * the search
2800 * @param schemaPattern a schema pattern name; must match the schema name
2801 * as it is stored in the database; "" retrieves those without a schema;
2802 * <code>null</code> means that the schema name should not be used to narrow
2803 * the search
2804 * @param typeNamePattern a type name pattern; must match the type name
2805 * as it is stored in the database; may be a fully qualified name
2806 * @param types a list of user-defined types (JAVA_OBJECT,
2807 * STRUCT, or DISTINCT) to include; <code>null</code> returns all types
2808 * @return <code>ResultSet</code> object in which each row describes a UDT
2809 * @exception SQLException if a database access error occurs
2810 * @see #getSearchStringEscape
2811 * @since 1.2
2812 */
2813 ResultSet getUDTs(String catalog, String schemaPattern,
2814 String typeNamePattern, int[] types)
2815 throws SQLException;
2816
2817 /**
2818 * Retrieves the connection that produced this metadata object.
2819 * <P>
2820 * @return the connection that produced this metadata object
2821 * @exception SQLException if a database access error occurs
2822 * @since 1.2
2823 */
2824 Connection getConnection() throws SQLException;
2825
2826 // ------------------- JDBC 3.0 -------------------------
2827
2828 /**
2829 * Retrieves whether this database supports savepoints.
2830 *
2831 * @return <code>true</code> if savepoints are supported;
2832 * <code>false</code> otherwise
2833 * @exception SQLException if a database access error occurs
2834 * @since 1.4
2835 */
2836 boolean supportsSavepoints() throws SQLException;
2837
2838 /**
2839 * Retrieves whether this database supports named parameters to callable
2840 * statements.
2841 *
2842 * @return <code>true</code> if named parameters are supported;
2843 * <code>false</code> otherwise
2844 * @exception SQLException if a database access error occurs
2845 * @since 1.4
2846 */
2847 boolean supportsNamedParameters() throws SQLException;
2848
2849 /**
2850 * Retrieves whether it is possible to have multiple <code>ResultSet</code> objects
2851 * returned from a <code>CallableStatement</code> object
2852 * simultaneously.
2853 *
2854 * @return <code>true</code> if a <code>CallableStatement</code> object
2855 * can return multiple <code>ResultSet</code> objects
2856 * simultaneously; <code>false</code> otherwise
2857 * @exception SQLException if a datanase access error occurs
2858 * @since 1.4
2859 */
2860 boolean supportsMultipleOpenResults() throws SQLException;
2861
2862 /**
2863 * Retrieves whether auto-generated keys can be retrieved after
2864 * a statement has been executed
2865 *
2866 * @return <code>true</code> if auto-generated keys can be retrieved
2867 * after a statement has executed; <code>false</code> otherwise
2868 *<p>If <code>true</code> is returned, the JDBC driver must support the
2869 * returning of auto-generated keys for at least SQL INSERT statements
2870 *<p>
2871 * @exception SQLException if a database access error occurs
2872 * @since 1.4
2873 */
2874 boolean supportsGetGeneratedKeys() throws SQLException;
2875
2876 /**
2877 * Retrieves a description of the user-defined type (UDT) hierarchies defined in a
2878 * particular schema in this database. Only the immediate super type/
2879 * sub type relationship is modeled.
2880 * <P>
2881 * Only supertype information for UDTs matching the catalog,
2882 * schema, and type name is returned. The type name parameter
2883 * may be a fully-qualified name. When the UDT name supplied is a
2884 * fully-qualified name, the catalog and schemaPattern parameters are
2885 * ignored.
2886 * <P>
2887 * If a UDT does not have a direct super type, it is not listed here.
2888 * A row of the <code>ResultSet</code> object returned by this method
2889 * describes the designated UDT and a direct supertype. A row has the following
2890 * columns:
2891 * <OL>
2892 * <LI><B>TYPE_CAT</B> String => the UDT's catalog (may be <code>null</code>)
2893 * <LI><B>TYPE_SCHEM</B> String => UDT's schema (may be <code>null</code>)
2894 * <LI><B>TYPE_NAME</B> String => type name of the UDT
2895 * <LI><B>SUPERTYPE_CAT</B> String => the direct super type's catalog
2896 * (may be <code>null</code>)
2897 * <LI><B>SUPERTYPE_SCHEM</B> String => the direct super type's schema
2898 * (may be <code>null</code>)
2899 * <LI><B>SUPERTYPE_NAME</B> String => the direct super type's name
2900 * </OL>
2901 *
2902 * <P><B>Note:</B> If the driver does not support type hierarchies, an
2903 * empty result set is returned.
2904 *
2905 * @param catalog a catalog name; "" retrieves those without a catalog;
2906 * <code>null</code> means drop catalog name from the selection criteria
2907 * @param schemaPattern a schema name pattern; "" retrieves those
2908 * without a schema
2909 * @param typeNamePattern a UDT name pattern; may be a fully-qualified
2910 * name
2911 * @return a <code>ResultSet</code> object in which a row gives information
2912 * about the designated UDT
2913 * @throws SQLException if a database access error occurs
2914 * @see #getSearchStringEscape
2915 * @since 1.4
2916 */
2917 ResultSet getSuperTypes(String catalog, String schemaPattern,
2918 String typeNamePattern) throws SQLException;
2919
2920 /**
2921 * Retrieves a description of the table hierarchies defined in a particular
2922 * schema in this database.
2923 *
2924 * <P>Only supertable information for tables matching the catalog, schema
2925 * and table name are returned. The table name parameter may be a fully-
2926 * qualified name, in which case, the catalog and schemaPattern parameters
2927 * are ignored. If a table does not have a super table, it is not listed here.
2928 * Supertables have to be defined in the same catalog and schema as the
2929 * sub tables. Therefore, the type description does not need to include
2930 * this information for the supertable.
2931 *
2932 * <P>Each type description has the following columns:
2933 * <OL>
2934 * <LI><B>TABLE_CAT</B> String => the type's catalog (may be <code>null</code>)
2935 * <LI><B>TABLE_SCHEM</B> String => type's schema (may be <code>null</code>)
2936 * <LI><B>TABLE_NAME</B> String => type name
2937 * <LI><B>SUPERTABLE_NAME</B> String => the direct super type's name
2938 * </OL>
2939 *
2940 * <P><B>Note:</B> If the driver does not support type hierarchies, an
2941 * empty result set is returned.
2942 *
2943 * @param catalog a catalog name; "" retrieves those without a catalog;
2944 * <code>null</code> means drop catalog name from the selection criteria
2945 * @param schemaPattern a schema name pattern; "" retrieves those
2946 * without a schema
2947 * @param tableNamePattern a table name pattern; may be a fully-qualified
2948 * name
2949 * @return a <code>ResultSet</code> object in which each row is a type description
2950 * @throws SQLException if a database access error occurs
2951 * @see #getSearchStringEscape
2952 * @since 1.4
2953 */
2954 ResultSet getSuperTables(String catalog, String schemaPattern,
2955 String tableNamePattern) throws SQLException;
2956
2957 /**
2958 * Indicates that <code>NULL</code> values might not be allowed.
2959 * <P>
2960 * A possible value for the column
2961 * <code>NULLABLE</code> in the <code>ResultSet</code> object
2962 * returned by the method <code>getAttributes</code>.
2963 */
2964 short attributeNoNulls = 0;
2965
2966 /**
2967 * Indicates that <code>NULL</code> values are definitely allowed.
2968 * <P>
2969 * A possible value for the column <code>NULLABLE</code>
2970 * in the <code>ResultSet</code> object
2971 * returned by the method <code>getAttributes</code>.
2972 */
2973 short attributeNullable = 1;
2974
2975 /**
2976 * Indicates that whether <code>NULL</code> values are allowed is not
2977 * known.
2978 * <P>
2979 * A possible value for the column <code>NULLABLE</code>
2980 * in the <code>ResultSet</code> object
2981 * returned by the method <code>getAttributes</code>.
2982 */
2983 short attributeNullableUnknown = 2;
2984
2985 /**
2986 * Retrieves a description of the given attribute of the given type
2987 * for a user-defined type (UDT) that is available in the given schema
2988 * and catalog.
2989 * <P>
2990 * Descriptions are returned only for attributes of UDTs matching the
2991 * catalog, schema, type, and attribute name criteria. They are ordered by
2992 * <code>TYPE_CAT</code>, <code>TYPE_SCHEM</code>,
2993 * <code>TYPE_NAME</code> and <code>ORDINAL_POSITION</code>. This description
2994 * does not contain inherited attributes.
2995 * <P>
2996 * The <code>ResultSet</code> object that is returned has the following
2997 * columns:
2998 * <OL>
2999 * <LI><B>TYPE_CAT</B> String => type catalog (may be <code>null</code>)
3000 * <LI><B>TYPE_SCHEM</B> String => type schema (may be <code>null</code>)
3001 * <LI><B>TYPE_NAME</B> String => type name
3002 * <LI><B>ATTR_NAME</B> String => attribute name
3003 * <LI><B>DATA_TYPE</B> int => attribute type SQL type from java.sql.Types
3004 * <LI><B>ATTR_TYPE_NAME</B> String => Data source dependent type name.
3005 * For a UDT, the type name is fully qualified. For a REF, the type name is
3006 * fully qualified and represents the target type of the reference type.
3007 * <LI><B>ATTR_SIZE</B> int => column size. For char or date
3008 * types this is the maximum number of characters; for numeric or
3009 * decimal types this is precision.
3010 * <LI><B>DECIMAL_DIGITS</B> int => the number of fractional digits. Null is returned for data types where
3011 * DECIMAL_DIGITS is not applicable.
3012 * <LI><B>NUM_PREC_RADIX</B> int => Radix (typically either 10 or 2)
3013 * <LI><B>NULLABLE</B> int => whether NULL is allowed
3014 * <UL>
3015 * <LI> attributeNoNulls - might not allow NULL values
3016 * <LI> attributeNullable - definitely allows NULL values
3017 * <LI> attributeNullableUnknown - nullability unknown
3018 * </UL>
3019 * <LI><B>REMARKS</B> String => comment describing column (may be <code>null</code>)
3020 * <LI><B>ATTR_DEF</B> String => default value (may be <code>null</code>)
3021 * <LI><B>SQL_DATA_TYPE</B> int => unused
3022 * <LI><B>SQL_DATETIME_SUB</B> int => unused
3023 * <LI><B>CHAR_OCTET_LENGTH</B> int => for char types the
3024 * maximum number of bytes in the column
3025 * <LI><B>ORDINAL_POSITION</B> int => index of the attribute in the UDT
3026 * (starting at 1)
3027 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine
3028 * the nullability for a attribute.
3029 * <UL>
3030 * <LI> YES --- if the attribute can include NULLs
3031 * <LI> NO --- if the attribute cannot include NULLs
3032 * <LI> empty string --- if the nullability for the
3033 * attribute is unknown
3034 * </UL>
3035 * <LI><B>SCOPE_CATALOG</B> String => catalog of table that is the
3036 * scope of a reference attribute (<code>null</code> if DATA_TYPE isn't REF)
3037 * <LI><B>SCOPE_SCHEMA</B> String => schema of table that is the
3038 * scope of a reference attribute (<code>null</code> if DATA_TYPE isn't REF)
3039 * <LI><B>SCOPE_TABLE</B> String => table name that is the scope of a
3040 * reference attribute (<code>null</code> if the DATA_TYPE isn't REF)
3041 * <LI><B>SOURCE_DATA_TYPE</B> short => source type of a distinct type or user-generated
3042 * Ref type,SQL type from java.sql.Types (<code>null</code> if DATA_TYPE
3043 * isn't DISTINCT or user-generated REF)
3044 * </OL>
3045 * @param catalog a catalog name; must match the catalog name as it
3046 * is stored in the database; "" retrieves those without a catalog;
3047 * <code>null</code> means that the catalog name should not be used to narrow
3048 * the search
3049 * @param schemaPattern a schema name pattern; must match the schema name
3050 * as it is stored in the database; "" retrieves those without a schema;
3051 * <code>null</code> means that the schema name should not be used to narrow
3052 * the search
3053 * @param typeNamePattern a type name pattern; must match the
3054 * type name as it is stored in the database
3055 * @param attributeNamePattern an attribute name pattern; must match the attribute
3056 * name as it is declared in the database
3057 * @return a <code>ResultSet</code> object in which each row is an
3058 * attribute description
3059 * @exception SQLException if a database access error occurs
3060 * @see #getSearchStringEscape
3061 * @since 1.4
3062 */
3063 ResultSet getAttributes(String catalog, String schemaPattern,
3064 String typeNamePattern, String attributeNamePattern)
3065 throws SQLException;
3066
3067 /**
3068 * Retrieves whether this database supports the given result set holdability.
3069 *
3070 * @param holdability one of the following constants:
3071 * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
3072 * <code>ResultSet.CLOSE_CURSORS_AT_COMMIT<code>
3073 * @return <code>true</code> if so; <code>false</code> otherwise
3074 * @exception SQLException if a database access error occurs
3075 * @see Connection
3076 * @since 1.4
3077 */
3078 boolean supportsResultSetHoldability(int holdability) throws SQLException;
3079
3080 /**
3081 * Retrieves this database's default holdability for <code>ResultSet</code>
3082 * objects.
3083 *
3084 * @return the default holdability; either
3085 * <code>ResultSet.HOLD_CURSORS_OVER_COMMIT</code> or
3086 * <code>ResultSet.CLOSE_CURSORS_AT_COMMIT</code>
3087 * @exception SQLException if a database access error occurs
3088 * @since 1.4
3089 */
3090 int getResultSetHoldability() throws SQLException;
3091
3092 /**
3093 * Retrieves the major version number of the underlying database.
3094 *
3095 * @return the underlying database's major version
3096 * @exception SQLException if a database access error occurs
3097 * @since 1.4
3098 */
3099 int getDatabaseMajorVersion() throws SQLException;
3100
3101 /**
3102 * Retrieves the minor version number of the underlying database.
3103 *
3104 * @return underlying database's minor version
3105 * @exception SQLException if a database access error occurs
3106 * @since 1.4
3107 */
3108 int getDatabaseMinorVersion() throws SQLException;
3109
3110 /**
3111 * Retrieves the major JDBC version number for this
3112 * driver.
3113 *
3114 * @return JDBC version major number
3115 * @exception SQLException if a database access error occurs
3116 * @since 1.4
3117 */
3118 int getJDBCMajorVersion() throws SQLException;
3119
3120 /**
3121 * Retrieves the minor JDBC version number for this
3122 * driver.
3123 *
3124 * @return JDBC version minor number
3125 * @exception SQLException if a database access error occurs
3126 * @since 1.4
3127 */
3128 int getJDBCMinorVersion() throws SQLException;
3129
3130 /**
3131 * A possible return value for the method
3132 * <code>DatabaseMetaData.getSQLStateType</code> which is used to indicate
3133 * whether the value returned by the method
3134 * <code>SQLException.getSQLState</code> is an
3135 * X/Open (now know as Open Group) SQL CLI SQLSTATE value.
3136 * <P>
3137 * @since 1.4
3138 */
3139 int sqlStateXOpen = 1;
3140
3141 /**
3142 * A possible return value for the method
3143 * <code>DatabaseMetaData.getSQLStateType</code> which is used to indicate
3144 * whether the value returned by the method
3145 * <code>SQLException.getSQLState</code> is an SQLSTATE value.
3146 * <P>
3147 * @since 1.6
3148 */
3149 int sqlStateSQL = 2;
3150
3151 /**
3152 * A possible return value for the method
3153 * <code>DatabaseMetaData.getSQLStateType</code> which is used to indicate
3154 * whether the value returned by the method
3155 * <code>SQLException.getSQLState</code> is an SQL99 SQLSTATE value.
3156 * <P>
3157 * <b>Note:</b>This constant remains only for compatibility reasons. Developers
3158 * should use the constant <code>sqlStateSQL</code> instead.
3159 *
3160 * @since 1.4
3161 */
3162 int sqlStateSQL99 = sqlStateSQL;
3163
3164 /**
3165 * Indicates whether the SQLSTATE returned by <code>SQLException.getSQLState</code>
3166 * is X/Open (now known as Open Group) SQL CLI or SQL:2003.
3167 * @return the type of SQLSTATE; one of:
3168 * sqlStateXOpen or
3169 * sqlStateSQL
3170 * @throws SQLException if a database access error occurs
3171 * @since 1.4
3172 */
3173 int getSQLStateType() throws SQLException;
3174
3175 /**
3176 * Indicates whether updates made to a LOB are made on a copy or directly
3177 * to the LOB.
3178 * @return <code>true</code> if updates are made to a copy of the LOB;
3179 * <code>false</code> if updates are made directly to the LOB
3180 * @throws SQLException if a database access error occurs
3181 * @since 1.4
3182 */
3183 boolean locatorsUpdateCopy() throws SQLException;
3184
3185 /**
3186 * Retrieves whether this database supports statement pooling.
3187 *
3188 * @return <code>true</code> if so; <code>false</code> otherwise
3189 * @throws SQLExcpetion if a database access error occurs
3190 * @since 1.4
3191 */
3192 boolean supportsStatementPooling() throws SQLException;
3193
3194 //------------------------- JDBC 4.0 -----------------------------------
3195
3196 /**
3197 * Indicates whether or not this data source supports the SQL <code>ROWID</code> type,
3198 * and if so the lifetime for which a <code>RowId</code> object remains valid.
3199 * <p>
3200 * The returned int values have the following relationship:
3201 * <pre>
3202 * ROWID_UNSUPPORTED < ROWID_VALID_OTHER < ROWID_VALID_TRANSACTION
3203 * < ROWID_VALID_SESSION < ROWID_VALID_FOREVER
3204 * </pre>
3205 * so conditional logic such as
3206 * <pre>
3207 * if (metadata.getRowIdLifetime() > DatabaseMetaData.ROWID_VALID_TRANSACTION)
3208 * </pre>
3209 * can be used. Valid Forever means valid across all Sessions, and valid for
3210 * a Session means valid across all its contained Transactions.
3211 *
3212 * @return the status indicating the lifetime of a <code>RowId</code>
3213 * @throws SQLException if a database access error occurs
3214 * @since 1.6
3215 */
3216 RowIdLifetime getRowIdLifetime() throws SQLException;
3217
3218 /**
3219 * Retrieves the schema names available in this database. The results
3220 * are ordered by <code>TABLE_CATALOG</code> and
3221 * <code>TABLE_SCHEM</code>.
3222 *
3223 * <P>The schema columns are:
3224 * <OL>
3225 * <LI><B>TABLE_SCHEM</B> String => schema name
3226 * <LI><B>TABLE_CATALOG</B> String => catalog name (may be <code>null</code>)
3227 * </OL>
3228 *
3229 *
3230 * @param catalog a catalog name; must match the catalog name as it is stored
3231 * in the database;"" retrieves those without a catalog; null means catalog
3232 * name should not be used to narrow down the search.
3233 * @param schemaPattern a schema name; must match the schema name as it is
3234 * stored in the database; null means
3235 * schema name should not be used to narrow down the search.
3236 * @return a <code>ResultSet</code> object in which each row is a
3237 * schema description
3238 * @exception SQLException if a database access error occurs
3239 * @see #getSearchStringEscape
3240 * @since 1.6
3241 */
3242 ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException;
3243
3244 /**
3245 * Retrieves whether this database supports invoking user-defined or vendor functions
3246 * using the stored procedure escape syntax.
3247 *
3248 * @return <code>true</code> if so; <code>false</code> otherwise
3249 * @exception SQLException if a database access error occurs
3250 * @since 1.6
3251 */
3252 boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException;
3253
3254 /**
3255 * Retrieves whether a <code>SQLException</code> while autoCommit is <code>true</code> inidcates
3256 * that all open ResultSets are closed, even ones that are holdable. When a <code>SQLException</code> occurs while
3257 * autocommit is <code>true</code>, it is vendor specific whether the JDBC driver responds with a commit operation, a
3258 * rollback operation, or by doing neither a commit nor a rollback. A potential result of this difference
3259 * is in whether or not holdable ResultSets are closed.
3260 *
3261 * @return <code>true</code> if so; <code>false</code> otherwise
3262 * @exception SQLException if a database access error occurs
3263 * @since 1.6
3264 */
3265 boolean autoCommitFailureClosesAllResultSets() throws SQLException;
3266 /**
3267 * Retrieves a list of the client info properties
3268 * that the driver supports. The result set contains the following columns
3269 * <p>
3270 * <ol>
3271 * <li><b>NAME</b> String=> The name of the client info property<br>
3272 * <li><b>MAX_LEN</b> int=> The maximum length of the value for the property<br>
3273 * <li><b>DEFAULT_VALUE</b> String=> The default value of the property<br>
3274 * <li><b>DESCRIPTION</b> String=> A description of the property. This will typically
3275 * contain information as to where this property is
3276 * stored in the database.
3277 * </ol>
3278 * <p>
3279 * The <code>ResultSet</code> is sorted by the NAME column
3280 * <p>
3281 * @return A <code>ResultSet</code> object; each row is a supported client info
3282 * property
3283 * <p>
3284 * @exception SQLException if a database access error occurs
3285 * <p>
3286 * @since 1.6
3287 */
3288 ResultSet getClientInfoProperties()
3289 throws SQLException;
3290
3291 /**
3292 * Retrieves a description of the system and user functions available
3293 * in the given catalog.
3294 * <P>
3295 * Only system and user function descriptions matching the schema and
3296 * function name criteria are returned. They are ordered by
3297 * <code>FUNCTION_CAT</code>, <code>FUNCTION_SCHEM</code>,
3298 * <code>FUNCTION_NAME</code> and
3299 * <code>SPECIFIC_ NAME</code>.
3300 *
3301 * <P>Each function description has the the following columns:
3302 * <OL>
3303 * <LI><B>FUNCTION_CAT</B> String => function catalog (may be <code>null</code>)
3304 * <LI><B>FUNCTION_SCHEM</B> String => function schema (may be <code>null</code>)
3305 * <LI><B>FUNCTION_NAME</B> String => function name. This is the name
3306 * used to invoke the function
3307 * <LI><B>REMARKS</B> String => explanatory comment on the function
3308 * <LI><B>FUNCTION_TYPE</B> short => kind of function:
3309 * <UL>
3310 * <LI>functionResultUnknown - Cannot determine if a return value
3311 * or table will be returned
3312 * <LI> functionNoTable- Does not return a table
3313 * <LI> functionReturnsTable - Returns a table
3314 * </UL>
3315 * <LI><B>SPECIFIC_NAME</B> String => the name which uniquely identifies
3316 * this function within its schema. This is a user specified, or DBMS
3317 * generated, name that may be different then the <code>FUNCTION_NAME</code>
3318 * for example with overload functions
3319 * </OL>
3320 * <p>
3321 * A user may not have permission to execute any of the functions that are
3322 * returned by <code>getFunctions</code>
3323 *
3324 * @param catalog a catalog name; must match the catalog name as it
3325 * is stored in the database; "" retrieves those without a catalog;
3326 * <code>null</code> means that the catalog name should not be used to narrow
3327 * the search
3328 * @param schemaPattern a schema name pattern; must match the schema name
3329 * as it is stored in the database; "" retrieves those without a schema;
3330 * <code>null</code> means that the schema name should not be used to narrow
3331 * the search
3332 * @param functionNamePattern a function name pattern; must match the
3333 * function name as it is stored in the database
3334 * @return <code>ResultSet</code> - each row is a function description
3335 * @exception SQLException if a database access error occurs
3336 * @see #getSearchStringEscape
3337 * @since 1.6
3338 */
3339 ResultSet getFunctions(String catalog, String schemaPattern,
3340 String functionNamePattern) throws SQLException;
3341 /**
3342 * Retrieves a description of the given catalog's system or user
3343 * function parameters and return type.
3344 *
3345 * <P>Only descriptions matching the schema, function and
3346 * parameter name criteria are returned. They are ordered by
3347 * <code>FUNCTION_CAT</code>, <code>FUNCTION_SCHEM</code>,
3348 * <code>FUNCTION_NAME</code> and
3349 * <code>SPECIFIC_ NAME</code>. Within this, the return value,
3350 * if any, is first. Next are the parameter descriptions in call
3351 * order. The column descriptions follow in column number order.
3352 *
3353 * <P>Each row in the <code>ResultSet</code>
3354 * is a parameter description, column description or
3355 * return type description with the following fields:
3356 * <OL>
3357 * <LI><B>FUNCTION_CAT</B> String => function catalog (may be <code>null</code>)
3358 * <LI><B>FUNCTION_SCHEM</B> String => function schema (may be <code>null</code>)
3359 * <LI><B>FUNCTION_NAME</B> String => function name. This is the name
3360 * used to invoke the function
3361 * <LI><B>COLUMN_NAME</B> String => column/parameter name
3362 * <LI><B>COLUMN_TYPE</B> Short => kind of column/parameter:
3363 * <UL>
3364 * <LI> functionColumnUnknown - nobody knows
3365 * <LI> functionColumnIn - IN parameter
3366 * <LI> functionColumnInOut - INOUT parameter
3367 * <LI> functionColumnOut - OUT parameter
3368 * <LI> functionColumnReturn - function return value
3369 * <LI> functionColumnResult - Indicates that the parameter or column
3370 * is a column in the <code>ResultSet</code>
3371 * </UL>
3372 * <LI><B>DATA_TYPE</B> int => SQL type from java.sql.Types
3373 * <LI><B>TYPE_NAME</B> String => SQL type name, for a UDT type the
3374 * type name is fully qualified
3375 * <LI><B>PRECISION</B> int => precision
3376 * <LI><B>LENGTH</B> int => length in bytes of data
3377 * <LI><B>SCALE</B> short => scale - null is returned for data types where
3378 * SCALE is not applicable.
3379 * <LI><B>RADIX</B> short => radix
3380 * <LI><B>NULLABLE</B> short => can it contain NULL.
3381 * <UL>
3382 * <LI> functionNoNulls - does not allow NULL values
3383 * <LI> functionNullable - allows NULL values
3384 * <LI> functionNullableUnknown - nullability unknown
3385 * </UL>
3386 * <LI><B>REMARKS</B> String => comment describing column/parameter
3387 * <LI><B>CHAR_OCTET_LENGTH</B> int => the maximum length of binary
3388 * and character based parameters or columns. For any other datatype the returned value
3389 * is a NULL
3390 * <LI><B>ORDINAL_POSITION</B> int => the ordinal position, starting
3391 * from 1, for the input and output parameters. A value of 0
3392 * is returned if this row describes the function's return value.
3393 * For result set columns, it is the
3394 * ordinal position of the column in the result set starting from 1.
3395 * <LI><B>IS_NULLABLE</B> String => ISO rules are used to determine
3396 * the nullability for a parameter or column.
3397 * <UL>
3398 * <LI> YES --- if the parameter or column can include NULLs
3399 * <LI> NO --- if the parameter or column cannot include NULLs
3400 * <LI> empty string --- if the nullability for the
3401 * parameter or column is unknown
3402 * </UL>
3403 * <LI><B>SPECIFIC_NAME</B> String => the name which uniquely identifies
3404 * this function within its schema. This is a user specified, or DBMS
3405 * generated, name that may be different then the <code>FUNCTION_NAME</code>
3406 * for example with overload functions
3407 * </OL>
3408 *
3409 * <p>The PRECISION column represents the specified column size for the given
3410 * parameter or column.
3411 * For numeric data, this is the maximum precision. For character data, this is the length in characters.
3412 * For datetime datatypes, this is the length in characters of the String representation (assuming the
3413 * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype,
3414 * this is the length in bytes. Null is returned for data types where the
3415 * column size is not applicable.
3416 * @param catalog a catalog name; must match the catalog name as it
3417 * is stored in the database; "" retrieves those without a catalog;
3418 * <code>null</code> means that the catalog name should not be used to narrow
3419 * the search
3420 * @param schemaPattern a schema name pattern; must match the schema name
3421 * as it is stored in the database; "" retrieves those without a schema;
3422 * <code>null</code> means that the schema name should not be used to narrow
3423 * the search
3424 * @param functionNamePattern a procedure name pattern; must match the
3425 * function name as it is stored in the database
3426 * @param columnNamePattern a parameter name pattern; must match the
3427 * parameter or column name as it is stored in the database
3428 * @return <code>ResultSet</code> - each row describes a
3429 * user function parameter, column or return type
3430 *
3431 * @exception SQLException if a database access error occurs
3432 * @see #getSearchStringEscape
3433 * @since 1.6
3434 */
3435 ResultSet getFunctionColumns(String catalog,
3436 String schemaPattern,
3437 String functionNamePattern,
3438 String columnNamePattern) throws SQLException;
3439
3440
3441 /**
3442 * Indicates that type of the parameter or column is unknown.
3443 * <P>
3444 * A possible value for the column
3445 * <code>COLUMN_TYPE</code>
3446 * in the <code>ResultSet</code>
3447 * returned by the method <code>getFunctionColumns</code>.
3448 */
3449 int functionColumnUnknown = 0;
3450
3451 /**
3452 * Indicates that the parameter or column is an IN parameter.
3453 * <P>
3454 * A possible value for the column
3455 * <code>COLUMN_TYPE</code>
3456 * in the <code>ResultSet</code>
3457 * returned by the method <code>getFunctionColumns</code>.
3458 * @since 1.6
3459 */
3460 int functionColumnIn = 1;
3461
3462 /**
3463 * Indicates that the parameter or column is an INOUT parameter.
3464 * <P>
3465 * A possible value for the column
3466 * <code>COLUMN_TYPE</code>
3467 * in the <code>ResultSet</code>
3468 * returned by the method <code>getFunctionColumns</code>.
3469 * @since 1.6
3470 */
3471 int functionColumnInOut = 2;
3472
3473 /**
3474 * Indicates that the parameter or column is an OUT parameter.
3475 * <P>
3476 * A possible value for the column
3477 * <code>COLUMN_TYPE</code>
3478 * in the <code>ResultSet</code>
3479 * returned by the method <code>getFunctionColumns</code>.
3480 * @since 1.6
3481 */
3482 int functionColumnOut = 3;
3483 /**
3484 * Indicates that the parameter or column is a return value.
3485 * <P>
3486 * A possible value for the column
3487 * <code>COLUMN_TYPE</code>
3488 * in the <code>ResultSet</code>
3489 * returned by the method <code>getFunctionColumns</code>.
3490 * @since 1.6
3491 */
3492 int functionReturn = 4;
3493
3494 /**
3495 * Indicates that the parameter or column is a column in a result set.
3496 * <P>
3497 * A possible value for the column
3498 * <code>COLUMN_TYPE</code>
3499 * in the <code>ResultSet</code>
3500 * returned by the method <code>getFunctionColumns</code>.
3501 * @since 1.6
3502 */
3503 int functionColumnResult = 5;
3504
3505
3506 /**
3507 * Indicates that <code>NULL</code> values are not allowed.
3508 * <P>
3509 * A possible value for the column
3510 * <code>NULLABLE</code>
3511 * in the <code>ResultSet</code> object
3512 * returned by the method <code>getFunctionColumns</code>.
3513 * @since 1.6
3514 */
3515 int functionNoNulls = 0;
3516
3517 /**
3518 * Indicates that <code>NULL</code> values are allowed.
3519 * <P>
3520 * A possible value for the column
3521 * <code>NULLABLE</code>
3522 * in the <code>ResultSet</code> object
3523 * returned by the method <code>getFunctionColumns</code>.
3524 * @since 1.6
3525 */
3526 int functionNullable = 1;
3527
3528 /**
3529 * Indicates that whether <code>NULL</code> values are allowed
3530 * is unknown.
3531 * <P>
3532 * A possible value for the column
3533 * <code>NULLABLE</code>
3534 * in the <code>ResultSet</code> object
3535 * returned by the method <code>getFunctionColumns</code>.
3536 * @since 1.6
3537 */
3538 int functionNullableUnknown = 2;
3539
3540 /**
3541 * Indicates that it is not known whether the function returns
3542 * a result or a table.
3543 * <P>
3544 * A possible value for column <code>FUNCTION_TYPE</code> in the
3545 * <code>ResultSet</code> object returned by the method
3546 * <code>getFunctions</code>.
3547 * @since 1.6
3548 */
3549 int functionResultUnknown = 0;
3550
3551 /**
3552 * Indicates that the function does not return a table.
3553 * <P>
3554 * A possible value for column <code>FUNCTION_TYPE</code> in the
3555 * <code>ResultSet</code> object returned by the method
3556 * <code>getFunctions</code>.
3557 * @since 1.6
3558 */
3559 int functionNoTable = 1;
3560
3561 /**
3562 * Indicates that the function returns a table.
3563 * <P>
3564 * A possible value for column <code>FUNCTION_TYPE</code> in the
3565 * <code>ResultSet</code> object returned by the method
3566 * <code>getFunctions</code>.
3567 * @since 1.6
3568 */
3569 int functionReturnsTable = 2;
3570
3571}