76
70
* Transaction and Statement messages, false otherwise.
78
72
bool shouldConstructMessages();
74
* Method which returns the active Transaction message
75
* for the supplied Session. If one is not found, a new Transaction
76
* message is allocated, initialized, and returned. It is possible that
77
* we may want to NOT increment the transaction id for a new Transaction
78
* object (e.g., splitting up Transactions into smaller chunks). The
79
* should_inc_trx_id flag controls if we do this.
81
* @param in_session The session processing the transaction
82
* @param should_inc_trx_id If true, increments the transaction id for a new trx
84
message::Transaction *getActiveTransactionMessage(Session *in_session,
85
bool should_inc_trx_id= true);
87
* Method which attaches a transaction context
88
* the supplied transaction based on the supplied Session's
89
* transaction information. This method also ensure the
90
* transaction message is attached properly to the Session object
92
* @param in_transaction The transaction message to initialize
93
* @param in_session The Session processing this transaction
94
* @param should_inc_trx_id If true, increments the transaction id for a new trx
96
void initTransactionMessage(message::Transaction &in_transaction,
98
bool should_inc_trx_id);
100
* Helper method which finalizes data members for the
101
* supplied transaction's context.
103
* @param in_transaction The transaction message to finalize
104
* @param in_session The Session processing this transaction
106
void finalizeTransactionMessage(message::Transaction &in_transaction, Session *in_session);
108
* Helper method which deletes transaction memory and
109
* unsets Session's transaction and statement messages.
111
void cleanupTransactionMessage(message::Transaction *in_transaction,
112
Session *in_session);
115
* Helper method which initializes a Statement message
117
* @param statement The statement to initialize
118
* @param in_type The type of the statement
119
* @param in_session The session processing this statement
121
void initStatementMessage(message::Statement &statement,
122
message::Statement::Type in_type,
123
Session *in_session);
81
125
* Finalizes a Statement message and sets the Session's statement
82
126
* message to NULL.
84
128
* @param statement The statement to initialize
85
* @param session The Session object processing this statement
129
* @param in_session The session processing this statement
87
131
void finalizeStatementMessage(message::Statement &statement,
88
Session::reference session);
132
Session *in_session);
133
/** Helper method which returns an initialized Statement message for methods
134
* doing insertion of data.
136
* @param[in] in_session Pointer to the Session doing the processing
137
* @param[in] in_table Pointer to the Table object being inserted into
138
* @param[out] next_segment_id The next Statement segment id to be used
140
message::Statement &getInsertStatement(Session *in_session,
142
uint32_t *next_segment_id);
145
* Helper method which initializes the header message for
148
* @param[in,out] statement Statement message container to modify
149
* @param[in] in_session Pointer to the Session doing the processing
150
* @param[in] in_table Pointer to the Table being inserted into
152
void setInsertHeader(message::Statement &statement,
156
* Helper method which returns an initialized Statement
157
* message for methods doing updates of data.
159
* @param[in] in_session Pointer to the Session doing the processing
160
* @param[in] in_table Pointer to the Table object being updated
161
* @param[in] old_record Pointer to the old data in the record
162
* @param[in] new_record Pointer to the new data in the record
163
* @param[out] next_segment_id The next Statement segment id to be used
165
message::Statement &getUpdateStatement(Session *in_session,
167
const unsigned char *old_record,
168
const unsigned char *new_record,
169
uint32_t *next_segment_id);
171
* Helper method which initializes the header message for
174
* @param[in,out] statement Statement message container to modify
175
* @param[in] in_session Pointer to the Session doing the processing
176
* @param[in] in_table Pointer to the Table being updated
177
* @param[in] old_record Pointer to the old data in the record
178
* @param[in] new_record Pointer to the new data in the record
180
void setUpdateHeader(message::Statement &statement,
183
const unsigned char *old_record,
184
const unsigned char *new_record);
186
* Helper method which returns an initialized Statement
187
* message for methods doing deletion of data.
189
* @param[in] in_session Pointer to the Session doing the processing
190
* @param[in] in_table Pointer to the Table object being deleted from
191
* @param[out] next_segment_id The next Statement segment id to be used
193
message::Statement &getDeleteStatement(Session *in_session,
195
uint32_t *next_segment_id);
198
* Helper method which initializes the header message for
201
* @param[in,out] statement Statement message container to modify
202
* @param[in] in_session Pointer to the Session doing the processing
203
* @param[in] in_table Pointer to the Table being deleted from
205
void setDeleteHeader(message::Statement &statement,
209
* Commits a normal transaction (see above) and pushes the transaction
210
* message out to the replicators.
212
* @param in_session Pointer to the Session committing the transaction
214
int commitTransactionMessage(Session *in_session);
216
* Marks the current active transaction message as being rolled back and
217
* pushes the transaction message out to replicators.
219
* @param in_session Pointer to the Session committing the transaction
221
void rollbackTransactionMessage(Session *in_session);
223
* Rolls back the current statement, deleting the last Statement out of
224
* the current Transaction message.
226
* @note This depends on having clear statement boundaries (i.e., one
227
* Statement message per actual SQL statement.
229
void rollbackStatementMessage(Session *in_session);
91
231
* Creates a new InsertRecord GPB message and pushes it to
94
* @param session Session object which has inserted a record
95
* @param table Table object containing insert information
234
* @param in_session Pointer to the Session which has inserted a record
235
* @param in_table Pointer to the Table containing insert information
97
237
* Grr, returning "true" here on error because of the cursor
98
238
* reversed bool return crap...fix that.
100
bool insertRecord(Session::reference session, Table &in_table);
240
bool insertRecord(Session *in_session, Table *in_table);
103
242
* Creates a new UpdateRecord GPB message and pushes it to
106
* @param session Session object which has updated a record
107
* @param table Table object containing update information
245
* @param in_session Pointer to the Session which has updated a record
246
* @param in_table Pointer to the Table containing update information
108
247
* @param old_record Pointer to the raw bytes representing the old record/row
109
248
* @param new_record Pointer to the raw bytes representing the new record/row
111
void updateRecord(Session::reference session,
250
void updateRecord(Session *in_session,
113
252
const unsigned char *old_record,
114
253
const unsigned char *new_record);
117
255
* Creates a new DeleteRecord GPB message and pushes it to
120
* @param session Session object which has deleted a record
121
* @param table Table object containing delete information
258
* @param in_session Pointer to the Session which has deleted a record
259
* @param in_table Pointer to the Table containing delete information
122
260
* @param use_update_record If true, uses the values from the update row instead
124
void deleteRecord(Session::reference session,
126
bool use_update_record= false);
262
void deleteRecord(Session *in_session, Table *in_table, bool use_update_record= false);
265
* Used to undo effects of a failed statement.
267
* An SQL statement, like an UPDATE, that affects multiple rows could
268
* potentially fail mid-way through processing the rows. In such a case,
269
* the successfully modified rows that preceeded the failing row would
270
* have been added to the Statement message. This method is used for
271
* rolling back that change.
274
* This particular failure is seen on column constraint violations
275
* during a multi-row UPDATE and a multi-row INSERT..SELECT.
277
* @param in_session Pointer to the Session containing the Statement
278
* @param count The number of records to remove from Statement.
280
* @retval true Successfully removed 'count' records
281
* @retval false Failure
283
bool removeStatementRecords(Session *in_session, uint32_t count);
129
286
* Creates a CreateSchema Statement GPB message and adds it
130
287
* to the Session's active Transaction GPB message for pushing
131
288
* out to the replicator streams.
133
* @param[in] session Session object which issued the statement
290
* @param[in] in_session Pointer to the Session which issued the statement
134
291
* @param[in] schema message::Schema message describing new schema
136
void createSchema(Session::reference session, const message::Schema &schema);
293
void createSchema(Session *in_session, const message::Schema &schema);
139
295
* Creates a DropSchema Statement GPB message and adds it
140
296
* to the Session's active Transaction GPB message for pushing
141
297
* out to the replicator streams.
143
* @param[in] session Session object which issued the statement
144
* @param[in] identifier Identifier for the schema to drop
146
void dropSchema(Session::reference session,
147
identifier::Schema::const_reference identifier,
148
message::schema::const_reference schema);
151
* Creates an AlterSchema Statement GPB message and adds it
152
* to the Session's active Transaction GPB message for pushing
153
* out to the replicator streams.
155
* @param[in] session Session object which issued the statement
156
* @param[in] old_schema Original schema definition
157
* @param[in] new_schema New schema definition
159
void alterSchema(Session::reference session,
160
const message::Schema &old_schema,
161
const message::Schema &new_schema);
299
* @param[in] in_session Pointer to the Session which issued the statement
300
* @param[in] schema_name message::Schema message describing new schema
302
void dropSchema(Session *in_session, const std::string &schema_name);
164
304
* Creates a CreateTable Statement GPB message and adds it
165
305
* to the Session's active Transaction GPB message for pushing
166
306
* out to the replicator streams.
168
* @param[in] session Session object which issued the statement
308
* @param[in] in_session Pointer to the Session which issued the statement
169
309
* @param[in] table message::Table message describing new schema
171
void createTable(Session::reference session, const message::Table &table);
311
void createTable(Session *in_session, const message::Table &table);
174
313
* Creates a DropTable Statement GPB message and adds it
175
314
* to the Session's active Transaction GPB message for pushing
176
315
* out to the replicator streams.
178
* @param[in] session Session object which issued the statement
179
* @param[in] table Identifier for the table being dropped
317
* @param[in] in_session Pointer to the Session which issued the statement
318
* @param[in] schema_name The schema of the table being dropped
319
* @param[in] table_name The table name of the table being dropped
180
320
* @param[in] if_exists Did the user specify an IF EXISTS clause?
182
void dropTable(Session::reference session,
183
identifier::Table::const_reference identifier,
184
message::table::const_reference table,
322
void dropTable(Session *in_session,
323
const std::string &schema_name,
324
const std::string &table_name,
188
327
* Creates a TruncateTable Statement GPB message and adds it
189
328
* to the Session's active Transaction GPB message for pushing
190
329
* out to the replicator streams.
192
* @param[in] session Session object which issued the statement
193
* @param[in] table The Table being truncated
331
* @param[in] in_session Pointer to the Session which issued the statement
332
* @param[in] in_table The Table being truncated
195
void truncateTable(Session::reference session, Table &table);
334
void truncateTable(Session *in_session, Table *in_table);
198
336
* Creates a new RawSql GPB message and pushes it to
203
341
* on the I_S, etc. Not sure what to do with administrative
204
342
* commands like CHECK TABLE, though..
206
* @param session Session object which issued the statement
344
* @param in_session Pointer to the Session which issued the statement
207
345
* @param query Query string
209
void rawStatement(Session::reference session, const std::string &query);
347
void rawStatement(Session *in_session, const std::string &query);
211
348
/* transactions: interface to plugin::StorageEngine functions */
212
int rollbackTransaction(Session::reference session, bool all);
215
* Commit the current transaction.
218
* @retval 1 transaction was rolled back
219
* @retval 2 error during commit, data may be inconsistent
222
* Since we don't support nested statement transactions in 5.0,
223
* we can't commit or rollback stmt transactions while we are inside
224
* stored functions or triggers. So we simply do nothing now.
225
* This should be fixed in later ( >= 5.1) releases.
227
int commitTransaction(Session::reference session, bool all);
230
* This is used to commit or rollback a single statement depending on
231
* the value of error.
234
* Note that if the autocommit is on, then the following call inside
235
* InnoDB will commit or rollback the whole transaction (= the statement). The
236
* autocommit mechanism built into InnoDB is based on counting locks, but if
237
* the user has used LOCK TABLES then that mechanism does not know to do the
240
int autocommitOrRollback(Session::reference session, int error);
349
int commitPhaseOne(Session *session, bool all);
350
int rollbackTransaction(Session *session, bool all);
352
/* transactions: these functions never call plugin::StorageEngine functions directly */
353
int commitTransaction(Session *session, bool all);
354
int autocommitOrRollback(Session *session, int error);
243
int rollbackToSavepoint(Session::reference session, NamedSavepoint &sv);
244
int setSavepoint(Session::reference session, NamedSavepoint &sv);
245
int releaseSavepoint(Session::reference session, NamedSavepoint &sv);
357
int rollbackToSavepoint(Session *session, NamedSavepoint &sv);
358
int setSavepoint(Session *session, NamedSavepoint &sv);
359
int releaseSavepoint(Session *session, NamedSavepoint &sv);
248
362
* Marks a storage engine as participating in a statement
333
448
* Send server startup event.
335
* @param session Session object
450
* @param session Session pointer
337
452
* @retval true Success
338
453
* @retval false Failure
340
bool sendStartupEvent(Session::reference session);
455
bool sendStartupEvent(Session *session);
343
458
* Send server shutdown event.
345
* @param session Session object
460
* @param session Session pointer
347
462
* @retval true Success
348
463
* @retval false Failure
350
bool sendShutdownEvent(Session::reference session);
465
bool sendShutdownEvent(Session *session);
355
* Method which returns the active Transaction message
356
* for the supplied Session. If one is not found, a new Transaction
357
* message is allocated, initialized, and returned. It is possible that
358
* we may want to NOT increment the transaction id for a new Transaction
359
* object (e.g., splitting up Transactions into smaller chunks). The
360
* should_inc_trx_id flag controls if we do this.
362
* @param session The Session object processing the transaction
363
* @param should_inc_trx_id If true, increments the transaction id for a new trx
365
message::Transaction *getActiveTransactionMessage(Session::reference session,
366
bool should_inc_trx_id= true);
369
* Method which attaches a transaction context
370
* the supplied transaction based on the supplied Session's
371
* transaction information. This method also ensure the
372
* transaction message is attached properly to the Session object
374
* @param transaction The transaction message to initialize
375
* @param session The Session object processing this transaction
376
* @param should_inc_trx_id If true, increments the transaction id for a new trx
378
void initTransactionMessage(message::Transaction &transaction,
379
Session::reference session,
380
bool should_inc_trx_id);
383
* Helper method which initializes a Statement message
385
* @param statement The statement to initialize
386
* @param type The type of the statement
387
* @param session The Session object processing this statement
389
void initStatementMessage(message::Statement &statement,
390
message::Statement::Type type,
391
Session::const_reference session);
394
* Helper method which finalizes data members for the
395
* supplied transaction's context.
397
* @param transaction The transaction message to finalize
398
* @param session The Session object processing this transaction
400
void finalizeTransactionMessage(message::Transaction &transaction,
401
Session::const_reference session);
404
* Helper method which deletes transaction memory and
405
* unsets Session's transaction and statement messages.
407
void cleanupTransactionMessage(message::Transaction *transaction,
408
Session::reference session);
410
/** Helper method which returns an initialized Statement message for methods
411
* doing insertion of data.
413
* @param[in] session Session object doing the processing
414
* @param[in] table Table object being inserted into
415
* @param[out] next_segment_id The next Statement segment id to be used
417
message::Statement &getInsertStatement(Session::reference session,
419
uint32_t *next_segment_id);
422
* Helper method which initializes the header message for
425
* @param[in,out] statement Statement message container to modify
426
* @param[in] session Session object doing the processing
427
* @param[in] table Table object being inserted into
429
void setInsertHeader(message::Statement &statement,
430
Session::const_reference session,
433
* Helper method which returns an initialized Statement
434
* message for methods doing updates of data.
436
* @param[in] session Session object doing the processing
437
* @param[in] table Table object being updated
438
* @param[in] old_record Pointer to the old data in the record
439
* @param[in] new_record Pointer to the new data in the record
440
* @param[out] next_segment_id The next Statement segment id to be used
442
message::Statement &getUpdateStatement(Session::reference session,
444
const unsigned char *old_record,
445
const unsigned char *new_record,
446
uint32_t *next_segment_id);
448
* Helper method which initializes the header message for
451
* @param[in,out] statement Statement message container to modify
452
* @param[in] session Session object doing the processing
453
* @param[in] table Table object being updated
454
* @param[in] old_record Pointer to the old data in the record
455
* @param[in] new_record Pointer to the new data in the record
457
void setUpdateHeader(message::Statement &statement,
458
Session::const_reference session,
460
const unsigned char *old_record,
461
const unsigned char *new_record);
464
* Helper method which returns an initialized Statement
465
* message for methods doing deletion of data.
467
* @param[in] session Session object doing the processing
468
* @param[in] table Table object being deleted from
469
* @param[out] next_segment_id The next Statement segment id to be used
471
message::Statement &getDeleteStatement(Session::reference session,
473
uint32_t *next_segment_id);
476
* Helper method which initializes the header message for
479
* @param[in,out] statement Statement message container to modify
480
* @param[in] session Session object doing the processing
481
* @param[in] table Table object being deleted from
483
void setDeleteHeader(message::Statement &statement,
484
Session::const_reference session,
488
* Commits a normal transaction (see above) and pushes the transaction
489
* message out to the replicators.
491
* @param session Session object committing the transaction
493
int commitTransactionMessage(Session::reference session);
496
* Marks the current active transaction message as being rolled back and
497
* pushes the transaction message out to replicators.
499
* @param session Session object committing the transaction
501
void rollbackTransactionMessage(Session::reference session);
504
* Rolls back the current statement, deleting the last Statement out of
505
* the current Transaction message.
507
* @param session Session object committing the transaction
509
* @note This depends on having clear statement boundaries (i.e., one
510
* Statement message per actual SQL statement).
512
void rollbackStatementMessage(Session::reference session);
515
470
* Checks if a field has been updated
517
472
* @param current_field Pointer to the field to check if it is updated
518
* @param table Table object containing update information
473
* @in_table Pointer to the Table containing update information
519
474
* @param old_record Pointer to the raw bytes representing the old record/row
520
475
* @param new_record Pointer to the raw bytes representing the new record/row
522
477
bool isFieldUpdated(Field *current_field,
524
479
const unsigned char *old_record,
525
480
const unsigned char *new_record);