org.datanucleus.store.rdbms.adapter
Class PostgreSQLAdapter

java.lang.Object
  extended by org.datanucleus.store.rdbms.adapter.DatabaseAdapter
      extended by org.datanucleus.store.rdbms.adapter.PostgreSQLAdapter
All Implemented Interfaces:
org.datanucleus.store.mapped.DatastoreAdapter, RDBMSAdapter

public class PostgreSQLAdapter
extends DatabaseAdapter

Provides methods for adapting SQL language elements to the PostgreSQL database.


Field Summary
static String POSTGRESQL_RESERVED_WORDS
          List of Postgresql keywords that aren't in SQL92, SQL99
protected  Hashtable psqlTypes
           
 
Fields inherited from class org.datanucleus.store.rdbms.adapter.DatabaseAdapter
catalogSeparator, datastoreMajorVersion, datastoreMinorVersion, datastoreProductName, datastoreProductVersion, datastoreRevisionVersion, driverMajorVersion, driverMinorVersion, driverName, driverVersion, identifierQuoteString, LOCALISER, LOCALISER_BASE, maxColumnNameLength, maxConstraintNameLength, maxIndexNameLength, maxTableNameLength, properties, reservedKeywords, supportedOptions
 
Fields inherited from interface org.datanucleus.store.rdbms.adapter.RDBMSAdapter
ACCESS_PARENTQUERY_IN_SUBQUERY_JOINED, ALTER_TABLE_DROP_CONSTRAINT_SYNTAX, ALTER_TABLE_DROP_FOREIGN_KEY_CONSTRAINT, ANSI_CROSSJOIN_SYNTAX, ANSI_JOIN_SYNTAX, AUTO_INCREMENT_COLUMN_TYPE_SPECIFICATION, AUTO_INCREMENT_KEYS_NULL_SPECIFICATION, AUTO_INCREMENT_PK_IN_CREATE_TABLE_COLUMN_DEF, BLOB_SET_USING_SETSTRING, CHAR_COLUMNS_PADDED_WITH_SPACES, CHECK_IN_CREATE_STATEMENTS, CHECK_IN_END_CREATE_STATEMENTS, CLOB_SET_USING_SETSTRING, CREATE_INDEXES_BEFORE_FOREIGN_KEYS, CROSSJOIN_ASINNER11_SYNTAX, DATETIME_STORES_MILLISECS, DEFAULT_BEFORE_NULL_IN_COLUMN_OPTIONS, DEFAULT_KEYWORD_IN_COLUMN_OPTIONS, DEFAULT_KEYWORD_WITH_NOT_NULL_IN_COLUMN_OPTIONS, DEFERRED_CONSTRAINTS, DISTINCT_WITH_SELECT_FOR_UPDATE, EXISTS_SYNTAX, FK_DELETE_ACTION_CASCADE, FK_DELETE_ACTION_DEFAULT, FK_DELETE_ACTION_NULL, FK_DELETE_ACTION_RESTRICT, FK_IN_END_CREATE_STATEMENTS, FK_UPDATE_ACTION_CASCADE, FK_UPDATE_ACTION_DEFAULT, FK_UPDATE_ACTION_NULL, FK_UPDATE_ACTION_RESTRICT, GET_GENERATED_KEYS_STATEMENT, INCLUDE_ORDERBY_COLS_IN_SELECT, LOCK_OPTION_PLACED_AFTER_FROM, LOCK_OPTION_PLACED_WITHIN_JOIN, LOCK_WITH_SELECT_FOR_UPDATE, NULL_EQUALS_EMPTY_STRING, NULLS_IN_CANDIDATE_KEYS, NULLS_KEYWORD_IN_COLUMN_OPTIONS, ORDERBY_USING_SELECT_COLUMN_INDEX, PERSIST_OF_UNASSIGNED_CHAR, PRIMARYKEY_IN_CREATE_STATEMENTS, STATEMENT_BATCHING, STORED_PROCEDURES, TX_ISOLATION_NONE, TX_ISOLATION_READ_COMMITTED, TX_ISOLATION_READ_UNCOMMITTED, TX_ISOLATION_REPEATABLE_READ, TX_ISOLATION_SERIALIZABLE, UNION_SYNTAX, UNIQUE_IN_END_CREATE_STATEMENTS, UPDATE_MULTITABLE, USE_UNION_ALL, VIEWS
 
