Main Page | Packages | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

VirtualDatabaseDynamicMetaData.java

00001 /**
00002  * C-JDBC: Clustered JDBC.
00003  * Copyright (C) 2002-2005 French National Institute For Research In Computer
00004  * Science And Control (INRIA).
00005  * Contact: c-jdbc@objectweb.org
00006  * 
00007  * This library is free software; you can redistribute it and/or modify it
00008  * under the terms of the GNU Lesser General Public License as published by the
00009  * Free Software Foundation; either version 2.1 of the License, or any later
00010  * version.
00011  * 
00012  * This library is distributed in the hope that it will be useful, but WITHOUT
00013  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00014  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License
00015  * for more details.
00016  * 
00017  * You should have received a copy of the GNU Lesser General Public License
00018  * along with this library; if not, write to the Free Software Foundation,
00019  * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
00020  *
00021  * Initial developer(s): Julie Marguerite.
00022  * Contributor(s): Emmanuel Cecchet, Nicolas Modrzyk.
00023  */
00024 
00025 package org.objectweb.cjdbc.controller.virtualdatabase;
00026 
00027 import java.sql.SQLException;
00028 import java.sql.Types;
00029 import java.util.ArrayList;
00030 
00031 import org.objectweb.cjdbc.common.log.Trace;
00032 import org.objectweb.cjdbc.common.sql.schema.DatabaseColumn;
00033 import org.objectweb.cjdbc.common.sql.schema.DatabaseProcedure;
00034 import org.objectweb.cjdbc.common.sql.schema.DatabaseProcedureParameter;
00035 import org.objectweb.cjdbc.common.sql.schema.DatabaseSchema;
00036 import org.objectweb.cjdbc.common.sql.schema.DatabaseTable;
00037 import org.objectweb.cjdbc.common.users.VirtualDatabaseUser;
00038 import org.objectweb.cjdbc.controller.authentication.AuthenticationManager;
00039 import org.objectweb.cjdbc.controller.requestmanager.RequestManager;
00040 import org.objectweb.cjdbc.driver.DriverResultSet;
00041 import org.objectweb.cjdbc.driver.Field;
00042 
00043 /**
00044  * Class that gathers the dynamic metadata for a virtual database, that means
00045  * all the metadata subject to changes during the lifetime of the application.
00046  * 
00047  * @author <a href="mailto:Julie.Marguerite@inria.fr">Julie.Marguerite </a>
00048  * @author <a href="mailto:Emmanuel.Cecchet@inria.fr">Emmanuel Cecchet </a>
00049  * @author <a href="mailto:Nicolas.Modrzyk@inrialpes.fr">Nicolas Modrzyk </a>
00050  */
00051 public class VirtualDatabaseDynamicMetaData
00052 {
00053 
00054   /** Detect a null valu for int */
00055   public static final int NULL_VALUE = -999;
00056 
00057   private String          vdbName;
00058   private RequestManager  requestManager;
00059 
00060   /** Logger instance. */
00061   private Trace           logger     = null;
00062 
00063   /**
00064    * Reference the database for this metadata. Do not fetch any data at this
00065    * time
00066    * 
00067    * @param database to link this metadata to
00068    */
00069   public VirtualDatabaseDynamicMetaData(VirtualDatabase database)
00070   {
00071     this.vdbName = database.getVirtualDatabaseName();
00072     requestManager = database.getRequestManager();
00073     if (requestManager == null)
00074       throw new RuntimeException(
00075           "Null request manager in VirtualDatabaseMetaData");
00076 
00077     this.logger = Trace
00078         .getLogger("org.objectweb.cjdbc.controller.virtualdatabase.VirtualDatabaseWorkerThread."
00079             + vdbName + ".metadata");
00080   }
00081 
00082   private DatabaseSchema getDatabaseSchema()
00083   {
00084     try
00085     { // Try to get a fresh schema
00086       return requestManager.getVirtualDatabase()
00087           .getDatabaseSchemaFromActiveBackendsAndRefreshDatabaseProductNames();
00088     }
00089     catch (SQLException e)
00090     { // Default to what we statically have in the RequestManager
00091       return requestManager.getDatabaseSchema();
00092     }
00093   }
00094 
00095   /**
00096    * Gets a description of a table's primary key columns. They are ordered by
00097    * COLUMN_NAME.
00098    * 
00099    * @see java.sql.DatabaseMetaData#getPrimaryKeys
00100    */
00101   public java.sql.ResultSet getPrimaryKeys(String catalog, String schema,
00102       String table)
00103   {
00104     if (logger.isDebugEnabled())
00105       logger.debug("Getting getPrimaryKeys for " + vdbName);
00106     DatabaseSchema dbs = this.getDatabaseSchema();
00107     if (dbs == null)
00108       return null;
00109 
00110     if (table == null)
00111       table = "%"; // if null is passed then
00112     // select all tables
00113 
00114     // Build the ResultSet
00115     ArrayList tables = dbs.getTables();
00116     int size = tables.size();
00117     ArrayList data = new ArrayList();
00118 
00119     for (int i = 0; i < size; i++)
00120     {
00121       DatabaseTable t = (DatabaseTable) tables.get(i);
00122       if (table.equals("%") || table.equals(t.getName()))
00123       {
00124         ArrayList columns = t.getColumns();
00125         for (int j = 0; j < columns.size(); j++)
00126         {
00127           DatabaseColumn c = (DatabaseColumn) columns.get(j);
00128           if (c.isUnique())
00129           {
00130             if (logger.isDebugEnabled())
00131               logger.debug("Found primary key" + c.getName());
00132             Object[] row = new Object[6];
00133             row[0] = vdbName; // TABLE_CAT
00134             row[1] = null; // TABLE_SCHEM
00135             row[2] = t.getName(); // TABLE_NAME
00136             row[3] = c.getName(); // COLUMN_NAME
00137             row[4] = new Integer(c.getType()); // KEY_SEQ
00138             row[5] = c.getName(); // PK_NAME
00139             data.add(row);
00140           }
00141           else
00142           {
00143             if (logger.isDebugEnabled())
00144               logger.debug("Key " + c.getName() + " is not unique");
00145           }
00146         }
00147       }
00148     }
00149     DriverResultSet rs = new DriverResultSet(getPrimaryKeysFields, data);
00150     return rs;
00151   }
00152 
00153   /**
00154    * @see java.sql.DatabaseMetaData#getColumns
00155    */
00156   public DriverResultSet getColumns(String catalog, String schemaPattern,
00157       String tableNamePattern, String columnNamePattern)
00158   {
00159     if (logger.isDebugEnabled())
00160       logger.debug("Getting columns for " + vdbName);
00161     DatabaseSchema dbs = this.getDatabaseSchema();
00162     if (dbs == null)
00163       return null;
00164 
00165     if (tableNamePattern == null)
00166       tableNamePattern = "%"; // if null is passed then select
00167     // all tables
00168 
00169     if (columnNamePattern == null)
00170       columnNamePattern = "%"; // if null is passed then
00171 
00172     // Build the ResultSet
00173     ArrayList tables = dbs.getTables();
00174     int size = tables.size();
00175     ArrayList data = new ArrayList();
00176 
00177     for (int i = 0; i < size; i++)
00178     {
00179       DatabaseTable t = (DatabaseTable) tables.get(i);
00180 
00181       if (tableNamePattern.equals("%") || tableNamePattern.equals(t.getName()))
00182       {
00183         if (logger.isDebugEnabled())
00184           logger.debug("Found table " + t.getName());
00185         ArrayList columns = t.getColumns();
00186         for (int j = 0; j < columns.size(); j++)
00187         {
00188           DatabaseColumn c = (DatabaseColumn) columns.get(j);
00189           if (columnNamePattern.equals("%")
00190               || columnNamePattern.equals(c.getName()))
00191           {
00192             if (logger.isDebugEnabled())
00193               logger.debug("Found column " + c.getName());
00194             Object[] row = new Object[18];
00195             row[0] = vdbName; // TABLE_CAT
00196             row[1] = null; // TABLE_SCHEM
00197             row[2] = t.getName(); // TABLE_NAME
00198             row[3] = c.getName(); // COLUMN_NAME
00199             row[4] = new Integer(c.getType()); // DATA_TYPE
00200             row[5] = null; // TYPE_NAME
00201             row[6] = null; // COLUMN_SIZE
00202             row[7] = null; // BUFFER_LENGTH
00203             row[8] = null; // DECIMAL_DIGITS
00204             row[9] = null; // NUM_PREC_RADIX
00205             row[10] = null; // NULLABLE
00206             row[11] = null; // REMARKS
00207             row[12] = null; // COLUMN_DEF
00208             row[13] = null; // SQL_DATA_TYPE
00209             row[14] = null; // SQL_DATETIME_SUB
00210             row[15] = null; // CHAR_OCTET_LENGTH
00211             row[16] = null; // ORDINAL_POSITION
00212             row[17] = ""; // IS_NULLABLE
00213             data.add(row);
00214           }
00215         }
00216       }
00217     }
00218     DriverResultSet rs = new DriverResultSet(getColumnsFields, data);
00219     return rs;
00220   }
00221 
00222   /**
00223    * @see java.sql.DatabaseMetaData#getSchemas()
00224    *      <p>
00225    *      TODO: what do we put in schemas ? The JDBC reference and API is
00226    *      somewhat unclear !
00227    */
00228   public Object getSchemas()
00229   {
00230     ArrayList data = new ArrayList();
00231     DriverResultSet rs = new DriverResultSet(getSchemasFields, data);
00232     return rs;
00233   }
00234 
00235   /**
00236    * @see org.objectweb.cjdbc.driver.DatabaseMetaData#getTables(String, String,
00237    *      String, String[])
00238    */
00239   public DriverResultSet getTables(String catalog, String schemaPattern,
00240       String tableNamePattern, String[] types)
00241   {
00242     DatabaseSchema dbs = this.getDatabaseSchema();
00243     if (dbs == null)
00244       return null;
00245 
00246     if (tableNamePattern == null)
00247       // if null is passed then select all tables
00248       tableNamePattern = "%";
00249 
00250     // Build the ResultSet
00251     ArrayList tables = dbs.getTables();
00252     int size = tables.size();
00253     ArrayList data = new ArrayList();
00254     for (int i = 0; i < size; i++)
00255     {
00256       DatabaseTable t = (DatabaseTable) tables.get(i);
00257       if (tableNamePattern.equals("%")
00258           || t.getName().indexOf(tableNamePattern) != -1)
00259       {
00260         if (logger.isDebugEnabled())
00261           logger.debug("Found table " + t.getName());
00262         Object[] row = new Object[10];
00263         row[0] = vdbName; // TABLE_CAT
00264         row[1] = null; // TABLE_SCHEM
00265         row[2] = t.getName(); // TABLE_NAME
00266         row[3] = "TABLE"; // TABLE_TYPE
00267         row[4] = null; // REMARKS
00268         row[5] = null; // TYPE_CAT
00269         row[6] = null; // TYPE_SCHEM
00270         row[7] = null; // TYPE_NAME
00271         row[8] = null; // SELF_REFERENCING_COL_NAME
00272         row[9] = "SYSTEM"; // REF_GENERATION
00273         data.add(row);
00274       }
00275     }
00276     DriverResultSet rs = new DriverResultSet(getTablesFields, data);
00277     return rs;
00278   }
00279 
00280   /**
00281    * @see org.objectweb.cjdbc.driver.DatabaseMetaData#getProcedures
00282    */
00283   public DriverResultSet getProcedures(String catalog, String schemaPattern,
00284       String procedureNamePattern)
00285   {
00286     DatabaseSchema dbs = this.getDatabaseSchema();
00287     if (dbs == null)
00288       return null;
00289 
00290     if (procedureNamePattern == null)
00291       procedureNamePattern = "%"; // if null is passed then
00292     // select all procedures
00293 
00294     // Build the ResultSet
00295     ArrayList procedures = dbs.getProcedures();
00296     int size = procedures.size();
00297     ArrayList data = new ArrayList();
00298     for (int i = 0; i < size; i++)
00299     {
00300       DatabaseProcedure t = (DatabaseProcedure) procedures.get(i);
00301       if (procedureNamePattern.equals("%")
00302           || procedureNamePattern.equals(t.getName()))
00303       {
00304         if (logger.isDebugEnabled())
00305           logger.debug("Found procedure " + t.getName());
00306         Object[] row = new Object[8];
00307         row[0] = vdbName; // PROCEDURE_CAT
00308         row[1] = null; // PROCEDURE_SCHEM
00309         row[2] = t.getName(); // PROCEDURE_NAME
00310         row[3] = null; // reserved for future use
00311         row[4] = null; // reserved for future use
00312         row[5] = null; // reserved for future use
00313         row[6] = t.getRemarks(); // REMARKS
00314         row[7] = new Integer(t.getProcedureType()); // PROCEDURE_TYPE
00315         data.add(row);
00316       }
00317     }
00318     DriverResultSet rs = new DriverResultSet(getProceduresFields, data);
00319     return rs;
00320   }
00321 
00322   /**
00323    * get list of Catalogs (database)
00324    * 
00325    * @param list of database from the controller
00326    * @return <code>ResultSet</code> with list of catalogs
00327    */
00328   public DriverResultSet getCatalogs(ArrayList list)
00329   {
00330     int size = list.size();
00331     ArrayList data = new ArrayList(size);
00332     for (int i = 0; i < size; i++)
00333     {
00334       Object[] row = new Object[1];
00335       row[0] = (String) list.get(i);
00336       data.add(row);
00337     }
00338     DriverResultSet rs = new DriverResultSet(getCatalogsFields, data);
00339     return rs;
00340   }
00341 
00342   /**
00343    * @see org.objectweb.cjdbc.driver.DatabaseMetaData#getTableTypes
00344    */
00345   public DriverResultSet getTableTypes()
00346   {
00347     ArrayList list = new ArrayList(1);
00348     Object[] row = new Object[1];
00349     row[0] = "TABLE";
00350     list.add(row);
00351     DriverResultSet rs = new DriverResultSet(getTableTypesFields, list);
00352     return rs;
00353   }
00354 
00355   /**
00356    * @see org.objectweb.cjdbc.driver.DatabaseMetaData#getTableTypes
00357    */
00358   public DriverResultSet getTablePrivileges(String catalog,
00359       String schemaPattern, String tableNamePattern)
00360   {
00361     AuthenticationManager manager = requestManager.getVirtualDatabase()
00362         .getAuthenticationManager();
00363     DatabaseSchema dbs = this.getDatabaseSchema();
00364     if (dbs == null)
00365       return null;
00366 
00367     if (tableNamePattern == null)
00368       // if null is passed then select all tables
00369       tableNamePattern = "%";
00370 
00371     ArrayList tables = dbs.getTables();
00372     int size = tables.size();
00373     ArrayList data = new ArrayList();
00374 
00375     ArrayList virtualLogins = manager.getVirtualLogins();
00376     int vsize = virtualLogins.size();
00377     VirtualDatabaseUser vu;
00378 
00379     for (int i = 0; i < size; i++)
00380     {
00381       DatabaseTable t = (DatabaseTable) tables.get(i);
00382       if (tableNamePattern.equals("%") || tableNamePattern.equals(t.getName()))
00383       {
00384         for (int j = 0; j < vsize; j++)
00385         {
00386           vu = (VirtualDatabaseUser) virtualLogins.get(0);
00387 
00388           if (logger.isDebugEnabled())
00389             logger.debug("Found privilege for user:" + vu.getLogin()
00390                 + " on table:" + t.getName());
00391           Object[] row = new Object[7];
00392           row[0] = vdbName; // table cat
00393           row[1] = null; // table schema
00394           row[2] = t.getName(); // table name
00395           row[3] = null; // grantor
00396           row[4] = vu.getLogin(); // grantee
00397           row[5] = "UPDATE"; // privilege
00398           row[6] = "NO"; //IS_GRANTABLE
00399           data.add(row);
00400         }
00401       }
00402     }
00403 
00404     DriverResultSet rs = new DriverResultSet(getTablePrivilegesFields, data);
00405     return rs;
00406   }
00407 
00408   /**
00409    * @see org.objectweb.cjdbc.driver.DatabaseMetaData#getProcedureColumns
00410    */
00411   public DriverResultSet getProcedureColumns(String catalog,
00412       String schemaPattern, String procedureNamePattern,
00413       String columnNamePattern)
00414   {
00415     DatabaseSchema dbs = this.getDatabaseSchema();
00416     if (dbs == null)
00417       return null;
00418 
00419     if (procedureNamePattern == null)
00420       procedureNamePattern = "%";
00421 
00422     if (columnNamePattern == null)
00423       columnNamePattern = "%";
00424 
00425     //Build the ResultSet
00426     ArrayList procedures = dbs.getProcedures();
00427     int size = procedures.size();
00428     ArrayList data = new ArrayList();
00429     for (int i = 0; i < size; i++)
00430     {
00431       DatabaseProcedure t = (DatabaseProcedure) procedures.get(i);
00432       if (procedureNamePattern.equals("%")
00433           || procedureNamePattern.equals(t.getName()))
00434       {
00435         if (logger.isDebugEnabled())
00436           logger.debug("Found matching procedure " + t.getName());
00437 
00438         ArrayList params = t.getParameters();
00439         int sizep = params.size();
00440         DatabaseProcedureParameter param;
00441         for (int k = 0; k < sizep; k++)
00442         {
00443           param = (DatabaseProcedureParameter) params.get(k);
00444           if (columnNamePattern.equals("%")
00445               || columnNamePattern.equals(t.getName()))
00446           {
00447             if (logger.isDebugEnabled())
00448               logger.debug("Found matching procedure parameter"
00449                   + param.getName());
00450 
00451             Object[] row = new Object[13];
00452             row[0] = vdbName; // PROCEDURE_CAT
00453             row[1] = null; // PROCEDURE_SCHEM
00454             row[2] = t.getName(); // PROCEDURE_NAME
00455             row[3] = param.getName(); // COLUMN_NAME
00456             row[4] = new Integer(param.getColumnType()); // COLUMN_TYPE
00457             row[5] = new Integer(param.getDataType()); // DATA_TYPE
00458             row[6] = param.getTypeName(); // TYPE_NAME
00459             row[7] = new Float(param.getPrecision()); // PRECISION
00460             row[8] = new Integer(param.getLength()); // LENGTH
00461             row[9] = new Integer(param.getScale()); // SCALE
00462             row[10] = new Integer(param.getRadix()); // RADIX
00463             row[11] = new Integer(param.getNullable()); // NULLABLE
00464             row[12] = param.getRemarks();
00465 
00466             data.add(row);
00467           }
00468         }
00469       }
00470     }
00471     DriverResultSet rs = new DriverResultSet(getProcedureColumnsFields, data);
00472     return rs;
00473   }
00474 
00475   private static Field[] getSchemasFields          = new Field[]{new Field(
00476                                                        "TABLE_SCHEM",
00477                                                        "TABLE_SCHEM", 9,
00478                                                        Types.VARCHAR,
00479                                                        "VARCHAR", "String")};
00480 
00481   private static Field[] getProcedureColumnsFields = new Field[]{
00482       new Field("PROCEDURE_CAT", "PROCEDURE_CAT", 9, Types.VARCHAR, "VARCHAR",
00483           "String"),
00484       new Field("PROCEDURE_SCHEM", "PROCEDURE_SCHEM", 10, Types.VARCHAR,
00485           "VARCHAR", "String"),
00486       new Field("PROCEDURE_NAME", "PROCEDURE_NAME", 10, Types.VARCHAR,
00487           "VARCHAR", "String"),
00488       new Field("COLUMN_NAME", "COLUMN_NAME", 10, Types.VARCHAR, "VARCHAR",
00489           "String"),
00490       new Field("COLUMN_TYPE", "COLUMN_TYPE", 10, Types.SMALLINT, "SMALLINT",
00491           "Short"),
00492       new Field("DATA_TYPE", "DATA_TYPE", 10, Types.SMALLINT, "SMALLINT",
00493           "Short"),
00494       new Field("TYPE_NAME", "TYPE_NAME", 10, Types.VARCHAR, "VARCHAR",
00495           "String"),
00496       new Field("PRECISION", "PRECISION", 10, Types.FLOAT, "FLOAT", "Float"),
00497       new Field("LENGTH", "LENGTH", 10, Types.INTEGER, "INTEGER", "Integer"),
00498       new Field("SCALE", "SCALE", 10, Types.SMALLINT, "SMALLINT", "Short"),
00499       new Field("RADIX", "RADIX", 10, Types.SMALLINT, "SMALLINT", "Short"),
00500       new Field("NULLABLE", "NULLABLE", 10, Types.SMALLINT, "SMALLINT", "Short"),
00501       new Field("REMARKS", "REMARKS", 10, Types.VARCHAR, "VARCHAR", "String")};
00502 
00503   private static Field[] getCatalogsFields         = new Field[]{new Field(
00504                                                        "TABLE_CAT",
00505                                                        "TABLE_CAT", 9,
00506                                                        Types.VARCHAR,
00507                                                        "VARCHAR", "String")};
00508 
00509   private static Field[] getTableTypesFields       = new Field[]{new Field(
00510                                                        "TABLE_TYPE",
00511                                                        "TABLE_TYPE", 9,
00512                                                        Types.VARCHAR,
00513                                                        "VARCHAR", "String")};
00514 
00515   private static Field[] getTablePrivilegesFields  = new Field[]{
00516       new Field("TABLE_CAT", "TABLE_CAT", 9, Types.VARCHAR, "VARCHAR", "String"),
00517       new Field("TABLE_SCHEM", "TABLE_SCHEM", 10, Types.VARCHAR, "VARCHAR",
00518           "String"),
00519       new Field("TABLE_NAME", "TABLE_NAME", 10, Types.VARCHAR, "VARCHAR",
00520           "String"),
00521       new Field("GRANTOR", "GRANTOR", 10, Types.VARCHAR, "VARCHAR", "String"),
00522       new Field("GRANTEE", "GRANTEE", 10, Types.VARCHAR, "VARCHAR", "String"),
00523       new Field("PRIVILEGE", "PRIVILEGE", 10, Types.VARCHAR, "VARCHAR",
00524           "String"),
00525       new Field("IS_GRANTABLE", "IS_GRANTABLE", 10, Types.VARCHAR, "VARCHAR",
00526           "String"),                               };
00527 
00528   //  # TABLE_CAT String => table catalog (may be null)
00529   //  # TABLE_SCHEM String => table schema (may be null)
00530   //  # TABLE_NAME String => table name
00531   //  # GRANTOR => grantor of access (may be null)
00532   //  # GRANTEE String => grantee of access
00533   //  # PRIVILEGE String => name of access (SELECT, INSERT, UPDATE, REFRENCES,
00534   // ...)
00535   //  # IS_GRANTABLE String => "YES" if grantee is permitted to grant to othe
00536 
00537   private static Field[] getProceduresFields       = new Field[]{
00538       new Field("PROCEDURE_CAT", "PROCEDURE_CAT", 9, Types.VARCHAR, "VARCHAR",
00539           "String"),
00540       new Field("PROCEDURE_SCHEM", "PROCEDURE_SCHEM", 10, Types.VARCHAR,
00541           "VARCHAR", "String"),
00542       new Field("PROCEDURE_NAME", "PROCEDURE_NAME", 10, Types.VARCHAR,
00543           "VARCHAR", "String"),
00544       new Field("", "", 0, Types.VARCHAR, "VARCHAR", "String"),
00545       new Field("", "", 0, Types.VARCHAR, "VARCHAR", "String"),
00546       new Field("", "", 0, Types.VARCHAR, "VARCHAR", "String"),
00547       new Field("REMARKS", "REMARKS", 10, Types.VARCHAR, "VARCHAR", "String"),
00548       new Field("PROCEDURE_TYPE", "PROCEDURE_TYPE", 10, Types.SMALLINT,
00549           "SMALLINT", "Short")                     };
00550 
00551   //
00552   //# TABLE_CAT String => table catalog (may be null)
00553   //# TABLE_SCHEM String => table schema (may be null)
00554   //# TABLE_NAME String => table name
00555   //# COLUMN_NAME String => column name
00556   //# KEY_SEQ short => sequence number within primary key
00557   //# PK_NAME String => primary key name (may be null)
00558   //
00559 
00560   private static Field[] getPrimaryKeysFields      = new Field[]{
00561       new Field("TABLE_CAT", "TABLE_CAT", 9, Types.VARCHAR, "VARCHAR", "String"),
00562       new Field("TABLE_SCHEM", "TABLE_SCHEM", 10, Types.VARCHAR, "VARCHAR",
00563           "String"),
00564       new Field("TABLE_NAME", "TABLE_NAME", 10, Types.VARCHAR, "VARCHAR",
00565           "String"),
00566       new Field("COLUMN_NAME", "COLUMN_NAME", 10, Types.VARCHAR, "VARCHAR",
00567           "String"),
00568       new Field("KEY_SEQ", "KEY_SEQ", 10, Types.SMALLINT, "SMALLINT", "Short"),
00569       new Field("PK_NAME", "PK_NAME", 10, Types.VARCHAR, "VARCHAR", "String")};
00570 
00571   /** @see java.sql.DatabaseMetaData#getColumns */
00572   private static Field[] getColumnsFields          = new Field[]{
00573       new Field("TABLE_CAT", "TABLE_CAT", 9, Types.VARCHAR, "VARCHAR", "String"),
00574       new Field("TABLE_SCHEM", "TABLE_SCHEM", 10, Types.VARCHAR, "VARCHAR",
00575           "String"),
00576       new Field("TABLE_NAME", "TABLE_NAME", 10, Types.VARCHAR, "VARCHAR",
00577           "String"),
00578       new Field("COLUMN_NAME", "COLUMN_NAME", 10, Types.VARCHAR, "VARCHAR",
00579           "String"),
00580       new Field("DATA_TYPE", "DATA_TYPE", 10, Types.SMALLINT, "SMALLINT",
00581           "Short"),
00582       new Field("TYPE_NAME", "TYPE_NAME", 10, Types.VARCHAR, "VARCHAR",
00583           "String"),
00584       new Field("COLUMN_SIZE", "COLUMN_SIZE", 10, Types.INTEGER, "INTEGER",
00585           "Integer"),
00586       new Field("BUFFER_LENGTH", "BUFFER_LENGTH", 10, Types.INTEGER, "INTEGER",
00587           "Integer"),
00588       new Field("DECIMAL_DIGITS", "DECIMAL_DIGITS", 10, Types.INTEGER,
00589           "INTEGER", "Integer"),
00590       new Field("NUM_PREC_RADIX", "NUM_PREC_RADIX", 10, Types.INTEGER,
00591           "INTEGER", "Integer"),
00592       new Field("NULLABLE", "NULLABLE", 10, Types.INTEGER, "INTEGER", "Integer"),
00593       new Field("REMARKS", "REMARKS", 10, Types.VARCHAR, "VARCHAR", "String"),
00594       new Field("COLUMN_DEF", "COLUMN_DEF", 10, Types.VARCHAR, "VARCHAR",
00595           "String"),
00596       new Field("SQL_DATA_TYPE", "SQL_DATA_TYPE", 10, Types.INTEGER, "INTEGER",
00597           "Integer"),
00598       new Field("SQL_DATETIME_SUB", "SQL_DATETIME_SUB", 10, Types.INTEGER,
00599           "INTEGER", "Integer"),
00600       new Field("CHAR_OCTET_LENGTH", "CHAR_OCTET_LENGTH", 10, Types.INTEGER,
00601           "INTEGER", "Integer"),
00602       new Field("ORDINAL_POSITION", "ORDINAL_POSITION", 10, Types.INTEGER,
00603           "INTEGER", "Integer"),
00604       new Field("IS_NULLABLE", "IS_NULLABLE", 10, Types.VARCHAR, "VARCHAR",
00605           "String")                                };
00606 
00607   /** @see java.sql.DatabaseMetaData#getTables(String, String, String, String[]) */
00608   private static Field[] getTablesFields           = new Field[]{
00609       new Field("TABLE_CAT", "TABLE_CAT", 9, Types.VARCHAR, "VARCHAR", "String"),
00610       new Field("TABLE_SCHEM", "TABLE_SCHEM", 10, Types.VARCHAR, "VARCHAR",
00611           "String"),
00612       new Field("TABLE_NAME", "TABLE_NAME", 10, Types.VARCHAR, "VARCHAR",
00613           "String"),
00614       new Field("TABLE_TYPE", "TABLE_TYPE", 10, Types.VARCHAR, "VARCHAR",
00615           "String"),
00616       new Field("REMARKS", "REMARKS", 10, Types.VARCHAR, "VARCHAR", "String"),
00617       new Field("TYPE_CAT", "TYPE_CAT", 10, Types.VARCHAR, "VARCHAR", "String"),
00618       new Field("TYPE_SCHEM", "TYPE_SCHEM", 10, Types.VARCHAR, "VARCHAR",
00619           "String"),
00620       new Field("TYPE_NAME", "TYPE_NAME", 10, Types.VARCHAR, "VARCHAR",
00621           "String"),
00622       new Field("SELF_REFERENCING_COL_NAME", "SELF_REFERENCING_COL_NAME", 25,
00623           Types.VARCHAR, "VARCHAR", "String"),
00624       new Field("REF_GENERATION", "REF_GENERATION", 15, Types.VARCHAR,
00625           "VARCHAR", "String")                     };
00626 
00627 }

Generated on Mon Apr 11 22:01:35 2005 for C-JDBC by  doxygen 1.3.9.1