70
61
* Transaction and Statement messages, false otherwise.
72
63
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);
125
66
* Finalizes a Statement message and sets the Session's statement
126
67
* message to NULL.
128
69
* @param statement The statement to initialize
129
* @param in_session The session processing this statement
70
* @param session The Session object processing this statement
131
72
void finalizeStatementMessage(message::Statement &statement,
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);
231
76
* Creates a new InsertRecord GPB message and pushes it to
234
* @param in_session Pointer to the Session which has inserted a record
235
* @param in_table Pointer to the Table containing insert information
79
* @param session Session object which has inserted a record
80
* @param table Table object containing insert information
237
82
* Grr, returning "true" here on error because of the cursor
238
83
* reversed bool return crap...fix that.
240
bool insertRecord(Session *in_session, Table *in_table);
85
bool insertRecord(Session& session, Table &in_table);
242
88
* Creates a new UpdateRecord GPB message and pushes it to
245
* @param in_session Pointer to the Session which has updated a record
246
* @param in_table Pointer to the Table containing update information
91
* @param session Session object which has updated a record
92
* @param table Table object containing update information
247
93
* @param old_record Pointer to the raw bytes representing the old record/row
248
94
* @param new_record Pointer to the raw bytes representing the new record/row
250
void updateRecord(Session *in_session,
96
void updateRecord(Session& session,
252
98
const unsigned char *old_record,
253
99
const unsigned char *new_record);
255
102
* Creates a new DeleteRecord GPB message and pushes it to
258
* @param in_session Pointer to the Session which has deleted a record
259
* @param in_table Pointer to the Table containing delete information
105
* @param session Session object which has deleted a record
106
* @param table Table object containing delete information
260
107
* @param use_update_record If true, uses the values from the update row instead
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);
109
void deleteRecord(Session& session,
111
bool use_update_record= false);
286
114
* Creates a CreateSchema Statement GPB message and adds it
287
115
* to the Session's active Transaction GPB message for pushing
288
116
* out to the replicator streams.
290
* @param[in] in_session Pointer to the Session which issued the statement
118
* @param[in] session Session object which issued the statement
291
119
* @param[in] schema message::Schema message describing new schema
293
void createSchema(Session *in_session, const message::Schema &schema);
121
void createSchema(Session& session, const message::Schema &schema);
295
124
* Creates a DropSchema Statement GPB message and adds it
296
125
* to the Session's active Transaction GPB message for pushing
297
126
* out to the replicator streams.
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);
128
* @param[in] session Session object which issued the statement
129
* @param[in] identifier Identifier for the schema to drop
131
void dropSchema(Session& session,
132
const identifier::Schema& identifier,
133
message::schema::const_reference schema);
136
* Creates an AlterSchema Statement GPB message and adds it
137
* to the Session's active Transaction GPB message for pushing
138
* out to the replicator streams.
140
* @param[in] session Session object which issued the statement
141
* @param[in] old_schema Original schema definition
142
* @param[in] new_schema New schema definition
144
void alterSchema(Session& session,
145
const message::Schema &old_schema,
146
const message::Schema &new_schema);
304
149
* Creates a CreateTable Statement GPB message and adds it
305
150
* to the Session's active Transaction GPB message for pushing
306
151
* out to the replicator streams.
308
* @param[in] in_session Pointer to the Session which issued the statement
153
* @param[in] session Session object which issued the statement
309
154
* @param[in] table message::Table message describing new schema
311
void createTable(Session *in_session, const message::Table &table);
156
void createTable(Session& session, const message::Table &table);
313
159
* Creates a DropTable Statement GPB message and adds it
314
160
* to the Session's active Transaction GPB message for pushing
315
161
* out to the replicator streams.
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
163
* @param[in] session Session object which issued the statement
164
* @param[in] table Identifier for the table being dropped
320
165
* @param[in] if_exists Did the user specify an IF EXISTS clause?
322
void dropTable(Session *in_session,
323
const std::string &schema_name,
324
const std::string &table_name,
167
void dropTable(Session& session,
168
const identifier::Table& identifier,
169
message::table::const_reference table,
327
173
* Creates a TruncateTable Statement GPB message and adds it
328
174
* to the Session's active Transaction GPB message for pushing
329
175
* out to the replicator streams.
331
* @param[in] in_session Pointer to the Session which issued the statement
332
* @param[in] in_table The Table being truncated
177
* @param[in] session Session object which issued the statement
178
* @param[in] table The Table being truncated
334
void truncateTable(Session *in_session, Table *in_table);
180
void truncateTable(Session& session, Table &table);
336
183
* Creates a new RawSql GPB message and pushes it to
341
188
* on the I_S, etc. Not sure what to do with administrative
342
189
* commands like CHECK TABLE, though..
344
* @param in_session Pointer to the Session which issued the statement
191
* @param session Session object which issued the statement
345
192
* @param query Query string
193
* @param schema Schema for the table affected by the raw SQL.
347
void rawStatement(Session *in_session, const std::string &query);
195
void rawStatement(Session& session,
196
const std::string &query,
197
const std::string &schema);
199
void rawStatement(Session& session, const std::string &query)
201
rawStatement(session, query, "");
348
204
/* transactions: interface to plugin::StorageEngine functions */
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);
205
int rollbackTransaction(Session& session, bool all);
208
* Commit the current transaction.
211
* @retval 1 transaction was rolled back
212
* @retval 2 error during commit, data may be inconsistent
215
* Since we don't support nested statement transactions in 5.0,
216
* we can't commit or rollback stmt transactions while we are inside
217
* stored functions or triggers. So we simply do nothing now.
218
* This should be fixed in later ( >= 5.1) releases.
220
int commitTransaction(Session& session, bool all);
223
* This is used to commit or rollback a single statement depending on
224
* the value of error.
227
* Note that if the autocommit is on, then the following call inside
228
* InnoDB will commit or rollback the whole transaction (= the statement). The
229
* autocommit mechanism built into InnoDB is based on counting locks, but if
230
* the user has used LOCK TABLES then that mechanism does not know to do the
233
int autocommitOrRollback(Session& session, int error);
357
int rollbackToSavepoint(Session *session, NamedSavepoint &sv);
358
int setSavepoint(Session *session, NamedSavepoint &sv);
359
int releaseSavepoint(Session *session, NamedSavepoint &sv);
236
int rollbackToSavepoint(Session& session, NamedSavepoint &sv);
237
int setSavepoint(Session& session, NamedSavepoint &sv);
238
int releaseSavepoint(Session& session, NamedSavepoint &sv);
362
241
* Marks a storage engine as participating in a statement
448
326
* Send server startup event.
450
* @param session Session pointer
328
* @param session Session object
452
330
* @retval true Success
453
331
* @retval false Failure
455
bool sendStartupEvent(Session *session);
333
bool sendStartupEvent(Session& session);
458
336
* Send server shutdown event.
460
* @param session Session pointer
338
* @param session Session object
462
340
* @retval true Success
463
341
* @retval false Failure
465
bool sendShutdownEvent(Session *session);
343
bool sendShutdownEvent(Session& session);
348
* Method which returns the active Transaction message
349
* for the supplied Session. If one is not found, a new Transaction
350
* message is allocated, initialized, and returned. It is possible that
351
* we may want to NOT increment the transaction id for a new Transaction
352
* object (e.g., splitting up Transactions into smaller chunks). The
353
* should_inc_trx_id flag controls if we do this.
355
* @param session The Session object processing the transaction
356
* @param should_inc_trx_id If true, increments the transaction id for a new trx
358
message::Transaction *getActiveTransactionMessage(Session& session,
359
bool should_inc_trx_id= true);
362
* Method which attaches a transaction context
363
* the supplied transaction based on the supplied Session's
364
* transaction information. This method also ensure the
365
* transaction message is attached properly to the Session object
367
* @param transaction The transaction message to initialize
368
* @param session The Session object processing this transaction
369
* @param should_inc_trx_id If true, increments the transaction id for a new trx
371
void initTransactionMessage(message::Transaction &transaction,
373
bool should_inc_trx_id);
376
* Helper method which initializes a Statement message
378
* @param statement The statement to initialize
379
* @param type The type of the statement
380
* @param session The Session object processing this statement
382
void initStatementMessage(message::Statement &statement,
383
message::Statement::Type type,
384
const Session& session);
387
* Helper method which finalizes data members for the
388
* supplied transaction's context.
390
* @param transaction The transaction message to finalize
391
* @param session The Session object processing this transaction
393
void finalizeTransactionMessage(message::Transaction &transaction,
394
const Session& session);
397
* Helper method which deletes transaction memory and
398
* unsets Session's transaction and statement messages.
400
void cleanupTransactionMessage(message::Transaction *transaction,
403
/** Helper method which returns an initialized Statement message for methods
404
* doing insertion of data.
406
* @param[in] session Session object doing the processing
407
* @param[in] table Table object being inserted into
408
* @param[out] next_segment_id The next Statement segment id to be used
410
message::Statement &getInsertStatement(Session& session,
412
uint32_t *next_segment_id);
415
* Helper method which initializes the header message for
418
* @param[in,out] statement Statement message container to modify
419
* @param[in] session Session object doing the processing
420
* @param[in] table Table object being inserted into
422
void setInsertHeader(message::Statement &statement,
423
const Session& session,
426
* Helper method which returns an initialized Statement
427
* message for methods doing updates of data.
429
* @param[in] session Session object doing the processing
430
* @param[in] table Table object being updated
431
* @param[in] old_record Pointer to the old data in the record
432
* @param[in] new_record Pointer to the new data in the record
433
* @param[out] next_segment_id The next Statement segment id to be used
435
message::Statement &getUpdateStatement(Session& session,
437
const unsigned char *old_record,
438
const unsigned char *new_record,
439
uint32_t *next_segment_id);
441
* Helper method which initializes the header message for
444
* @param[in,out] statement Statement message container to modify
445
* @param[in] session Session object doing the processing
446
* @param[in] table Table object being updated
447
* @param[in] old_record Pointer to the old data in the record
448
* @param[in] new_record Pointer to the new data in the record
450
void setUpdateHeader(message::Statement &statement,
451
const Session& session,
453
const unsigned char *old_record,
454
const unsigned char *new_record);
457
* Helper method which returns an initialized Statement
458
* message for methods doing deletion of data.
460
* @param[in] session Session object doing the processing
461
* @param[in] table Table object being deleted from
462
* @param[out] next_segment_id The next Statement segment id to be used
464
message::Statement &getDeleteStatement(Session& session,
466
uint32_t *next_segment_id);
469
* Helper method which initializes the header message for
472
* @param[in,out] statement Statement message container to modify
473
* @param[in] session Session object doing the processing
474
* @param[in] table Table object being deleted from
476
void setDeleteHeader(message::Statement &statement,
477
const Session& session,
481
* Commits a normal transaction (see above) and pushes the transaction
482
* message out to the replicators.
484
* @param session Session object committing the transaction
486
int commitTransactionMessage(Session& session);
489
* Marks the current active transaction message as being rolled back and
490
* pushes the transaction message out to replicators.
492
* @param session Session object committing the transaction
494
void rollbackTransactionMessage(Session& session);
497
* Rolls back the current statement, deleting the last Statement out of
498
* the current Transaction message.
500
* @param session Session object committing the transaction
502
* @note This depends on having clear statement boundaries (i.e., one
503
* Statement message per actual SQL statement).
505
void rollbackStatementMessage(Session& session);
470
508
* Checks if a field has been updated
472
510
* @param current_field Pointer to the field to check if it is updated
473
* @in_table Pointer to the Table containing update information
511
* @param table Table object containing update information
474
512
* @param old_record Pointer to the raw bytes representing the old record/row
475
513
* @param new_record Pointer to the raw bytes representing the new record/row
477
515
bool isFieldUpdated(Field *current_field,
479
517
const unsigned char *old_record,
480
518
const unsigned char *new_record);