| Modifier and Type | Class and Description |
|---|---|
static class |
P2JH2Dialect.SumAggregator
Helper interface for weights' aggregation
|
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 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 CentralLogger |
LOG
Logger
|
private static java.lang.String |
PK
Name of the primary key column.
|
static java.util.regex.Pattern |
UDF_ERROR_MESSAGE
Regex Pattern for parsing message cased by error raised by UDF.
|
private static Dialect.WeightAggregator |
WEIGHT_AGGREGATOR
Weights' aggregator
|
CASE_TYPE_TOK, DEFAULT_MAX_WIDTH, SCALE_TOK| Constructor and Description |
|---|
P2JH2Dialect()
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 expression.
|
boolean |
allowBindParamsInRecursiveCTE()
Check if bind parameters in recursive CTEs are supported.
|
boolean |
allowDBUniqueCheck()
Determine if the
Dialect supports index validation (with the VALIDATE keyword). |
boolean |
allowSelectWildcard()
Check if this dialect allows the selection of fields using * wildcard.
|
void |
beforeDriverLoad()
Set any database parameters before, to be available when the database
driver is loaded.
|
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.String |
containsUdfName()
Return the name of the CONTAINS UDF
|
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 H2 database. |
ErrorManager.ErrorEntry |
errorEntry(java.lang.String message)
Create the error descriptor from the SQLException message
|
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 native column name 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 |
getAddForeignKeyConstraintString(java.lang.String table,
java.lang.String fkName,
java.lang.String fkFields,
java.lang.String refTable,
java.lang.String refFields,
java.lang.String indent,
java.lang.String eoln)
Creates and returns a string which represent the
alter table statement for adding a new
foreign key constraint. |
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 |
getCodepage(java.sql.Connection conn)
Use the provided database connection to extract the codepage/CharSet used by the database and report it
back to the caller.
|
java.lang.String |
getCollation(java.sql.Connection conn)
Use the provided database connection to extract the collation used by the database and report it
back to the caller.
|
java.lang.String |
getCreateIndexString(boolean unique,
boolean softUnique)
Returns the beginning of the DDL statement for creating an index.
|
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,
boolean isTemporary)
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(boolean noUndo)
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,
java.lang.String tableName)
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.
|
int |
getIndexLengthLimit()
Some dialects do have constraints about the maximum size of fields that compose an index.
|
java.lang.String |
getInvisibleSpecificator()
Return a string which marks that a column is computed, so it should be marked as invisible
to allow implicit skipping of it when using wildcard selection (*) or direct access.
|
java.lang.String |
getJdbcDatabaseType()
Get the name of the JDBC database type (as in JBC URL).
|
int |
getMaxParameterCount()
Obtain the number of parameters a query of this dialect is allowed by the SQL 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.
|
ScriptRunner |
getScriptRunner()
Get a ScriptRunner instance for the dialect.
|
java.lang.String |
getSequenceCurrValString()
Generate the appropriate select statement to retrieve the current
value of a sequence.
|
java.lang.String |
getSequenceCurrValString(java.lang.String sequenceName)
Generate the appropriate select statement to retrieve the current
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()
Generate the appropriate select statement to reset the value of a
sequence.
|
java.lang.String |
getSequenceSetValString(java.lang.String sequenceName)
Generate the appropriate select statement to reset the value of a
sequence.
|
java.lang.String |
getSequenceSetValString(java.lang.String sequenceName,
long newVal)
Generate the appropriate select statement to reset the 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 |
getSqlIndexName(P2JIndex index)
Obtain the name of an index.
|
java.lang.String |
getSqlMappedType(java.lang.String fwdType,
int scale,
java.lang.Boolean caseSensitive)
Get the SQL mapping for a specific FWD data type.
|
int |
getSyntheticIndexSize(boolean unique)
Returns the size of the synthetic part of the index.
|
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 |
isAutoCi()
Returns
true if the dialect handles case-insensitive compare
operations for case-insensitive character columns |
boolean |
isAutoRtrim()
Returns
true if the dialect handles automatically rtrimming for
character columns. |
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 |
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 asceding clause for a column index.
|
boolean |
isMetadataSortDesc(java.lang.String value)
Check if the given value is a desceding clause for a column index.
|
boolean |
isNativeUDFsSupported()
Check if native UDFs are supported for the dialect
|
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 |
isUdfContains(java.lang.String name)
Check if the provided name is the name of the CONTAINS UDF
|
boolean |
isUdfOriginatedError(java.sql.SQLException e)
Check if UDF should be used for converted CONTAINS operator
|
boolean |
isUdfOriginatedWarning(java.sql.SQLException e)
Check if the exception was caused by a warning in UDF.
|
boolean |
isUniqueConstraintViolation(java.sql.SQLException sqle)
Checks if the SQLState of the SQLException matches the dialect specific UNIQUE_VIOLATION
code for H2 (23505).
|
private static java.lang.String |
mapCP(java.lang.String h2Charset)
Maps the H2 specific charset names to 4GL codepage names.
|
boolean |
needsComputedColumns()
Indicate whether this dialect requires computed columns to participate
within index definitions, instead of embedded expressions.
|
int |
orderByNulls(java.lang.StringBuilder sb,
java.lang.String expression,
java.lang.String field,
boolean asc,
boolean forceAsc)
Determine if the sort component or index needs to be augmented with a NULLS FIRST/LAST option and
add the required expression.
|
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 uppercase.
|
void |
preparePermanentDatabase(Database db)
Prepare the specified database by creating all necessary function aliases and setting global parameters.
|
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 |
scriptSplitter()
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 |
supportsLazyQueryResultsMode()
Determine if this
Dialect supports queries executed in a lazy manner. |
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 |
useNullEquality()
Returns
true if the dialect handles null equality. |
boolean |
useUdf4Contains()
Check if UDF should be used for converted CONTAINS operator
|
boolean |
useWordTables()
Check if word tables should be used for converted CONTAINS operator
|
java.util.Optional<Dialect.WeightAggregator> |
weightAggregator()
Get the WeightAggregator instance for the dialect if defined
|
activateErrorHandler, checkErrorFn, checkIndexConstraints, computeIndexKeySize, connectionCustomizer, dialects, getCatalogPattern, getComputedColumnFormula, getComputedColumnPrefix, getComputedColumnString, getCreateIndexString, getCreateIndexString, getCreateTableString, getDecimals, getDialect, getDialect, getDialect, getHighDate, getLimitString, getLowDate, getMaxEntriesInSelect, getSchemaPattern, getSequenceSQL, getSqlMappedType, initErrorFn, isComputedColumn, preferDisjunctiveForm, quote, resetErrorHandler, resolveBooleanConstant, supportsVariableLimit, translateToParmType, udfSchemaprivate static final CentralLogger LOG
private static final java.lang.String PK
private static final java.util.Map<java.lang.String,java.lang.String> fwd2sql
private static final Dialect.WeightAggregator WEIGHT_AGGREGATOR
public static final java.util.regex.Pattern UDF_ERROR_MESSAGE
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
public P2JH2Dialect()
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.
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.public java.lang.String getDriverClassName()
getDriverClassName in class Dialectpublic java.lang.String getJdbcDatabaseType()
getJdbcDatabaseType in class Dialectpublic boolean needsComputedColumns()
needsComputedColumns in class Dialecttrue to indicate computed columns are required.public boolean supportsFunctionOverloading()
supportsFunctionOverloading in class Dialectfalse.public boolean supportsBooleanDatatype()
true and false literals;
supportsBooleanDatatype in class Dialecttrue, 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 Dialectpersistence - Provider of persistence services.null.public void postTransaction(Persistence persistence, java.lang.Object context, boolean rollback) throws PersistenceException
postTransaction in class Dialectpersistence - 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.lang.String formatDate(date d)
formatDate in class Dialectd - Date to be formatted as a string.public java.lang.String extractColumnName(java.lang.String expr)
__my_column
We are interested only in the my_column root name, so we strip away the leading
__ prefix.extractColumnName in class Dialectexpr - Column name as natively represented by the database dialect.public java.lang.String getProcessedCharacterColumnName(java.lang.String name,
boolean ignoreCase)
getProcessedCharacterColumnName in class Dialectname - 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 Dialectname - Column name, alias, or expression.true if name represents case-insensitive data.public java.lang.String getCreateSequenceString(java.lang.String name)
getCreateSequenceString in class Dialectname - Sequence name.null if not supported.public java.lang.String getCreateSequenceString(java.lang.String name,
boolean isTemporary)
getCreateSequenceString in class Dialectname - Sequence name.isTemporary - If the sequence should be temporary or not.null if not supported.public java.lang.String getCreateSequenceString(java.lang.String name,
long start)
getCreateSequenceString in class Dialectname - 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 Dialectname - 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 Dialectname - 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 DialectsequenceName - The name of the sequence.newVal - The new value to be set.null if not supported.public java.lang.String getSequenceSetValString(java.lang.String sequenceName)
getSequenceSetValString in class DialectsequenceName - The name of the sequence.null if not supported.public java.lang.String getSequenceSetValString()
getSequenceSetValString in class Dialectnull if not supported.public java.lang.String getSequenceCurrValString(java.lang.String sequenceName)
getSequenceCurrValString in class DialectsequenceName - The name of the sequence to be queried.null if not supported.public java.lang.String getSequenceCurrValString()
getSequenceCurrValString in class Dialectnull 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 Dialectpublic java.lang.String getSequencePrefetchString(java.lang.String sequenceName)
getSequencePrefetchString in class DialectsequenceName - The name of the sequence from which the values are to be retrieved.null if this feature is not supported
by the dialect.public java.lang.String getSequenceNextValString(java.lang.String sequenceName)
getSequenceNextValString in class DialectsequenceName - The name of the sequence to be queried.null if not supported.public boolean isConnectionError(java.lang.Exception exc)
Currently, as the H2 database is used only for in-memory temp-tables, this method returns false.
isConnectionError in class Dialectexc - 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 Dialecttrue 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. This implementation does nothing.
inlineLimit in class Dialecton - true to enable inlining; false to
disable it.public boolean requiresExplicitCastInsideTernary()
requiresExplicitCastInsideTernary in class Dialecttrue.public boolean allowBindParamsInRecursiveCTE()
allowBindParamsInRecursiveCTE in class Dialecttrue if bind parameters in recursive CTEs are supported.public java.lang.String getDropIndexString(P2JIndex index)
getDropIndexString in class Dialectindex - Definition of the index to be dropped.public java.lang.String getInvisibleSpecificator()
getInvisibleSpecificator in class Dialectnull means that no such
specificator is supported.public java.lang.String prepareMetadataParameter(java.lang.String param)
prepareMetadataParameter in class Dialectparam - The metadata query parameter.public java.lang.String processMetadataResult(java.lang.String value)
processMetadataResult in class Dialectvalue - The metadata query result.public boolean isMetadataSortDesc(java.lang.String value)
isMetadataSortDesc in class Dialectvalue - 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 Dialectvalue - 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 Dialectdatabase - The database which needs to be prepared.public boolean explicitSetCollation()
explicitSetCollation in class Dialecttrue.public java.lang.String getDelimiter()
getDelimiter in class Dialectpublic void beforeDriverLoad()
The "h2.sortNullsHigh" setting was removed, as it was determined that by forcing the H2 to sort nulls high, it causes a regression in a test where 4GL seems to sort the unknown value at the end of the result set, when an descending sort clause was used (instead of sorting it at the begining of the result set).
TODO: more testing needs to be done to determine exactly how 4GL sorts the unknown value in the temporary database (and permanent DB too). At the time of this comment, H2 has a bug which doesn't enforce the "sort nulls high" setting in cases when the query's result order is determined by the index.
beforeDriverLoad in class Dialectpublic java.lang.String buildRemoteURL(java.lang.String url,
Database database)
throws PersistenceException
buildRemoteURL in class Dialecturl - The URL as received from the remote server. If this indicates an embedded
database, a mixed mode URL which will allow secure (i.e., SSL), remote connections
to that database is generated. The mixed mode port is fixed.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 H2 database.createSequenceHandler in class DialectldbName - The logical name of the database to create the SequenceHandler for.H2SequenceHandler for respective database.public boolean injectComputedColumns()
injectComputedColumns in class Dialecttrue for H2 database.public boolean isUniqueConstraintViolation(java.sql.SQLException sqle)
isUniqueConstraintViolation in class Dialectsqle - The SQLException that is causing the unique constraint violation.true if the SQLState matches the dialect specific code for
UNIQUE_VIOLATION, false otherwise.public int getIndexLengthLimit()
getIndexLengthLimit in class Dialectpublic 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 Dialectunique - true if the index is uniquepublic void addRtrimmedExpression(java.lang.String expr,
java.lang.StringBuilder sb)
rtrim(expr)
The rtrimmed expression is appended to the string builder.addRtrimmedExpression in class Dialectexpr - 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 Dialectpublic java.lang.String getCreateTemporaryTableString(boolean ifNotExist)
getCreateTemporaryTableString in class DialectifNotExist - If true an dialect-specific, optional if not exist clause is added.public java.lang.String getCreateTemporaryTablePostfix(boolean noUndo)
getCreateTemporaryTablePostfix in class DialectnoUndo - Parameter that indicates what keyword should be returned. The choices are "transactional"
and "noundo".public java.lang.String getDropIndexString(boolean ifExists,
java.lang.String idxName,
java.lang.String tableName)
getDropIndexString in class DialectifExists - Flag that requires that the DDL include an optional IF EXIST clause.idxName - The name of the index to be dropped by this DDL.tableName - The name of the table to which the index belongs to. (Optional, is needed by the dialect).public java.lang.String getDropTableString(boolean ifExists,
java.lang.String tableName)
getDropTableString in class DialectifExists - 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 Dialecttype - The type to be converted to string.public java.lang.String getSqlMappedType(java.lang.String fwdType,
int scale,
java.lang.Boolean caseSensitive)
getSqlMappedType in class DialectfwdType - 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 Dialecttable - 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 int orderByNulls(java.lang.StringBuilder sb,
java.lang.String expression,
java.lang.String field,
boolean asc,
boolean forceAsc)
orderByNulls in class Dialectsb - The StringBuilder which contains the SQL statement to be built.expression - The field name (or expression) which is the current criterion to be augmented.field - The field name which is the base of the previous parameter (unused here).asc - The sort direction.forceAsc - If true, force the insertion of the default asc direction.public ScriptSplitter scriptSplitter()
scriptSplitter in class Dialectpublic ScriptRunner getScriptRunner()
getScriptRunner in class Dialectpublic java.sql.Blob blobCreator(java.sql.Connection conn,
byte[] bytes)
Blob instance from the specified bytes.blobCreator in class Dialectconn - 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 Dialectconn - The JDBC connection.value - The clob data.public boolean useUdf4Contains()
useUdf4Contains in class Dialecttrue if UDF should be used for converted CONTAINS operator.public boolean useWordTables()
useWordTables in class Dialecttrue if tables should be used for converted CONTAINS operatorpublic boolean isNativeUDFsSupported()
isNativeUDFsSupported in class Dialecttrue if native UDFs are supported for the dialectpublic boolean isUdfOriginatedError(java.sql.SQLException e)
isUdfOriginatedError in class Dialecte - the exception in questiontrue if UDF should be used for converted CONTAINS operatorpublic boolean isUdfOriginatedWarning(java.sql.SQLException e)
isUdfOriginatedWarning in class Dialecte - the exception in questiontrue if the exception was caused by error in UDF.public ErrorManager.ErrorEntry errorEntry(java.lang.String message)
errorEntry in class Dialectmessage - SQLException messagepublic boolean useCTE4Contains()
useCTE4Contains in class Dialecttrue if Common Table Expressions should be used for converted CONTAINS operatorpublic boolean useMixedNode4Contains()
useMixedNode4Contains in class Dialecttrue if mixed mode re-write should be usedpublic boolean isUdfContains(java.lang.String name)
isUdfContains in class Dialectname - name to be checkedtrue if the provided name is the name of the CONTAINS UDFpublic java.lang.String containsUdfName()
containsUdfName in class Dialectpublic java.util.Optional<Dialect.WeightAggregator> weightAggregator()
weightAggregator in class Dialectpublic 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 DialectdbName - The target schema.out - The PrintStream used for output.eoln - OS-specific end of line terminator.wordTables - word tables by namepublic boolean supportsLazyQueryResultsMode()
Dialect supports queries executed in a lazy manner.supportsLazyQueryResultsMode in class Dialecttrue
H2 does support lazy queries.public boolean allowDBUniqueCheck()
Dialect supports index validation (with the VALIDATE keyword).allowDBUniqueCheck in class Dialecttrue
H2 supports this type of validation.public java.lang.String getCreateIndexString(boolean unique,
boolean softUnique)
getCreateIndexString in class Dialectunique - true for unique indexes.softUnique - true for soft-unique indexes.public java.lang.String id()
public boolean isAutoRtrim()
true if the dialect handles automatically rtrimming for
character columns.isAutoRtrim in class Dialectpublic boolean useNullEquality()
true if the dialect handles null equality.
This is visible when doing null == null, which logically should return true,
but not all dialects support this condition.useNullEquality in class Dialecttrue if the dialect permits null equality.public boolean isAutoCi()
true if the dialect handles case-insensitive compare
operations for case-insensitive character columnspublic void preparePermanentDatabase(Database db) throws PersistenceException
preparePermanentDatabase in class Dialectdb - Database to prepare.PersistenceException - if there is any error executing DDL.public java.lang.String getSqlIndexName(P2JIndex index)
getSqlIndexName in class Dialectindex - The index structure.public java.lang.String getAddForeignKeyConstraintString(java.lang.String table,
java.lang.String fkName,
java.lang.String fkFields,
java.lang.String refTable,
java.lang.String refFields,
java.lang.String indent,
java.lang.String eoln)
alter table statement for adding a new
foreign key constraint.getAddForeignKeyConstraintString in class Dialecttable - The table to be altered.fkName - The name of the constraint.fkFields - Comma separated names of the fields which make the reference to parent table.refTable - The parent / referred table.refFields - Comma separated names of the fields which uniquely identify the record in parent table.indent - The indentation for pretty print the result.eoln - OS-specific end of line terminator (if the result is a multiline).public boolean allowSelectWildcard()
allowSelectWildcard in class Dialecttrue if we can use * as selection wildcard.public java.lang.String getCodepage(java.sql.Connection conn)
getCodepage in class Dialectconn - The JDBC database connection to be used.public java.lang.String getCollation(java.sql.Connection conn)
getCollation in class Dialectconn - The JDBC database connection to be used.private static java.lang.String mapCP(java.lang.String h2Charset)
h2Charset - A H2 specific charset name.h2Charset.