Fields inherited from interface org.datanucleus.store.mapped.DatastoreAdapter
ANALYSIS_METHODS, BIT_IS_REALLY_BOOLEAN, BOOLEAN_COMPARISON, CATALOGS_IN_TABLE_DEFINITIONS, ESCAPE_EXPRESSION_IN_LIKE_PREDICATE, IDENTIFIERS_LOWERCASE, IDENTIFIERS_LOWERCASE_QUOTED, IDENTIFIERS_MIXEDCASE, IDENTIFIERS_MIXEDCASE_QUOTED, IDENTIFIERS_MIXEDCASE_QUOTED_SENSITIVE, IDENTIFIERS_MIXEDCASE_SENSITIVE, IDENTIFIERS_UPPERCASE, IDENTIFIERS_UPPERCASE_QUOTED, IDENTITY_COLUMNS, PROJECTION_IN_TABLE_REFERENCE_JOINS, SCHEMAS_IN_TABLE_DEFINITIONS, SEQUENCES
 
Constructor Summary
PostgreSQLAdapter(DatabaseMetaData metadata)
          Constructor.
 
Method Summary
 String getAddColumnStatement(org.datanucleus.store.mapped.DatastoreContainerObject table, Column col)
          Accessor for the SQL statement to add a column to a table.
 String getAddPrimaryKeyStatement(PrimaryKey pk, org.datanucleus.store.mapped.IdentifierFactory factory)
          PostgreSQL allows specification of PRIMARY KEY in the CREATE TABLE, so we need nothing here.
 String getAutoIncrementKeyword()
          Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).
 String getAutoIncrementStmt(Table table, String columnName)
          Accessor for the autoincrement sql access statement for this datastore.
 String getCreateIndexStatement(Index idx, org.datanucleus.store.mapped.IdentifierFactory factory)
          Returns the appropriate DDL to create an index.
 String getDropTableStatement(org.datanucleus.store.mapped.DatastoreContainerObject table)
          Accessor for the statement for dropping a table.
 String getEscapePatternExpression()
          The character for escaping patterns.
 String getInsertStatementForNoColumns(Table table)
          Method to return the INSERT statement to use when inserting into a table and we dont want to specify columns.
 String getRangeByLimitEndOfStatementClause(long offset, long count)
          Method to return the SQL to append to the WHERE clause of a SELECT statement to handle restriction of ranges using the LIMUT keyword.
 String getSequenceCreateStmt(String sequence_name, Integer min, Integer max, Integer start, Integer increment, Integer cache_size)
          Accessor for the sequence statement to create the sequence.
 String getSequenceNextStmt(String sequence_name)
          Accessor for the statement for getting the next id from the sequence for this datastore.
 String getVendorID()
          Accessor for the vendor id.
 void initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler, org.datanucleus.store.connection.ManagedConnection mconn)
          Initialise the types for this datastore.
 boolean isStatementCancel(SQLException sqle)
          return whether this exception represents a cancelled statement.
 ForeignKeyInfo newFKInfo(ResultSet rs)
          Method to return ForeignKeyInfo for the current row of the ResultSet which will have been obtained from a call to DatabaseMetaData.getImportedKeys() or DatabaseMetaData.getExportedKeys().
 RDBMSColumnInfo newRDBMSColumnInfo(ResultSet rs)
          Method to create a column info for the current row.
 SQLTypeInfo newSQLTypeInfo(ResultSet rs)
          Create a new SQL type info from the current row of the passed ResultSet.
 boolean supportsQueryFetchSize(int size)
          Whether the datastore will support setting the query fetch size to the supplied value.
 
Methods inherited from class org.datanucleus.store.rdbms.adapter.DatabaseAdapter
addSQLTypeForJDBCType, getAdapterTime, getAddCandidateKeyStatement, getAddForeignKeyStatement, getCatalogName, getCatalogSeparator, getCheckConstraintForValues, getColumns, getContinuationString, getCreateTableStatement, getDatastoreDateStatement, getDatastoreDriverName, getDatastoreDriverVersion, getDatastoreIdentifierMaxLength, getDatastoreProductName, getDatastoreProductVersion, getDeleteTableStatement, getDriverMajorVersion, getDriverMinorVersion, getDropViewStatement, getEscapeCharacter, getExistingIndexes, getIdentifierQuoteString, getMappingManager, getMaxForeignKeys, getMaxIndexes, getMiliseconds, getNewUUIDFunction, getNumericConversionFunction, getOperatorConcat, getOrderString, getPatternExpressionAnyCharacter, getPatternExpressionZeroMoreCharacters, getRangeByRowNumberColumn, getRangeByRowNumberColumn2, getRequiredTransactionIsolationLevel, getSchemaName, getSelectForUpdateText, getSelectNewUUIDStmt, getSelectWithLockOption, getSQLTypeInfoForJdbcType, getSupportedOptions, getSurrogateForEmptyStrings, getTime, getTransactionIsolationForSchemaCreation, getUnlimitedLengthPrecisionValue, getValueForProperty, initialiseDatastore, isIdentityFieldDataType, isKeyword, isReservedKeyword, isStatementTimeout, isValidPrimaryKeyType, iteratorReservedWords, parseKeywordList, removeUnsupportedMappings, setProperties, supportsOption, supportsTransactionIsolation, toString, validToSelectMappingInStatement
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

