~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/handler_structs.h

* Renames Ha_trx_info to drizzled::ResourceContext
* Renames Sesssion_TRANS to drizzled::TransactionContext
* Replaces homegrown linked-lists of Ha_trx_info pointers
  with vector<drizzled::ResourceContext> operations
* Renames Session::getEngineInfo() to Session::getResourceContext()

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
#include "drizzled/global_charset_info.h"
39
39
 
40
40
 
41
 
class Ha_trx_info;
42
41
struct st_key;
43
42
typedef struct st_key KEY;
44
43
struct st_key_cache;
52
51
}
53
52
}
54
53
 
55
 
struct Session_TRANS
56
 
{
57
 
  Session_TRANS() :
58
 
    no_2pc(false),
59
 
    ha_list(NULL),
60
 
    modified_non_trans_table(false)
61
 
  {}
62
 
 
63
 
  /* true is not all entries in the engines[] support 2pc */
64
 
  bool        no_2pc;
65
 
  /* storage engines that registered in this transaction */
66
 
  Ha_trx_info *ha_list;
67
 
  /*
68
 
    The purpose of this flag is to keep track of non-transactional
69
 
    tables that were modified in scope of:
70
 
    - transaction, when the variable is a member of
71
 
    Session::transaction.all
72
 
    - top-level statement or sub-statement, when the variable is a
73
 
    member of Session::transaction.stmt
74
 
    This member has the following life cycle:
75
 
    * stmt.modified_non_trans_table is used to keep track of
76
 
    modified non-transactional tables of top-level statements. At
77
 
    the end of the previous statement and at the beginning of the session,
78
 
    it is reset to false.  If such functions
79
 
    as mysql_insert, mysql_update, mysql_delete etc modify a
80
 
    non-transactional table, they set this flag to true.  At the
81
 
    end of the statement, the value of stmt.modified_non_trans_table
82
 
    is merged with all.modified_non_trans_table and gets reset.
83
 
    * all.modified_non_trans_table is reset at the end of transaction
84
 
 
85
 
    * Since we do not have a dedicated context for execution of a
86
 
    sub-statement, to keep track of non-transactional changes in a
87
 
    sub-statement, we re-use stmt.modified_non_trans_table.
88
 
    At entrance into a sub-statement, a copy of the value of
89
 
    stmt.modified_non_trans_table (containing the changes of the
90
 
    outer statement) is saved on stack. Then
91
 
    stmt.modified_non_trans_table is reset to false and the
92
 
    substatement is executed. Then the new value is merged with the
93
 
    saved value.
94
 
  */
95
 
  bool modified_non_trans_table;
96
 
 
97
 
  void reset() { no_2pc= false; modified_non_trans_table= false; }
98
 
};
99
 
 
100
54
typedef struct st_ha_create_information
101
55
{
102
56
  const CHARSET_INFO *table_charset, *default_table_charset;