Modifier and Type | Class and Description |
---|---|
private static class |
P2JPostgreSQLDialect.Aggregator |
private static class |
P2JPostgreSQLDialect.Context
Context local data needed by this object to perform dialect-specific
processing.
|
private static class |
P2JPostgreSQLDialect.FWDBlob
Read-only implementation of a BLOB instance, to be used by the JDBC driver.
|
private static class |
P2JPostgreSQLDialect.FWDClob
Read-only implementation of a CLOB instance, to be used by the JDBC driver.
|
class |
P2JPostgreSQLDialect.PgScriptSplitter
Splitter for DDL scripts.
|
static class |
P2JPostgreSQLDialect.UDF_TYPE
UDF types
|
Dialect.WeightAggregator
Modifier and Type | Field and Description |
---|---|
private static java.util.List<java.lang.String> |
AFTER_INSERT_TRIGGER
AFTER INSERT trigger for words tables' support template
|
private static java.util.List<java.lang.String> |
AFTER_UPDATE_TRIGGER
AFTER UPDATE trigger for words tables' support template
|
private static boolean |
debug
Debug level logging enabled?
|
private static int |
DEFAULT_VACUUM_INTERVAL
Default minimum interval in seconds between temp table vacuums
|
private static java.lang.String |
DROP_TRIGGER
DROP TRIGGER statement
|
private static java.util.Map<java.lang.String,java.lang.String> |
fwd2sql
Mapping between the FWD possible field/column types and their SQL counterparts.
|
private static java.sql.Date |
highDate
Highest date supported by PostgreSQL (12/31/32767 AD)
|
private static java.lang.ThreadLocal<java.lang.Boolean> |
inlineLimit
Flag indicating whether to inline a record limit in an SQL SELECT
|
private static java.util.List<java.lang.String> |
INS_TRIGGER_FUNC_CEXT
ON INSERT trigger function for words tables' support template (custom extent field)
|
private static java.lang.String |
INS_TRIGGER_LINE
Repeatable line template for the ON INSERT trigger function for words tables'
support template (custom extent field)
|
private static java.util.logging.Logger |
LOG
Logger
|
private static java.sql.Date |
lowDate
Lowest date supported by PostgreSQL (01/01/4713 BC)
|
private static java.lang.String |
PK
Name of the primary key column.
|
private static java.util.List<java.lang.String> |
TRIGGER_FUNC
trigger function for words tables' support template
|
private static java.util.List<java.lang.String> |
TRIGGER_FUNC_CEXT
trigger function for words tables' support template (custom extent field)
|
private static java.util.List<java.lang.String> |
TRIGGER_FUNC_EXT
trigger function for words tables' support template (extent field)
|
private static java.util.regex.Pattern |
UDF_ERROR_MESSAGE
Regex Pattern for parsing message cased by error raised by UDF.
|
private static boolean |
useCte4Contains
Allow runtime switch between using CTE for word tables and IN (SELECT ...)
|
private static boolean |
useMixedMode4Contains
Allow runtime switch between 'pure' CTE mode and a 'mixed' one
|
private static boolean |
useUdf4Contains
Allow runtime switch between word tables and UDF
|
private static long |
vacuumInterval
Actual minimum interval in milliseconds between temp table vacuums
|
private static Dialect.WeightAggregator |
WEIGHT_AGGREGATOR
Weights' aggregator
|
Constructor and Description |
---|
P2JPostgreSQLDialect()
Default constructor.
|
Modifier and Type | Method and Description |
---|---|
void |
addRtrimmedExpression(java.lang.String expr,
java.lang.StringBuilder sb)
Composes a rtrim equivalent call for a specified expr.
|
java.sql.Blob |
blobCreator(java.sql.Connection conn,
byte[] bytes)
Create a
Blob instance from the specified bytes. |
java.lang.String |
buildRemoteURL(java.lang.String url,
Database database)
Build the URL to be used for a remote connection, based on the given URL and database.
|
java.sql.Clob |
clobCreator(java.sql.Connection conn,
java.lang.String value)
Create a
Clob instance from the specified value. |
java.lang.Object |
createContext(Persistence persistence)
Create a data object, the purpose of which is specific to a particular
dialect implementation, to be stored as a context-local object.
|
SequenceHandler |
createSequenceHandler(java.lang.String ldbName)
Creates and returns a
SequenceHandler for a PostgresSQL database. |
boolean |
explicitSetCollation()
Check if the dialect needs to set an explicit collation during schema
DDL generation.
|
java.lang.String |
extractColumnName(java.lang.String expr)
Given a column expression as queried from database metadata, extract the root name of a
column.
|
java.lang.String |
formatDate(date d)
Format a date object as a string which is appropriate for use in an SQL
statement.
|
void |
generateWordTablesDDLImpl(java.lang.String dbName,
java.io.PrintStream out,
java.lang.String eoln,
java.util.Collection<WordTable> wordTables)
Worker method for
generateTriggerDDLs() . |
java.lang.String |
getAnalyzeString(java.lang.String table)
Construct and return a string which represents the
analyze or similar statements
for this dialect. |
java.lang.String |
getComputedColumnFormula(java.lang.String colName,
boolean ignoreCase)
Returns the formula for character computed columns.
|
java.lang.String |
getCreateSequenceString(java.lang.String name)
Generate a DDL string which will create a global sequence.
|
java.lang.String |
getCreateSequenceString(java.lang.String name,
long start)
Generate a DDL string which will create a global sequence with the given starting value.
|
java.lang.String |
getCreateSequenceString(java.lang.String name,
java.lang.Long init,
java.lang.Long increment,
java.lang.Long minVal,
java.lang.Long maxVal,
java.lang.Boolean cycle)
Generate a DDL string which will create a sequence with given properties.
|
java.lang.String |
getCreateTemporaryTablePostfix()
Return the ending of the DDL statement that creates a temporary table.
|
java.lang.String |
getCreateTemporaryTableString(boolean ifNotExist)
Return the beginning of the DDL statement that creates a temporary table.
|
java.util.List<java.lang.String> |
getDatabasePrepareStatements(Database database)
Get a list of database prepare DDL statements.
|
java.lang.String |
getDelimiter()
Get the statement delimiter for this dialect.
|
java.lang.String |
getDriverClassName()
Get the name of the JDBC driver class associated with this dialect.
|
java.lang.String |
getDropIndexString(boolean ifExists,
java.lang.String idxName)
Obtain a DDL statement which drops a SQL index.
|
java.lang.String |
getDropIndexString(P2JIndex index)
Build the DDL to drop an index based upon the specified definition.
|
java.lang.String |
getDropSequenceString(java.lang.String name)
Generate a DDL string which will drop a sequence.
|
java.lang.String |
getDropTableString(boolean ifExists,
java.lang.String tableName)
Obtain a DDL statement which drops a SQL table.
|
java.sql.Date |
getHighDate()
Retrieve the latest possible date value which is valid for the backing
database.
|
int |
getIndexLengthLimit()
Some dialects do have constraints about the maximum size of fields that compose an index.
|
java.lang.String |
getJdbcDatabaseType()
Get the name of the JDBC database type (as in JBC URL).
|
java.lang.String |
getLimitString(java.lang.String sql,
int offset,
int limit)
Override the parent's implementation to inline small (2 or less) limit
values when there is no accompanying offset.
|
java.sql.Date |
getLowDate()
Retrieve the earliest possible date value which is valid for the
backing database.
|
int |
getMaxParameterCount()
Obtain the number of parameters a query of this dialect is allowed by the database server.
|
java.lang.String |
getProcessedCharacterColumnName(java.lang.String name,
boolean ignoreCase)
Adjust a character column name appropriate to this dialect, such that it
can be inserted into an index.
|
static java.util.List<java.lang.String> |
getReservedKeywords()
Get a collection of reserved keywords specific to this dialect.
|
java.lang.String |
getSequenceCurrValString(java.lang.String sequenceName)
Generate the appropriate select statement to reset the value of a sequence.
|
java.lang.String |
getSequenceNextValString(java.lang.String sequenceName)
Generate the appropriate select statement to retrieve the next value of a sequence.
|
java.lang.String |
getSequencePrefetchString(java.lang.String sequenceName)
Generate the appropriate select statement to pre-fetch multiple, ascending values from a
sequence.
|
java.lang.String |
getSequenceSetValString(java.lang.String sequenceName,
long newVal)
Generate the appropriate select statement to retrieve the next value of a sequence.
|
java.lang.String |
getSpecificTypeAsString(FqlType type)
Converts and return the specified
FqlType to a string representation which can be used in a
SQL query (cast or other construct). |
java.lang.String |
getSqlMappedType(java.lang.String fwdType,
int scale)
Get the SQL mapping for a specific FWD data type.
|
int |
getSyntheticIndexSize(boolean unique)
Returns the size of the synthetic part of the index.
|
java.util.regex.Pattern |
getUdfErrorMessagePattern()
Get regex Pattern for parsing message cased by error raised by UDF.
|
private static long |
getVacuumInterval()
Report the minimum number of milliseconds between explicit vacuums.
|
boolean |
hasFullSequenceSupport()
Returns
true if this dialect fully support the sequences as
4GL language (most important: bounded values, cycle). |
java.lang.String |
id()
Get dialect id.
|
boolean |
injectComputedColumns()
Report whether the computed columns should be injected on table creating.
|
void |
inlineLimit(boolean on)
Enable/disable limit clause inlining.
|
boolean |
isCaseInsensitiveColumn(java.lang.String name)
Report whether the given column name represents an alias or an
expression which indicates the column is case insensitive.
|
boolean |
isComputedColumn(java.lang.String name)
Report whether the given column name represents an alias or an expression which indicates
the column is computed.
|
boolean |
isConnectionError(java.lang.Exception exc)
Given an exception, this method will check if it indicates a database
connectivity error.
|
boolean |
isMetadataSortAsc(java.lang.String value)
Check if the given value is an ascending clause for a column index.
|
boolean |
isMetadataSortDesc(java.lang.String value)
Check if the given value is a descending clause for a column index.
|
boolean |
isQueryRangeParameterInlined()
Indicate whether a query parameter which is part of a range check should
be inlined into the where clause, or whether it should be substituted
into a prepared statement.
|
boolean |
isUdfOriginated(java.sql.SQLException e)
Check if the exception was caused by error in UDF.
|
boolean |
needsComputedColumns()
Indicate whether this dialect requires computed columns to participate
within index definitions, instead of embedded expressions.
|
void |
postTransaction(Persistence persistence,
java.lang.Object context,
boolean rollback)
A dialect-specific callback hook which is invoked by the persistence
runtime framework after a transaction is complete.
|
java.lang.String |
prepareMetadataParameter(java.lang.String param)
Prepare the given metadata query parameter by making it lowercase.
|
java.lang.String |
processMetadataResult(java.lang.String value)
Process the given metadata query result, by making it lowercase.
|
boolean |
requiresExplicitCastInsideTernary()
Determines whether substitution parameters should be explicitly casted
to their datatypes inside "then ? else ?" statement.
|
ScriptSplitter |
scripSplitter()
Get the splitter for DDL scripts.
|
boolean |
supportsBooleanDatatype()
Indicates whether this dialect supports boolean datatype.
|
boolean |
supportsFunctionOverloading()
Indicate whether this dialect natively supports the overloading of user
defined functions by parameter number and data type.
|
boolean |
supportsVariableLimit()
Indicate whether a variable limit is supported by this dialect.
|
boolean |
useCTE4Contains()
Check if Common Table Expressions should be used for converted CONTAINS operator
|
boolean |
useMixedNode4Contains()
Check if mixed mode re-write should be used for converted CONTAINS operator
|
boolean |
useUdf4Contains()
Check if UDF should be used for converted CONTAINS operator
|
java.util.Optional<Dialect.WeightAggregator> |
weightAggregator()
Get the WeightAggregator instance for the dialect if defined
|
private static java.util.List<java.util.List<java.lang.String>> |
wordsFunc(boolean allowSwitchingBetweenUdfs,
boolean useJavaWordsUDF)
words function template
|
private static java.util.List<java.util.List<java.lang.String>> |
wordsFuncExt(boolean allowSwitchingBetweenUdfs,
boolean useJavaWordsUDF)
words function template (extent field)
|
beforeDriverLoad, computeIndexKeySize, containsUdfName, dialects, getComputedColumnPrefix, getCreateIndexString, getCreateIndexString, getCreateTableString, getDialect, getDialect, getDialect, getSqlMappedType, isUdfContains, orderByNulls, quote
private static final java.util.logging.Logger LOG
private static final boolean useUdf4Contains
private static final boolean useCte4Contains
private static final boolean useMixedMode4Contains
private static final java.util.regex.Pattern UDF_ERROR_MESSAGE
private static final Dialect.WeightAggregator WEIGHT_AGGREGATOR
private static final java.lang.String PK
private static final java.util.List<java.lang.String> TRIGGER_FUNC
private static final java.util.List<java.lang.String> TRIGGER_FUNC_EXT
private static final java.util.List<java.lang.String> TRIGGER_FUNC_CEXT
private static final java.util.List<java.lang.String> INS_TRIGGER_FUNC_CEXT
private static final java.lang.String INS_TRIGGER_LINE
private static final java.util.List<java.lang.String> AFTER_INSERT_TRIGGER
private static final java.util.List<java.lang.String> AFTER_UPDATE_TRIGGER
private static final java.lang.String DROP_TRIGGER
private static final int DEFAULT_VACUUM_INTERVAL
private static final boolean debug
private static final java.lang.ThreadLocal<java.lang.Boolean> inlineLimit
private static final java.sql.Date lowDate
private static final java.sql.Date highDate
private static long vacuumInterval
private static java.util.Map<java.lang.String,java.lang.String> fwd2sql
public P2JPostgreSQLDialect()
We provide this constructor to override the superclass' mapping of
Types.VARCHAR
, in order to force this type to map to
PostgreSQL's text
data type.
private static final java.util.List<java.util.List<java.lang.String>> wordsFunc(boolean allowSwitchingBetweenUdfs, boolean useJavaWordsUDF)
private static java.util.List<java.util.List<java.lang.String>> wordsFuncExt(boolean allowSwitchingBetweenUdfs, boolean useJavaWordsUDF)
public static java.util.List<java.lang.String> getReservedKeywords()
NameConverter
uses thes list to create an exclusion
list of names so there will not be schema collisions with identifiers (tables, fields) from
the generated schema.private static long getVacuumInterval()
public java.lang.String getDriverClassName()
getDriverClassName
in class Dialect
public java.lang.String getJdbcDatabaseType()
getJdbcDatabaseType
in class Dialect
public boolean needsComputedColumns()
needsComputedColumns
in class Dialect
false
to indicate the backing database can embed
an expression within an index definition.public boolean supportsFunctionOverloading()
supportsFunctionOverloading
in class Dialect
true
.public boolean supportsBooleanDatatype()
true
and false
literals;
supportsBooleanDatatype
in class Dialect
true
, all the above mentioned items are supported.public java.lang.Object createContext(Persistence persistence)
Since the context-local data is specific to a particular dialect
implementation, it is optional. Dialect implementations which do not
have a need for this data should simply return null
.
createContext
in class Dialect
persistence
- Provider of persistence services.null
.public void postTransaction(Persistence persistence, java.lang.Object context, boolean rollback) throws PersistenceException
postTransaction
in class Dialect
persistence
- Provider of persistence services.context
- Optional, context-local data created previously by createContext(com.goldencode.p2j.persist.Persistence)
.rollback
- true
if transaction ended with a rollback;
false
if transaction ended with a commit.PersistenceException
- if any persistence-related error occurs.public java.sql.Date getLowDate()
getLowDate
in class Dialect
public java.sql.Date getHighDate()
getHighDate
in class Dialect
public java.lang.String formatDate(date d)
formatDate
in class Dialect
d
- Date to be formatted as a string.public java.lang.String extractColumnName(java.lang.String expr)
upper(rtrim("key"::text))We are interested only in the
key
root name, so we strip away the upper()
and rtrim()
functions the double quotes, and the ::text
suffix.extractColumnName
in class Dialect
expr
- Expression containing column name as natively represented by the database dialect.public java.lang.String getProcessedCharacterColumnName(java.lang.String name, boolean ignoreCase)
ignoreCase
is true
,
an upper function.getProcessedCharacterColumnName
in class Dialect
name
- Base column name.ignoreCase
- true
to cause case to be ignored, else false
.public boolean isCaseInsensitiveColumn(java.lang.String name)
name
is already determined to be the
appropriate data type for textual data.isCaseInsensitiveColumn
in class Dialect
name
- Column name, alias, or expression.true
if name
represents case-insensitive data.public boolean isComputedColumn(java.lang.String name)
name
is
already determined to be the appropriate data type for textual data.isComputedColumn
in class Dialect
name
- Column name, alias, or expression.true
if name
represents a computed column.public java.lang.String getCreateSequenceString(java.lang.String name)
getCreateSequenceString
in class Dialect
name
- Sequence name.null
if not supported.public java.lang.String getCreateSequenceString(java.lang.String name, long start)
getCreateSequenceString
in class Dialect
name
- Sequence name.start
- Sequence starting value.null
if not supported.public java.lang.String getCreateSequenceString(java.lang.String name, java.lang.Long init, java.lang.Long increment, java.lang.Long minVal, java.lang.Long maxVal, java.lang.Boolean cycle)
getCreateSequenceString
in class Dialect
name
- Sequence name. Mandatory not null.init
- Sequence starting value. Mandatory(not null).increment
- Sequence incrementing value. Mandatory(not null).minVal
- Sequence minimum value. Optional (may be null).maxVal
- Sequence maximum value. Optional (may be null).cycle
- Sequence cycling property. Optional, if missing assumed not cycling.null
if
not supported.public java.lang.String getDropSequenceString(java.lang.String name)
getDropSequenceString
in class Dialect
name
- The name of the sequence to be dropped.null
if not supported.public java.lang.String getSequenceSetValString(java.lang.String sequenceName, long newVal)
getSequenceSetValString
in class Dialect
sequenceName
- The name of the sequence.newVal
- The new value to be set.null
if not supported.public java.lang.String getSequenceNextValString(java.lang.String sequenceName)
getSequenceNextValString
in class Dialect
sequenceName
- The name of the sequence to be queried.null
if not supported.public java.lang.String getSequenceCurrValString(java.lang.String sequenceName)
getSequenceCurrValString
in class Dialect
sequenceName
- The name of the sequence to be queried.null
if not supported.public boolean hasFullSequenceSupport()
true
if this dialect fully support the sequences as
4GL language (most important: bounded values, cycle). If not fully
supported, additional code is needed in P2J sequence class
implementation to fix this.hasFullSequenceSupport
in class Dialect
public java.lang.String getSequencePrefetchString(java.lang.String sequenceName)
getSequencePrefetchString
in class Dialect
sequenceName
- The name of the sequence from which the values are to be retrieved.null
if this feature is not supported
by the dialect.public boolean isConnectionError(java.lang.Exception exc)
For the PostgreSQL dialect, if the state indicates a 08xxx error code
or 57P01 or 57P02 codes, the method will return true
.
A complete list of defined error codes can be found here: http://www.postgresql.org/docs/8.1/static/errcodes-appendix.html
isConnectionError
in class Dialect
exc
- The exception to be checked.true
if the exception indicates a database
connectivity error.public boolean isQueryRangeParameterInlined()
where value ≥ ? and id = ?along with respective substitution parameters of 45 and 100, the inlined version would read:
where value ≥ 45 and id = ?Only the
id
substitution parameter of 100 would be
substituted into the prepared statement.
Inlining in such a way can give some database dialects the opportunity to choose a better query plan, than if the parameter being tested with a range check were to be substituted at statement execution time.
Note: this serves as a hint which may be overridden by runtime logic or other configuration settings.
isQueryRangeParameterInlined
in class Dialect
true
to inline range check parameters;
false
to use normal parameter substitution.public void inlineLimit(boolean on)
Dialects are free to treat this method as a hint.
inlineLimit
in class Dialect
on
- true
to enable inlining; false
to
disable it.public boolean requiresExplicitCastInsideTernary()
requiresExplicitCastInsideTernary
in class Dialect
false
.public java.lang.String getLimitString(java.lang.String sql, int offset, int limit)
WARNING: the implementation of this override has an ugly dependency on
the order of the logic in Hibernate's Loader
class.
Specifically, we rely on the fact that this method is invoked when a
query is being prepared, which must happen before parameters are bound,
at which point supportsVariableLimit()
is invoked. This
method sets state in a context local variable which is later read when
the latter method is invoked.
getLimitString
in class Dialect
sql
- Base select statement SQL without the limit/offset clause.offset
- Starting offset.limit
- Number of records to return.supportsVariableLimit()
public boolean supportsVariableLimit()
getLimitString(String, int, int)
. See the applicable warning in that
method's description. This method is consulted during parameter binding
in Hibernate's Loader
class.supportsVariableLimit
in class Dialect
true
if a bound parameter should be used in a
SELECT statement's limit clause; false
if the
limit was inlined by getLimitString(String, int, int)
.public java.lang.String getDropIndexString(P2JIndex index)
getDropIndexString
in class Dialect
index
- Definition of the index to be dropped.public java.lang.String getComputedColumnFormula(java.lang.String colName, boolean ignoreCase)
getComputedColumnFormula
in class Dialect
colName
- The base column name.ignoreCase
- true
if this is a char field which has the "ignore case" flag set.null
because this dialect does not use computed columns.public java.lang.String prepareMetadataParameter(java.lang.String param)
prepareMetadataParameter
in class Dialect
param
- The metadata query parameter.public java.lang.String processMetadataResult(java.lang.String value)
processMetadataResult
in class Dialect
value
- The metadata query result.public boolean isMetadataSortDesc(java.lang.String value)
isMetadataSortDesc
in class Dialect
value
- The value to be checked.true
if the value is the "D" or "d" string.public boolean isMetadataSortAsc(java.lang.String value)
isMetadataSortAsc
in class Dialect
value
- The value to be checked.true
if the value is the "A" or "a" string.public java.util.List<java.lang.String> getDatabasePrepareStatements(Database database)
getDatabasePrepareStatements
in class Dialect
database
- The database which needs to be prepared.public boolean explicitSetCollation()
explicitSetCollation
in class Dialect
false
.public java.lang.String getDelimiter()
getDelimiter
in class Dialect
public java.lang.String buildRemoteURL(java.lang.String url, Database database) throws PersistenceException
buildRemoteURL
in class Dialect
url
- The URL as received from the remote server.database
- The database to which this URL belongs.PersistenceException
- if the specified connection URL is invalid.public SequenceHandler createSequenceHandler(java.lang.String ldbName)
SequenceHandler
for a PostgresSQL database.createSequenceHandler
in class Dialect
ldbName
- The logical name of the database to create the SequenceHandler
for.PostgreSQLSequenceHandler
instance.public boolean injectComputedColumns()
injectComputedColumns
in class Dialect
false
because PostgreSQL does not support computed columns.public int getIndexLengthLimit()
getIndexLengthLimit
in class Dialect
public int getSyntheticIndexSize(boolean unique)
id
of the record may be additionally added to an index to add custom properties (eg uniqueness)
but other fields could be added. This part of the index is not visible using index
reflection routines from IndexHelper
. The synthetic components may differ
between unique and non-unique indexes.
See Dialect.getCreateIndexString(P2JIndex, boolean, boolean)
getSyntheticIndexSize
in class Dialect
unique
- true
if the index is uniquepublic void addRtrimmedExpression(java.lang.String expr, java.lang.StringBuilder sb)
rtrim(expr)The rtrim'd expression is appended to the string builder.
addRtrimmedExpression
in class Dialect
expr
- The expression to be rtrim -med. It's up to the caller if it is
a qualified field or not or any other kind of character-type expression.sb
- The StringBuilder
to append the trimmed filed to.public int getMaxParameterCount()
getMaxParameterCount
in class Dialect
public java.lang.String getCreateTemporaryTableString(boolean ifNotExist)
getCreateTemporaryTableString
in class Dialect
ifNotExist
- If true
an dialect-specific, optional if not exist
clause is added.public java.lang.String getCreateTemporaryTablePostfix()
getCreateTemporaryTablePostfix
in class Dialect
public java.lang.String getDropIndexString(boolean ifExists, java.lang.String idxName)
getDropIndexString
in class Dialect
ifExists
- Flag that requires that the DDL include an optional IF EXIST
clause.idxName
- The name of the index to be dropped by this DDL.public java.lang.String getDropTableString(boolean ifExists, java.lang.String tableName)
getDropTableString
in class Dialect
ifExists
- Flag that requires that the DDL include an optional IF EXIST
clause.tableName
- The name of the table to be dropped by this DDL.public java.lang.String getSpecificTypeAsString(FqlType type)
FqlType
to a string representation which can be used in a
SQL query (cast
or other construct).getSpecificTypeAsString
in class Dialect
type
- The type to be converted to string.public java.lang.String getSqlMappedType(java.lang.String fwdType, int scale)
getSqlMappedType
in class Dialect
fwdType
- The FWD type.scale
- Optional scale parameter (for decimal
data type).fwdType
.public java.lang.String getAnalyzeString(java.lang.String table)
analyze
or similar statements
for this dialect. If the table
is not null
the statement will analyze only
the respective table. Otherwise, all the tables are analyzed.getAnalyzeString
in class Dialect
table
- The name of the table to be analyzed. If null
, all tables from the database
will be analyzed, if possible.analyze
statement in the form requested null
is returned.public ScriptSplitter scripSplitter()
scripSplitter
in class Dialect
public java.sql.Blob blobCreator(java.sql.Connection conn, byte[] bytes)
Blob
instance from the specified bytes.blobCreator
in class Dialect
conn
- The JDBC connection.bytes
- The blob data.public java.sql.Clob clobCreator(java.sql.Connection conn, java.lang.String value)
Clob
instance from the specified value.clobCreator
in class Dialect
conn
- The JDBC connection.value
- The clob data.public boolean useUdf4Contains()
useUdf4Contains
in class Dialect
true
if UDF should be used for converted CONTAINS operatorpublic boolean isUdfOriginated(java.sql.SQLException e)
isUdfOriginated
in class Dialect
e
- the exception in questiontrue
if the exception was caused by error in UDF.public java.util.regex.Pattern getUdfErrorMessagePattern()
getUdfErrorMessagePattern
in class Dialect
public boolean useCTE4Contains()
useCTE4Contains
in class Dialect
true
if Common Table Expressions should be used for converted CONTAINS operatorpublic boolean useMixedNode4Contains()
useMixedNode4Contains
in class Dialect
true
if mixed mode re-write should be usedpublic java.util.Optional<Dialect.WeightAggregator> weightAggregator()
weightAggregator
in class Dialect
public java.lang.String id()
public void generateWordTablesDDLImpl(java.lang.String dbName, java.io.PrintStream out, java.lang.String eoln, java.util.Collection<WordTable> wordTables)
generateTriggerDDLs()
. It generates the DDLs needed to create all
triggers in a database with a specific schema and using a certain dialect.generateWordTablesDDLImpl
in class Dialect
dbName
- The target schema.out
- The PrintStream
used for output.eoln
- OS-specific end of line terminator.wordTables
- word tables by name