POSTGRESQL_RESERVED_WORDS

public static final String POSTGRESQL_RESERVED_WORDS
List of Postgresql keywords that aren't in SQL92, SQL99

See Also:
Constant Field Values

psqlTypes

protected Hashtable psqlTypes
Constructor Detail

PostgreSQLAdapter

public PostgreSQLAdapter(DatabaseMetaData metadata)
Constructor.

Parameters:
metadata - MetaData for the DB
Method Detail

initialiseTypes

public void initialiseTypes(org.datanucleus.store.schema.StoreSchemaHandler handler,
                            org.datanucleus.store.connection.ManagedConnection mconn)
Initialise the types for this datastore.

Specified by:
initialiseTypes in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
initialiseTypes in class DatabaseAdapter
Parameters:
handler - SchemaHandler that we initialise the types for
mconn - Managed connection to use

getVendorID

public String getVendorID()
Accessor for the vendor id.

Specified by:
getVendorID in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
getVendorID in class DatabaseAdapter
Returns:
The vendor id.

newSQLTypeInfo

public SQLTypeInfo newSQLTypeInfo(ResultSet rs)
Description copied from interface: RDBMSAdapter
Create a new SQL type info from the current row of the passed ResultSet. Allows an adapter to override particular types where the JDBC driver is known to be buggy.

Specified by:
newSQLTypeInfo in interface RDBMSAdapter
Overrides:
newSQLTypeInfo in class DatabaseAdapter
Parameters:
rs - ResultSet
Returns:
The SQL type info

newRDBMSColumnInfo

public RDBMSColumnInfo newRDBMSColumnInfo(ResultSet rs)
Method to create a column info for the current row. Overrides the dataType/columnSize/decimalDigits to cater for Postgresql particularities.

Specified by:
newRDBMSColumnInfo in interface RDBMSAdapter
Overrides:
newRDBMSColumnInfo in class DatabaseAdapter
Parameters:
rs - ResultSet from DatabaseMetaData.getColumns()
Returns:
column info

newFKInfo

public ForeignKeyInfo newFKInfo(ResultSet rs)
Method to return ForeignKeyInfo for the current row of the ResultSet which will have been obtained from a call to DatabaseMetaData.getImportedKeys() or DatabaseMetaData.getExportedKeys().

Specified by:
newFKInfo in interface RDBMSAdapter
Overrides:
newFKInfo in class DatabaseAdapter
Parameters:
rs - The result set returned from DatabaseMetaData.get??portedKeys()
Returns:
The foreign key info

getAddColumnStatement

public String getAddColumnStatement(org.datanucleus.store.mapped.DatastoreContainerObject table,
                                    Column col)
Accessor for the SQL statement to add a column to a table.

Specified by:
getAddColumnStatement in interface RDBMSAdapter
Overrides:
getAddColumnStatement in class DatabaseAdapter
Parameters:
table - The table
col - The column
Returns:
The SQL necessary to add the column

getInsertStatementForNoColumns

public String getInsertStatementForNoColumns(Table table)
Method to return the INSERT statement to use when inserting into a table and we dont want to specify columns. This is the case when we have a single column in the table and that column is autoincrement/identity (and so is assigned automatically in the datastore). Postgresql expects something like
 INSERT INTO tbl VALUES(DEFAULT)
 

Specified by:
getInsertStatementForNoColumns in interface RDBMSAdapter
Overrides:
getInsertStatementForNoColumns in class DatabaseAdapter
Parameters:
table - The table
Returns:
The statement for the INSERT

getAddPrimaryKeyStatement

public String getAddPrimaryKeyStatement(PrimaryKey pk,
                                        org.datanucleus.store.mapped.IdentifierFactory factory)
PostgreSQL allows specification of PRIMARY KEY in the CREATE TABLE, so we need nothing here.

