@@ -154,65 +154,6 @@ class Session_state_change_tracker: public State_tracker
154154};
155155
156156
157- /* *
158- Session_tracker
159-
160- This class holds an object each for all tracker classes and provides
161- methods necessary for systematic detection and generation of session
162- state change information.
163- */
164-
165- class Session_tracker
166- {
167- State_tracker *m_trackers[SESSION_TRACKER_END];
168-
169- /* The following two functions are private to disable copying. */
170- Session_tracker (Session_tracker const &other)
171- {
172- DBUG_ASSERT (FALSE );
173- }
174- Session_tracker& operator = (Session_tracker const &rhs)
175- {
176- DBUG_ASSERT (FALSE );
177- return *this ;
178- }
179-
180- public:
181- Current_schema_tracker current_schema;
182- Session_state_change_tracker state_change;
183-
184- Session_tracker ();
185- ~Session_tracker () { deinit (); }
186-
187- /* trick to make happy memory accounting system */
188- void deinit ()
189- {
190- delete m_trackers[SESSION_SYSVARS_TRACKER];
191- m_trackers[SESSION_SYSVARS_TRACKER]= 0 ;
192- delete m_trackers[TRANSACTION_INFO_TRACKER];
193- m_trackers[TRANSACTION_INFO_TRACKER]= 0 ;
194- }
195-
196- void enable (THD *thd);
197-
198- /* * Returns the pointer to the tracker object for the specified tracker. */
199- inline State_tracker *get_tracker (enum_session_tracker tracker) const
200- {
201- return m_trackers[tracker];
202- }
203-
204- inline void mark_as_changed (THD *thd, enum enum_session_tracker tracker,
205- LEX_CSTRING *data)
206- {
207- if (m_trackers[tracker]->is_enabled ())
208- m_trackers[tracker]->mark_as_changed (thd, data);
209- }
210-
211-
212- void store (THD *thd, String *main_buf);
213- };
214-
215-
216157/*
217158 Transaction_state_tracker
218159*/
@@ -277,12 +218,17 @@ class Transaction_state_tracker : public State_tracker
277218 /* * Helper function: turn table info into table access flag */
278219 enum_tx_state calc_trx_state (THD *thd, thr_lock_type l, bool has_trx);
279220public:
280- /* * Constructor */
281- Transaction_state_tracker (): tx_changed(TX_CHG_NONE),
282- tx_curr_state (TX_EMPTY),
283- tx_reported_state(TX_EMPTY),
284- tx_read_flags(TX_READ_INHERIT),
285- tx_isol_level(TX_ISOL_INHERIT) {}
221+
222+ bool enable (THD *thd)
223+ {
224+ m_enabled= false ;
225+ tx_changed= TX_CHG_NONE;
226+ tx_curr_state= TX_EMPTY;
227+ tx_reported_state= TX_EMPTY;
228+ tx_read_flags= TX_READ_INHERIT;
229+ tx_isol_level= TX_ISOL_INHERIT;
230+ return State_tracker::enable (thd);
231+ }
286232
287233 bool update (THD *thd, set_var *var);
288234 bool store (THD *thd, String *buf);
@@ -332,12 +278,69 @@ class Transaction_state_tracker : public State_tracker
332278
333279#define TRANSACT_TRACKER (X ) \
334280 do { if (thd->variables .session_track_transaction_info > TX_TRACK_NONE) \
335- {((Transaction_state_tracker *) \
336- thd->session_tracker .get_tracker (TRANSACTION_INFO_TRACKER)) \
337- ->X ; } } while (0 )
281+ thd->session_tracker .transaction_info .X ; } while (0 )
338282#define SESSION_TRACKER_CHANGED (A,B,C ) \
339283 thd->session_tracker.mark_as_changed(A,B,C)
340284
285+
286+ /* *
287+ Session_tracker
288+
289+ This class holds an object each for all tracker classes and provides
290+ methods necessary for systematic detection and generation of session
291+ state change information.
292+ */
293+
294+ class Session_tracker
295+ {
296+ State_tracker *m_trackers[SESSION_TRACKER_END];
297+
298+ /* The following two functions are private to disable copying. */
299+ Session_tracker (Session_tracker const &other)
300+ {
301+ DBUG_ASSERT (FALSE );
302+ }
303+ Session_tracker& operator = (Session_tracker const &rhs)
304+ {
305+ DBUG_ASSERT (FALSE );
306+ return *this ;
307+ }
308+
309+ public:
310+ Current_schema_tracker current_schema;
311+ Session_state_change_tracker state_change;
312+ Transaction_state_tracker transaction_info;
313+
314+ Session_tracker ();
315+ ~Session_tracker () { deinit (); }
316+
317+ /* trick to make happy memory accounting system */
318+ void deinit ()
319+ {
320+ delete m_trackers[SESSION_SYSVARS_TRACKER];
321+ m_trackers[SESSION_SYSVARS_TRACKER]= 0 ;
322+ }
323+
324+ void enable (THD *thd);
325+
326+ /* * Returns the pointer to the tracker object for the specified tracker. */
327+ inline State_tracker *get_tracker (enum_session_tracker tracker) const
328+ {
329+ return m_trackers[tracker];
330+ }
331+
332+ inline void mark_as_changed (THD *thd, enum enum_session_tracker tracker,
333+ LEX_CSTRING *data)
334+ {
335+ if (m_trackers[tracker]->is_enabled ())
336+ m_trackers[tracker]->mark_as_changed (thd, data);
337+ }
338+
339+
340+ void store (THD *thd, String *main_buf);
341+ };
342+
343+
341344int session_tracker_init ();
342345#else
343346
0 commit comments