Class PostgreSQLPlatform

java.lang.Object
org.eclipse.persistence.internal.databaseaccess.DatasourcePlatform
org.eclipse.persistence.internal.databaseaccess.DatabasePlatform
org.eclipse.persistence.platform.database.DatabasePlatform
org.eclipse.persistence.platform.database.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:
  • Field Summary

    Fields inherited from class org.eclipse.persistence.platform.database.DatabasePlatform

    DEFAULT_VARCHAR_SIZE

    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
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    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
    Return the mapping of class types to database types for the schema framework.
    buildProcedureCallString(StoredProcedureCall call, org.eclipse.persistence.internal.sessions.AbstractSession session, org.eclipse.persistence.internal.sessions.AbstractRecord row)
    INTERNAL: Used for sp calls.
    INTERNAL: Returns query used to read back the value generated by Identity.
    INTERNAL: Returns query used to read value generated by sequence object (like Oracle sequence).
    boolean
    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.
    INTERNAL Used for stored function calls.
    protected String
    INTERNAL:
    protected String
    INTERNAL:
    Allows DROP TABLE to cascade dropping of any dependent constraints if the database supports this option.
    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
    INTERNAL: returns the maximum number of characters that can be used in a field name on this platform.
    INTERNAL: Used for sp calls.
    INTERNAL: Used for sp calls.
    INTERNAL: This method returns the query to select the timestamp from the server for Postgres.
    protected void
    INTERNAL: Initialize any platform-specific operators
    boolean
    INTERNAL: Override this method if the platform supports sequence objects and it's possible to alter sequence object's increment in the database.
    boolean
    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
    INTERNAL: Answers whether platform is Postgres.
    INTERNAL: Override the default locate operator.
    INTERNAL: Override the default locate operator.
    void
    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>".
    INTERNAL: Create the ~ operator.
    protected void
    setNullFromDatabaseField(org.eclipse.persistence.internal.helper.DatabaseField databaseField, PreparedStatement statement, int index)
     
    boolean
    INTERNAL: Indicates whether locking OF clause should print alias for field.
    boolean
    This is required in the construction of the stored procedures with output parameters
    boolean
    JDBC defines and outer join syntax, many drivers do not support this.
    boolean
    INTERNAL: Indicates whether the platform supports identity.
    boolean
    INTERNAL:
    boolean
    INTERNAL: Indicates whether the platform supports sequence objects.
    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

    Methods inherited from class java.lang.Object

    equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • PostgreSQLPlatform

      public PostgreSQLPlatform()
  • Method Details

    • 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:
    • 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:
    • 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