Specified by:
getAddPrimaryKeyStatement in interface RDBMSAdapter
Overrides:
getAddPrimaryKeyStatement in class DatabaseAdapter
Parameters:
pk - An object describing the primary key.
factory - Identifier factory
Returns:
The PK statement

getDropTableStatement

public String getDropTableStatement(org.datanucleus.store.mapped.DatastoreContainerObject table)
Accessor for the statement for dropping a table. PostgreSQL has supported the DROP TABLE tbl-name CASCADE since 7.3.

Specified by:
getDropTableStatement in interface RDBMSAdapter
Overrides:
getDropTableStatement in class DatabaseAdapter
Parameters:
table - The table to drop.
Returns:
The statement for dropping a table.

getCreateIndexStatement

public String getCreateIndexStatement(Index idx,
                                      org.datanucleus.store.mapped.IdentifierFactory factory)
Returns the appropriate DDL to create an index. Overrides the superclass variant since Postgresql doesn't support having index names specified in a particular schema (i.e "{schema}.{indexName}").

Specified by:
getCreateIndexStatement in interface RDBMSAdapter
Overrides:
getCreateIndexStatement in class DatabaseAdapter
Parameters:
idx - An object describing the index.
factory - Identifier factory
Returns:
The text of the SQL statement.

getAutoIncrementStmt

public String getAutoIncrementStmt(Table table,
                                   String columnName)
Accessor for the autoincrement sql access statement for this datastore.

Specified by:
getAutoIncrementStmt in interface RDBMSAdapter
Overrides:
getAutoIncrementStmt in class DatabaseAdapter
Parameters:
table - Table that the autoincrement is for
columnName - Name of the column that the autoincrement is for
Returns:
The statement for getting the latest auto-increment key

getAutoIncrementKeyword

public String getAutoIncrementKeyword()
Accessor for the auto-increment keyword for generating DDLs (CREATE TABLEs...).

Specified by:
getAutoIncrementKeyword in interface RDBMSAdapter
Overrides:
getAutoIncrementKeyword in class DatabaseAdapter
Returns:
The keyword for a column using auto-increment

getSequenceCreateStmt

public String getSequenceCreateStmt(String sequence_name,
                                    Integer min,
                                    Integer max,
                                    Integer start,
                                    Integer increment,
                                    Integer cache_size)
Accessor for the sequence statement to create the sequence.

Specified by:
getSequenceCreateStmt in interface RDBMSAdapter
Overrides:
getSequenceCreateStmt in class DatabaseAdapter
Parameters:
sequence_name - Name of the sequence
min - Minimum value for the sequence
max - Maximum value for the sequence
start - Start value for the sequence
increment - Increment value for the sequence
cache_size - Cache size for the sequence
Returns:
The statement for getting the next id from the sequence

getSequenceNextStmt

public String getSequenceNextStmt(String sequence_name)
Accessor for the statement for getting the next id from the sequence for this datastore.

Specified by:
getSequenceNextStmt in interface RDBMSAdapter
Overrides:
getSequenceNextStmt in class DatabaseAdapter
Parameters:
sequence_name - Name of the sequence
Returns:
The statement for getting the next id for the sequence

supportsQueryFetchSize

public boolean supportsQueryFetchSize(int size)
Whether the datastore will support setting the query fetch size to the supplied value.

Specified by:
supportsQueryFetchSize in interface org.datanucleus.store.mapped.DatastoreAdapter
Overrides:
supportsQueryFetchSize in class DatabaseAdapter
Parameters:
size - The value to set to
Returns:
Whether it is supported.

getRangeByLimitEndOfStatementClause

public String getRangeByLimitEndOfStatementClause(long offset,
                                                  long count)
Method to return the SQL to append to the WHERE clause of a SELECT statement to handle restriction of ranges using the LIMUT keyword.

Specified by:
getRangeByLimitEndOfStatementClause in interface RDBMSAdapter
Overrides:
getRangeByLimitEndOfStatementClause in class DatabaseAdapter
Parameters:
offset - The offset to return from
count - The number of items to return
Returns:
The SQL to append to allow for ranges using LIMIT.

getEscapePatternExpression

public String getEscapePatternExpression()
The character for escaping patterns.

Overrides:
getEscapePatternExpression in class DatabaseAdapter
Returns:
Escape character(s)

isStatementCancel

public boolean isStatementCancel(SQLException sqle)
return whether this exception represents a cancelled statement.

Specified by:
isStatementCancel in interface RDBMSAdapter
Overrides:
isStatementCancel in class DatabaseAdapter
Parameters:
sqle - the exception
Returns:
whether it is a cancel


Copyright © 2012. All Rights Reserved.