Class VerticaDialect

  • All Implemented Interfaces:
    Dialect

    public class VerticaDialect
    extends JdbcDialectImpl
    Implementation of Dialect for the Vertica database.
    Since:
    Sept 11, 2009
    Author:
    Pedro Alves
    • Constructor Detail

    • Method Detail

      • allowsMultipleCountDistinct

        public boolean allowsMultipleCountDistinct()
        Description copied from interface: Dialect
        Returns whether this Dialect supports more than one distinct aggregation in the same query.

        In Derby 10.1,

        select couunt(distinct x) from t
        is OK, but
        select couunt(distinct x), count(distinct y) from t
        gives "Multiple DISTINCT aggregates are not supported at this time."
        Specified by:
        allowsMultipleCountDistinct in interface Dialect
        Overrides:
        allowsMultipleCountDistinct in class JdbcDialectImpl
        Returns:
        whether this Dialect supports more than one distinct aggregation in the same query
      • allowsCountDistinctWithOtherAggs

        public boolean allowsCountDistinctWithOtherAggs()
        Description copied from interface: Dialect
        Returns whether this Dialect supports distinct aggregations with other aggregations in the same query. This may be enabled for performance reasons (Vertica)
        Specified by:
        allowsCountDistinctWithOtherAggs in interface Dialect
        Overrides:
        allowsCountDistinctWithOtherAggs in class JdbcDialectImpl
        Returns:
        whether this Dialect supports more than one distinct aggregation in the same query
      • generateInline

        public String generateInline​(List<String> columnNames,
                                     List<String> columnTypes,
                                     List<String[]> valueList)
        Description copied from interface: Dialect
        Generates a SQL statement to represent an inline dataset.

        For example, for Oracle, generates

         SELECT 1 AS FOO, 'a' AS BAR FROM dual
         UNION ALL
         SELECT 2 AS FOO, 'b' AS BAR FROM dual
         

        For ANSI SQL, generates:

         VALUES (1, 'a'), (2, 'b')
         
        Specified by:
        generateInline in interface Dialect
        Overrides:
        generateInline in class JdbcDialectImpl
        Parameters:
        columnNames - List of column names
        columnTypes - List of column types ("String" or "Numeric")
        valueList - List of rows values
        Returns:
        SQL string
      • getType

        public SqlStatement.Type getType​(ResultSetMetaData metaData,
                                         int columnIndex)
                                  throws SQLException
        Description copied from interface: Dialect

        Chooses the most appropriate type for accessing the values of a column in a result set for a dialect.

        Dialect-specific nuances involving type representation should be encapsulated in implementing methods. For example, if a dialect has implicit rules involving scale or precision, they should be handled within this method so the client can simply retrieve the "best fit" SqlStatement.Type for the column.

        Specified by:
        getType in interface Dialect
        Overrides:
        getType in class JdbcDialectImpl
        Parameters:
        metaData - Results set metadata
        columnIndex - Column ordinal (0-based)
        Returns:
        the most appropriate SqlStatement.Type for the column
        Throws:
        SQLException
      • supportsMultiValueInExpr

        public boolean supportsMultiValueInExpr()
        Description copied from interface: Dialect
        Returns true if this dialect supports multi-value IN expressions. E.g., WHERE (col1, col2) IN ((val1a, val2a), (val1b, val2b))
        Specified by:
        supportsMultiValueInExpr in interface Dialect
        Overrides:
        supportsMultiValueInExpr in class JdbcDialectImpl
        Returns:
        true if the dialect supports multi-value IN expressions
      • generateRegularExpression

        public String generateRegularExpression​(String source,
                                                String javaRegex)
        Description copied from interface: Dialect
        Must generate a String representing a regular expression match operation between a string literal and a Java regular expression. The string literal might be a column identifier or some other identifier, but the implementation must presume that it is already escaped and fit for use. The regular expression is not escaped and must be adapted to the proper dialect rules.

        Postgres / Greenplum example:

        generateRegularExpression( "'foodmart'.'customer_name'", "(?i).*oo.*") -> 'foodmart'.'customer_name' ~ "(?i).*oo.*"

        Oracle example:

        generateRegularExpression( "'foodmart'.'customer_name'", ".*oo.*") -> REGEXP_LIKE('foodmart'.'customer_name', ".*oo.*")

        Dialects are allowed to return null if the dialect cannot convert that particular regular expression into something that the database would support.

        Specified by:
        generateRegularExpression in interface Dialect
        Overrides:
        generateRegularExpression in class JdbcDialectImpl
        Parameters:
        source - A String identifying the column to match against.
        javaRegex - A Java regular expression to match against.
        Returns:
        A dialect specific matching operation, or null if the dialect cannot convert that particular regular expression into something that the database would support.