Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * $Id$
   *
   * Firebird Open Source JavaEE Connector - JDBC Driver
   *
   * Distributable under LGPL license.
   * You may obtain a copy of the License at http://www.gnu.org/copyleft/lgpl.html
   *
   * This program is distributed in the hope that it will be useful,
  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  * LGPL License for more details.
  *
  * This file was created by members of the firebird development team.
  * All individual contributions remain the Copyright (C) of those
  * individuals.  Contributors to this file are either listed here or
  * can be obtained from a source control history command.
  *
  * All rights reserved.
  */
 package org.firebirdsql.jdbc.oo;
 
 
 
 public class OODatabaseMetaData extends FBDatabaseMetaData {
 
     public OODatabaseMetaData(AbstractConnection cthrows GDSException {
         super(c);
     }
 
     public OODatabaseMetaData(GDSHelper gdsHelper) {
         super(gdsHelper);
     }
 
     private static final String DEFAULT_SCHEMA = "DEFAULT";
 
     public ResultSet getSchemas() throws SQLException {
         XSQLVAR[] xsqlvars = new XSQLVAR[1];
 
         xsqlvars[0] = new XSQLVAR();
         xsqlvars[0]. = .;
         xsqlvars[0]. = 31;
         xsqlvars[0]. = "TABLE_SCHEM";
         xsqlvars[0]. = "TABLESCHEMAS";
 
         ArrayList rows = new ArrayList(1);
         rows.add(new byte[][] { getBytes() });
 
         return new FBResultSet(xsqlvarsrows);
     }
 
     public ResultSet getTables(String catalogString schemaPattern,
             String tableNamePatternString[] typesthrows SQLException {
 
         if (.equals(schemaPattern)) schemaPattern = null;
 
         FBResultSet rs = (FBResultSetsuper.getTables(catalogschemaPattern,
                 tableNamePatterntypes);
 
         if (rs.next()) {
             rs.beforeFirst();
             return rs;
         }
 
         tableNamePattern = tableNamePattern.toUpperCase();
 
         return super.getTables(catalogschemaPatterntableNamePatterntypes);
     }
 
     public ResultSet getColumns(String catalogString schemaPattern,
             String tableNamePatternString columnNamePattern)
             throws SQLException {
 
         if (.equals(schemaPattern)) schemaPattern = null;
 
         FBResultSet rs = (FBResultSetsuper.getColumns(catalogschemaPattern,
                 tableNamePatterncolumnNamePattern);
 
         if (rs.next()) {
             rs.beforeFirst();
             return rs;
         }
 
         String upperTableNamePattern = tableNamePattern.toUpperCase();
         String upperColumnNamePattern = columnNamePattern.toUpperCase();
 
         rs = (FBResultSetsuper.getColumns(catalogschemaPattern,
                 upperTableNamePatterncolumnNamePattern);
 
        if (rs.next()) {
            rs.beforeFirst();
            return rs;
        }
        rs = (FBResultSetsuper.getColumns(catalogschemaPattern,
                tableNamePatternupperColumnNamePattern);
        if (rs.next()) {
            rs.beforeFirst();
            return rs;
        }
        return super.getColumns(catalogschemaPatternupperTableNamePattern,
                upperColumnNamePattern);
    }
    private static final String GET_TABLE_PRIVILEGES_START_1 =
            "SELECT " +
            "null as TABLE_CAT, " +
            "null as TABLE_SCHEM, " +
            "RDB$RELATION_NAME as TABLE_NAME, " +
            "RDB$GRANTOR as GRANTOR, " +
            "RDB$USER as GRANTEE, " +
            "RDB$PRIVILEGE as PRIVILEGE, " +
            "RDB$GRANT_OPTION as IS_GRANTABLE " +
            "FROM RDB$USER_PRIVILEGES " +
            "WHERE ";
    private static final String GET_TABLE_PRIVILEGES_END_1 =
            " CURRENT_USER IN (RDB$USER, RDB$GRANTOR) AND RDB$FIELD_NAME IS NULL AND RDB$OBJECT_TYPE = 0";
    private static final String GET_TABLE_PRIVILEGES_START_2 =
            "UNION " +
            "SELECT " +
            "null as TABLE_CAT, " +
            "null as TABLE_SCHEM, " +
            "RDB$RELATION_NAME as TABLE_NAME, " +
            "RDB$GRANTOR as GRANTOR, " +
            "CURRENT_USER as GRANTEE, " +
            "RDB$PRIVILEGE as PRIVILEGE, " +
            "RDB$GRANT_OPTION as IS_GRANTABLE " +
            "FROM RDB$USER_PRIVILEGES " +
            "WHERE ";
    private static final String GET_TABLE_PRIVILEGES_END_2 =
            " RDB$USER IN (CURRENT_ROLE, 'PUBLIC') AND RDB$FIELD_NAME IS NULL AND RDB$OBJECT_TYPE = 0 " +
            "ORDER BY 3, 6";
    public ResultSet getTablePrivileges(String catalogString schemaPattern,
            String tableNamePatternthrows SQLException {
        if (.equals(schemaPattern)) schemaPattern = null;
        checkCatalogAndSchema(catalogschemaPattern);
        tableNamePattern = stripQuotes(stripEscape(tableNamePattern), true);
        XSQLVAR[] xsqlvars = buildTablePrivilegeRSMetaData();
        Clause tableClause1 = new Clause("RDB$RELATION_NAME"tableNamePattern);
        Clause tableClause2 = new Clause("RDB$RELATION_NAME"tableNamePattern);
        String sql = ;
        sql += tableClause1.getCondition();
        sql += ;
        sql += ;
        sql += tableClause2.getCondition();
        sql += ;
        // check the original case identifiers first
        ArrayList params = new ArrayList();
        if (!tableClause1.getCondition().equals("")) {
            params.add(tableClause1.getOriginalCaseValue());
        }
        if (!tableClause2.getCondition().equals("")) {
            params.add(tableClause2.getOriginalCaseValue());
        }
        ResultSet rs = doQuery(sqlparams);
        // if nothing found, check the uppercased identifiers
        if (!rs.next()) {
            params.clear();
            if (!tableClause1.getCondition().equals("")) {
                params.add(tableClause1.getValue());
            }
            if (!tableClause2.getCondition().equals("")) {
                params.add(tableClause2.getValue());
            }
            rs = doQuery(sqlparams);
            // if nothing found, return an empty result set
            if (!rs.next())
                return new FBResultSet(xsqlvarsnew ArrayList());
        }
        return processTablePrivileges(xsqlvarsrs);
    }
New to GrepCode? Check out our FAQ X