1
1
/*****************************************************************************
3
Copyright (c) 2000, 2010, Innobase Oy. All Rights Reserved.
3
Copyright (C) 2000, 2010, Innobase Oy. All Rights Reserved.
5
5
This program is free software; you can redistribute it and/or modify it under
6
6
the terms of the GNU General Public License as published by the Free Software
103
103
ulint col_len); /*!< in: BLOB reference length
104
104
(not BLOB length) */
105
105
/**************************************************************//**
106
Pad a column with spaces. */
111
ulint mbminlen, /*!< in: minimum size of a character,
113
byte* pad, /*!< out: padded buffer */
114
ulint len); /*!< in: number of bytes to pad */
116
/**************************************************************//**
106
117
Stores a non-SQL-NULL field given in the MySQL format in the InnoDB format.
107
118
The counterpart of this function is row_sel_field_store_in_mysql_format() in
264
275
row_prebuilt_t* prebuilt); /*!< in: prebuilt struct in MySQL
266
277
/*********************************************************************//**
267
This can only be used when srv_locks_unsafe_for_binlog is TRUE or
268
session is using a READ COMMITTED isolation level. Before
269
calling this function we must use trx_reset_new_rec_lock_info() and
270
trx_register_new_rec_lock() to store the information which new record locks
271
really were set. This function removes a newly set lock under prebuilt->pcur,
272
and also under prebuilt->clust_pcur. Currently, this is only used and tested
273
in the case of an UPDATE or a DELETE statement, where the row lock is of the
275
Thus, this implements a 'mini-rollback' that releases the latest record
277
@return error code or DB_SUCCESS */
278
This can only be used when srv_locks_unsafe_for_binlog is TRUE or this
279
session is using a READ COMMITTED or READ UNCOMMITTED isolation level.
280
Before calling this function row_search_for_mysql() must have
281
initialized prebuilt->new_rec_locks to store the information which new
282
record locks really were set. This function removes a newly set
283
clustered index record lock under prebuilt->pcur or
284
prebuilt->clust_pcur. Thus, this implements a 'mini-rollback' that
285
releases the latest clustered index record lock we set.
286
@return error code or DB_SUCCESS */
280
289
row_unlock_for_mysql(
281
290
/*=================*/
282
row_prebuilt_t* prebuilt, /*!< in: prebuilt struct in MySQL
291
row_prebuilt_t* prebuilt, /*!< in/out: prebuilt struct in MySQL
284
ibool has_latches_on_recs);/*!< TRUE if called so that we have
285
the latches on the records under pcur
286
and clust_pcur, and we do not need to
287
reposition the cursors. */
293
ibool has_latches_on_recs);/*!< in: TRUE if called
294
so that we have the latches on
295
the records under pcur and
296
clust_pcur, and we do not need
297
to reposition the cursors. */
288
298
/*********************************************************************//**
289
299
Creates an query graph node of 'update' type to be used in the MySQL
528
538
Innobase record in the current index;
529
539
not defined if template_type is
530
540
ROW_MYSQL_WHOLE_ROW */
541
ulint clust_rec_field_no; /*!< field number of the column in an
542
Innobase record in the clustered index;
543
not defined if template_type is
544
ROW_MYSQL_WHOLE_ROW */
531
545
ulint mysql_col_offset; /*!< offset of the column in the MySQL
533
547
ulint mysql_col_len; /*!< length of the column in the MySQL
616
630
the secondary index, then this is
618
632
unsigned templ_contains_blob:1;/*!< TRUE if the template contains
633
a column with DATA_BLOB ==
634
get_innobase_type_from_mysql_type();
635
not to be confused with InnoDB
636
externally stored columns
637
(VARCHAR can be off-page too) */
620
638
mysql_row_templ_t* mysql_template;/*!< template used to transform
621
639
rows fast between MySQL and Innobase
622
640
formats; memory for this template
695
713
ulint new_rec_locks; /*!< normally 0; if
696
714
srv_locks_unsafe_for_binlog is
697
715
TRUE or session is using READ
698
COMMITTED isolation level, in a
699
cursor search, if we set a new
700
record lock on an index, this is
701
incremented; this is used in
702
releasing the locks under the
703
cursors if we are performing an
704
UPDATE and we determine after
705
retrieving the row that it does
706
not need to be locked; thus,
707
these can be used to implement a
708
'mini-rollback' that releases
709
the latest record locks */
716
COMMITTED or READ UNCOMMITTED
717
isolation level, set in
718
row_search_for_mysql() if we set a new
719
record lock on the secondary
720
or clustered index; this is
721
used in row_unlock_for_mysql()
722
when releasing the lock under
723
the cursor if we determine
724
after retrieving the row that
725
it does not need to be locked
710
727
ulint mysql_prefix_len;/*!< byte offset of the end of
711
728
the last requested column */
712
729
ulint mysql_row_len; /*!< length in bytes of a row in the