Class AbstractTable
java.lang.Object
org.datanucleus.store.rdbms.table.AbstractTable
- All Implemented Interfaces:
Table, org.datanucleus.store.schema.table.Table
Abstract implementation of a table in the datastore.
The table exists in various states.
After initialisation it can be created in the datastore by calling create.
At any point after initialisation it can be modified, but only by addition of columns.
The table can be dropped from the datastore by calling drop.
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected List<org.datanucleus.store.schema.table.Column> Columns for this table.protected Map<DatastoreIdentifier, Column> Index to the columns, keyed by name identifier.protected final DatastoreAdapterDatabase Adapter being used.protected BooleanCache what we learned in a call to exists()private StringFully qualified name of this table.private final intcompute hashCode in advance to improve performanceprotected final DatastoreIdentifierIdentifier name for the table.protected shortState of the tableprotected final RDBMSStoreManagerManager for this table.protected static final shortTable object has been initialised.protected static final shortTable object has been initialized but has had structural modifications since.protected static final shortTable object has just been created.protected static final shortTable object is created and PK initialised.protected static final shortTable object has been validated. -
Constructor Summary
ConstructorsConstructorDescriptionAbstractTable(DatastoreIdentifier identifier, RDBMSStoreManager storeMgr) Constructor taking the table name and the RDBMSManager managing this table. -
Method Summary
Modifier and TypeMethodDescriptionaddColumn(String storedJavaType, DatastoreIdentifier name, JavaTypeMapping mapping, org.datanucleus.metadata.ColumnMetaData colmd) Creates a new column in the table.protected voidaddColumnInternal(Column col) Utility method to add a column to the internal representationprotected booleanDetermine whether we or our concrete class allow DDL to be written into a file instead of sending it to the DB.protected voidprotected voidprotected voidprotected voidprotected voidprotected voidbooleancreate(Connection conn) Method to create the table in the datastore representation.voiddrop(Connection conn) Method to drop the table from the datastore representation.final booleanprotected voidexecuteDdlStatement(Statement stmt, String stmtText) Execute a single DDL SQL statement with appropriate logging.protected voidexecuteDdlStatementList(List<String> stmts, Connection conn) Method to perform the required SQL statements.booleanexists(Connection conn, boolean auto_create) Method to check the existence of the table/view, optionally auto creating it where required.Accessor for the Catalog Name.org.datanucleus.metadata.AbstractClassMetaDatagetColumn(DatastoreIdentifier identifier) Accessor for the column with the specified identifier.org.datanucleus.store.schema.table.ColumngetColumnForName(String name) org.datanucleus.store.schema.table.ColumngetColumnForPosition(int pos) List<org.datanucleus.store.schema.table.Column> Method that operates like toString except it returns a fully-qualified name that will always be fully-qualified even when the user hasnt specified the catalog/schema in PMF or MetaData.org.datanucleus.metadata.DiscriminatorMetaDataAccessor for Discriminator MetaData.Accessor for the SQL identifier (the table name).org.datanucleus.store.schema.table.MemberColumnMappinggetMemberColumnMappingForEmbeddedMember(List<org.datanucleus.metadata.AbstractMemberMetaData> mmds) org.datanucleus.store.schema.table.MemberColumnMappinggetMemberColumnMappingForMember(org.datanucleus.metadata.AbstractMemberMetaData mmd) Set<org.datanucleus.store.schema.table.MemberColumnMapping> getName()intAccessor for the Schema Name.getSQLCreateStatements(Properties props) Accessor for the SQL create statements.Accessor for the SQL drop statements.getSurrogateColumn(org.datanucleus.store.schema.table.SurrogateColumnType colType) getSurrogateMapping(org.datanucleus.store.schema.table.SurrogateColumnType colType, boolean allowSuperclasses) Accessor for the mapping for the specified surrogate type.org.datanucleus.metadata.VersionMetaDataAccessor for the Version MetaData.booleanhasColumn(DatastoreIdentifier identifier) Checks if there is a column for the identifierprotected booleanhasColumnName(DatastoreIdentifier colName) Utility to return if a column of this name exists.final inthashCode()booleanAccessor for whether the table has been initialised.booleanAccessor for whether the table has been modified since initialisation.booleanAccessor for whether the primary key of the table is initialised.booleanAccessor for whether the table is validated.voidpostInitialize(org.datanucleus.ClassLoaderResolver clr) Post-initialize; for things that must be set after all classes have been initialized.voidpreInitialize(org.datanucleus.ClassLoaderResolver clr) Pre-initialize method; for things that must be initialized right after construction.protected booleanDetermine whether our table exists in the datastore (without modifying datastore).final StringtoString()Method to return a string version of this table.Methods inherited from interface Table
getIdMapping, getMemberMapping, initialize, validate
-
Field Details
-
TABLE_STATE_NEW
protected static final short TABLE_STATE_NEWTable object has just been created.- See Also:
-
TABLE_STATE_PK_INITIALIZED
protected static final short TABLE_STATE_PK_INITIALIZEDTable object is created and PK initialised.- See Also:
-
TABLE_STATE_INITIALIZED
protected static final short TABLE_STATE_INITIALIZEDTable object has been initialised.- See Also:
-
TABLE_STATE_INITIALIZED_MODIFIED
protected static final short TABLE_STATE_INITIALIZED_MODIFIEDTable object has been initialized but has had structural modifications since.- See Also:
-
TABLE_STATE_VALIDATED
protected static final short TABLE_STATE_VALIDATEDTable object has been validated.- See Also:
-
storeMgr
Manager for this table. -
dba
Database Adapter being used. -
identifier
Identifier name for the table. Includes the catalog/schema internally (if defined by the user). -
state
protected short stateState of the table -
columns
Columns for this table. -
columnsByIdentifier
Index to the columns, keyed by name identifier. TODO Key this by the column name, not its identifier. -
fullyQualifiedName
Fully qualified name of this table. -
hashCode
private final int hashCodecompute hashCode in advance to improve performance -
existsInDatastore
Cache what we learned in a call to exists()
-
-
Constructor Details
-
AbstractTable
Constructor taking the table name and the RDBMSManager managing this table.- Parameters:
identifier- Name of the tablestoreMgr- The RDBMS Manager
-
-
Method Details
-
isInitialized
public boolean isInitialized()Description copied from interface:TableAccessor for whether the table has been initialised.- Specified by:
isInitializedin interfaceTable- Returns:
- Whether it is initialised.
-
preInitialize
public void preInitialize(org.datanucleus.ClassLoaderResolver clr) Description copied from interface:TablePre-initialize method; for things that must be initialized right after construction.- Specified by:
preInitializein interfaceTable- Parameters:
clr- the ClassLoaderResolver
-
postInitialize
public void postInitialize(org.datanucleus.ClassLoaderResolver clr) Description copied from interface:TablePost-initialize; for things that must be set after all classes have been initialized.- Specified by:
postInitializein interfaceTable- Parameters:
clr- the ClassLoaderResolver
-
isPKInitialized
public boolean isPKInitialized()Accessor for whether the primary key of the table is initialised.- Returns:
- Whether the primary key of the table is initialised
-
isValidated
public boolean isValidated()Description copied from interface:TableAccessor for whether the table is validated.- Specified by:
isValidatedin interfaceTable- Returns:
- Whether it is validated.
-
isInitializedModified
public boolean isInitializedModified()Accessor for whether the table has been modified since initialisation.- Specified by:
isInitializedModifiedin interfaceTable- Returns:
- Whether it is modified since initialisation.
-
getStoreManager
- Specified by:
getStoreManagerin interfaceTable- Specified by:
getStoreManagerin interfaceorg.datanucleus.store.schema.table.Table
-
getName
- Specified by:
getNamein interfaceorg.datanucleus.store.schema.table.Table
-
getCatalogName
Accessor for the Catalog Name. This will be part of the fully qualified name IF the user has specified the catalog in the MetaData, OR if they have specified the catalog in the PMF.- Specified by:
getCatalogNamein interfaceorg.datanucleus.store.schema.table.Table- Returns:
- Catalog Name
-
getSchemaName
Accessor for the Schema Name. This will be part of the fully qualified name IF the user has specified the schema in the MetaData, OR if they have specified the schema in the PMF.- Specified by:
getSchemaNamein interfaceorg.datanucleus.store.schema.table.Table- Returns:
- Schema Name
-
getIdentifier
Accessor for the SQL identifier (the table name).- Specified by:
getIdentifierin interfaceTable- Returns:
- The name
-
getClassMetaData
public org.datanucleus.metadata.AbstractClassMetaData getClassMetaData()- Specified by:
getClassMetaDatain interfaceorg.datanucleus.store.schema.table.Table
-
getNumberOfColumns
public int getNumberOfColumns()- Specified by:
getNumberOfColumnsin interfaceorg.datanucleus.store.schema.table.Table
-
getColumns
- Specified by:
getColumnsin interfaceorg.datanucleus.store.schema.table.Table
-
getColumnForPosition
public org.datanucleus.store.schema.table.Column getColumnForPosition(int pos) - Specified by:
getColumnForPositionin interfaceorg.datanucleus.store.schema.table.Table
-
getSurrogateColumn
- Specified by:
getSurrogateColumnin interfaceorg.datanucleus.store.schema.table.Table
-
getColumnForName
- Specified by:
getColumnForNamein interfaceorg.datanucleus.store.schema.table.Table
-
getMemberColumnMappingForMember
public org.datanucleus.store.schema.table.MemberColumnMapping getMemberColumnMappingForMember(org.datanucleus.metadata.AbstractMemberMetaData mmd) - Specified by:
getMemberColumnMappingForMemberin interfaceorg.datanucleus.store.schema.table.Table
-
getMemberColumnMappingForEmbeddedMember
public org.datanucleus.store.schema.table.MemberColumnMapping getMemberColumnMappingForEmbeddedMember(List<org.datanucleus.metadata.AbstractMemberMetaData> mmds) - Specified by:
getMemberColumnMappingForEmbeddedMemberin interfaceorg.datanucleus.store.schema.table.Table
-
getMemberColumnMappings
- Specified by:
getMemberColumnMappingsin interfaceorg.datanucleus.store.schema.table.Table
-
getSurrogateMapping
public JavaTypeMapping getSurrogateMapping(org.datanucleus.store.schema.table.SurrogateColumnType colType, boolean allowSuperclasses) Description copied from interface:TableAccessor for the mapping for the specified surrogate type.- Specified by:
getSurrogateMappingin interfaceTable- Parameters:
colType- Column type for the surrogateallowSuperclasses- Whether to allow searching superclasses when not specified in this table.- Returns:
- The mapping
-
getVersionMetaData
public org.datanucleus.metadata.VersionMetaData getVersionMetaData()Description copied from interface:TableAccessor for the Version MetaData.- Specified by:
getVersionMetaDatain interfaceTable- Returns:
- Returns the Version MetaData.
-
getDiscriminatorMetaData
public org.datanucleus.metadata.DiscriminatorMetaData getDiscriminatorMetaData()Description copied from interface:TableAccessor for Discriminator MetaData.- Specified by:
getDiscriminatorMetaDatain interfaceTable- Returns:
- Returns the Discriminator MetaData.
-
addColumn
public Column addColumn(String storedJavaType, DatastoreIdentifier name, JavaTypeMapping mapping, org.datanucleus.metadata.ColumnMetaData colmd) Creates a new column in the table. Will add the new Column and return it. If the new column clashes in name with an existing column of the required name will throw a DuplicateColumnNameException except when :-- The 2 columns are for same named fields in the class or its subclasses with the subclass(es) using "superclass-table" inheritance strategy. One of the columns has to come from a subclass - cant have both from the same class.
- Specified by:
addColumnin interfaceTable- Parameters:
storedJavaType- the java type of the columnname- the SQL identifier for the column to be addedmapping- the mapping for the column to be addedcolmd- ColumnMetaData for the column to be added to the table- Returns:
- the new Column
- Throws:
DuplicateColumnException- if a column already exists with same name and not a supported situation.
-
hasColumn
Description copied from interface:TableChecks if there is a column for the identifier -
getColumn
Description copied from interface:TableAccessor for the column with the specified identifier. Returns null if has no column of this name. -
create
Description copied from interface:TableMethod to create the table in the datastore representation.- Specified by:
createin interfaceTable- Parameters:
conn- The connection to use- Returns:
- true if the table was created
- Throws:
SQLException- Thrown if an error occurs creating the table.
-
drop
Description copied from interface:TableMethod to drop the table from the datastore representation.- Specified by:
dropin interfaceTable- Parameters:
conn- The connection to use- Throws:
SQLException- Thrown if an error occurs
-
exists
Method to check the existence of the table/view, optionally auto creating it where required. If it doesn't exist and auto creation isn't specified this throws a MissingTableException.- Specified by:
existsin interfaceTable- Parameters:
conn- The JDBC Connectionauto_create- Whether to auto create the table if not existing- Returns:
- Whether the table was added
- Throws:
SQLException- Thrown when an error occurs in the JDBC calls
-
equals
-
hashCode
-
toString
Method to return a string version of this table. This name is the fully-qualified name of the table,including catalog/schema names, where these are appropriate. They are included where the user has either specified the catalog/schema for the PMF, or in the MetaData. They are also only included where the datastore adapter supports their use. -
getDatastoreIdentifierFullyQualified
Method that operates like toString except it returns a fully-qualified name that will always be fully-qualified even when the user hasnt specified the catalog/schema in PMF or MetaData. That is, it will add on any auto-calculated catalog/schema for the datastore. Note that this will never include any quoting strings required for insert/select etc.- Returns:
- The fully qualified name
-
addColumnInternal
Utility method to add a column to the internal representation- Parameters:
col- The column
-
hasColumnName
Utility to return if a column of this name exists.- Parameters:
colName- The column name- Returns:
- Whether the column of this name exists
-
getSQLCreateStatements
Accessor for the SQL create statements.- Parameters:
props- Properties controlling the table creation- Returns:
- The SQL Create statements
-
getSQLDropStatements
-
assertIsPKUninitialized
protected void assertIsPKUninitialized() -
assertIsUninitialized
protected void assertIsUninitialized() -
assertIsInitialized
protected void assertIsInitialized() -
assertIsInitializedModified
protected void assertIsInitializedModified() -
assertIsPKInitialized
protected void assertIsPKInitialized() -
assertIsValidated
protected void assertIsValidated() -
allowDDLOutput
protected boolean allowDDLOutput()Determine whether we or our concrete class allow DDL to be written into a file instead of sending it to the DB. Defaults to true.- Returns:
- Whether it allows DDL outputting
-
executeDdlStatementList
Method to perform the required SQL statements.- Parameters:
stmts- A List of statementsconn- The Connection to the datastore- Throws:
SQLException- Any exception thrown by the statements
-
executeDdlStatement
Execute a single DDL SQL statement with appropriate logging. If ddlWriter is set, do not actually execute the SQL but write it to that Writer.- Parameters:
stmt- The JDBC Statement object to execute onstmtText- The actual SQL statement text- Throws:
SQLException- Thrown if an error occurs
-
tableExistsInDatastore
Determine whether our table exists in the datastore (without modifying datastore). Result is cached- Parameters:
conn- The Connection- Returns:
- Whether the table exists in the datastore
- Throws:
SQLException- Thrown if an error occurs
-