EMMA Coverage Report (generated Wed Jun 28 19:54:35 CEST 2006)
[all classes][smallsql.database]

COVERAGE SUMMARY FOR SOURCE FILE [SSDatabaseMetaData.java]

nameclass, %method, %block, %line, %
SSDatabaseMetaData.java100% (1/1)18%  (30/167)84%  (2653/3165)42%  (121,4/289)

COVERAGE BREAKDOWN BY CLASS AND METHOD

nameclass, %method, %block, %line, %
     
class SSDatabaseMetaData100% (1/1)18%  (30/167)84%  (2653/3165)42%  (121,4/289)
allProceduresAreCallable (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
allTablesAreSelectable (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
dataDefinitionCausesTransactionCommit (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
dataDefinitionIgnoredInTransactions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
deletesAreDetected (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
doesMaxRowSizeIncludeBlobs (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
getAttributes (String, String, String, String): ResultSet 0%   (0/1)0%   (0/5)0%   (0/1)
getCatalogSeparator (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getCatalogTerm (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getColumnPrivileges (String, String, String, String): ResultSet 0%   (0/1)0%   (0/40)0%   (0/2)
getDatabaseProductName (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getDefaultTransactionIsolation (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getDriverName (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getExtraNameCharacters (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getIdentifierQuoteString (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getJDBCMajorVersion (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getJDBCMinorVersion (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxBinaryLiteralLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxCatalogNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxCharLiteralLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxColumnNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxColumnsInGroupBy (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxColumnsInIndex (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxColumnsInOrderBy (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxColumnsInSelect (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxColumnsInTable (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxConnections (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxCursorNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxIndexLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxProcedureNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxRowSize (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxSchemaNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxStatementLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxStatements (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxTableNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxTablesInSelect (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getMaxUserNameLength (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getProcedureTerm (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getResultSetHoldability (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getSQLKeywords (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getSQLStateType (): int 0%   (0/1)0%   (0/2)0%   (0/1)
getSchemaTerm (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getSearchStringEscape (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getSuperTables (String, String, String): ResultSet 0%   (0/1)0%   (0/5)0%   (0/1)
getSuperTypes (String, String, String): ResultSet 0%   (0/1)0%   (0/5)0%   (0/1)
getTablePrivileges (String, String, String): ResultSet 0%   (0/1)0%   (0/36)0%   (0/2)
getUserName (): String 0%   (0/1)0%   (0/2)0%   (0/1)
getVersionColumns (String, String, String): ResultSet 0%   (0/1)0%   (0/54)0%   (0/5)
insertsAreDetected (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
isCatalogAtStart (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
isReadOnly (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
locatorsUpdateCopy (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
nullPlusNonNullIsNull (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
nullsAreSortedAtEnd (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
nullsAreSortedAtStart (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
nullsAreSortedHigh (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
nullsAreSortedLow (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
othersDeletesAreVisible (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
othersInsertsAreVisible (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
othersUpdatesAreVisible (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
ownDeletesAreVisible (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
ownInsertsAreVisible (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
ownUpdatesAreVisible (int): boolean 0%   (0/1)0%   (0/4)0%   (0/1)
storesLowerCaseIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
storesLowerCaseQuotedIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
storesMixedCaseIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
storesMixedCaseQuotedIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
storesUpperCaseIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
storesUpperCaseQuotedIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsANSI92EntryLevelSQL (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsANSI92FullSQL (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsANSI92IntermediateSQL (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsAlterTableWithAddColumn (): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
supportsAlterTableWithDropColumn (): boolean 0%   (0/1)0%   (0/5)0%   (0/1)
supportsBatchUpdates (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCatalogsInDataManipulation (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCatalogsInIndexDefinitions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCatalogsInPrivilegeDefinitions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCatalogsInProcedureCalls (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCatalogsInTableDefinitions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsColumnAliasing (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsConvert (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsConvert (int, int): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCoreSQLGrammar (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsCorrelatedSubqueries (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsDataDefinitionAndDataManipulationTransactions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsDataManipulationTransactionsOnly (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsDifferentTableCorrelationNames (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsExpressionsInOrderBy (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsExtendedSQLGrammar (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsFullOuterJoins (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsGetGeneratedKeys (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsGroupBy (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsGroupByBeyondSelect (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsGroupByUnrelated (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsIntegrityEnhancementFacility (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsLikeEscapeClause (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsLimitedOuterJoins (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsMinimumSQLGrammar (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsMixedCaseIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsMixedCaseQuotedIdentifiers (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsMultipleOpenResults (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsMultipleResultSets (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsMultipleTransactions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsNamedParameters (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsNonNullableColumns (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsOpenCursorsAcrossCommit (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsOpenCursorsAcrossRollback (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsOpenStatementsAcrossCommit (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsOpenStatementsAcrossRollback (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsOrderByUnrelated (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsOuterJoins (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsPositionedDelete (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsPositionedUpdate (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsResultSetConcurrency (int, int): boolean 0%   (0/1)0%   (0/16)0%   (0/4)
supportsResultSetHoldability (int): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsResultSetType (int): boolean 0%   (0/1)0%   (0/6)0%   (0/3)
supportsSavepoints (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSchemasInDataManipulation (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSchemasInIndexDefinitions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSchemasInPrivilegeDefinitions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSchemasInProcedureCalls (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSchemasInTableDefinitions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSelectForUpdate (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsStatementPooling (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsStoredProcedures (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSubqueriesInComparisons (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSubqueriesInExists (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSubqueriesInIns (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsSubqueriesInQuantifieds (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsTableCorrelationNames (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsTransactions (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsUnion (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsUnionAll (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
updatesAreDetected (int): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
usesLocalFilePerTable (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
usesLocalFiles (): boolean 0%   (0/1)0%   (0/2)0%   (0/1)
supportsTransactionIsolationLevel (int): boolean 100% (1/1)67%  (4/6)67%  (2/3)
getTables (String, String, String, String []): ResultSet 100% (1/1)80%  (162/203)78%  (27,4/35)
getURL (): String 100% (1/1)89%  (16/18)75%  (3/4)
getPrimaryKeys (String, String, String): ResultSet 100% (1/1)92%  (47/51)60%  (3/5)
getBestRowIdentifier (String, String, String, int, boolean): ResultSet 100% (1/1)93%  (55/59)60%  (3/5)
getIndexInfo (String, String, String, boolean, boolean): ResultSet 100% (1/1)95%  (76/80)60%  (3/5)
getCrossReference (String, String, String, String, String, String): ResultSet 100% (1/1)95%  (80/84)60%  (3/5)
getColumns (String, String, String, String): ResultSet 100% (1/1)96%  (96/100)60%  (3/5)
SSDatabaseMetaData (SSConnection): void 100% (1/1)100% (12/12)100% (4/4)
getCatalogs (): ResultSet 100% (1/1)100% (24/24)100% (3/3)
getConnection (): Connection 100% (1/1)100% (3/3)100% (1/1)
getDatabaseMajorVersion (): int 100% (1/1)100% (3/3)100% (1/1)
getDatabaseMinorVersion (): int 100% (1/1)100% (3/3)100% (1/1)
getDatabaseProductVersion (): String 100% (1/1)100% (3/3)100% (1/1)
getDriverMajorVersion (): int 100% (1/1)100% (3/3)100% (1/1)
getDriverMinorVersion (): int 100% (1/1)100% (3/3)100% (1/1)
getDriverVersion (): String 100% (1/1)100% (13/13)100% (1/1)
getExportedKeys (String, String, String): ResultSet 100% (1/1)100% (9/9)100% (1/1)
getFunctions (int, int): String 100% (1/1)100% (26/26)100% (5/5)
getImportedKeys (String, String, String): ResultSet 100% (1/1)100% (9/9)100% (1/1)
getNumericFunctions (): String 100% (1/1)100% (5/5)100% (1/1)
getProcedureColumns (String, String, String, String): ResultSet 100% (1/1)100% (69/69)100% (3/3)
getProcedures (String, String, String): ResultSet 100% (1/1)100% (49/49)100% (3/3)
getSchemas (): ResultSet 100% (1/1)100% (21/21)100% (3/3)
getStringFunctions (): String 100% (1/1)100% (5/5)100% (1/1)
getSystemFunctions (): String 100% (1/1)100% (5/5)100% (1/1)
getTableTypes (): ResultSet 100% (1/1)100% (48/48)100% (3/3)
getTimeDateFunctions (): String 100% (1/1)100% (5/5)100% (1/1)
getTypeInfo (): ResultSet 100% (1/1)100% (1758/1758)100% (34/34)
getUDTs (String, String, String, int []): ResultSet 100% (1/1)100% (41/41)100% (3/3)

1/* =============================================================
2 * SmallSQL : a free Java DBMS library for the Java(tm) platform
3 * =============================================================
4 *
5 * (C) Copyright 2004-2006, by Volker Berlin.
6 *
7 * Project Info:  http://www.smallsql.de/
8 *
9 * This library is free software; you can redistribute it and/or modify it 
10 * under the terms of the GNU Lesser General Public License as published by 
11 * the Free Software Foundation; either version 2.1 of the License, or 
12 * (at your option) any later version.
13 *
14 * This library is distributed in the hope that it will be useful, but 
15 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
16 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
17 * License for more details.
18 *
19 * You should have received a copy of the GNU Lesser General Public
20 * License along with this library; if not, write to the Free Software
21 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
22 * USA.  
23 *
24 * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
25 * in the United States and other countries.]
26 *
27 * ---------------
28 * SSDatabaseMetaData.java
29 * ---------------
30 * Author: Volker Berlin
31 * 
32 */
33package smallsql.database;
34 
35import java.sql.*;
36import java.util.ArrayList;
37 
38 
39final class SSDatabaseMetaData implements DatabaseMetaData {
40        final private SSConnection con;
41        final private SSStatement st;
42        
43        
44    /**
45     * @throws SQLException Exception can be throw if the Connection already closed.
46     */
47    SSDatabaseMetaData(SSConnection con) throws SQLException{
48                this.con = con;
49                st = new SSStatement(con);
50        }
51        
52    public boolean allProceduresAreCallable() {
53            return true;
54    }
55        
56        
57    public boolean allTablesAreSelectable() {
58            return true;
59    }
60        
61        
62    public String getURL() throws SQLException {
63            Database database = con.getDatabase(true);
64            if(database == null)
65                        return SSDriver.URL_PREFIX;
66            return SSDriver.URL_PREFIX + ':' + database.getName();
67    }
68        
69        
70    public String getUserName() {
71            return "";
72    }
73        
74        
75    public boolean isReadOnly() {
76            return false;
77    }
78        
79        
80    public boolean nullsAreSortedHigh() {
81                return false;
82    }
83        
84        
85    public boolean nullsAreSortedLow() {
86                return true;
87    }
88        
89        
90    public boolean nullsAreSortedAtStart() {
91                return false;
92    }
93        
94        
95    public boolean nullsAreSortedAtEnd() {
96                return false;
97    }
98        
99        
100    public String getDatabaseProductName() {
101            return "SmallSQL Database";
102    }
103        
104        
105    public String getDatabaseProductVersion() {
106            return getDriverVersion();
107    }
108        
109        
110    public String getDriverName() throws SQLException {
111            return "SmallSQL Driver";
112    }
113        
114        
115    public String getDriverVersion() {
116            return getDriverMajorVersion() + "." + SSDriver.drv.getMinorVersion();
117    }
118        
119        
120    public int getDriverMajorVersion() {
121            return SSDriver.drv.getMajorVersion();
122    }
123        
124        
125    public int getDriverMinorVersion() {
126                return SSDriver.drv.getMinorVersion();
127    }
128        
129        
130    public boolean usesLocalFiles() {
131            return false;
132    }
133        
134        
135    public boolean usesLocalFilePerTable() {
136            return false;
137    }
138        
139        
140    public boolean supportsMixedCaseIdentifiers() {
141            return true;
142    }
143        
144        
145    public boolean storesUpperCaseIdentifiers() {
146            return false;
147    }
148        
149        
150    public boolean storesLowerCaseIdentifiers() {
151            return false;
152    }
153        
154        
155    public boolean storesMixedCaseIdentifiers() {
156            return true;
157    }
158        
159        
160    public boolean supportsMixedCaseQuotedIdentifiers() {
161            return true;
162    }
163        
164        
165    public boolean storesUpperCaseQuotedIdentifiers() {
166            return false;
167    }
168        
169        
170    public boolean storesLowerCaseQuotedIdentifiers() {
171            return false;
172    }
173        
174        
175    public boolean storesMixedCaseQuotedIdentifiers() {
176            return true;
177    }
178        
179        
180    public String getIdentifierQuoteString() {
181            return "\"";
182    }
183        
184        
185    public String getSQLKeywords() {
186            return "database,use";
187    }
188    
189    
190    private String getFunctions(int from, int to){
191                StringBuffer buf = new StringBuffer();
192                for(int i=from; i<=to; i++){
193                        if(i != from) buf.append(',');
194                        buf.append( SQLTokenizer.getKeyWord(i) );
195                }
196                return buf.toString();
197    }
198    
199    
200    public String getNumericFunctions() {
201            return getFunctions(SQLTokenizer.ABS, SQLTokenizer.TRUNCATE);
202    }
203    
204    
205    public String getStringFunctions() {
206                return getFunctions(SQLTokenizer.ASCII, SQLTokenizer.UCASE);
207    }
208    
209    
210    public String getSystemFunctions() {
211                return getFunctions(SQLTokenizer.IFNULL, SQLTokenizer.IIF);
212    }
213    
214    
215    public String getTimeDateFunctions() {
216                return getFunctions(SQLTokenizer.CURDATE, SQLTokenizer.YEAR);
217    }
218    
219    
220    public String getSearchStringEscape() {
221            return "\\";
222    }
223    
224    
225    public String getExtraNameCharacters() {
226            return "#$ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖØÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõöøùúûüýþÿ";
227    }
228        
229        
230    public boolean supportsAlterTableWithAddColumn() {
231        /**@todo: Implement this java.sql.DatabaseMetaData method*/
232        throw new java.lang.UnsupportedOperationException("Method supportsAlterTableWithAddColumn() not yet implemented.");
233    }
234    public boolean supportsAlterTableWithDropColumn() throws SQLException {
235        /**@todo: Implement this java.sql.DatabaseMetaData method*/
236        throw new java.lang.UnsupportedOperationException("Method supportsAlterTableWithDropColumn() not yet implemented.");
237    }
238        
239        
240    public boolean supportsColumnAliasing() {
241            return true;
242    }
243        
244        
245    public boolean nullPlusNonNullIsNull() {
246            return true;
247    }
248        
249        
250    public boolean supportsConvert() {
251            return true;
252    }
253        
254        
255    public boolean supportsConvert(int fromType, int toType) {
256            return true;
257    }
258        
259        
260    public boolean supportsTableCorrelationNames() {
261            return true;
262    }
263        
264        
265    public boolean supportsDifferentTableCorrelationNames() {
266            return true;
267    }
268        
269        
270    public boolean supportsExpressionsInOrderBy() {
271            return true;
272    }
273        
274        
275    public boolean supportsOrderByUnrelated() {
276            return true;
277    }
278        
279        
280    public boolean supportsGroupBy() {
281            return true;
282    }
283        
284        
285    public boolean supportsGroupByUnrelated() {
286            return true;
287    }
288        
289        
290    public boolean supportsGroupByBeyondSelect() {
291            return true;
292    }
293        
294        
295    public boolean supportsLikeEscapeClause() {
296            return true;
297    }
298        
299        
300    public boolean supportsMultipleResultSets() {
301            return true;
302    }
303        
304        
305    public boolean supportsMultipleTransactions() {
306            return true;
307    }
308        
309        
310    public boolean supportsNonNullableColumns() {
311            return true;
312    }
313        
314        
315    public boolean supportsMinimumSQLGrammar() {
316            return true;
317    }
318        
319        
320    public boolean supportsCoreSQLGrammar() {
321                return true;
322    }
323        
324        
325    public boolean supportsExtendedSQLGrammar() {
326            return true;
327    }
328        
329        
330    public boolean supportsANSI92EntryLevelSQL() {
331            return true;
332    }
333        
334        
335    public boolean supportsANSI92IntermediateSQL() {
336            return true;
337    }
338        
339        
340    public boolean supportsANSI92FullSQL() {
341            return true;
342    }
343        
344        
345    public boolean supportsIntegrityEnhancementFacility() {
346            return true;
347    }
348        
349        
350    public boolean supportsOuterJoins() {
351            return true;
352    }
353        
354        
355    public boolean supportsFullOuterJoins() {
356            return true;
357    }
358        
359        
360    public boolean supportsLimitedOuterJoins() {
361            return true;
362    }
363        
364        
365    public String getSchemaTerm() {
366            return "owner";
367    }
368        
369        
370    public String getProcedureTerm() {
371            return "procedure";
372    }
373        
374        
375    public String getCatalogTerm() {
376            return "database";
377    }
378        
379        
380    public boolean isCatalogAtStart() {
381            return true;
382    }
383        
384        
385    public String getCatalogSeparator() {
386            return ".";
387    }
388        
389        
390    public boolean supportsSchemasInDataManipulation() {
391            return false;
392    }
393        
394        
395    public boolean supportsSchemasInProcedureCalls() {
396            return false;
397    }
398        
399        
400    public boolean supportsSchemasInTableDefinitions() {
401            return false;
402    }
403        
404        
405    public boolean supportsSchemasInIndexDefinitions() {
406            return false;
407    }
408        
409        
410    public boolean supportsSchemasInPrivilegeDefinitions() {
411            return false;
412    }
413        
414        
415    public boolean supportsCatalogsInDataManipulation() {
416                return true;
417    }
418        
419        
420    public boolean supportsCatalogsInProcedureCalls() {
421            return true;
422    }
423        
424        
425    public boolean supportsCatalogsInTableDefinitions() {
426            return true;
427    }
428        
429        
430    public boolean supportsCatalogsInIndexDefinitions() {
431                return true;
432    }
433        
434        
435    public boolean supportsCatalogsInPrivilegeDefinitions() {
436                return true;
437    }
438        
439        
440    public boolean supportsPositionedDelete() {
441            return true;
442    }
443        
444        
445    public boolean supportsPositionedUpdate() {
446                return true;
447    }
448        
449        
450    public boolean supportsSelectForUpdate() {
451                return true;
452    }
453        
454        
455    public boolean supportsStoredProcedures() {
456            return false;
457    }
458        
459        
460    public boolean supportsSubqueriesInComparisons() {
461                return true;
462    }
463        
464        
465    public boolean supportsSubqueriesInExists() {
466                return true;
467    }
468        
469        
470    public boolean supportsSubqueriesInIns() {
471                return true;
472    }
473        
474        
475    public boolean supportsSubqueriesInQuantifieds() {
476                return true;
477    }
478        
479        
480    public boolean supportsCorrelatedSubqueries() {
481                return true;
482    }
483        
484        
485    public boolean supportsUnion() {
486                return true;
487    }
488        
489        
490    public boolean supportsUnionAll() {
491                return true;
492    }
493        
494        
495    public boolean supportsOpenCursorsAcrossCommit() {
496            return true;
497    }
498        
499        
500    public boolean supportsOpenCursorsAcrossRollback() {
501            return true;
502    }
503        
504        
505    public boolean supportsOpenStatementsAcrossCommit() {
506            return true;
507    }
508        
509        
510    public boolean supportsOpenStatementsAcrossRollback() {
511            return true;
512    }
513        
514        
515    public int getMaxBinaryLiteralLength() {
516            return 0;
517    }
518        
519        
520    public int getMaxCharLiteralLength() {
521            return 0;
522    }
523        
524        
525    public int getMaxColumnNameLength() {
526            return 255;
527    }
528        
529        
530    public int getMaxColumnsInGroupBy() {
531            return 0;
532    }
533        
534        
535    public int getMaxColumnsInIndex() {
536            return 0;
537    }
538        
539        
540    public int getMaxColumnsInOrderBy() {
541            return 0;
542    }
543        
544        
545    public int getMaxColumnsInSelect() {
546            return 0;
547    }
548        
549        
550    public int getMaxColumnsInTable() {
551            return 0;
552    }
553        
554        
555    public int getMaxConnections() {
556            return 0;
557    }
558        
559        
560    public int getMaxCursorNameLength() {
561            return 0;
562    }
563        
564        
565    public int getMaxIndexLength() {
566            return 0;
567    }
568        
569        
570    public int getMaxSchemaNameLength() {
571            return 255;
572    }
573        
574        
575    public int getMaxProcedureNameLength() {
576            return 255;
577    }
578        
579        
580    public int getMaxCatalogNameLength() {
581            return 255;
582    }
583        
584        
585    public int getMaxRowSize() {
586            return 0;
587    }
588        
589        
590    public boolean doesMaxRowSizeIncludeBlobs() {
591            return false;
592    }
593        
594        
595    public int getMaxStatementLength() {
596            return 0;
597    }
598        
599        
600    public int getMaxStatements() {
601            return 0;
602    }
603        
604        
605    public int getMaxTableNameLength() {
606            return 255;
607    }
608        
609        
610    public int getMaxTablesInSelect() {
611            return 0;
612    }
613        
614        
615    public int getMaxUserNameLength() {
616            return 0;
617    }
618        
619        
620    public int getDefaultTransactionIsolation() {
621            return Connection.TRANSACTION_READ_COMMITTED;
622    }
623        
624        
625    public boolean supportsTransactions() {
626            return true;
627    }
628        
629        
630    public boolean supportsTransactionIsolationLevel(int level) {
631            switch(level){
632                        case Connection.TRANSACTION_NONE:
633                        case Connection.TRANSACTION_READ_UNCOMMITTED:
634                    case Connection.TRANSACTION_READ_COMMITTED:
635                        case Connection.TRANSACTION_REPEATABLE_READ:
636                        case Connection.TRANSACTION_SERIALIZABLE:
637                                return true;
638            }
639            return false;
640    }
641        
642        
643    public boolean supportsDataDefinitionAndDataManipulationTransactions() {
644            return true;
645    }
646        
647        
648    public boolean supportsDataManipulationTransactionsOnly() {
649            return false;
650    }
651        
652        
653    public boolean dataDefinitionCausesTransactionCommit() {
654            return false;
655    }
656        
657        
658    public boolean dataDefinitionIgnoredInTransactions() {
659            return false;
660    }
661        
662        
663    public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException {
664                String[] colNames = {"PROCEDURE_CAT", "PROCEDURE_SCHEM", "PROCEDURE_NAME", "", "", "", "REMARKS", "PROCEDURE_TYPE"};  
665                Object[][] data   = new Object[0][];
666                return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
667    }
668        
669        
670    public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException {
671                String[] colNames = {"PROCEDURE_CAT", "PROCEDURE_SCHEM", "PROCEDURE_NAME", "COLUMN_NAME", "COLUMN_TYPE", "DATA_TYPE", "TYPE_NAME", "PRECISION", "LENGTH", "SCALE", "RADIX", "NULLABLE", "REMARKS" };
672                Object[][] data   = new Object[0][];
673                return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
674    }
675        
676        
677    public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException {
678                String[] colNames = {"TABLE_CAT","TABLE_SCHEM","TABLE_NAME","TABLE_TYPE","REMARKS","TYPE_CAT","TYPE_SCHEM","TYPE_NAME","SELF_REFERENCING_COL_NAME","REF_GENERATION"};
679                Database database;
680                if(catalog == null){ 
681                        database = con.getDatabase(true);
682                        if(database != null)
683                                catalog = database.getName();
684            }else{
685                        database = Database.getDatabase(catalog, con, false);
686            }
687                ArrayList rows = new ArrayList();
688                boolean isTypeTable = types == null;
689                boolean isTypeView = types == null;
690                for(int i=0; types != null && i<types.length; i++){
691                        if("TABLE".equalsIgnoreCase(types[i])) isTypeTable = true;
692                        if("VIEW" .equalsIgnoreCase(types[i])) isTypeView  = true;
693                }
694                
695                if(database != null){
696                        Strings tables = database.getTables(tableNamePattern);
697                        for(int i=0; i<tables.size(); i++){
698                                String table = tables.get(i);
699                                Object[] row = new Object[10];
700                                row[0] = catalog;
701                                row[2] = table;
702                                try{
703                                        if(database.getTableView( con, table) instanceof View){
704                                                if(isTypeView){
705                                                        row[3] = "VIEW";
706                                                        rows.add(row);
707                                                }
708                                        }else{
709                                                if(isTypeTable){
710                                                        row[3] = "TABLE";                                        
711                                                        rows.add(row);
712                                                }
713                                        }
714                                }catch(Exception e){
715                                        //TODO invalid VIEWS does not show because it can't load.
716                                }
717                        }
718                }
719                Object[][] data = new Object[rows.size()][];
720                rows.toArray(data);
721                CommandSelect cmdSelect = Utils.createMemoryCommandSelect( con, colNames, data);
722                Expressions order = new Expressions();
723                order.add( new ExpressionName("TABLE_TYPE") );
724                order.add( new ExpressionName("TABLE_NAME") );
725                cmdSelect.setOrder( order );
726                return new SSResultSet( st, cmdSelect);
727    }
728        
729        
730    public ResultSet getSchemas() throws SQLException {
731                String[] colNames = {"TABLE_SCHEM"};
732                Object[][] data   = new Object[0][];
733                return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
734    }
735        
736    
737    public ResultSet getCatalogs() throws SQLException {
738            String[] colNames = {"TABLE_CAT"};
739            Object[][] data   = Database.getCatalogs(con.getDatabase(true));
740            return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
741    }
742        
743    
744    public ResultSet getTableTypes() throws SQLException {
745                String[] colNames = {"TABLE_TYPE"};
746                Object[][] data   = {{"SYSTEM TABLE"}, {"TABLE"}, {"VIEW"}};
747                return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
748    }
749        
750    
751    public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException {
752                try {
753                        String[] colNames = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "NUM_PREC_RADIX", "NULLABLE", "REMARKS", "COLUMN_DEF", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "CHAR_OCTET_LENGTH", "ORDINAL_POSITION", "IS_NULLABLE"};
754                        Object[][] data   = con.getDatabase(false).getColumns(con, tableNamePattern, columnNamePattern);
755                        return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
756                } catch (Exception e) {
757                        throw Utils.createSQLException(e);
758                }
759    }
760        
761        
762    public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException {
763        String[] colNames = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "GRANTOR", "GRANTEE", "PRIVILEGE", "IS_GRANTABLE"};
764        /**@todo: Implement this java.sql.DatabaseMetaData method*/
765        throw new java.lang.UnsupportedOperationException("Method getColumnPrivileges() not yet implemented.");
766    }
767    
768    
769    public ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
770        String[] colNames = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "GRANTOR", "GRANTEE", "PRIVILEGE", "IS_GRANTABLE"};
771        /**@todo: Implement this java.sql.DatabaseMetaData method*/
772        throw new java.lang.UnsupportedOperationException("Method getTablePrivileges() not yet implemented.");
773    }
774        
775        
776    public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException {
777                try {
778                        String[] colNames = {"SCOPE", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "PSEUDO_COLUMN"};
779                        Object[][] data   = con.getDatabase(false).getBestRowIdentifier(con, table);
780                        return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
781                } catch (Exception e) {
782                        throw Utils.createSQLException(e);
783                }
784    }
785        
786        
787    public ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException {
788                try {
789                        String[] colNames = {"SCOPE", "COLUMN_NAME", "DATA_TYPE", "TYPE_NAME", "COLUMN_SIZE", "BUFFER_LENGTH", "DECIMAL_DIGITS", "PSEUDO_COLUMN"};
790                        Object[][] data   = new Object[0][0];
791                        return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
792                } catch (Exception e) {
793                        throw Utils.createSQLException(e);
794                }
795    }
796        
797        
798    public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException {
799                try {
800                        String[] colNames = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "COLUMN_NAME", "KEY_SEQ", "PK_NAME"};
801                        Object[][] data   = con.getDatabase(false).getPrimaryKeys(con, table);
802                        return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
803                } catch (Exception e) {
804                        throw Utils.createSQLException(e);
805                }
806    }
807        
808        
809    public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException {
810                return getCrossReference( null, null, null, null, null, table );
811    }
812        
813        
814    public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException {
815                return getCrossReference( null, null, table, null, null, null );
816    }
817        
818        
819    public ResultSet getCrossReference(String primaryCatalog, String primarySchema, String primaryTable, String foreignCatalog, String foreignSchema, String foreignTable) throws SQLException {
820                try {
821                        String[] colNames = {"PKTABLE_CAT", "PKTABLE_SCHEM", "PKTABLE_NAME", "PKCOLUMN_NAME", "FKTABLE_CAT", "FKTABLE_SCHEM", "FKTABLE_NAME", "FKCOLUMN_NAME", "KEY_SEQ", "UPDATE_RULE", "DELETE_RULE", "FK_NAME", "PK_NAME", "DEFERRABILITY"};
822                        Object[][] data   = con.getDatabase(false).getReferenceKeys(con, primaryTable, foreignTable);
823                        return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
824                } catch (Exception e) {
825                        throw Utils.createSQLException(e);
826                }
827    }
828        
829        
830    public ResultSet getTypeInfo() throws SQLException {
831                String[] colNames = {                "TYPE_NAME",                                 "DATA_TYPE",                                                                                                                                         "PRECISION",         "LITERAL_PREFIX", "LITERAL_SUFFIX",                 "CREATE_PARAMS", "NULLABLE",          "CASE_SENSITIVE", "SEARCHABLE", "UNSIGNED_ATTRIBUTE", "FIXED_PREC_SCALE", "AUTO_INCREMENT", "LOCAL_TYPE_NAME", "MINIMUM_SCALE", "MAXIMUM_SCALE", "SQL_DATA_TYPE", "SQL_DATETIME_SUB", "NUM_PREC_RADIX"};
832                Object[][] data   = {
833                 {SQLTokenizer.getKeyWord(SQLTokenizer.UNIQUEIDENTIFIER),Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.UNIQUEIDENTIFIER)), Utils.getInteger(36),              "'",  "'",  null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,          Boolean.FALSE, Boolean.FALSE, null, null,                null,                null, null, null},
834                 {SQLTokenizer.getKeyWord(SQLTokenizer.BIT),             Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.BIT) ),             Utils.getInteger(1),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,          Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
835                 {SQLTokenizer.getKeyWord(SQLTokenizer.TINYINT),         Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.TINYINT) ),         Utils.getInteger(3),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.TRUE,  Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
836                 {SQLTokenizer.getKeyWord(SQLTokenizer.BIGINT),          Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.BIGINT) ),          Utils.getInteger(19),             null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
837                 {SQLTokenizer.getKeyWord(SQLTokenizer.LONGVARBINARY),   Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.LONGVARBINARY) ),   Utils.getInteger(2147483647),        "0x", null, null,                                  Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
838                 {SQLTokenizer.getKeyWord(SQLTokenizer.VARBINARY),            Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.VARBINARY) ),             Utils.getInteger(65535),            "0x", null, "max length",                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
839                 {SQLTokenizer.getKeyWord(SQLTokenizer.BINARY),                     Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.BINARY) ),                       Utils.getInteger(65535),            "0x", null, "length",                         Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
840                 {SQLTokenizer.getKeyWord(SQLTokenizer.LONGVARCHAR),     Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.LONGVARCHAR) ),     Utils.getInteger(2147483647),        "'",  "'",  null,                                  Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
841                 {SQLTokenizer.getKeyWord(SQLTokenizer.LONGNVARCHAR),    Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.LONGNVARCHAR) ),    Utils.getInteger(2147483647),        "'",  "'",  null,                                  Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
842                 {SQLTokenizer.getKeyWord(SQLTokenizer.CHAR),                  Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.CHAR) ),                   Utils.getInteger(65535),           "'",  "'",  "length",                         Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
843                 {SQLTokenizer.getKeyWord(SQLTokenizer.NCHAR),                  Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.NCHAR) ),           Utils.getInteger(65535),           "'",  "'",  "length",                         Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
844                 {SQLTokenizer.getKeyWord(SQLTokenizer.NUMERIC),         Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.NUMERIC) ),         Utils.getInteger(38),             null, null, "precision,scale",         Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(38),null, null, null},
845                 {SQLTokenizer.getKeyWord(SQLTokenizer.DECIMAL),         Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.DECIMAL) ),         Utils.getInteger(38),             null, null, "precision,scale",         Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(38),null, null, null},
846                 {SQLTokenizer.getKeyWord(SQLTokenizer.MONEY),           Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.MONEY) ),           Utils.getInteger(19),             null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(4), Utils.getInteger(4), null, null, null},
847                 {SQLTokenizer.getKeyWord(SQLTokenizer.SMALLMONEY),      Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.SMALLMONEY) ),      Utils.getInteger(10),             null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(4), Utils.getInteger(4), null, null, null},
848                 {SQLTokenizer.getKeyWord(SQLTokenizer.INT),             Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.INT) ),             Utils.getInteger(10),             null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
849                 {SQLTokenizer.getKeyWord(SQLTokenizer.SMALLINT),        Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.SMALLINT) ),        Utils.getInteger(5),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
850                 {SQLTokenizer.getKeyWord(SQLTokenizer.FLOAT),                 Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.FLOAT) ),           Utils.getInteger(15),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
851                 {SQLTokenizer.getKeyWord(SQLTokenizer.REAL),                 Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.REAL) ),                  Utils.getInteger(7),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
852                 {SQLTokenizer.getKeyWord(SQLTokenizer.DOUBLE),          Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.DOUBLE) ),          Utils.getInteger(15),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), Boolean.FALSE, Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
853                 {SQLTokenizer.getKeyWord(SQLTokenizer.VARCHAR),         Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.VARCHAR) ),         Utils.getInteger(65535),           "'",  "'",  "max length",                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
854                 {SQLTokenizer.getKeyWord(SQLTokenizer.NVARCHAR),        Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.NVARCHAR) ),        Utils.getInteger(65535),           "'",  "'",  "max length",                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
855                 {SQLTokenizer.getKeyWord(SQLTokenizer.BOOLEAN),         Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.BOOLEAN) ),         Utils.getInteger(1),              null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,          Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(0), Utils.getInteger(0), null, null, null},
856                 {SQLTokenizer.getKeyWord(SQLTokenizer.DATE),                     Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.DATE) ),                             Utils.getInteger(10),                    "'",  "'",  null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
857                 {SQLTokenizer.getKeyWord(SQLTokenizer.TIME),                     Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.TIME) ),                             Utils.getInteger(8),                    "'",  "'",  null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
858                 {SQLTokenizer.getKeyWord(SQLTokenizer.TIMESTAMP),            Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.TIMESTAMP) ),           Utils.getInteger(23),                    "'",  "'",  null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, Utils.getInteger(3), Utils.getInteger(3), null, null, null},
859                 {SQLTokenizer.getKeyWord(SQLTokenizer.SMALLDATETIME),   Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.SMALLDATETIME) ),   Utils.getInteger(16),                    "'",  "'",  null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
860                 {SQLTokenizer.getKeyWord(SQLTokenizer.JAVA_OBJECT),            Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.JAVA_OBJECT) ),     Utils.getInteger(65535),            null, null, null,                                 Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
861                 {SQLTokenizer.getKeyWord(SQLTokenizer.BLOB),                    Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.BLOB) ),                     Utils.getInteger(2147483647),        "0x", null, null,                                  Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
862                 {SQLTokenizer.getKeyWord(SQLTokenizer.CLOB),                      Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.CLOB) ),                       Utils.getInteger(2147483647),        "'",  "'",  null,                                  Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
863                 {SQLTokenizer.getKeyWord(SQLTokenizer.NCLOB),                      Utils.getShort(SQLTokenizer.getSQLDataType( SQLTokenizer.NCLOB) ),               Utils.getInteger(2147483647),        "'",  "'",  null,                                  Utils.getShort(typeNullable), Boolean.FALSE, Utils.getShort(typeSearchable), null,                         Boolean.FALSE, Boolean.FALSE, null, null,                                  null,                                   null, null, null},
864                };
865                //TODO weitere Datentypen hinzufügen zur Liste
866                return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
867    }
868        
869        
870    public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException {
871                try {
872                        String[] colNames = {"TABLE_CAT", "TABLE_SCHEM", "TABLE_NAME", "NON_UNIQUE", "INDEX_QUALIFIER", "INDEX_NAME", "TYPE", "ORDINAL_POSITION", "COLUMN_NAME", "ASC_OR_DESC", "CARDINALITY", "PAGES", "FILTER_CONDITION"};
873                        Object[][] data   = con.getDatabase(false).getIndexInfo(con, table, unique);
874                        return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
875                } catch (Exception e) {
876                        throw Utils.createSQLException(e);
877                }
878    }
879        
880        
881    public boolean supportsResultSetType(int type) {
882                switch(type){
883                        case ResultSet.TYPE_FORWARD_ONLY:
884                        case ResultSet.TYPE_SCROLL_INSENSITIVE:
885                        case ResultSet.TYPE_SCROLL_SENSITIVE:
886                                return true;
887                }
888                return false;
889    }
890        
891        
892    public boolean supportsResultSetConcurrency(int type, int concurrency) {
893                if(type >= ResultSet.TYPE_FORWARD_ONLY && type <= ResultSet.TYPE_SCROLL_SENSITIVE &&
894                        concurrency >= ResultSet.CONCUR_READ_ONLY && concurrency <= ResultSet.CONCUR_UPDATABLE)
895                        return true;
896                return false;
897    }
898        
899        
900    public boolean ownUpdatesAreVisible(int type) {
901                return supportsResultSetType(type);
902    }
903        
904        
905    public boolean ownDeletesAreVisible(int type) {
906                return supportsResultSetType(type);
907    }
908 
909        
910        public boolean ownInsertsAreVisible(int type) {
911                return supportsResultSetType(type);
912    }
913        
914        
915    public boolean othersUpdatesAreVisible(int type) {
916                return supportsResultSetType(type);
917    }
918        
919        
920    public boolean othersDeletesAreVisible(int type) {
921                return supportsResultSetType(type);
922    }
923        
924        
925    public boolean othersInsertsAreVisible(int type) {
926                return supportsResultSetType(type);
927    }
928        
929        
930    public boolean updatesAreDetected(int type) {
931                return false;
932    }
933        
934        
935    public boolean deletesAreDetected(int type) {
936                return supportsResultSetType(type);
937    }
938        
939        
940    public boolean insertsAreDetected(int type) {
941                return supportsResultSetType(type);
942    }
943        
944        
945    public boolean supportsBatchUpdates() {
946                return true;
947    }
948        
949        
950    public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException {
951                String[] colNames = {"TYPE_CAT", "TYPE_SCHEM", "TYPE_NAME", "CLASS_NAME", "DATA_TYPE", "REMARKS"};        
952                Object[][] data   = new Object[0][];
953                return new SSResultSet( st, Utils.createMemoryCommandSelect( con, colNames, data));
954    }
955        
956        
957    public Connection getConnection() {
958            return con;
959    }
960        
961        
962    public boolean supportsSavepoints() {
963            return false;
964    }
965        
966        
967    public boolean supportsNamedParameters() {
968                return true;
969    }
970        
971        
972    public boolean supportsMultipleOpenResults() {
973                return true;
974    }
975        
976        
977    public boolean supportsGetGeneratedKeys() {
978                return true;
979    }
980        
981        
982    public ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws SQLException {
983        /**@todo: Implement this java.sql.DatabaseMetaData method*/
984        throw new java.lang.UnsupportedOperationException("Method getSuperTypes() not yet implemented.");
985    }
986    public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException {
987        /**@todo: Implement this java.sql.DatabaseMetaData method*/
988        throw new java.lang.UnsupportedOperationException("Method getSuperTables() not yet implemented.");
989    }
990    public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException {
991        /**@todo: Implement this java.sql.DatabaseMetaData method*/
992        throw new java.lang.UnsupportedOperationException("Method getAttributes() not yet implemented.");
993    }
994        
995        
996    public boolean supportsResultSetHoldability(int holdability) {
997                return true;
998    }
999        
1000        
1001    public int getResultSetHoldability() {
1002                return ResultSet.HOLD_CURSORS_OVER_COMMIT;
1003    }
1004        
1005        
1006    public int getDatabaseMajorVersion() {
1007            return getDriverMajorVersion();
1008    }
1009        
1010        
1011    public int getDatabaseMinorVersion() {
1012                return getDriverMinorVersion();
1013    }
1014        
1015        
1016    public int getJDBCMajorVersion() {
1017            return 3;
1018    }
1019        
1020        
1021    public int getJDBCMinorVersion() {
1022            return 0;
1023    }
1024        
1025        
1026    public int getSQLStateType() {
1027                return sqlStateSQL99;
1028    }
1029        
1030        
1031    public boolean locatorsUpdateCopy() {
1032                return false;
1033    }
1034        
1035        
1036    public boolean supportsStatementPooling() {
1037                return false;
1038    }
1039}

[all classes][smallsql.database]
EMMA 2.1.5320 (stable) (C) Vladimir Roubtsov