Class PostgreSQLPlatform

  • All Implemented Interfaces:
    Serializable, Cloneable, org.eclipse.persistence.internal.core.databaseaccess.CorePlatform<org.eclipse.persistence.internal.helper.ConversionManager>, org.eclipse.persistence.internal.databaseaccess.Platform

    public class PostgreSQLPlatform
    extends DatabasePlatform

    Purpose: Provides Postgres specific behavior.

    Responsibilities:

    • Native SQL for Date, Time, & Timestamp.
    • Native sequencing.
    • Mapping of class types to database types for the schema framework.
    • Pessimistic locking.
    • Platform specific operators.
    • LIMIT/OFFSET query syntax for select statements.
    See Also:
    Serialized Form
    Since:
    OracleAS TopLink 10g (10.1.3)
    • Field Summary

      • Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

        batchWritingMechanism, castSizeForVarcharParameter, classTypes, cursorCode, DEFAULT_MAX_BATCH_WRITING_SIZE, DEFAULT_PARAMETERIZED_MAX_BATCH_WRITING_SIZE, driverName, driverSupportsNationalCharacterVarying, fieldTypes, IS_VALID_TIMEOUT, isCastRequired, maxBatchWritingSize, partitioningCallback, pingSQL, printInnerJoinInWhereClause, printOuterJoinInWhereClause, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesOnForeignKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldOptimizeDataConversion, shouldTrimStrings, statementCacheSize, storedProcedureTerminationToken, stringBindingSize, structConverters, supportsAutoCommit, tableCreationSuffix, transactionIsolation, typeConverters, useJDBCStoredProcedureSyntax, useNationalCharacterVarying, useRownumFiltering, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesStreamsForBinding, usesStringBinding
      • Fields inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

        conversionManager, dataTypesConvertedFromAClass, dataTypesConvertedToAClass, defaultNativeSequenceToTable, defaultSeqenceAtNextValue, defaultSequence, endDelimiter, platformOperators, sequences, sequencesLock, startDelimiter, supportsReturnGeneratedKeys, tableQualifier, timestampQuery
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void appendBoolean​(Boolean bool, Writer writer)
      Appends a Boolean value.
      org.eclipse.persistence.internal.databaseaccess.DatabaseCall buildCallWithReturning​(SQLCall sqlCall, Vector returnFields)
      INTERNAL: Uses the returning clause on Postgres.
      protected Hashtable buildFieldTypes()
      Return the mapping of class types to database types for the schema framework.
      String buildProcedureCallString​(StoredProcedureCall call, org.eclipse.persistence.internal.sessions.AbstractSession session, org.eclipse.persistence.internal.sessions.AbstractRecord row)
      INTERNAL: Used for sp calls.
      ValueReadQuery buildSelectQueryForIdentity()
      INTERNAL: Returns query used to read back the value generated by Identity.
      ValueReadQuery buildSelectQueryForSequenceObject​(String qualifiedSeqName, Integer size)
      INTERNAL: Returns query used to read value generated by sequence object (like Oracle sequence).
      boolean canBuildCallWithReturning()
      INTERNAL: Postgres has a returning clause.
      int computeMaxRowsForSQL​(int firstResultIndex, int maxResults)
      INTERNAL: Use the JDBC maxResults and firstResultIndex setting to compute a value to use when limiting the results of a query in SQL.
      String getAssignmentString()
      INTERNAL Used for stored function calls.
      protected String getCreateTempTableSqlPrefix()
      INTERNAL:
      protected String getCreateTempTableSqlSuffix()
      INTERNAL:
      String getDropCascadeString()
      Allows DROP TABLE to cascade dropping of any dependent constraints if the database supports this option.
      String getInOutputProcedureToken()
      This method is used to print the output parameter token when stored procedures are called
      int getJDBCType​(Class javaType)
      Return the JDBC type for the Java type.
      int getMaxFieldNameSize()
      INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.
      String getProcedureBeginString()
      INTERNAL: Used for sp calls.
      String getProcedureEndString()
      INTERNAL: Used for sp calls.
      ValueReadQuery getTimestampQuery()
      INTERNAL: This method returns the query to select the timestamp from the server for Postgres.
      protected void initializePlatformOperators()
      INTERNAL: Initialize any platform-specific operators
      boolean isAlterSequenceObjectSupported()
      INTERNAL: Override this method if the platform supports sequence objects and it's possible to alter sequence object's increment in the database.
      boolean isJDBCExecuteCompliant()
      Calling a stored procedure query on PostgreSQL with no output parameters always returns true from an execute call regardless if a result set is returned or not.
      boolean isPostgreSQL()
      INTERNAL: Answers whether platform is Postgres.
      protected ExpressionOperator operatorLocate()
      INTERNAL: Override the default locate operator.
      protected ExpressionOperator operatorLocate2()
      INTERNAL: Override the default locate operator.
      void printFieldIdentityClause​(Writer writer)
      INTERNAL: Append the receiver's field 'identity' constraint clause to a writer.
      void printFieldTypeSize​(Writer writer, FieldDefinition field, org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition fieldType, boolean shouldPrintFieldIdentityClause)  
      void printFieldUnique​(Writer writer, boolean shouldPrintFieldIdentityClause)  
      void printSQLSelectStatement​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call, org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter printer, org.eclipse.persistence.internal.expressions.SQLSelectStatement statement)
      Print the pagination SQL using Postgres syntax " LIMIT <max> OFFSET <first>".
      static ExpressionOperator regexpOperator()
      INTERNAL: Create the ~ operator.
      protected void setNullFromDatabaseField​(org.eclipse.persistence.internal.helper.DatabaseField databaseField, PreparedStatement statement, int index)  
      boolean shouldPrintAliasForUpdate()
      INTERNAL: Indicates whether locking OF clause should print alias for field.
      boolean shouldPrintOutputTokenAtStart()
      This is required in the construction of the stored procedures with output parameters
      boolean shouldUseJDBCOuterJoinSyntax()
      JDBC defines and outer join syntax, many drivers do not support this.
      boolean supportsIdentity()
      INTERNAL: Indicates whether the platform supports identity.
      boolean supportsLocalTempTables()
      INTERNAL:
      boolean supportsSequenceObjects()
      INTERNAL: Indicates whether the platform supports sequence objects.
      protected ExpressionOperator toNumberOperator()
      INTERNAL: Postgres to_number has two arguments, as fix format argument.
      void writeUpdateOriginalFromTempTableSql​(Writer writer, org.eclipse.persistence.internal.helper.DatabaseTable table, Collection pkFields, Collection assignedFields)
      INTERNAL: May need to override this method if the platform supports temporary tables and the generated sql doesn't work.
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform

        addBatch, addStructConverter, allowBindingForSelectClause, allowsSizeInProcedureArguments, appendByteArray, appendCalendar, appendDate, appendLiteralToCall, appendLiteralToCallWithBinding, appendNumber, appendParameter, appendParameterInternal, appendString, appendTime, appendTimestamp, autoCommit, beginTransaction, buildBatchCriteria, buildBatchCriteriaForComplexId, buildClassTypes, buildCreateIndex, buildCreateIndex, buildDropIndex, buildDropIndex, buildSequenceObjectAlterIncrementWriter, buildSequenceObjectCreationWriter, buildSequenceObjectDeletionWriter, canBatchWriteWithOptimisticLocking, checkTableExists, commitTransaction, convertToDatabaseType, copyInto, createArray, createArray, createPlatformDefaultSequence, createStruct, createStruct, createStruct, dontBindUpdateAllQueryUsingTempTables, executeBatch, executeStoredProcedure, freeTemporaryObject, getBatchBeginString, getBatchDelimiterString, getBatchEndString, getBatchRowCountAssignString, getBatchRowCountDeclareString, getBatchRowCountReturnString, getBatchWritingMechanism, getCastSizeForVarcharParameter, getClassTypes, getConnection, getConnectionUserName, getConstraintDeletionString, getCreateDatabaseSchemaString, getCreateTempTableSqlBodyForTable, getCreateViewString, getCreationInOutputProcedureToken, getCreationOutputProcedureToken, getCursorCode, getCustomModifyValueForCall, getDefaultSequenceTableName, getDriverSupportsNVarChar, getDropDatabaseSchemaString, getFieldTypeDefinition, getFieldTypes, getFunctionCallHeader, getIndexNamePrefix, getInputProcedureToken, getJDBCOuterJoinString, getJDBCType, getJDBCTypeForSetNull, getJdbcTypeName, getMaxBatchWritingSize, getMaxForeignKeyNameSize, getMaxIndexNameSize, getMaxUniqueKeyNameSize, getNoWaitString, getObjectFromResultSet, getOutputProcedureToken, getParameterValueFromDatabaseCall, getParameterValueFromDatabaseCall, getPartitioningCallback, getPingSQL, getProcedureArgument, getProcedureArgument, getProcedureArgumentString, getProcedureAsString, getProcedureCallHeader, getProcedureCallTail, getProcedureOptionList, getQualifiedName, getQualifiedSequenceTableName, getRefValue, getRefValue, getSelectForUpdateNoWaitString, getSelectForUpdateOfString, getSelectForUpdateString, getSelectForUpdateWaitString, getSequenceCounterFieldName, getSequenceNameFieldName, getSequencePreallocationSize, getSequenceTableName, getStatementCacheSize, getStoredProcedureParameterPrefix, getStoredProcedureTerminationToken, getStringBindingSize, getStructConverters, getTableCreationSuffix, getTableExistsQuery, getTempTableForTable, getTransactionIsolation, getTypeConverters, getUniqueConstraintDeletionString, getUseNationalCharacterVaryingTypeForString, getVPDClearIdentifierQuery, getVPDCreationFunctionString, getVPDCreationPolicyString, getVPDDeletionString, getVPDSetIdentifierQuery, hasPartitioningCallback, initialize, initializeConnectionData, isCastRequired, isDynamicSQLRequiredForFunctions, isForUpdateCompatibleWithDistinct, isInformixOuterJoin, isLobCompatibleWithDistinct, isLockTimeoutException, isNullAllowedInSelectClause, isOutputAllowWithResultSet, isRowCountOutputParameterRequired, isXDBDocument, maximumNumericValues, minimumNumericValues, minimumTimeIncrement, prepareBatchStatement, printFieldNotNullClause, printFieldNullClause, printFieldTypeSize, printFieldUnique, printStoredFunctionReturnKeyWord, printValuelist, printValuelist, registerOutputParameter, registerOutputParameter, registerOutputParameter, registerOutputParameter, requiresNamedPrimaryKeyConstraints, requiresProcedureBrackets, requiresProcedureCallBrackets, requiresProcedureCallOuputToken, requiresTableInIndexDropDDL, requiresTypeNameToRegisterOutputParameter, requiresUniqueConstraintCreationOnTableCreate, retrieveFirstPrimaryKeyOrOne, rollbackTransaction, setBatchWritingMechanism, setCastSizeForVarcharParameter, setClassTypes, setCursorCode, setDriverName, setDriverSupportsNVarChar, setFieldTypes, setIsCastRequired, setMaxBatchWritingSize, setNullFromDatabaseField, setParameterValueInDatabaseCall, setParameterValueInDatabaseCall, setPartitioningCallback, setPingSQL, setPrintInnerJoinInWhereClause, setPrintOuterJoinInWhereClause, setSequenceCounterFieldName, setSequenceNameFieldName, setSequenceTableName, setShouldBindAllParameters, setShouldBindLiterals, setShouldBindPartialParameters, setShouldCacheAllStatements, setShouldCreateIndicesOnForeignKeys, setShouldForceBindAllParameters, setShouldForceFieldNamesToUpperCase, setShouldIgnoreCaseOnFieldComparisons, setShouldOptimizeDataConversion, setShouldTrimStrings, setShouldUseRownumFiltering, setStatementCacheSize, setStoredProcedureTerminationToken, setStringBindingSize, setSupportsAutoCommit, setTableCreationSuffix, setTransactionIsolation, setUseJDBCStoredProcedureSyntax, setUseNationalCharacterVaryingTypeForString, setUsesBatchWriting, setUsesByteArrayBinding, setUsesJDBCBatchWriting, setUsesNativeBatchWriting, setUsesNativeSQL, setUsesStreamsForBinding, setUsesStringBinding, shouldAlwaysUseTempStorageForModifyAll, shouldBindAllParameters, shouldBindLiterals, shouldBindPartialParameters, shouldCacheAllStatements, shouldCreateIndicesForPrimaryKeys, shouldCreateIndicesOnForeignKeys, shouldCreateIndicesOnUniqueKeys, shouldForceBindAllParameters, shouldForceFieldNamesToUpperCase, shouldIgnoreCaseOnFieldComparisons, shouldIgnoreException, shouldOptimizeDataConversion, shouldPrintConstraintNameAfter, shouldPrintFieldIdentityClause, shouldPrintForUpdateClause, shouldPrintInnerJoinInWhereClause, shouldPrintInOutputTokenBeforeType, shouldPrintInputTokenAtStart, shouldPrintLockingClauseAfterWhereClause, shouldPrintOuterJoinInWhereClause, shouldPrintOutputTokenBeforeType, shouldPrintStoredProcedureArgumentNameInCall, shouldPrintStoredProcedureVariablesAfterBeginString, shouldTempTableSpecifyPrimaryKeys, shouldTrimStrings, shouldUseCustomModifyForCall, shouldUseGetSetNString, shouldUseRownumFiltering, supportsANSIInnerJoinSyntax, supportsAutoCommit, supportsAutoConversionToNumericForArithmeticOperations, supportsConnectionUserName, supportsCountDistinctWithMultipleFields, supportsDeleteOnCascade, supportsForeignKeyConstraints, supportsGlobalTempTables, supportsIndexes, supportsIndividualTableLocking, supportsLockingQueriesWithMultipleTables, supportsNestingOuterJoins, supportsOrderByParameters, supportsOuterJoinsWithBrackets, supportsPrimaryKeyConstraint, supportsStoredFunctions, supportsTempTables, supportsUniqueColumns, supportsUniqueKeyConstraints, supportsVPD, supportsWaitForUpdate, usesBatchWriting, usesByteArrayBinding, usesJDBCBatchWriting, usesNativeBatchWriting, usesNativeSQL, usesSequenceTable, usesStreamsForBinding, usesStringBinding, wasFailureCommunicationBased, writeAddColumnClause, writeAutoAssignmentSetClause, writeAutoJoinWhereClause, writeCleanUpTempTableSql, writeCreateTempTableSql, writeDeleteFromTargetTableUsingTempTableSql, writeFields, writeFieldsAutoClause, writeFieldsList, writeInsertIntoTableSql, writeJoinWhereClause, writeLOB, writeParameterMarker, writeTableCreationSuffix
      • Methods inherited from class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform

        addOperator, addSequence, addSequence, buildNativeCall, buildSelectQueryForIdentity, buildSelectQueryForSequenceObject, clone, convertObject, createConnectionCustomizer, createExpressionFor, getConversionManager, getDataTypesConvertedFrom, getDataTypesConvertedTo, getDefaultNativeSequenceToTable, getDefaultSeqenceAtNextValue, getDefaultSequence, getDefaultSequenceToWrite, getEndDelimiter, getINClauseLimit, getOperator, getPlatformOperators, getSelectSequenceQuery, getSequence, getSequences, getSequencesToWrite, getStartDelimiter, getTableQualifier, getTimestampFromServer, getUpdateSequenceQuery, hasDefaultSequence, initializeDefaultQueries, initIdentitySequences, isAccess, isAttunity, isCloudscape, isDB2, isDB2Z, isDBase, isDerby, isFirebird, isH2, isHANA, isHSQL, isInformix, isMaxDB, isMySQL, isODBC, isOracle, isOracle12, isOracle9, isPervasive, isPointBase, isSQLAnywhere, isSQLServer, isSybase, isSymfoware, isTimesTen, isTimesTen7, removeAllSequences, removeIdentitySequences, removeSequence, sequencesAfterCloneCleanup, setConversionManager, setDefaultNativeSequenceToTable, setDefaultSeqenceAtNextValue, setDefaultSequence, setEndDelimiter, setSelectSequenceNumberQuery, setSequencePreallocationSize, setSequences, setStartDelimiter, setSupportsReturnGeneratedKeys, setTableQualifier, setTimestampQuery, setUpdateSequenceQuery, shouldNativeSequenceUseTransaction, shouldPrepare, shouldSelectDistinctIncludeOrderBy, shouldSelectIncludeOrderBy, supportsNativeSequenceNumbers, supportsReturnGeneratedKeys, toString, usesPlatformDefaultSequence
    • Constructor Detail

      • PostgreSQLPlatform

        public PostgreSQLPlatform()
    • Method Detail

      • getJDBCType

        public int getJDBCType​(Class javaType)
        Return the JDBC type for the Java type. For some reason PostgreSQL does not seem to like the JDBC Blob type (PostgreSQL 8.2).
        Overrides:
        getJDBCType in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • appendBoolean

        protected void appendBoolean​(Boolean bool,
                                     Writer writer)
                              throws IOException
        Appends a Boolean value. Refer to : http://www.postgresql.org/docs/8.0/static/datatype-boolean.html In PostgreSQL the following are the values that are value for a boolean field Valid literal values for the "true" state are: TRUE, 't', 'true', 'y', 'yes', '1' Valid literal values for the false" state are : FALSE, 'f', 'false', 'n', 'no', '0' To be consistent with the other data platforms we are using the values '1' and '0' for true and false states of a boolean field.
        Overrides:
        appendBoolean in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • computeMaxRowsForSQL

        public int computeMaxRowsForSQL​(int firstResultIndex,
                                        int maxResults)
        INTERNAL: Use the JDBC maxResults and firstResultIndex setting to compute a value to use when limiting the results of a query in SQL. These limits tend to be used in two ways. 1. MaxRows is the index of the last row to be returned (like JDBC maxResults) 2. MaxRows is the number of rows to be returned PostGreSQL uses case #2 and therefore the maxResults has to be altered based on the firstResultIndex
        Overrides:
        computeMaxRowsForSQL in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Parameters:
        firstResultIndex -
        maxResults -
        See Also:
        MySQLPlatform
      • initializePlatformOperators

        protected void initializePlatformOperators()
        INTERNAL: Initialize any platform-specific operators
        Overrides:
        initializePlatformOperators in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • regexpOperator

        public static ExpressionOperator regexpOperator()
        INTERNAL: Create the ~ operator. REGEXP allows for comparison through regular expression.
      • toNumberOperator

        protected ExpressionOperator toNumberOperator()
        INTERNAL: Postgres to_number has two arguments, as fix format argument.
      • getTimestampQuery

        public ValueReadQuery getTimestampQuery()
        INTERNAL: This method returns the query to select the timestamp from the server for Postgres.
        Specified by:
        getTimestampQuery in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        getTimestampQuery in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • getInOutputProcedureToken

        public String getInOutputProcedureToken()
        This method is used to print the output parameter token when stored procedures are called
        Overrides:
        getInOutputProcedureToken in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintOutputTokenAtStart

        public boolean shouldPrintOutputTokenAtStart()
        This is required in the construction of the stored procedures with output parameters
        Overrides:
        shouldPrintOutputTokenAtStart in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • isJDBCExecuteCompliant

        public boolean isJDBCExecuteCompliant()
        Calling a stored procedure query on PostgreSQL with no output parameters always returns true from an execute call regardless if a result set is returned or not. This flag will help avoid throwing a JPA mandated exception on an executeUpdate call (which calls jdbc execute and checks the return value to ensure no results sets are returned (true))
        Overrides:
        isJDBCExecuteCompliant in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        See Also:
        PostgreSQLPlatform
      • isPostgreSQL

        public boolean isPostgreSQL()
        INTERNAL: Answers whether platform is Postgres.
        Specified by:
        isPostgreSQL in interface org.eclipse.persistence.internal.databaseaccess.Platform
        Overrides:
        isPostgreSQL in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • getCreateTempTableSqlSuffix

        protected String getCreateTempTableSqlSuffix()
        INTERNAL:
        Overrides:
        getCreateTempTableSqlSuffix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • shouldPrintAliasForUpdate

        public boolean shouldPrintAliasForUpdate()
        INTERNAL: Indicates whether locking OF clause should print alias for field. Example: on Oracle platform (method returns false): SELECT ADDRESS_ID, ... FROM ADDRESS T1 WHERE (T1.ADDRESS_ID = ?) FOR UPDATE OF T1.ADDRESS_ID on Postgres platform (method returns true): SELECT ADDRESS_ID, ... FROM ADDRESS T1 WHERE (T1.ADDRESS_ID = ?) FOR UPDATE OF T1
        Overrides:
        shouldPrintAliasForUpdate in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • supportsIdentity

        public boolean supportsIdentity()
        INTERNAL: Indicates whether the platform supports identity.
        Overrides:
        supportsIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • buildSelectQueryForIdentity

        public ValueReadQuery buildSelectQueryForIdentity()
        INTERNAL: Returns query used to read back the value generated by Identity. This method is called when identity NativeSequence is connected, the returned query used until the sequence is disconnected. If the platform supportsIdentity then (at least) one of buildSelectQueryForIdentity methods should return non-null query.
        Overrides:
        buildSelectQueryForIdentity in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • supportsSequenceObjects

        public boolean supportsSequenceObjects()
        INTERNAL: Indicates whether the platform supports sequence objects.
        Overrides:
        supportsSequenceObjects in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • buildSelectQueryForSequenceObject

        public ValueReadQuery buildSelectQueryForSequenceObject​(String qualifiedSeqName,
                                                                Integer size)
        INTERNAL: Returns query used to read value generated by sequence object (like Oracle sequence). This method is called when sequence object NativeSequence is connected, the returned query used until the sequence is disconnected. If the platform supportsSequenceObjects then (at least) one of buildSelectQueryForSequenceObject methods should return non-null query.
        Overrides:
        buildSelectQueryForSequenceObject in class org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
      • printFieldIdentityClause

        public void printFieldIdentityClause​(Writer writer)
                                      throws ValidationException
        INTERNAL: Append the receiver's field 'identity' constraint clause to a writer.
        Overrides:
        printFieldIdentityClause in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        ValidationException
      • buildFieldTypes

        protected Hashtable buildFieldTypes()
        Description copied from class: org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Return the mapping of class types to database types for the schema framework.
        Overrides:
        buildFieldTypes in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • operatorLocate

        protected ExpressionOperator operatorLocate()
        INTERNAL: Override the default locate operator.
      • operatorLocate2

        protected ExpressionOperator operatorLocate2()
        INTERNAL: Override the default locate operator.
      • supportsLocalTempTables

        public boolean supportsLocalTempTables()
        INTERNAL:
        Overrides:
        supportsLocalTempTables in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getCreateTempTableSqlPrefix

        protected String getCreateTempTableSqlPrefix()
        INTERNAL:
        Overrides:
        getCreateTempTableSqlPrefix in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getMaxFieldNameSize

        public int getMaxFieldNameSize()
        INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.
        Overrides:
        getMaxFieldNameSize in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureBeginString

        public String getProcedureBeginString()
        INTERNAL: Used for sp calls.
        Overrides:
        getProcedureBeginString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getProcedureEndString

        public String getProcedureEndString()
        INTERNAL: Used for sp calls.
        Overrides:
        getProcedureEndString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • buildProcedureCallString

        public String buildProcedureCallString​(StoredProcedureCall call,
                                               org.eclipse.persistence.internal.sessions.AbstractSession session,
                                               org.eclipse.persistence.internal.sessions.AbstractRecord row)
        INTERNAL: Used for sp calls. PostGreSQL uses a different method for executing StoredProcedures than other platforms.
        Overrides:
        buildProcedureCallString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getAssignmentString

        public String getAssignmentString()
        INTERNAL Used for stored function calls.
        Overrides:
        getAssignmentString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • getDropCascadeString

        public String getDropCascadeString()
        Allows DROP TABLE to cascade dropping of any dependent constraints if the database supports this option.
        Overrides:
        getDropCascadeString in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • printFieldTypeSize

        public void printFieldTypeSize​(Writer writer,
                                       FieldDefinition field,
                                       org.eclipse.persistence.internal.databaseaccess.FieldTypeDefinition fieldType,
                                       boolean shouldPrintFieldIdentityClause)
                                throws IOException
        Overrides:
        printFieldTypeSize in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • printFieldUnique

        public void printFieldUnique​(Writer writer,
                                     boolean shouldPrintFieldIdentityClause)
                              throws IOException
        Overrides:
        printFieldUnique in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        IOException
      • shouldUseJDBCOuterJoinSyntax

        public boolean shouldUseJDBCOuterJoinSyntax()
        JDBC defines and outer join syntax, many drivers do not support this. So we normally avoid it.
        Overrides:
        shouldUseJDBCOuterJoinSyntax in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • isAlterSequenceObjectSupported

        public boolean isAlterSequenceObjectSupported()
        INTERNAL: Override this method if the platform supports sequence objects and it's possible to alter sequence object's increment in the database.
        Overrides:
        isAlterSequenceObjectSupported in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • printSQLSelectStatement

        public void printSQLSelectStatement​(org.eclipse.persistence.internal.databaseaccess.DatabaseCall call,
                                            org.eclipse.persistence.internal.expressions.ExpressionSQLPrinter printer,
                                            org.eclipse.persistence.internal.expressions.SQLSelectStatement statement)
        Print the pagination SQL using Postgres syntax " LIMIT <max> OFFSET <first>".
        Overrides:
        printSQLSelectStatement in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • writeUpdateOriginalFromTempTableSql

        public void writeUpdateOriginalFromTempTableSql​(Writer writer,
                                                        org.eclipse.persistence.internal.helper.DatabaseTable table,
                                                        Collection pkFields,
                                                        Collection assignedFields)
                                                 throws IOException
        INTERNAL: May need to override this method if the platform supports temporary tables and the generated sql doesn't work. Write an sql string for updating the original table from the temporary table. Precondition: supportsTempTables() == true. Precondition: pkFields and assignFields don't intersect.
        Overrides:
        writeUpdateOriginalFromTempTableSql in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Parameters:
        writer - for writing the sql
        table - is original table for which temp table is created.
        pkFields - - primary key fields for the original table.
        assignedFields - - fields to be assigned a new value.
        Throws:
        IOException
      • canBuildCallWithReturning

        public boolean canBuildCallWithReturning()
        INTERNAL: Postgres has a returning clause.
        Overrides:
        canBuildCallWithReturning in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • buildCallWithReturning

        public org.eclipse.persistence.internal.databaseaccess.DatabaseCall buildCallWithReturning​(SQLCall sqlCall,
                                                                                                   Vector returnFields)
        INTERNAL: Uses the returning clause on Postgres.
        Overrides:
        buildCallWithReturning in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
      • setNullFromDatabaseField

        protected void setNullFromDatabaseField​(org.eclipse.persistence.internal.helper.DatabaseField databaseField,
                                                PreparedStatement statement,
                                                int index)
                                         throws SQLException
        Overrides:
        setNullFromDatabaseField in class org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
        Throws:
        SQLException