All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.couchbase.CBDatabaseMetaData Maven / Gradle / Ivy


/*
 * //  Copyright (c) 2015 Couchbase, Inc.
 * //  Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
 * //  except in compliance with the License. You may obtain a copy of the License at
 * //    http://www.apache.org/licenses/LICENSE-2.0
 * //  Unless required by applicable law or agreed to in writing, software distributed under the
 * //  License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * //  either express or implied. See the License for the specific language governing permissions
 * //  and limitations under the License.
 */

package com.couchbase;

import com.couchbase.jdbc.core.CouchMetrics;
import com.couchbase.jdbc.core.CouchResponse;

import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by davec on 2015-02-20.
 */
public class CBDatabaseMetaData implements DatabaseMetaData
{
    final CBConnection connection;

    public CBDatabaseMetaData(CBConnection connection)
    {
        this.connection=connection;
    }
    /**
     * Retrieves whether the current user can call all the procedures
     * returned by the method getProcedures.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean allProceduresAreCallable() throws SQLException
    {
        return true;
    }

    /**
     * Retrieves whether the current user can use all the tables returned
     * by the method getTables in a SELECT
     * statement.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean allTablesAreSelectable() throws SQLException
    {
        return true;
    }

    /**
     * Retrieves the URL for this DBMS.
     *
     * @return the URL for this DBMS or null if it cannot be
     * generated
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getURL() throws SQLException
    {
        return connection.getURL();
    }

    /**
     * Retrieves the user name as known to this database.
     *
     * @return the database user name
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getUserName() throws SQLException
    {
        return connection.getUserName();
    }

    /**
     * Retrieves whether this database is in read-only mode.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean isReadOnly() throws SQLException
    {
        return connection.isReadOnly();
    }

    /**
     * Retrieves whether NULL values are sorted high.
     * Sorted high means that NULL values
     * sort higher than any other value in a domain.  In an ascending order,
     * if this method returns true,  NULL values
     * will appear at the end. By contrast, the method
     * nullsAreSortedAtEnd indicates whether NULL values
     * are sorted at the end regardless of sort order.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean nullsAreSortedHigh() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether NULL values are sorted low.
     * Sorted low means that NULL values
     * sort lower than any other value in a domain.  In an ascending order,
     * if this method returns true,  NULL values
     * will appear at the beginning. By contrast, the method
     * nullsAreSortedAtStart indicates whether NULL values
     * are sorted at the beginning regardless of sort order.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean nullsAreSortedLow() throws SQLException
    {
        return true;
    }

    /**
     * Retrieves whether NULL values are sorted at the start regardless
     * of sort order.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean nullsAreSortedAtStart() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether NULL values are sorted at the end regardless of
     * sort order.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean nullsAreSortedAtEnd() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves the name of this database product.
     *
     * @return database product name
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getDatabaseProductName() throws SQLException
    {
        return "Couchbase";
    }

    /**
     * Retrieves the version number of this database product.
     *
     * @return database version number
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getDatabaseProductVersion() throws SQLException
    {

        ResultSet rs = connection.createStatement().executeQuery("select version()");
        if(rs.next())
        {
            return rs.getString(1);
        }
        return null;
    }

    /**
     * Retrieves the name of this JDBC driver.
     *
     * @return JDBC driver name
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getDriverName() throws SQLException
    {
        return CBDriver.DRIVER_NAME;
    }

    /**
     * Retrieves the version number of this JDBC driver as a String.
     *
     * @return JDBC driver version
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getDriverVersion() throws SQLException
    {
        return ""+CBDriver.MAJOR_VERSION+'.'+CBDriver.MINOR_VERSION;
    }

    /**
     * Retrieves this JDBC driver's major version number.
     *
     * @return JDBC driver major version
     */
    @Override
    public int getDriverMajorVersion()
    {
        return CBDriver.MAJOR_VERSION;
    }

    /**
     * Retrieves this JDBC driver's minor version number.
     *
     * @return JDBC driver minor version number
     */
    @Override
    public int getDriverMinorVersion()
    {
        return CBDriver.MINOR_VERSION;
    }

    /**
     * Retrieves whether this database stores tables in a local file.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean usesLocalFiles() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database uses a file for each table.
     *
     * @return true if this database uses a local file for each table;
     * false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean usesLocalFilePerTable() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database treats mixed case unquoted SQL identifiers as
     * case sensitive and as a result stores them in mixed case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean supportsMixedCaseIdentifiers() throws SQLException
    {
        return true;
    }

    /**
     * Retrieves whether this database treats mixed case unquoted SQL identifiers as
     * case insensitive and stores them in upper case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean storesUpperCaseIdentifiers() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database treats mixed case unquoted SQL identifiers as
     * case insensitive and stores them in lower case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean storesLowerCaseIdentifiers() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database treats mixed case unquoted SQL identifiers as
     * case insensitive and stores them in mixed case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean storesMixedCaseIdentifiers() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database treats mixed case quoted SQL identifiers as
     * case sensitive and as a result stores them in mixed case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean supportsMixedCaseQuotedIdentifiers() throws SQLException
    {
        return true;
    }

    /**
     * Retrieves whether this database treats mixed case quoted SQL identifiers as
     * case insensitive and stores them in upper case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean storesUpperCaseQuotedIdentifiers() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database treats mixed case quoted SQL identifiers as
     * case insensitive and stores them in lower case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean storesLowerCaseQuotedIdentifiers() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves whether this database treats mixed case quoted SQL identifiers as
     * case insensitive and stores them in mixed case.
     *
     * @return true if so; false otherwise
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public boolean storesMixedCaseQuotedIdentifiers() throws SQLException
    {
        return false;
    }

    /**
     * Retrieves the string used to quote SQL identifiers.
     * This method returns a space " " if identifier quoting is not supported.
     *
     * @return the quoting string or a space if quoting is not supported
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getIdentifierQuoteString() throws SQLException
    {
        return "`";
    }

    /**
     * Retrieves a comma-separated list of all of this database's SQL keywords
     * that are NOT also SQL:2003 keywords.
     *
     * @return the list of this database's keywords that are not also
     * SQL:2003 keywords
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getSQLKeywords() throws SQLException
    {
        return null;
    }

    /**
     * Retrieves a comma-separated list of math functions available with
     * this database.  These are the Open /Open CLI math function names used in
     * the JDBC function escape clause.
     *
     * @return the list of math functions supported by this database
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getNumericFunctions() throws SQLException
    {
        return "add,div,mod,mult,neg,sub,abs,acos,asin,atan,atan2,ceil,cos,deg,degrees,e,exp,ln,log,floor,inf,nan,neginf,pi,posinf,power,rad,radians,random,round,sign,sin,sqrt,tan,trunc";
    }

    /**
     * Retrieves a comma-separated list of string functions available with
     * this database.  These are the  Open Group CLI string function names used
     * in the JDBC function escape clause.
     *
     * @return the list of string functions supported by this database
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getStringFunctions() throws SQLException
    {
        return "contains,initcap,length,lower,ltrim,position,pos,regex_contains,regex_like,regex_position,regex_pos,regex_replace,repeat,replace,rtrim,split,substr,title,trim,upper";
    }

    /**
     * Retrieves a comma-separated list of system functions available with
     * this database.  These are the  Open Group CLI system function names used
     * in the JDBC function escape clause.
     *
     * @return a list of system functions supported by this database
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getSystemFunctions() throws SQLException
    {
        return "";
    }

    /**
     * Retrieves a comma-separated list of the time and date functions available
     * with this database.
     *
     * @return the list of time and date functions supported by this database
     * @throws java.sql.SQLException if a database access error occurs
     */
    @Override
    public String getTimeDateFunctions() throws SQLException
    {
        return "clock_millis,clock_str,date_add_millis,date_add_str,date_diff_millis,date_diff_str,date_part_millis,date_part_str,date_trunc_millis,date_trunc_str,millis,millis_to_str,millis_to_utc,millis_to_zone_name,now_millis,now_str,str_to_millis,str_to_utc,str_to_zone_name";
    }

