Class InsertRequest
java.lang.Object
org.datanucleus.store.rdbms.request.Request
org.datanucleus.store.rdbms.request.InsertRequest
Class to provide a means of insertion of records to RDBMS.
Extends basic request class implementing the execute method to do a JDBC insert operation.
The SQL will be of the form
INSERT INTO TBL_NAME (col1, col2, col3, ...) VALUES (?, ?, ?, ...)
When inserting an object with inheritance this will involve 1 InsertRequest for each table involved. So if we have a class B that extends class A and they both use "new-table" inheritance strategy, we will have 2 InsertRequests, one for table A, and one for table B.
When the InsertRequest starts to populate its statement and it has a PC field, this calls PersistableMapping.setObject(). This then checks if the other PC object is yet persistent and, if not, will persist it before processing this objects INSERT. This forms the key to "persistence-by-reachability".
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate class
Internal class to provide mapping consumption for an INSERT. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
Whether to batch the INSERT SQL.private StatementMappingIndex
StatementExpressionIndex for create-timestamp.private StatementMappingIndex
StatementExpressionIndex for create-user.private StatementMappingIndex
StatementExpressionIndex for discriminator.private StatementMappingIndex[]
StatementExpressionIndex for external FK discriminators (shared FKs)private StatementMappingIndex[]
StatementExpressionIndex for external FKsprivate StatementMappingIndex[]
StatementExpressionIndex for external indicesprivate boolean
Whether the class has an identity (auto-increment, serial etc) columnprivate static final int
private final int[]
Numbers of fields in the INSERT statement (excluding PK).private final String
SQL statement for the INSERT.private final List
<MappingCallbacks> callback mappings will have their postInsert method called after the updateprivate StatementMappingIndex
StatementExpressionIndex for multi-tenancy.private final int[]
Numbers of Primary key fields.private final List
<JavaTypeMapping> private final int[]
Numbers of fields that are reachable yet have no datastore column in this table.private final int[]
Numbers of fields that are relations that may be detached when persisting but not bidir so cant attach yet.private StatementMappingIndex[]
StatementExpressionIndex for fields to be "retrieved"private StatementMappingIndex
StatementExpressionIndex for soft-delete.private StatementMappingIndex[]
one StatementExpressionIndex for each fieldprivate StatementMappingIndex
StatementExpressionIndex for update-timestamp.private StatementMappingIndex
StatementExpressionIndex for update-user.private StatementMappingIndex
StatementExpressionIndex for version -
Constructor Summary
ConstructorsConstructorDescriptionInsertRequest
(DatastoreClass table, org.datanucleus.metadata.AbstractClassMetaData cmd, org.datanucleus.ClassLoaderResolver clr) Constructor, taking the table. -
Method Summary
Modifier and TypeMethodDescriptionvoid
execute
(org.datanucleus.state.DNStateManager sm) Method performing the insertion of the record from the datastore.private Object
getInsertedIdentityValue
(org.datanucleus.ExecutionContext ec, SQLController sqlControl, org.datanucleus.state.DNStateManager sm, org.datanucleus.store.connection.ManagedConnection mconn, PreparedStatement ps) Method to obtain the identity attributed by the datastore when using auto-increment/IDENTITY/SERIAL on a field.
-
Field Details
-
IDPARAMNUMBER
private static final int IDPARAMNUMBER- See Also:
-
mappingCallbacks
callback mappings will have their postInsert method called after the update -
postSetMappings
-
insertFieldNumbers
private final int[] insertFieldNumbersNumbers of fields in the INSERT statement (excluding PK). -
pkFieldNumbers
private final int[] pkFieldNumbersNumbers of Primary key fields. -
reachableFieldNumbers
private final int[] reachableFieldNumbersNumbers of fields that are reachable yet have no datastore column in this table. Used for reachability. -
relationFieldNumbers
private final int[] relationFieldNumbersNumbers of fields that are relations that may be detached when persisting but not bidir so cant attach yet. -
insertStmt
SQL statement for the INSERT. -
hasIdentityColumn
private boolean hasIdentityColumnWhether the class has an identity (auto-increment, serial etc) column -
stmtMappings
one StatementExpressionIndex for each field -
retrievedStmtMappings
StatementExpressionIndex for fields to be "retrieved" -
versionStmtMapping
StatementExpressionIndex for version -
discriminatorStmtMapping
StatementExpressionIndex for discriminator. -
multitenancyStmtMapping
StatementExpressionIndex for multi-tenancy. -
softDeleteStmtMapping
StatementExpressionIndex for soft-delete. -
createUserStmtMapping
StatementExpressionIndex for create-user. -
createTimestampStmtMapping
StatementExpressionIndex for create-timestamp. -
updateUserStmtMapping
StatementExpressionIndex for update-user. -
updateTimestampStmtMapping
StatementExpressionIndex for update-timestamp. -
externalFKStmtMappings
StatementExpressionIndex for external FKs -
externalFKDiscrimStmtMappings
StatementExpressionIndex for external FK discriminators (shared FKs) -
externalOrderStmtMappings
StatementExpressionIndex for external indices -
batch
private boolean batchWhether to batch the INSERT SQL.
-
-
Constructor Details
-
InsertRequest
public InsertRequest(DatastoreClass table, org.datanucleus.metadata.AbstractClassMetaData cmd, org.datanucleus.ClassLoaderResolver clr) Constructor, taking the table. Uses the structure of the datastore table to build a basic query.- Parameters:
table
- The Class Table representing the datastore table to insert.cmd
- ClassMetaData for the object being persistedclr
- ClassLoader resolver
-
-
Method Details
-
execute
public void execute(org.datanucleus.state.DNStateManager sm) Method performing the insertion of the record from the datastore. Takes the constructed insert query and populates with the specific record information. -
getInsertedIdentityValue
private Object getInsertedIdentityValue(org.datanucleus.ExecutionContext ec, SQLController sqlControl, org.datanucleus.state.DNStateManager sm, org.datanucleus.store.connection.ManagedConnection mconn, PreparedStatement ps) throws SQLException Method to obtain the identity attributed by the datastore when using auto-increment/IDENTITY/SERIAL on a field.- Parameters:
ec
- execution contextsqlControl
- SQLControllersm
- StateManager of the objectmconn
- The Connectionps
- PreparedStatement for the INSERT- Returns:
- The identity
- Throws:
SQLException
- Thrown if an error occurs retrieving the identity
-