    /**
     * Retrieves the string that can be used to escape wildcard characters.
     * This is the string that can be used to escape '_' or '%' in
     * the catalog search parameters that are a pattern (and therefore use one
     * of the wildcard characters).
     * 
     * 

The '_' character represents any single character; * the '%' character represents any sequence of zero or * more characters. * * @return the string used to escape wildcard characters * @throws java.sql.SQLException if a database access error occurs */ @Override public String getSearchStringEscape() throws SQLException { return "\\"; } /** * Retrieves all the "extra" characters that can be used in unquoted * identifier names (those beyond a-z, A-Z, 0-9 and _). * * @return the string containing the extra characters * @throws java.sql.SQLException if a database access error occurs */ @Override public String getExtraNameCharacters() throws SQLException { return ""; } /** * Retrieves whether this database supports ALTER TABLE * with add column. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsAlterTableWithAddColumn() throws SQLException { return false; } /** * Retrieves whether this database supports ALTER TABLE * with drop column. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsAlterTableWithDropColumn() throws SQLException { return false; } /** * Retrieves whether this database supports column aliasing. * *

If so, the SQL AS clause can be used to provide names for * computed columns or to provide alias names for columns as * required. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsColumnAliasing() throws SQLException { return true; } /** * Retrieves whether this database supports concatenations between * NULL and non-NULL values being * NULL. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean nullPlusNonNullIsNull() throws SQLException { return false; } /** * Retrieves whether this database supports the JDBC scalar function * CONVERT for the conversion of one JDBC type to another. * The JDBC types are the generic SQL data types defined * in java.sql.Types. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsConvert() throws SQLException { return true; } /** * Retrieves whether this database supports the JDBC scalar function * CONVERT for conversions between the JDBC types fromType * and toType. The JDBC types are the generic SQL data types defined * in java.sql.Types. * * @param fromType the type to convert from; one of the type codes from * the class java.sql.Types * @param toType the type to convert to; one of the type codes from * the class java.sql.Types * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @see Types */ @Override public boolean supportsConvert(int fromType, int toType) throws SQLException { return false; } /** * Retrieves whether this database supports table correlation names. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsTableCorrelationNames() throws SQLException { return true; } /** * Retrieves whether, when table correlation names are supported, they * are restricted to being different from the names of the tables. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsDifferentTableCorrelationNames() throws SQLException { return true; } /** * Retrieves whether this database supports expressions in * ORDER BY lists. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsExpressionsInOrderBy() throws SQLException { return true; } /** * Retrieves whether this database supports using a column that is * not in the SELECT statement in an * ORDER BY clause. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsOrderByUnrelated() throws SQLException { return false; } /** * Retrieves whether this database supports some form of * GROUP BY clause. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsGroupBy() throws SQLException { return true; } /** * Retrieves whether this database supports using a column that is * not in the SELECT statement in a * GROUP BY clause. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsGroupByUnrelated() throws SQLException { return true; } /** * Retrieves whether this database supports using columns not included in * the SELECT statement in a GROUP BY clause * provided that all of the columns in the SELECT statement * are included in the GROUP BY clause. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsGroupByBeyondSelect() throws SQLException { return true; } /** * Retrieves whether this database supports specifying a * LIKE escape clause. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsLikeEscapeClause() throws SQLException { return false; } /** * Retrieves whether this database supports getting multiple * ResultSet objects from a single call to the * method execute. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsMultipleResultSets() throws SQLException { return false; } /** * Retrieves whether this database allows having multiple * transactions open at once (on different connections). * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsMultipleTransactions() throws SQLException { return true; } /** * Retrieves whether columns in this database may be defined as non-nullable. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsNonNullableColumns() throws SQLException { return false; } /** * Retrieves whether this database supports the ODBC Minimum SQL grammar. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsMinimumSQLGrammar() throws SQLException { return true; } /** * Retrieves whether this database supports the ODBC Core SQL grammar. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCoreSQLGrammar() throws SQLException { return true; } /** * Retrieves whether this database supports the ODBC Extended SQL grammar. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsExtendedSQLGrammar() throws SQLException { return false; } /** * Retrieves whether this database supports the ANSI92 entry level SQL * grammar. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsANSI92EntryLevelSQL() throws SQLException { return true; } /** * Retrieves whether this database supports the ANSI92 intermediate SQL grammar supported. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsANSI92IntermediateSQL() throws SQLException { return false; } /** * Retrieves whether this database supports the ANSI92 full SQL grammar supported. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsANSI92FullSQL() throws SQLException { return false; } /** * Retrieves whether this database supports the SQL Integrity * Enhancement Facility. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsIntegrityEnhancementFacility() throws SQLException { return false; } /** * Retrieves whether this database supports some form of outer join. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsOuterJoins() throws SQLException { return true; } /** * Retrieves whether this database supports full nested outer joins. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsFullOuterJoins() throws SQLException { return false; } /** * Retrieves whether this database provides limited support for outer * joins. (This will be true if the method * supportsFullOuterJoins returns true). * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsLimitedOuterJoins() throws SQLException { return false; } /** * Retrieves the database vendor's preferred term for "schema". * * @return the vendor term for "schema" * @throws java.sql.SQLException if a database access error occurs */ @Override public String getSchemaTerm() throws SQLException { return "NAMESPACE"; } /** * Retrieves the database vendor's preferred term for "procedure". * * @return the vendor term for "procedure" * @throws java.sql.SQLException if a database access error occurs */ @Override public String getProcedureTerm() throws SQLException { return "procedure"; } /** * Retrieves the database vendor's preferred term for "catalog". * * @return the vendor term for "catalog" * @throws java.sql.SQLException if a database access error occurs */ @Override public String getCatalogTerm() throws SQLException { return "namespace"; } /** * Retrieves whether a catalog appears at the start of a fully qualified * table name. If not, the catalog appears at the end. * * @return true if the catalog name appears at the beginning * of a fully qualified table name; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean isCatalogAtStart() throws SQLException { return true; } /** * Retrieves the String that this database uses as the * separator between a catalog and table name. * * @return the separator string * @throws java.sql.SQLException if a database access error occurs */ @Override public String getCatalogSeparator() throws SQLException { return ":"; } /** * Retrieves whether a schema name can be used in a data manipulation statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSchemasInDataManipulation() throws SQLException { return true; } /** * Retrieves whether a schema name can be used in a procedure call statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSchemasInProcedureCalls() throws SQLException { return false; } /** * Retrieves whether a schema name can be used in a table definition statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSchemasInTableDefinitions() throws SQLException { return false; } /** * Retrieves whether a schema name can be used in an index definition statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSchemasInIndexDefinitions() throws SQLException { return true; } /** * Retrieves whether a schema name can be used in a privilege definition statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSchemasInPrivilegeDefinitions() throws SQLException { return false; } /** * Retrieves whether a catalog name can be used in a data manipulation statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCatalogsInDataManipulation() throws SQLException { return true; } /** * Retrieves whether a catalog name can be used in a procedure call statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCatalogsInProcedureCalls() throws SQLException { return false; } /** * Retrieves whether a catalog name can be used in a table definition statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCatalogsInTableDefinitions() throws SQLException { return false; } /** * Retrieves whether a catalog name can be used in an index definition statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCatalogsInIndexDefinitions() throws SQLException { return true; } /** * Retrieves whether a catalog name can be used in a privilege definition statement. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCatalogsInPrivilegeDefinitions() throws SQLException { return false; } /** * Retrieves whether this database supports positioned DELETE * statements. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsPositionedDelete() throws SQLException { return false; } /** * Retrieves whether this database supports positioned UPDATE * statements. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsPositionedUpdate() throws SQLException { return false; } /** * Retrieves whether this database supports SELECT FOR UPDATE * statements. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSelectForUpdate() throws SQLException { return false; } /** * Retrieves whether this database supports stored procedure calls * that use the stored procedure escape syntax. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsStoredProcedures() throws SQLException { return false; } /** * Retrieves whether this database supports subqueries in comparison * expressions. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSubqueriesInComparisons() throws SQLException { return true; } /** * Retrieves whether this database supports subqueries in * EXISTS expressions. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSubqueriesInExists() throws SQLException { return true; } /** * Retrieves whether this database supports subqueries in * IN expressions. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSubqueriesInIns() throws SQLException { return true; } /** * Retrieves whether this database supports subqueries in quantified * expressions. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsSubqueriesInQuantifieds() throws SQLException { return true; } /** * Retrieves whether this database supports correlated subqueries. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsCorrelatedSubqueries() throws SQLException { return false; } /** * Retrieves whether this database supports SQL UNION. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsUnion() throws SQLException { return true; } /** * Retrieves whether this database supports SQL UNION ALL. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsUnionAll() throws SQLException { return true; } /** * Retrieves whether this database supports keeping cursors open * across commits. * * @return true if cursors always remain open; * false if they might not remain open * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsOpenCursorsAcrossCommit() throws SQLException { return false; } /** * Retrieves whether this database supports keeping cursors open * across rollbacks. * * @return true if cursors always remain open; * false if they might not remain open * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsOpenCursorsAcrossRollback() throws SQLException { return false; } /** * Retrieves whether this database supports keeping statements open * across commits. * * @return true if statements always remain open; * false if they might not remain open * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsOpenStatementsAcrossCommit() throws SQLException { return true; } /** * Retrieves whether this database supports keeping statements open * across rollbacks. * * @return true if statements always remain open; * false if they might not remain open * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsOpenStatementsAcrossRollback() throws SQLException { return true; } /** * Retrieves the maximum number of hex characters this database allows in an * inline binary literal. * * @return max the maximum length (in hex characters) for a binary literal; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxBinaryLiteralLength() throws SQLException { return 0; } /** * Retrieves the maximum number of characters this database allows * for a character literal. * * @return the maximum number of characters allowed for a character literal; * a result of zero means that there is no limit or the limit is * not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxCharLiteralLength() throws SQLException { return 0; } /** * Retrieves the maximum number of characters this database allows * for a column name. * * @return the maximum number of characters allowed for a column name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxColumnNameLength() throws SQLException { return 0; } /** * Retrieves the maximum number of columns this database allows in a * GROUP BY clause. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxColumnsInGroupBy() throws SQLException { return 0; } /** * Retrieves the maximum number of columns this database allows in an index. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxColumnsInIndex() throws SQLException { return 0; } /** * Retrieves the maximum number of columns this database allows in an * ORDER BY clause. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxColumnsInOrderBy() throws SQLException { return 0; } /** * Retrieves the maximum number of columns this database allows in a * SELECT list. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxColumnsInSelect() throws SQLException { return 0; } /** * Retrieves the maximum number of columns this database allows in a table. * * @return the maximum number of columns allowed; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxColumnsInTable() throws SQLException { return 0; } /** * Retrieves the maximum number of concurrent connections to this * database that are possible. * * @return the maximum number of active connections possible at one time; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxConnections() throws SQLException { return 0; } /** * Retrieves the maximum number of characters that this database allows in a * cursor name. * * @return the maximum number of characters allowed in a cursor name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxCursorNameLength() throws SQLException { return 0; } /** * Retrieves the maximum number of bytes this database allows for an * index, including all of the parts of the index. * * @return the maximum number of bytes allowed; this limit includes the * composite of all the constituent parts of the index; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxIndexLength() throws SQLException { return 0; } /** * Retrieves the maximum number of characters that this database allows in a * schema name. * * @return the maximum number of characters allowed in a schema name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxSchemaNameLength() throws SQLException { return 0; } /** * Retrieves the maximum number of characters that this database allows in a * procedure name. * * @return the maximum number of characters allowed in a procedure name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxProcedureNameLength() throws SQLException { return 0; } /** * Retrieves the maximum number of characters that this database allows in a * catalog name. * * @return the maximum number of characters allowed in a catalog name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxCatalogNameLength() throws SQLException { return 0; } /** * Retrieves the maximum number of bytes this database allows in * a single row. * * @return the maximum number of bytes allowed for a row; a result of * zero means that there is no limit or the limit is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxRowSize() throws SQLException { return 0; } /** * Retrieves whether the return value for the method * getMaxRowSize includes the SQL data types * LONGVARCHAR and LONGVARBINARY. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean doesMaxRowSizeIncludeBlobs() throws SQLException { return true; } /** * Retrieves the maximum number of characters this database allows in * an SQL statement. * * @return the maximum number of characters allowed for an SQL statement; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxStatementLength() throws SQLException { return 0; } /** * Retrieves the maximum number of active statements to this database * that can be open at the same time. * * @return the maximum number of statements that can be open at one time; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxStatements() throws SQLException { return 0; } /** * Retrieves the maximum number of characters this database allows in * a table name. * * @return the maximum number of characters allowed for a table name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxTableNameLength() throws SQLException { return 0; } /** * Retrieves the maximum number of tables this database allows in a * SELECT statement. * * @return the maximum number of tables allowed in a SELECT * statement; a result of zero means that there is no limit or * the limit is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxTablesInSelect() throws SQLException { return 0; } /** * Retrieves the maximum number of characters this database allows in * a user name. * * @return the maximum number of characters allowed for a user name; * a result of zero means that there is no limit or the limit * is not known * @throws java.sql.SQLException if a database access error occurs */ @Override public int getMaxUserNameLength() throws SQLException { return 0; } /** * Retrieves this database's default transaction isolation level. The * possible values are defined in java.sql.Connection. * * @return the default isolation level * @throws java.sql.SQLException if a database access error occurs * @see Connection */ @Override public int getDefaultTransactionIsolation() throws SQLException { return Connection.TRANSACTION_READ_UNCOMMITTED; } /** * Retrieves whether this database supports transactions. If not, invoking the * method commit is a noop, and the isolation level is * TRANSACTION_NONE. * * @return true if transactions are supported; * false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsTransactions() throws SQLException { return true; } /** * Retrieves whether this database supports the given transaction isolation level. * * @param level one of the transaction isolation levels defined in * java.sql.Connection * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @see Connection */ @Override public boolean supportsTransactionIsolationLevel(int level) throws SQLException { return Connection.TRANSACTION_READ_UNCOMMITTED==level; } /** * Retrieves whether this database supports both data definition and * data manipulation statements within a transaction. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsDataDefinitionAndDataManipulationTransactions() throws SQLException { return true; } /** * Retrieves whether this database supports only data manipulation * statements within a transaction. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean supportsDataManipulationTransactionsOnly() throws SQLException { return false; } /** * Retrieves whether a data definition statement within a transaction forces * the transaction to commit. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean dataDefinitionCausesTransactionCommit() throws SQLException { return false; } /** * Retrieves whether this database ignores a data definition statement * within a transaction. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs */ @Override public boolean dataDefinitionIgnoredInTransactions() throws SQLException { return false; } /** * Retrieves a description of the stored procedures available in the given * catalog. * * Only procedure descriptions matching the schema and * procedure name criteria are returned. They are ordered by * PROCEDURE_CAT, PROCEDURE_SCHEM, * PROCEDURE_NAME and SPECIFIC_ NAME. * *

Each procedure description has the the following columns: *

    *
  1. PROCEDURE_CAT String => procedure catalog (may be null) *
  2. PROCEDURE_SCHEM String => procedure schema (may be null) *
  3. PROCEDURE_NAME String => procedure name
  4. *
  5. reserved for future use *
  6. reserved for future use *
  7. reserved for future use *
  8. REMARKS String => explanatory comment on the procedure *
  9. PROCEDURE_TYPE short => kind of procedure: *
      *
    • procedureResultUnknown - Cannot determine if a return value * will be returned *
    • procedureNoResult - Does not return a return value *
    • procedureReturnsResult - Returns a return value *
    *
  10. SPECIFIC_NAME String => The name which uniquely identifies this * procedure within its schema. *
* * A user may not have permissions to execute any of the procedures that are * returned by getProcedures * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param procedureNamePattern a procedure name pattern; must match the * procedure name as it is stored in the database * @return ResultSet - each row is a procedure description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape */ @Override public ResultSet getProcedures(String catalog, String schemaPattern, String procedureNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the given catalog's stored procedure parameter * and result columns. * *

Only descriptions matching the schema, procedure and * parameter name criteria are returned. They are ordered by * PROCEDURE_CAT, PROCEDURE_SCHEM, PROCEDURE_NAME and SPECIFIC_NAME. Within this, the return value, * if any, is first. Next are the parameter descriptions in call * order. The column descriptions follow in column number order. * *

Each row in the ResultSet is a parameter description or * column description with the following fields: *

    *
  1. PROCEDURE_CAT String => procedure catalog (may be null) *
  2. PROCEDURE_SCHEM String => procedure schema (may be null) *
  3. PROCEDURE_NAME String => procedure name *
  4. COLUMN_NAME String => column/parameter name *
  5. COLUMN_TYPE Short => kind of column/parameter: *
      *
    • procedureColumnUnknown - nobody knows *
    • procedureColumnIn - IN parameter *
    • procedureColumnInOut - INOUT parameter *
    • procedureColumnOut - OUT parameter *
    • procedureColumnReturn - procedure return value *
    • procedureColumnResult - result column in ResultSet *
    *
  6. DATA_TYPE int => SQL type from java.sql.Types *
  7. TYPE_NAME String => SQL type name, for a UDT type the * type name is fully qualified *
  8. PRECISION int => precision *
  9. LENGTH int => length in bytes of data *
  10. SCALE short => scale - null is returned for data types where * SCALE is not applicable. *
  11. RADIX short => radix *
  12. NULLABLE short => can it contain NULL. *
      *
    • procedureNoNulls - does not allow NULL values *
    • procedureNullable - allows NULL values *
    • procedureNullableUnknown - nullability unknown *
    *
  13. REMARKS String => comment describing parameter/column *
  14. COLUMN_DEF String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be null) *
      *
    • The string NULL (not enclosed in quotes) - if NULL was specified as the default value *
    • TRUNCATE (not enclosed in quotes) - if the specified default value cannot be represented without truncation *
    • NULL - if a default value was not specified *
    *
  15. SQL_DATA_TYPE int => reserved for future use *
  16. SQL_DATETIME_SUB int => reserved for future use *
  17. CHAR_OCTET_LENGTH int => the maximum length of binary and character based columns. For any other datatype the returned value is a * NULL *
  18. ORDINAL_POSITION int => the ordinal position, starting from 1, for the input and output parameters for a procedure. A value of 0 * is returned if this row describes the procedure's return value. For result set columns, it is the * ordinal position of the column in the result set starting from 1. If there are * multiple result sets, the column ordinal positions are implementation * defined. *
  19. IS_NULLABLE String => ISO rules are used to determine the nullability for a column. *
      *
    • YES --- if the column can include NULLs *
    • NO --- if the column cannot include NULLs *
    • empty string --- if the nullability for the * column is unknown *
    *
  20. SPECIFIC_NAME String => the name which uniquely identifies this procedure within its schema. *
* *

Note: Some databases may not return the column * descriptions for a procedure. * *

The PRECISION column represents the specified column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param procedureNamePattern a procedure name pattern; must match the * procedure name as it is stored in the database * @param columnNamePattern a column name pattern; must match the column name * as it is stored in the database * @return ResultSet - each row describes a stored procedure parameter or * column * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape */ @Override public ResultSet getProcedureColumns(String catalog, String schemaPattern, String procedureNamePattern, String columnNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the tables available in the given catalog. * Only table descriptions matching the catalog, schema, table * name and type criteria are returned. They are ordered by * TABLE_TYPE, TABLE_CAT, * TABLE_SCHEM and TABLE_NAME. * * Each table description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. TABLE_TYPE String => table type. Typical types are "TABLE", * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", * "LOCAL TEMPORARY", "ALIAS", "SYNONYM". *
  5. REMARKS String => explanatory comment on the table *
  6. TYPE_CAT String => the types catalog (may be null) *
  7. TYPE_SCHEM String => the types schema (may be null) *
  8. TYPE_NAME String => type name (may be null) *
  9. SELF_REFERENCING_COL_NAME String => name of the designated * "identifier" column of a typed table (may be null) *
  10. REF_GENERATION String => specifies how values in * SELF_REFERENCING_COL_NAME are created. Values are * "SYSTEM", "USER", "DERIVED". (may be null) *
* *

Note: Some databases may not return information for * all tables. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @param types a list of table types, which must be from the list of table types * returned from {@link #getTableTypes},to include; null returns * all types * @return ResultSet - each row is a table description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape */ @Override public ResultSet getTables(String catalog, String schemaPattern, String tableNamePattern, String[] types) throws SQLException { String sql = "select null as TABLE_CAT, namespace_id as TABLE_SCHEM, name as TABLE_NAME, 'TABLE' as TABLE_TYPE, null as REMARKS, null as TYPE_CAT, null as TYPE_SCHEM," + "null as TYPE_NAME, null as SELF_REFERENCING_COL_NAME, null as REF_GENERATION from system:keyspaces"; if (schemaPattern != null || tableNamePattern != null) { sql += " where "; if ( schemaPattern != null ) { sql += "namespace_id like '" + schemaPattern + "'"; } if ( schemaPattern != null && tableNamePattern != null ) { sql += " and "; } if (tableNamePattern != null ) { sql += "name LIKE '" + tableNamePattern +"'"; } } try(Statement statement = connection.createStatement()) { return statement.executeQuery(sql); } } /** * Retrieves the schema names available in this database. The results * are ordered by TABLE_CATALOG and * TABLE_SCHEM. * *

The schema columns are: *

    *
  1. TABLE_SCHEM String => schema name *
  2. TABLE_CATALOG String => catalog name (may be null) *
* * @return a ResultSet object in which each row is a * schema description * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getSchemas() throws SQLException { return getSchemas(null, null); } /** * Retrieves the catalog names available in this database. The results * are ordered by catalog name. * *

The catalog column is: *

    *
  1. TABLE_CAT String => catalog name *
* * @return a ResultSet object in which each row has a * single String column that is a catalog name * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getCatalogs() throws SQLException { String sql = "select name as TABLE_CAT from system:namespaces"; try( Statement statement = connection.createStatement()) { return statement.executeQuery( sql ); } } /** * Retrieves the table types available in this database. The results * are ordered by table type. * *

The table type is: *

    *
  1. TABLE_TYPE String => table type. Typical types are "TABLE", * "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", * "LOCAL TEMPORARY", "ALIAS", "SYNONYM". *
* * @return a ResultSet object in which each row has a * single String column that is a table type * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getTableTypes() throws SQLException { List > catalogs = new ArrayList>(2); Map table = new HashMap(); ////SYSTEM; BUCKET; GSI INDEX; VIEW INDEX table.put("TABLE_TYPE","SYSTEM"); catalogs.add(table); table = new HashMap<>(); table.put("TABLE_TYPE", "BUCKET"); catalogs.add(table); table = new HashMap<>(); table.put("TABLE_TYPE", "GSI INDEX"); catalogs.add(table); table = new HashMap<>(); table.put("TABLE_TYPE", "VIEW INDEX"); catalogs.add(table); CouchMetrics metrics = new CouchMetrics(); metrics.setResultCount(table.size()); // this just has to be not 0 metrics.setResultSize(1); @SuppressWarnings("unchecked") Map signature = new HashMap(); signature.put("TABLE_TYPE","string"); CouchResponse couchResponse = new CouchResponse(); couchResponse.setResults(catalogs); couchResponse.setMetrics(metrics); couchResponse.setSignature(signature); return new CBResultSet(null, couchResponse); } /** * Retrieves a description of table columns available in * the specified catalog. * *

Only column descriptions matching the catalog, schema, table * and column name criteria are returned. They are ordered by * TABLE_CAT,TABLE_SCHEM, * TABLE_NAME, and ORDINAL_POSITION. * *

Each column description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. COLUMN_NAME String => column name *
  5. DATA_TYPE int => SQL type from java.sql.Types *
  6. TYPE_NAME String => Data source dependent type name, * for a UDT the type name is fully qualified *
  7. COLUMN_SIZE int => column size. *
  8. BUFFER_LENGTH is not used. *
  9. DECIMAL_DIGITS int => the number of fractional digits. Null is returned for data types where * DECIMAL_DIGITS is not applicable. *
  10. NUM_PREC_RADIX int => Radix (typically either 10 or 2) *
  11. NULLABLE int => is NULL allowed. *
      *
    • columnNoNulls - might not allow NULL values *
    • columnNullable - definitely allows NULL values *
    • columnNullableUnknown - nullability unknown *
    *
  12. REMARKS String => comment describing column (may be null) *
  13. COLUMN_DEF String => default value for the column, which should be interpreted as a string when the value is enclosed in single quotes (may be null) *
  14. SQL_DATA_TYPE int => unused *
  15. SQL_DATETIME_SUB int => unused *
  16. CHAR_OCTET_LENGTH int => for char types the * maximum number of bytes in the column *
  17. ORDINAL_POSITION int => index of column in table * (starting at 1) *
  18. IS_NULLABLE String => ISO rules are used to determine the nullability for a column. *
      *
    • YES --- if the column can include NULLs *
    • NO --- if the column cannot include NULLs *
    • empty string --- if the nullability for the * column is unknown *
    *
  19. SCOPE_CATALOG String => catalog of table that is the scope * of a reference attribute (null if DATA_TYPE isn't REF) *
  20. SCOPE_SCHEMA String => schema of table that is the scope * of a reference attribute (null if the DATA_TYPE isn't REF) *
  21. SCOPE_TABLE String => table name that this the scope * of a reference attribute (null if the DATA_TYPE isn't REF) *
  22. SOURCE_DATA_TYPE short => source type of a distinct type or user-generated * Ref type, SQL type from java.sql.Types (null if DATA_TYPE * isn't DISTINCT or user-generated REF) *
  23. IS_AUTOINCREMENT String => Indicates whether this column is auto incremented *
      *
    • YES --- if the column is auto incremented *
    • NO --- if the column is not auto incremented *
    • empty string --- if it cannot be determined whether the column is auto incremented *
    *
  24. IS_GENERATEDCOLUMN String => Indicates whether this is a generated column *
      *
    • YES --- if this a generated column *
    • NO --- if this not a generated column *
    • empty string --- if it cannot be determined whether this is a generated column *
    *
* *

The COLUMN_SIZE column specifies the column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @param columnNamePattern a column name pattern; must match the column * name as it is stored in the database * @return ResultSet - each row is a column description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape */ @Override public ResultSet getColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the access rights for a table's columns. * *

Only privileges matching the column name criteria are * returned. They are ordered by COLUMN_NAME and PRIVILEGE. * *

Each privilige description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. COLUMN_NAME String => column name *
  5. GRANTOR String => grantor of access (may be null) *
  6. GRANTEE String => grantee of access *
  7. PRIVILEGE String => name of access (SELECT, * INSERT, UPDATE, REFRENCES, ...) *
  8. IS_GRANTABLE String => "YES" if grantee is permitted * to grant to others; "NO" if not; null if unknown *
* * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name as it is * stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is * stored in the database * @param columnNamePattern a column name pattern; must match the column * name as it is stored in the database * @return ResultSet - each row is a column privilege description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape */ @Override public ResultSet getColumnPrivileges(String catalog, String schema, String table, String columnNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the access rights for each table available * in a catalog. Note that a table privilege applies to one or * more columns in the table. It would be wrong to assume that * this privilege applies to all columns (this may be true for * some systems but is not true for all.) * *

Only privileges matching the schema and table name * criteria are returned. They are ordered by * TABLE_CAT, * TABLE_SCHEM, TABLE_NAME, * and PRIVILEGE. * *

Each privilige description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. GRANTOR String => grantor of access (may be null) *
  5. GRANTEE String => grantee of access *
  6. PRIVILEGE String => name of access (SELECT, * INSERT, UPDATE, REFRENCES, ...) *
  7. IS_GRANTABLE String => "YES" if grantee is permitted * to grant to others; "NO" if not; null if unknown *
* * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @return ResultSet - each row is a table privilege description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape */ @Override public ResultSet getTablePrivileges(String catalog, String schemaPattern, String tableNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of a table's optimal set of columns that * uniquely identifies a row. They are ordered by SCOPE. * *

Each column description has the following columns: *

    *
  1. SCOPE short => actual scope of result *
      *
    • bestRowTemporary - very temporary, while using row *
    • bestRowTransaction - valid for remainder of current transaction *
    • bestRowSession - valid for remainder of current session *
    *
  2. COLUMN_NAME String => column name *
  3. DATA_TYPE int => SQL data type from java.sql.Types *
  4. TYPE_NAME String => Data source dependent type name, * for a UDT the type name is fully qualified *
  5. COLUMN_SIZE int => precision *
  6. BUFFER_LENGTH int => not used *
  7. DECIMAL_DIGITS short => scale - Null is returned for data types where * DECIMAL_DIGITS is not applicable. *
  8. PSEUDO_COLUMN short => is this a pseudo column * like an Oracle ROWID *
      *
    • bestRowUnknown - may or may not be pseudo column *
    • bestRowNotPseudo - is NOT a pseudo column *
    • bestRowPseudo - is a pseudo column *
    *
* *

The COLUMN_SIZE column represents the specified column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @param scope the scope of interest; use same values as SCOPE * @param nullable include columns that are nullable. * @return ResultSet - each row is a column description * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getBestRowIdentifier(String catalog, String schema, String table, int scope, boolean nullable) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of a table's columns that are automatically * updated when any value in a row is updated. They are * unordered. * *

Each column description has the following columns: *

    *
  1. SCOPE short => is not used *
  2. COLUMN_NAME String => column name *
  3. DATA_TYPE int => SQL data type from java.sql.Types *
  4. TYPE_NAME String => Data source-dependent type name *
  5. COLUMN_SIZE int => precision *
  6. BUFFER_LENGTH int => length of column value in bytes *
  7. DECIMAL_DIGITS short => scale - Null is returned for data types where * DECIMAL_DIGITS is not applicable. *
  8. PSEUDO_COLUMN short => whether this is pseudo column * like an Oracle ROWID *
      *
    • versionColumnUnknown - may or may not be pseudo column *
    • versionColumnNotPseudo - is NOT a pseudo column *
    • versionColumnPseudo - is a pseudo column *
    *
* *

The COLUMN_SIZE column represents the specified column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @return a ResultSet object in which each row is a * column description * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getVersionColumns(String catalog, String schema, String table) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the given table's primary key columns. They * are ordered by COLUMN_NAME. * *

Each primary key column description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. COLUMN_NAME String => column name *
  5. KEY_SEQ short => sequence number within primary key( a value * of 1 represents the first column of the primary key, a value of 2 would * represent the second column within the primary key). *
  6. PK_NAME String => primary key name (may be null) *
* * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @return ResultSet - each row is a primary key column description * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getPrimaryKeys(String catalog, String schema, String table) throws SQLException { String sql = "select null as TABLE_CAT, namespace_id as TABLE_SCHEM, keyspace_id as TABLE_NAME, 'id' as COLUMN_NAME, 1 as KEY_SEQ, name as PK_NAME from system:indexes where is_primary = true"; if (schema != null ) { sql += " and namespace_id like " + schema; } if (table != null) { sql += " and keyspace_id like " + table; } try(Statement statement = connection.createStatement()) { return statement.executeQuery(sql); } } /** * Retrieves a description of the primary key columns that are * referenced by the given table's foreign key columns (the primary keys * imported by a table). They are ordered by PKTABLE_CAT, * PKTABLE_SCHEM, PKTABLE_NAME, and KEY_SEQ. * *

Each primary key column description has the following columns: *

    *
  1. PKTABLE_CAT String => primary key table catalog * being imported (may be null) *
  2. PKTABLE_SCHEM String => primary key table schema * being imported (may be null) *
  3. PKTABLE_NAME String => primary key table name * being imported *
  4. PKCOLUMN_NAME String => primary key column name * being imported *
  5. FKTABLE_CAT String => foreign key table catalog (may be null) *
  6. FKTABLE_SCHEM String => foreign key table schema (may be null) *
  7. FKTABLE_NAME String => foreign key table name *
  8. FKCOLUMN_NAME String => foreign key column name *
  9. KEY_SEQ short => sequence number within a foreign key( a value * of 1 represents the first column of the foreign key, a value of 2 would * represent the second column within the foreign key). *
  10. UPDATE_RULE short => What happens to a * foreign key when the primary key is updated: *
      *
    • importedNoAction - do not allow update of primary * key if it has been imported *
    • importedKeyCascade - change imported key to agree * with primary key update *
    • importedKeySetNull - change imported key to NULL * if its primary key has been updated *
    • importedKeySetDefault - change imported key to default values * if its primary key has been updated *
    • importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) *
    *
  11. DELETE_RULE short => What happens to * the foreign key when primary is deleted. *
      *
    • importedKeyNoAction - do not allow delete of primary * key if it has been imported *
    • importedKeyCascade - delete rows that import a deleted key *
    • importedKeySetNull - change imported key to NULL if * its primary key has been deleted *
    • importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) *
    • importedKeySetDefault - change imported key to default if * its primary key has been deleted *
    *
  12. FK_NAME String => foreign key name (may be null) *
  13. PK_NAME String => primary key name (may be null) *
  14. DEFERRABILITY short => can the evaluation of foreign key * constraints be deferred until commit *
      *
    • importedKeyInitiallyDeferred - see SQL92 for definition *
    • importedKeyInitiallyImmediate - see SQL92 for definition *
    • importedKeyNotDeferrable - see SQL92 for definition *
    *
* * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in the database * @return ResultSet - each row is a primary key column description * @throws java.sql.SQLException if a database access error occurs * @see #getExportedKeys */ @Override public ResultSet getImportedKeys(String catalog, String schema, String table) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the foreign key columns that reference the * given table's primary key columns (the foreign keys exported by a * table). They are ordered by FKTABLE_CAT, FKTABLE_SCHEM, * FKTABLE_NAME, and KEY_SEQ. * *

Each foreign key column description has the following columns: *

    *
  1. PKTABLE_CAT String => primary key table catalog (may be null) *
  2. PKTABLE_SCHEM String => primary key table schema (may be null) *
  3. PKTABLE_NAME String => primary key table name *
  4. PKCOLUMN_NAME String => primary key column name *
  5. FKTABLE_CAT String => foreign key table catalog (may be null) * being exported (may be null) *
  6. FKTABLE_SCHEM String => foreign key table schema (may be null) * being exported (may be null) *
  7. FKTABLE_NAME String => foreign key table name * being exported *
  8. FKCOLUMN_NAME String => foreign key column name * being exported *
  9. KEY_SEQ short => sequence number within foreign key( a value * of 1 represents the first column of the foreign key, a value of 2 would * represent the second column within the foreign key). *
  10. UPDATE_RULE short => What happens to * foreign key when primary is updated: *
      *
    • importedNoAction - do not allow update of primary * key if it has been imported *
    • importedKeyCascade - change imported key to agree * with primary key update *
    • importedKeySetNull - change imported key to NULL if * its primary key has been updated *
    • importedKeySetDefault - change imported key to default values * if its primary key has been updated *
    • importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) *
    *
  11. DELETE_RULE short => What happens to * the foreign key when primary is deleted. *
      *
    • importedKeyNoAction - do not allow delete of primary * key if it has been imported *
    • importedKeyCascade - delete rows that import a deleted key *
    • importedKeySetNull - change imported key to NULL if * its primary key has been deleted *
    • importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) *
    • importedKeySetDefault - change imported key to default if * its primary key has been deleted *
    *
  12. FK_NAME String => foreign key name (may be null) *
  13. PK_NAME String => primary key name (may be null) *
  14. DEFERRABILITY short => can the evaluation of foreign key * constraints be deferred until commit *
      *
    • importedKeyInitiallyDeferred - see SQL92 for definition *
    • importedKeyInitiallyImmediate - see SQL92 for definition *
    • importedKeyNotDeferrable - see SQL92 for definition *
    *
* * @param catalog a catalog name; must match the catalog name as it * is stored in this database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in this database * @return a ResultSet object in which each row is a * foreign key column description * @throws java.sql.SQLException if a database access error occurs * @see #getImportedKeys */ @Override public ResultSet getExportedKeys(String catalog, String schema, String table) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the foreign key columns in the given foreign key * table that reference the primary key or the columns representing a unique constraint of the parent table (could be the same or a different table). * The number of columns returned from the parent table must match the number of * columns that make up the foreign key. They * are ordered by FKTABLE_CAT, FKTABLE_SCHEM, FKTABLE_NAME, and * KEY_SEQ. * *

Each foreign key column description has the following columns: *

    *
  1. PKTABLE_CAT String => parent key table catalog (may be null) *
  2. PKTABLE_SCHEM String => parent key table schema (may be null) *
  3. PKTABLE_NAME String => parent key table name *
  4. PKCOLUMN_NAME String => parent key column name *
  5. FKTABLE_CAT String => foreign key table catalog (may be null) * being exported (may be null) *
  6. FKTABLE_SCHEM String => foreign key table schema (may be null) * being exported (may be null) *
  7. FKTABLE_NAME String => foreign key table name * being exported *
  8. FKCOLUMN_NAME String => foreign key column name * being exported *
  9. KEY_SEQ short => sequence number within foreign key( a value * of 1 represents the first column of the foreign key, a value of 2 would * represent the second column within the foreign key). *
  10. UPDATE_RULE short => What happens to * foreign key when parent key is updated: *
      *
    • importedNoAction - do not allow update of parent * key if it has been imported *
    • importedKeyCascade - change imported key to agree * with parent key update *
    • importedKeySetNull - change imported key to NULL if * its parent key has been updated *
    • importedKeySetDefault - change imported key to default values * if its parent key has been updated *
    • importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) *
    *
  11. DELETE_RULE short => What happens to * the foreign key when parent key is deleted. *
      *
    • importedKeyNoAction - do not allow delete of parent * key if it has been imported *
    • importedKeyCascade - delete rows that import a deleted key *
    • importedKeySetNull - change imported key to NULL if * its primary key has been deleted *
    • importedKeyRestrict - same as importedKeyNoAction * (for ODBC 2.x compatibility) *
    • importedKeySetDefault - change imported key to default if * its parent key has been deleted *
    *
  12. FK_NAME String => foreign key name (may be null) *
  13. PK_NAME String => parent key name (may be null) *
  14. DEFERRABILITY short => can the evaluation of foreign key * constraints be deferred until commit *
      *
    • importedKeyInitiallyDeferred - see SQL92 for definition *
    • importedKeyInitiallyImmediate - see SQL92 for definition *
    • importedKeyNotDeferrable - see SQL92 for definition *
    *
* * @param parentCatalog a catalog name; must match the catalog name * as it is stored in the database; "" retrieves those without a * catalog; null means drop catalog name from the selection criteria * @param parentSchema a schema name; must match the schema name as * it is stored in the database; "" retrieves those without a schema; * null means drop schema name from the selection criteria * @param parentTable the name of the table that exports the key; must match * the table name as it is stored in the database * @param foreignCatalog a catalog name; must match the catalog name as * it is stored in the database; "" retrieves those without a * catalog; null means drop catalog name from the selection criteria * @param foreignSchema a schema name; must match the schema name as it * is stored in the database; "" retrieves those without a schema; * null means drop schema name from the selection criteria * @param foreignTable the name of the table that imports the key; must match * the table name as it is stored in the database * @return ResultSet - each row is a foreign key column description * @throws java.sql.SQLException if a database access error occurs * @see #getImportedKeys */ @Override public ResultSet getCrossReference(String parentCatalog, String parentSchema, String parentTable, String foreignCatalog, String foreignSchema, String foreignTable) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of all the data types supported by * this database. They are ordered by DATA_TYPE and then by how * closely the data type maps to the corresponding JDBC SQL type. * *

If the database supports SQL distinct types, then getTypeInfo() will return * a single row with a TYPE_NAME of DISTINCT and a DATA_TYPE of Types.DISTINCT. * If the database supports SQL structured types, then getTypeInfo() will return * a single row with a TYPE_NAME of STRUCT and a DATA_TYPE of Types.STRUCT. * *

If SQL distinct or structured types are supported, then information on the * individual types may be obtained from the getUDTs() method. * * * *

Each type description has the following columns: *

    *
  1. TYPE_NAME String => Type name *
  2. DATA_TYPE int => SQL data type from java.sql.Types *
  3. PRECISION int => maximum precision *
  4. LITERAL_PREFIX String => prefix used to quote a literal * (may be null) *
  5. LITERAL_SUFFIX String => suffix used to quote a literal * (may be null) *
  6. CREATE_PARAMS String => parameters used in creating * the type (may be null) *
  7. NULLABLE short => can you use NULL for this type. *
      *
    • typeNoNulls - does not allow NULL values *
    • typeNullable - allows NULL values *
    • typeNullableUnknown - nullability unknown *
    *
  8. CASE_SENSITIVE boolean=> is it case sensitive. *
  9. SEARCHABLE short => can you use "WHERE" based on this type: *
      *
    • typePredNone - No support *
    • typePredChar - Only supported with WHERE .. LIKE *
    • typePredBasic - Supported except for WHERE .. LIKE *
    • typeSearchable - Supported for all WHERE .. *
    *
  10. UNSIGNED_ATTRIBUTE boolean => is it unsigned. *
  11. FIXED_PREC_SCALE boolean => can it be a money value. *
  12. AUTO_INCREMENT boolean => can it be used for an * auto-increment value. *
  13. LOCAL_TYPE_NAME String => localized version of type name * (may be null) *
  14. MINIMUM_SCALE short => minimum scale supported *
  15. MAXIMUM_SCALE short => maximum scale supported *
  16. SQL_DATA_TYPE int => unused *
  17. SQL_DATETIME_SUB int => unused *
  18. NUM_PREC_RADIX int => usually 2 or 10 *
* *

The PRECISION column represents the maximum column size that the server supports for the given datatype. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @return a ResultSet object in which each row is an SQL * type description * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getTypeInfo() throws SQLException { /* TYPE_NAME: NUMERIC, DATA_TYPE: -5, PRECISION: 19, LITERAL_PREFIX: null, LITERAL_SUFFIX: null, CREATE_PARAMS: null, NULLABLE: 1, CASE_SENSITIVE: 0, SEARCHABLE: 2, UNSIGNED_ATTRIBUTE: 0, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: NUMERIC, MINIMUM_SCALE: 0, MAXIMUM_SCALE: 0, SQL_DATA_TYPE: -5, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: 10, TYPE_NAME: NULL, DATA_TYPE: 0, PRECISION: 0, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: LENGTH, NULLABLE: 1, CASE_SENSITIVE: 1, SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: NULL, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 0, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, TYPE_NAME: NUMERIC, DATA_TYPE: 4, PRECISION: 10, LITERAL_PREFIX: null, LITERAL_SUFFIX: null, CREATE_PARAMS: null, NULLABLE: 1, CASE_SENSITIVE: 0, SEARCHABLE: 2, UNSIGNED_ATTRIBUTE: 0, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: NUMERIC, MINIMUM_SCALE: 0, MAXIMUM_SCALE: 0, SQL_DATA_TYPE: 4, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: 10, TYPE_NAME: NUMERIC, DATA_TYPE: 8, PRECISION: 15, LITERAL_PREFIX: null, LITERAL_SUFFIX: null, CREATE_PARAMS: null, NULLABLE: 1, CASE_SENSITIVE: 0, SEARCHABLE: 2, UNSIGNED_ATTRIBUTE: 0, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: NUMERIC, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 8, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: 2, TYPE_NAME: ARRAY, DATA_TYPE: 12, PRECISION: 65500, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: ARRAY, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, TYPE_NAME: MISSING, DATA_TYPE: 12, PRECISION: 255, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: MISSING, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, TYPE_NAME: OBJECT, DATA_TYPE: 12, PRECISION: 65500, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: OBJECT, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, TYPE_NAME: STRING, DATA_TYPE: 12, PRECISION: 510, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: STRING, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, TYPE_NAME: BOOLEAN, DATA_TYPE: 16, PRECISION: 1, LITERAL_PREFIX: null, LITERAL_SUFFIX: null, CREATE_PARAMS: null, NULLABLE: 1, CASE_SENSITIVE: 0, SEARCHABLE: 2, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: BOOLEAN, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, SQL_DATA_TYPE: 16, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null" */ List > types = new ArrayList<>(2); Map type = new HashMap<>(32); types.add(type); // TYPE_NAME: NUMERIC, DATA_TYPE: 2, PRECISION: 38, LITERAL_PREFIX: null, LITERAL_SUFFIX: null, CREATE_PARAMS: precision,scale, NULLABLE: 1, CASE_SENSITIVE: 0, // SEARCHABLE: 2, UNSIGNED_ATTRIBUTE: 0, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: NUMERIC, MINIMUM_SCALE: 0, MAXIMUM_SCALE: 38, SQL_DATA_TYPE: 2, // SQL_DATETIME_SUB: null, NUM_PREC_RADIX: 10, type.put("TYPE_NAME", "NUMERIC"); type.put("DATA_TYPE", Types.NUMERIC); type.put("PRECISION", 38); type.put("LITERAL_PREFIX", null); type.put("LITERAL_SUFFIX", null); type.put("CREATE_PARMS", "precision,scale"); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", false); type.put("SEARCHABLE", typePredBasic); type.put("UNSIGNED_ATTRIBUTE", false); type.put("FIXED_PREC_SCALE", false); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "NUMERIC"); type.put("MINIMUM_SCALE", 0); type.put("MAXIMUM_SCALE", 38); type.put("SQL_DATA_TYPE", 2); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", 10); types.add(type); type = new HashMap<>(32); //TYPE_NAME: NULL, DATA_TYPE: 0, PRECISION: 0, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: LENGTH, NULLABLE: 1, CASE_SENSITIVE: 1, // SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: NULL, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, // SQL_DATA_TYPE: 0,SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, type.put("TYPE_NAME", "NULL"); type.put("DATA_TYPE", Types.NULL); type.put("PRECISION", 0); type.put("LITERAL_PREFIX", "'"); type.put("LITERAL_SUFFIX", "'"); type.put("CREATE_PARMS", "length"); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", true); type.put("SEARCHABLE", typeSearchable); type.put("UNSIGNED_ATTRIBUTE", null); type.put("FIXED_PREC_SCALE", 0); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "NULL"); type.put("MINIMUM_SCALE", null); type.put("MAXIMUM_SCALE", null); type.put("SQL_DATA_TYPE", 0); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", null); //TYPE_NAME: ARRAY, DATA_TYPE: 12, PRECISION: 65500, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, // SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: ARRAY, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, // SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, types.add(type); type = new HashMap<>(32); type.put("TYPE_NAME", "ARRAY"); type.put("DATA_TYPE", Types.ARRAY); type.put("PRECISION", 65500); type.put("LITERAL_PREFIX", "'"); type.put("LITERAL_SUFFIX", "'"); type.put("CREATE_PARMS", "max length"); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", true); type.put("SEARCHABLE", typeSearchable); type.put("UNSIGNED_ATTRIBUTE", null); type.put("FIXED_PREC_SCALE", 0); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "ARRAY"); type.put("MINIMUM_SCALE", null); type.put("MAXIMUM_SCALE", null); type.put("SQL_DATA_TYPE", Types.VARCHAR); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", null); types.add(type); type = new HashMap<>(32); // TYPE_NAME: MISSING, DATA_TYPE: 12, PRECISION: 255, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, // SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: MISSING, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, // SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, type.put("TYPE_NAME", "MISSING"); type.put("DATA_TYPE", Types.VARCHAR); type.put("PRECISION", 255); type.put("LITERAL_PREFIX", "'"); type.put("LITERAL_SUFFIX", "'"); type.put("CREATE_PARMS", "max length"); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", true); type.put("SEARCHABLE", typeSearchable); type.put("UNSIGNED_ATTRIBUTE", null); type.put("FIXED_PREC_SCALE", 0); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "MISSING"); type.put("MINIMUM_SCALE", null); type.put("MAXIMUM_SCALE", null); type.put("SQL_DATA_TYPE", Types.VARCHAR); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", null); types.add(type); type = new HashMap<>(32); // TYPE_NAME: OBJECT, DATA_TYPE: 12, PRECISION: 65500, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, // SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: OBJECT, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, // SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, type.put("TYPE_NAME", "OBJECT"); type.put("DATA_TYPE", Types.VARCHAR); type.put("PRECISION", 65500); type.put("LITERAL_PREFIX", "'"); type.put("LITERAL_SUFFIX", "'"); type.put("CREATE_PARMS", "max length"); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", true); type.put("SEARCHABLE", typeSearchable); type.put("UNSIGNED_ATTRIBUTE", null); type.put("FIXED_PREC_SCALE", 0); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "OBJECT"); type.put("MINIMUM_SCALE", null); type.put("MAXIMUM_SCALE", null); type.put("SQL_DATA_TYPE", Types.VARCHAR); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", null); types.add(type); type = new HashMap<>(32); // TYPE_NAME: STRING, DATA_TYPE: 12, PRECISION: 510, LITERAL_PREFIX: ', LITERAL_SUFFIX: ', CREATE_PARAMS: max length, NULLABLE: 1, CASE_SENSITIVE: 1, // SEARCHABLE: 3, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: STRING, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, // SQL_DATA_TYPE: 12, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null, type.put("TYPE_NAME", "STRING"); type.put("DATA_TYPE", Types.VARCHAR); type.put("PRECISION", 510); type.put("LITERAL_PREFIX", "'"); type.put("LITERAL_SUFFIX", "'"); type.put("CREATE_PARMS", "max length"); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", true); type.put("SEARCHABLE", typeSearchable); type.put("UNSIGNED_ATTRIBUTE", null); type.put("FIXED_PREC_SCALE", 0); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "STRING"); type.put("MINIMUM_SCALE", null); type.put("MAXIMUM_SCALE", null); type.put("SQL_DATA_TYPE", Types.VARCHAR); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", null); types.add(type); type = new HashMap<>(32); // TYPE_NAME: BOOLEAN, DATA_TYPE: 16, PRECISION: 1, LITERAL_PREFIX: null, LITERAL_SUFFIX: null, CREATE_PARAMS: null, NULLABLE: 1, CASE_SENSITIVE: 0, // SEARCHABLE: 2, UNSIGNED_ATTRIBUTE: null, FIXED_PREC_SCALE: 0, AUTO_INCREMENT: null, LOCAL_TYPE_NAME: BOOLEAN, MINIMUM_SCALE: null, MAXIMUM_SCALE: null, // SQL_DATA_TYPE: 16, SQL_DATETIME_SUB: null, NUM_PREC_RADIX: null" type.put("TYPE_NAME", "BOOLEAN"); type.put("DATA_TYPE", Types.BOOLEAN); type.put("PRECISION", 1); type.put("LITERAL_PREFIX", null); type.put("LITERAL_SUFFIX", null); type.put("CREATE_PARMS", null); type.put("NULLABLE", typeNullable); type.put("CASE_SENSITIVE", false); type.put("SEARCHABLE", typePredBasic); type.put("UNSIGNED_ATTRIBUTE", null); type.put("FIXED_PREC_SCALE", 0); type.put("AUTO_INCREMENT", null); type.put("LOCAL_TYPE_NAME", "BOOLEAN"); type.put("MINIMUM_SCALE", null); type.put("MAXIMUM_SCALE", null); type.put("SQL_DATA_TYPE", Types.BOOLEAN); type.put("SQL_DATETIME_SUB",null); type.put("NUM_PREC_RADIX", null); types.add(type); @SuppressWarnings("unchecked") Map signature = new HashMap(); signature.put("TYPE_NAME","string"); signature.put("DATA_TYPE","numeric"); signature.put("PRECISION","numeric"); signature.put("LITERAL_PREFIX","string"); signature.put("LITERAL_SUFFIX","string"); signature.put("CREATE_PARMS","string"); signature.put("NULLABLE","numeric"); signature.put("CASE_SENSITIVE","boolean"); signature.put("SEARCHABLE","numeric"); signature.put("UNSIGNED_ATTRIBUTE","boolean"); signature.put("FIXED_PREC_SCALE","boolean"); signature.put("AUTO_INCREMENT","boolean"); signature.put("LOCAL_TYPE_NAME","string"); signature.put("MINIMUM_SCALE","numeric"); signature.put("MAXIMUM_SCALE","numeric"); signature.put("SQL_DATA_TYPE","numeric"); signature.put("SQL_DATETIME_SUB","numeric"); signature.put("NUM_PREC_RADIX","numeric"); CouchMetrics metrics = new CouchMetrics(); metrics.setResultCount(types.size()); // this just has to be not 0 metrics.setResultSize(2); CouchResponse couchResponse = new CouchResponse(); couchResponse.setResults(types); couchResponse.setMetrics(metrics); couchResponse.setSignature(signature); return new CBResultSet(null, couchResponse); } /** * Retrieves a description of the given table's indices and statistics. They are * ordered by NON_UNIQUE, TYPE, INDEX_NAME, and ORDINAL_POSITION. * *

Each index column description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. NON_UNIQUE boolean => Can index values be non-unique. * false when TYPE is tableIndexStatistic *
  5. INDEX_QUALIFIER String => index catalog (may be null); * null when TYPE is tableIndexStatistic *
  6. INDEX_NAME String => index name; null when TYPE is * tableIndexStatistic *
  7. TYPE short => index type: *
      *
    • tableIndexStatistic - this identifies table statistics that are * returned in conjuction with a table's index descriptions *
    • tableIndexClustered - this is a clustered index *
    • tableIndexHashed - this is a hashed index *
    • tableIndexOther - this is some other style of index *
    *
  8. ORDINAL_POSITION short => column sequence number * within index; zero when TYPE is tableIndexStatistic *
  9. COLUMN_NAME String => column name; null when TYPE is * tableIndexStatistic *
  10. ASC_OR_DESC String => column sort sequence, "A" => ascending, * "D" => descending, may be null if sort sequence is not supported; * null when TYPE is tableIndexStatistic *
  11. CARDINALITY int => When TYPE is tableIndexStatistic, then * this is the number of rows in the table; otherwise, it is the * number of unique values in the index. *
  12. PAGES int => When TYPE is tableIndexStatisic then * this is the number of pages used for the table, otherwise it * is the number of pages used for the current index. *
  13. FILTER_CONDITION String => Filter condition, if any. * (may be null) *
* * @param catalog a catalog name; must match the catalog name as it * is stored in this database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schema a schema name; must match the schema name * as it is stored in this database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param table a table name; must match the table name as it is stored * in this database * @param unique when true, return only indices for unique values; * when false, return indices regardless of whether unique or not * @param approximate when true, result is allowed to reflect approximate * or out of data values; when false, results are requested to be * accurate * @return ResultSet - each row is an index column description * @throws java.sql.SQLException if a database access error occurs */ @Override public ResultSet getIndexInfo(String catalog, String schema, String table, boolean unique, boolean approximate) throws SQLException { return getEmptyResultSet(); } /** * Retrieves whether this database supports the given result set type. * * @param type defined in java.sql.ResultSet * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @see Connection * @since 1.2 */ @Override public boolean supportsResultSetType(int type) throws SQLException { return type == ResultSet.TYPE_FORWARD_ONLY; } /** * Retrieves whether this database supports the given concurrency type * in combination with the given result set type. * * @param type defined in java.sql.ResultSet * @param concurrency type defined in java.sql.ResultSet * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @see Connection * @since 1.2 */ @Override public boolean supportsResultSetConcurrency(int type, int concurrency) throws SQLException { return false; } /** * Retrieves whether for the given type of ResultSet object, * the result set's own updates are visible. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if updates are visible for the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean ownUpdatesAreVisible(int type) throws SQLException { return false; } /** * Retrieves whether a result set's own deletes are visible. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if deletes are visible for the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean ownDeletesAreVisible(int type) throws SQLException { return false; } /** * Retrieves whether a result set's own inserts are visible. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if inserts are visible for the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean ownInsertsAreVisible(int type) throws SQLException { return false; } /** * Retrieves whether updates made by others are visible. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if updates made by others * are visible for the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean othersUpdatesAreVisible(int type) throws SQLException { return false; } /** * Retrieves whether deletes made by others are visible. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if deletes made by others * are visible for the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean othersDeletesAreVisible(int type) throws SQLException { return false; } /** * Retrieves whether inserts made by others are visible. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if inserts made by others * are visible for the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean othersInsertsAreVisible(int type) throws SQLException { return false; } /** * Retrieves whether or not a visible row update can be detected by * calling the method ResultSet.rowUpdated. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if changes are detected by the result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean updatesAreDetected(int type) throws SQLException { return false; } /** * Retrieves whether or not a visible row delete can be detected by * calling the method ResultSet.rowDeleted. If the method * deletesAreDetected returns false, it means that * deleted rows are removed from the result set. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if deletes are detected by the given result set type; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean deletesAreDetected(int type) throws SQLException { return false; } /** * Retrieves whether or not a visible row insert can be detected * by calling the method ResultSet.rowInserted. * * @param type the ResultSet type; one of * ResultSet.TYPE_FORWARD_ONLY, * ResultSet.TYPE_SCROLL_INSENSITIVE, or * ResultSet.TYPE_SCROLL_SENSITIVE * @return true if changes are detected by the specified result * set type; false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean insertsAreDetected(int type) throws SQLException { return false; } /** * Retrieves whether this database supports batch updates. * * @return true if this database supports batch upcates; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public boolean supportsBatchUpdates() throws SQLException { return true; } /** * Retrieves a description of the user-defined types (UDTs) defined * in a particular schema. Schema-specific UDTs may have type * JAVA_OBJECT, STRUCT, * or DISTINCT. * *

Only types matching the catalog, schema, type name and type * criteria are returned. They are ordered by DATA_TYPE, * TYPE_CAT, TYPE_SCHEM and * TYPE_NAME. The type name parameter may be a fully-qualified * name. In this case, the catalog and schemaPattern parameters are * ignored. * *

Each type description has the following columns: *

    *
  1. TYPE_CAT String => the type's catalog (may be null) *
  2. TYPE_SCHEM String => type's schema (may be null) *
  3. TYPE_NAME String => type name *
  4. CLASS_NAME String => Java class name *
  5. DATA_TYPE int => type value defined in java.sql.Types. * One of JAVA_OBJECT, STRUCT, or DISTINCT *
  6. REMARKS String => explanatory comment on the type *
  7. BASE_TYPE short => type code of the source type of a * DISTINCT type or the type that implements the user-generated * reference type of the SELF_REFERENCING_COLUMN of a structured * type as defined in java.sql.Types (null if DATA_TYPE is not * DISTINCT or not STRUCT with REFERENCE_GENERATION = USER_DEFINED) *
* *

Note: If the driver does not support UDTs, an empty * result set is returned. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema pattern name; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param typeNamePattern a type name pattern; must match the type name * as it is stored in the database; may be a fully qualified name * @param types a list of user-defined types (JAVA_OBJECT, * STRUCT, or DISTINCT) to include; null returns all types * @return ResultSet object in which each row describes a UDT * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.2 */ @Override public ResultSet getUDTs(String catalog, String schemaPattern, String typeNamePattern, int[] types) throws SQLException { List > udts = new ArrayList<>(2); CouchMetrics metrics = new CouchMetrics(); metrics.setResultCount(udts.size()); // this just has to be not 0 metrics.setResultSize(1); @SuppressWarnings("unchecked") Map signature = new HashMap(); CouchResponse couchResponse = new CouchResponse(); couchResponse.setResults(udts); couchResponse.setMetrics(metrics); couchResponse.setSignature(signature); return new CBResultSet(null, couchResponse); } /** * Retrieves the connection that produced this metadata object. * * * @return the connection that produced this metadata object * @throws java.sql.SQLException if a database access error occurs * @since 1.2 */ @Override public Connection getConnection() throws SQLException { return connection; } /** * Retrieves whether this database supports savepoints. * * @return true if savepoints are supported; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public boolean supportsSavepoints() throws SQLException { return false; } /** * Retrieves whether this database supports named parameters to callable * statements. * * @return true if named parameters are supported; * false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public boolean supportsNamedParameters() throws SQLException { return true; } /** * Retrieves whether it is possible to have multiple ResultSet objects * returned from a CallableStatement object * simultaneously. * * @return true if a CallableStatement object * can return multiple ResultSet objects * simultaneously; false otherwise * @throws java.sql.SQLException if a datanase access error occurs * @since 1.4 */ @Override public boolean supportsMultipleOpenResults() throws SQLException { return false; } /** * Retrieves whether auto-generated keys can be retrieved after * a statement has been executed * * @return true if auto-generated keys can be retrieved * after a statement has executed; false otherwise *

If true is returned, the JDBC driver must support the * returning of auto-generated keys for at least SQL INSERT statements * * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public boolean supportsGetGeneratedKeys() throws SQLException { return false; } /** * Retrieves a description of the user-defined type (UDT) hierarchies defined in a * particular schema in this database. Only the immediate super type/ * sub type relationship is modeled. * * Only supertype information for UDTs matching the catalog, * schema, and type name is returned. The type name parameter * may be a fully-qualified name. When the UDT name supplied is a * fully-qualified name, the catalog and schemaPattern parameters are * ignored. * * If a UDT does not have a direct super type, it is not listed here. * A row of the ResultSet object returned by this method * describes the designated UDT and a direct supertype. A row has the following * columns: *

    *
  1. TYPE_CAT String => the UDT's catalog (may be null) *
  2. TYPE_SCHEM String => UDT's schema (may be null) *
  3. TYPE_NAME String => type name of the UDT *
  4. SUPERTYPE_CAT String => the direct super type's catalog * (may be null) *
  5. SUPERTYPE_SCHEM String => the direct super type's schema * (may be null) *
  6. SUPERTYPE_NAME String => the direct super type's name *
* *

Note: If the driver does not support type hierarchies, an * empty result set is returned. * * @param catalog a catalog name; "" retrieves those without a catalog; * null means drop catalog name from the selection criteria * @param schemaPattern a schema name pattern; "" retrieves those * without a schema * @param typeNamePattern a UDT name pattern; may be a fully-qualified * name * @return a ResultSet object in which a row gives information * about the designated UDT * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.4 */ @Override public ResultSet getSuperTypes(String catalog, String schemaPattern, String typeNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the table hierarchies defined in a particular * schema in this database. * *

Only supertable information for tables matching the catalog, schema * and table name are returned. The table name parameter may be a fully- * qualified name, in which case, the catalog and schemaPattern parameters * are ignored. If a table does not have a super table, it is not listed here. * Supertables have to be defined in the same catalog and schema as the * sub tables. Therefore, the type description does not need to include * this information for the supertable. * *

Each type description has the following columns: *

    *
  1. TABLE_CAT String => the type's catalog (may be null) *
  2. TABLE_SCHEM String => type's schema (may be null) *
  3. TABLE_NAME String => type name *
  4. SUPERTABLE_NAME String => the direct super type's name *
* *

Note: If the driver does not support type hierarchies, an * empty result set is returned. * * @param catalog a catalog name; "" retrieves those without a catalog; * null means drop catalog name from the selection criteria * @param schemaPattern a schema name pattern; "" retrieves those * without a schema * @param tableNamePattern a table name pattern; may be a fully-qualified * name * @return a ResultSet object in which each row is a type description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.4 */ @Override public ResultSet getSuperTables(String catalog, String schemaPattern, String tableNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the given attribute of the given type * for a user-defined type (UDT) that is available in the given schema * and catalog. * * Descriptions are returned only for attributes of UDTs matching the * catalog, schema, type, and attribute name criteria. They are ordered by * TYPE_CAT, TYPE_SCHEM, * TYPE_NAME and ORDINAL_POSITION. This description * does not contain inherited attributes. * * The ResultSet object that is returned has the following * columns: *

    *
  1. TYPE_CAT String => type catalog (may be null) *
  2. TYPE_SCHEM String => type schema (may be null) *
  3. TYPE_NAME String => type name *
  4. ATTR_NAME String => attribute name *
  5. DATA_TYPE int => attribute type SQL type from java.sql.Types *
  6. ATTR_TYPE_NAME String => Data source dependent type name. * For a UDT, the type name is fully qualified. For a REF, the type name is * fully qualified and represents the target type of the reference type. *
  7. ATTR_SIZE int => column size. For char or date * types this is the maximum number of characters; for numeric or * decimal types this is precision. *
  8. DECIMAL_DIGITS int => the number of fractional digits. Null is returned for data types where * DECIMAL_DIGITS is not applicable. *
  9. NUM_PREC_RADIX int => Radix (typically either 10 or 2) *
  10. NULLABLE int => whether NULL is allowed *
      *
    • attributeNoNulls - might not allow NULL values *
    • attributeNullable - definitely allows NULL values *
    • attributeNullableUnknown - nullability unknown *
    *
  11. REMARKS String => comment describing column (may be null) *
  12. ATTR_DEF String => default value (may be null) *
  13. SQL_DATA_TYPE int => unused *
  14. SQL_DATETIME_SUB int => unused *
  15. CHAR_OCTET_LENGTH int => for char types the * maximum number of bytes in the column *
  16. ORDINAL_POSITION int => index of the attribute in the UDT * (starting at 1) *
  17. IS_NULLABLE String => ISO rules are used to determine * the nullability for a attribute. *
      *
    • YES --- if the attribute can include NULLs *
    • NO --- if the attribute cannot include NULLs *
    • empty string --- if the nullability for the * attribute is unknown *
    *
  18. SCOPE_CATALOG String => catalog of table that is the * scope of a reference attribute (null if DATA_TYPE isn't REF) *
  19. SCOPE_SCHEMA String => schema of table that is the * scope of a reference attribute (null if DATA_TYPE isn't REF) *
  20. SCOPE_TABLE String => table name that is the scope of a * reference attribute (null if the DATA_TYPE isn't REF) *
  21. SOURCE_DATA_TYPE short => source type of a distinct type or user-generated * Ref type,SQL type from java.sql.Types (null if DATA_TYPE * isn't DISTINCT or user-generated REF) *
* * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param typeNamePattern a type name pattern; must match the * type name as it is stored in the database * @param attributeNamePattern an attribute name pattern; must match the attribute * name as it is declared in the database * @return a ResultSet object in which each row is an * attribute description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.4 */ @Override public ResultSet getAttributes(String catalog, String schemaPattern, String typeNamePattern, String attributeNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves whether this database supports the given result set holdability. * * @param holdability one of the following constants: * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @see java.sql.Connection * @since 1.4 */ @Override public boolean supportsResultSetHoldability(int holdability) throws SQLException { return false; } /** * Retrieves this database's default holdability for ResultSet * objects. * * @return the default holdability; either * ResultSet.HOLD_CURSORS_OVER_COMMIT or * ResultSet.CLOSE_CURSORS_AT_COMMIT * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public int getResultSetHoldability() throws SQLException { return ResultSet.HOLD_CURSORS_OVER_COMMIT; } /** * Retrieves the major version number of the underlying database. * * @return the underlying database's major version * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public int getDatabaseMajorVersion() throws SQLException { return 1; } /** * Retrieves the minor version number of the underlying database. * * @return underlying database's minor version * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public int getDatabaseMinorVersion() throws SQLException { return 1; } /** * Retrieves the major JDBC version number for this * driver. * * @return JDBC version major number * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public int getJDBCMajorVersion() throws SQLException { return 4; } /** * Retrieves the minor JDBC version number for this * driver. * * @return JDBC version minor number * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public int getJDBCMinorVersion() throws SQLException { return (Integer.parseInt(System.getProperty("java.specification.version").split("\\.")[1]) == 8) ? 2:1; } /** * Indicates whether the SQLSTATE returned by SQLException.getSQLState * is X/Open (now known as Open Group) SQL CLI or SQL:2003. * * @return the type of SQLSTATE; one of: * sqlStateXOpen or * sqlStateSQL * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public int getSQLStateType() throws SQLException { return sqlStateSQL; } /** * Indicates whether updates made to a LOB are made on a copy or directly * to the LOB. * * @return true if updates are made to a copy of the LOB; * false if updates are made directly to the LOB * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public boolean locatorsUpdateCopy() throws SQLException { return false; } /** * Retrieves whether this database supports statement pooling. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.4 */ @Override public boolean supportsStatementPooling() throws SQLException { return false; } /** * Indicates whether or not this data source supports the SQL ROWID type, * and if so the lifetime for which a RowId object remains valid. * * The returned int values have the following relationship: *
     *     ROWID_UNSUPPORTED < ROWID_VALID_OTHER < ROWID_VALID_TRANSACTION
     *         < ROWID_VALID_SESSION < ROWID_VALID_FOREVER
     * 
* so conditional logic such as *
     *     if (metadata.getRowIdLifetime() > DatabaseMetaData.ROWID_VALID_TRANSACTION)
     * 
* can be used. Valid Forever means valid across all Sessions, and valid for * a Session means valid across all its contained Transactions. * * @return the status indicating the lifetime of a RowId * @throws java.sql.SQLException if a database access error occurs * @since 1.6 */ @Override public RowIdLifetime getRowIdLifetime() throws SQLException { return RowIdLifetime.ROWID_UNSUPPORTED; } /** * Retrieves the schema names available in this database. The results * are ordered by TABLE_CATALOG and * TABLE_SCHEM. * *

The schema columns are: *

    *
  1. TABLE_SCHEM String => schema name *
  2. TABLE_CATALOG String => catalog name (may be null) *
* * @param catalog a catalog name; must match the catalog name as it is stored * in the database;"" retrieves those without a catalog; null means catalog * name should not be used to narrow down the search. * @param schemaPattern a schema name; must match the schema name as it is * stored in the database; null means * schema name should not be used to narrow down the search. * @return a ResultSet object in which each row is a * schema description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.6 */ @Override public ResultSet getSchemas(String catalog, String schemaPattern) throws SQLException { String sql = "select name as TABLE_SCHEM, 'Couchbase' as TABLE_CATALOG from system:namespaces"; if (schemaPattern != null) { sql += " where name like '" + schemaPattern +"'"; } try( Statement statement = connection.createStatement()) { return statement.executeQuery( sql ); } } /** * Retrieves whether this database supports invoking user-defined or vendor functions * using the stored procedure escape syntax. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.6 */ @Override public boolean supportsStoredFunctionsUsingCallSyntax() throws SQLException { return false; } /** * Retrieves whether a SQLException while autoCommit is true inidcates * that all open ResultSets are closed, even ones that are holdable. When a SQLException occurs while * autocommit is true, it is vendor specific whether the JDBC driver responds with a commit operation, a * rollback operation, or by doing neither a commit nor a rollback. A potential result of this difference * is in whether or not holdable ResultSets are closed. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.6 */ @Override public boolean autoCommitFailureClosesAllResultSets() throws SQLException { return false; } /** * Retrieves a list of the client info properties * that the driver supports. The result set contains the following columns * *
    *
  1. NAME String=> The name of the client info property
    *
  2. MAX_LEN int=> The maximum length of the value for the property
    *
  3. DEFAULT_VALUE String=> The default value of the property
    *
  4. DESCRIPTION String=> A description of the property. This will typically * contain information as to where this property is * stored in the database. *
* * The ResultSet is sorted by the NAME column * * * @return A ResultSet object; each row is a supported client info * property * * @throws java.sql.SQLException if a database access error occurs * * @since 1.6 */ @Override public ResultSet getClientInfoProperties() throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the system and user functions available * in the given catalog. * * Only system and user function descriptions matching the schema and * function name criteria are returned. They are ordered by * FUNCTION_CAT, FUNCTION_SCHEM, * FUNCTION_NAME and * SPECIFIC_ NAME. * *

Each function description has the the following columns: *

    *
  1. FUNCTION_CAT String => function catalog (may be null) *
  2. FUNCTION_SCHEM String => function schema (may be null) *
  3. FUNCTION_NAME String => function name. This is the name * used to invoke the function *
  4. REMARKS String => explanatory comment on the function *
  5. FUNCTION_TYPE short => kind of function: *
      *
    • functionResultUnknown - Cannot determine if a return value * or table will be returned *
    • functionNoTable- Does not return a table *
    • functionReturnsTable - Returns a table *
    *
  6. SPECIFIC_NAME String => the name which uniquely identifies * this function within its schema. This is a user specified, or DBMS * generated, name that may be different then the FUNCTION_NAME * for example with overload functions *
* * A user may not have permission to execute any of the functions that are * returned by getFunctions * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param functionNamePattern a function name pattern; must match the * function name as it is stored in the database * @return ResultSet - each row is a function description * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.6 */ @Override public ResultSet getFunctions(String catalog, String schemaPattern, String functionNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the given catalog's system or user * function parameters and return type. * *

Only descriptions matching the schema, function and * parameter name criteria are returned. They are ordered by * FUNCTION_CAT, FUNCTION_SCHEM, * FUNCTION_NAME and * SPECIFIC_ NAME. Within this, the return value, * if any, is first. Next are the parameter descriptions in call * order. The column descriptions follow in column number order. * *

Each row in the ResultSet * is a parameter description, column description or * return type description with the following fields: *

    *
  1. FUNCTION_CAT String => function catalog (may be null) *
  2. FUNCTION_SCHEM String => function schema (may be null) *
  3. FUNCTION_NAME String => function name. This is the name * used to invoke the function *
  4. COLUMN_NAME String => column/parameter name *
  5. COLUMN_TYPE Short => kind of column/parameter: *
      *
    • functionColumnUnknown - nobody knows *
    • functionColumnIn - IN parameter *
    • functionColumnInOut - INOUT parameter *
    • functionColumnOut - OUT parameter *
    • functionColumnReturn - function return value *
    • functionColumnResult - Indicates that the parameter or column * is a column in the ResultSet *
    *
  6. DATA_TYPE int => SQL type from java.sql.Types *
  7. TYPE_NAME String => SQL type name, for a UDT type the * type name is fully qualified *
  8. PRECISION int => precision *
  9. LENGTH int => length in bytes of data *
  10. SCALE short => scale - null is returned for data types where * SCALE is not applicable. *
  11. RADIX short => radix *
  12. NULLABLE short => can it contain NULL. *
      *
    • functionNoNulls - does not allow NULL values *
    • functionNullable - allows NULL values *
    • functionNullableUnknown - nullability unknown *
    *
  13. REMARKS String => comment describing column/parameter *
  14. CHAR_OCTET_LENGTH int => the maximum length of binary * and character based parameters or columns. For any other datatype the returned value * is a NULL *
  15. ORDINAL_POSITION int => the ordinal position, starting * from 1, for the input and output parameters. A value of 0 * is returned if this row describes the function's return value. * For result set columns, it is the * ordinal position of the column in the result set starting from 1. *
  16. IS_NULLABLE String => ISO rules are used to determine * the nullability for a parameter or column. *
      *
    • YES --- if the parameter or column can include NULLs *
    • NO --- if the parameter or column cannot include NULLs *
    • empty string --- if the nullability for the * parameter or column is unknown *
    *
  17. SPECIFIC_NAME String => the name which uniquely identifies * this function within its schema. This is a user specified, or DBMS * generated, name that may be different then the FUNCTION_NAME * for example with overload functions *
* *

The PRECISION column represents the specified column size for the given * parameter or column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param functionNamePattern a procedure name pattern; must match the * function name as it is stored in the database * @param columnNamePattern a parameter name pattern; must match the * parameter or column name as it is stored in the database * @return ResultSet - each row describes a * user function parameter, column or return type * @throws java.sql.SQLException if a database access error occurs * @see #getSearchStringEscape * @since 1.6 */ @Override public ResultSet getFunctionColumns(String catalog, String schemaPattern, String functionNamePattern, String columnNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves a description of the pseudo or hidden columns available * in a given table within the specified catalog and schema. * Pseudo or hidden columns may not always be stored within * a table and are not visible in a ResultSet unless they are * specified in the query's outermost SELECT list. Pseudo or hidden * columns may not necessarily be able to be modified. If there are * no pseudo or hidden columns, an empty ResultSet is returned. * *

Only column descriptions matching the catalog, schema, table * and column name criteria are returned. They are ordered by * TABLE_CAT,TABLE_SCHEM, TABLE_NAME * and COLUMN_NAME. * *

Each column description has the following columns: *

    *
  1. TABLE_CAT String => table catalog (may be null) *
  2. TABLE_SCHEM String => table schema (may be null) *
  3. TABLE_NAME String => table name *
  4. COLUMN_NAME String => column name *
  5. DATA_TYPE int => SQL type from java.sql.Types *
  6. COLUMN_SIZE int => column size. *
  7. DECIMAL_DIGITS int => the number of fractional digits. Null is returned for data types where * DECIMAL_DIGITS is not applicable. *
  8. NUM_PREC_RADIX int => Radix (typically either 10 or 2) *
  9. COLUMN_USAGE String => The allowed usage for the column. The * value returned will correspond to the enum name returned by {@link java.sql.PseudoColumnUsage#name PseudoColumnUsage.name()} *
  10. REMARKS String => comment describing column (may be null) *
  11. CHAR_OCTET_LENGTH int => for char types the * maximum number of bytes in the column *
  12. IS_NULLABLE String => ISO rules are used to determine the nullability for a column. *
      *
    • YES --- if the column can include NULLs *
    • NO --- if the column cannot include NULLs *
    • empty string --- if the nullability for the column is unknown *
    *
* *

The COLUMN_SIZE column specifies the column size for the given column. * For numeric data, this is the maximum precision. For character data, this is the length in characters. * For datetime datatypes, this is the length in characters of the String representation (assuming the * maximum allowed precision of the fractional seconds component). For binary data, this is the length in bytes. For the ROWID datatype, * this is the length in bytes. Null is returned for data types where the * column size is not applicable. * * @param catalog a catalog name; must match the catalog name as it * is stored in the database; "" retrieves those without a catalog; * null means that the catalog name should not be used to narrow * the search * @param schemaPattern a schema name pattern; must match the schema name * as it is stored in the database; "" retrieves those without a schema; * null means that the schema name should not be used to narrow * the search * @param tableNamePattern a table name pattern; must match the * table name as it is stored in the database * @param columnNamePattern a column name pattern; must match the column * name as it is stored in the database * @return ResultSet - each row is a column description * @throws java.sql.SQLException if a database access error occurs * @see java.sql.PseudoColumnUsage * @since 1.7 */ @Override public ResultSet getPseudoColumns(String catalog, String schemaPattern, String tableNamePattern, String columnNamePattern) throws SQLException { return getEmptyResultSet(); } /** * Retrieves whether a generated key will always be returned if the column * name(s) or index(es) specified for the auto generated key column(s) * are valid and the statement succeeds. The key that is returned may or * may not be based on the column(s) for the auto generated key. * Consult your JDBC driver documentation for additional details. * * @return true if so; false otherwise * @throws java.sql.SQLException if a database access error occurs * @since 1.7 */ @Override public boolean generatedKeyAlwaysReturned() throws SQLException { return false; } /** * Returns an object that implements the given interface to allow access to * non-standard methods, or standard methods not exposed by the proxy. * * If the receiver implements the interface then the result is the receiver * or a proxy for the receiver. If the receiver is a wrapper * and the wrapped object implements the interface then the result is the * wrapped object or a proxy for the wrapped object. Otherwise return the * the result of calling unwrap recursively on the wrapped object * or a proxy for that result. If the receiver is not a * wrapper and does not implement the interface, then an SQLException is thrown. * * @param iface A Class defining an interface that the result must implement. * @return an object that implements the interface. May be a proxy for the actual implementing object. * @throws java.sql.SQLException If no object found that implements the interface * @since 1.6 */ @Override public T unwrap(Class iface) throws SQLException { if (iface.isAssignableFrom(getClass())) { return iface.cast(this); } throw new SQLException("Cannot unwrap to " + iface.getName()); } /** * Returns true if this either implements the interface argument or is directly or indirectly a wrapper * for an object that does. Returns false otherwise. If this implements the interface then return true, * else if this is a wrapper then return the result of recursively calling isWrapperFor on the wrapped * object. If this does not implement the interface and is not a wrapper, return false. * This method should be implemented as a low-cost operation compared to unwrap so that * callers can use this method to avoid expensive unwrap calls that may fail. If this method * returns true then calling unwrap with the same argument should succeed. * * @param iface a Class defining an interface. * @return true if this implements the interface or directly or indirectly wraps an object that does. * @throws java.sql.SQLException if an error occurs while determining whether this is a wrapper * for an object with the given interface. * @since 1.6 */ @Override public boolean isWrapperFor(Class iface) throws SQLException { return iface.isAssignableFrom(getClass()); } private ResultSet getEmptyResultSet() { List types = new ArrayList(); Map signature = new HashMap(); CouchMetrics metrics = new CouchMetrics(); metrics.setResultCount(types.size()); // this just has to be not 0 metrics.setResultSize(2); CouchResponse couchResponse = new CouchResponse(); couchResponse.setResults(types); couchResponse.setMetrics(metrics); //noinspection unchecked couchResponse.setSignature(signature); return new CBResultSet(null, couchResponse); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy