mirror of
https://github.com/MariaDB/server.git
synced 2025-01-23 23:34:34 +01:00
adb703943d
Made innodb to compile more cleanly with debugging options enabled. Fixed a few bugs and found a few possible bugs, which I hope Heikki will check. Comments needs to be fixed too. Some while() functions should be changed to do ... until for documenting purposes, because some of them must and will be processed at least once, or a variable would be used uninitialized. Regards, Jani client/mysqldump.c: Added xml output. Patch originally from Gary Huntress, but needed a some clean up. innobase/btr/btr0btr.c: cleaner compiling innobase/btr/btr0cur.c: cleaner compiling innobase/btr/btr0sea.c: cleaner compiling / found a bug ?? innobase/buf/buf0buf.c: Fixed a bug. innobase/buf/buf0lru.c: Fixed a bug. innobase/data/data0data.c: cleaner compiling innobase/dict/dict0boot.c: cleaner compiling innobase/dict/dict0crea.c: cleaner compiling innobase/dict/dict0dict.c: cleaner compiling innobase/dict/dict0load.c: cleaner compiling innobase/eval/eval0eval.c: cleaner compiling / found a bug ?? innobase/fil/fil0fil.c: cleaner compiling innobase/fsp/fsp0fsp.c: cleaner compiling innobase/ibuf/ibuf0ibuf.c: cleaner compiling innobase/include/btr0btr.ic: cleaner compiling innobase/include/buf0buf.ic: cleaner compiling innobase/include/dict0dict.ic: cleaner compiling innobase/include/ha0ha.ic: cleaner compiling innobase/include/row0mysql.ic: cleaner compiling innobase/include/row0vers.ic: cleaner compiling innobase/include/sync0rw.ic: cleaner compiling innobase/lock/lock0lock.c: cleaner compiling innobase/mem/mem0dbg.c: cleaner compiling innobase/mtr/mtr0mtr.c: cleaner compiling innobase/odbc/odbc0odbc.c: cleaner compiling innobase/os/os0thread.c: cleaner compiling innobase/page/page0cur.c: cleaner compiling. while() should be changed to do ... until for documenting purposes. innobase/page/page0page.c: cleaner compiling innobase/pars/pars0opt.c: cleaner compiling. while() should be changed to do ... until, because it will and must be processed at least once (for documenting purposes) innobase/pars/pars0pars.c: cleaner compiling innobase/que/que0que.c: cleaner compiling innobase/rem/rem0cmp.c: cleaner compiling innobase/rem/rem0rec.c: cleaner compiling innobase/row/row0ins.c: cleaner compiling innobase/row/row0mysql.c: cleaner compiling innobase/row/row0purge.c: cleaner compiling innobase/row/row0sel.c: cleaner compiling innobase/row/row0uins.c: cleaner compiling innobase/row/row0umod.c: cleaner compiling innobase/row/row0upd.c: cleaner compiling innobase/srv/srv0srv.c: cleaner compiling innobase/srv/srv0start.c: cleaner compiling innobase/sync/sync0arr.c: cleaner compiling innobase/sync/sync0rw.c: cleaner compiling innobase/sync/sync0sync.c: cleaner compiling innobase/trx/trx0purge.c: cleaner compiling. in theory this could also be a bug, although probably not. But the logic needs to be checked, it could be that these variables may be used uninitialized. innobase/trx/trx0rec.c: cleaner compiling innobase/trx/trx0roll.c: cleaner compiling innobase/trx/trx0trx.c: cleaner compiling innobase/trx/trx0undo.c: cleaner compiling
105 lines
2.7 KiB
Text
105 lines
2.7 KiB
Text
/******************************************************
|
|
MySQL interface for Innobase
|
|
|
|
(C) 2001 Innobase Oy
|
|
|
|
Created 1/23/2001 Heikki Tuuri
|
|
*******************************************************/
|
|
|
|
/***********************************************************************
|
|
Stores a variable-length field (like VARCHAR) length to dest, in the
|
|
MySQL format. No real var implemented in MySQL yet! */
|
|
UNIV_INLINE
|
|
byte*
|
|
row_mysql_store_var_len(
|
|
/*====================*/
|
|
/* out: dest + 2 */
|
|
byte* dest, /* in: where to store */
|
|
ulint len __attribute__((unused))) /* in: length, must fit in two
|
|
bytes */
|
|
{
|
|
ut_ad(len < 256 * 256);
|
|
/*
|
|
mach_write_to_2_little_endian(dest, len);
|
|
|
|
return(dest + 2);
|
|
*/
|
|
return(dest); /* No real var implemented in MySQL yet! */
|
|
}
|
|
|
|
/***********************************************************************
|
|
Reads a MySQL format variable-length field (like VARCHAR) length and
|
|
returns pointer to the field data. No real var implemented in MySQL yet! */
|
|
UNIV_INLINE
|
|
byte*
|
|
row_mysql_read_var_ref(
|
|
/*===================*/
|
|
/* out: field + 2 */
|
|
ulint* len, /* out: variable-length field length; does not work
|
|
yet! */
|
|
byte* field) /* in: field */
|
|
{
|
|
/*
|
|
*len = mach_read_from_2_little_endian(field);
|
|
|
|
return(field + 2);
|
|
*/
|
|
UT_NOT_USED(len);
|
|
|
|
return(field); /* No real var implemented in MySQL yet! */
|
|
}
|
|
|
|
/******************************************************************
|
|
Stores a non-SQL-NULL field given in the MySQL format in the Innobase
|
|
format. */
|
|
UNIV_INLINE
|
|
void
|
|
row_mysql_store_col_in_innobase_format(
|
|
/*===================================*/
|
|
dfield_t* dfield, /* in/out: dfield */
|
|
byte* buf, /* in/out: buffer for the converted
|
|
value */
|
|
byte* mysql_data, /* in: MySQL column value, not
|
|
SQL NULL; NOTE that dfield may also
|
|
get a pointer to mysql_data,
|
|
therefore do not discard this as long
|
|
as dfield is used! */
|
|
ulint col_len, /* in: MySQL column length */
|
|
ulint type, /* in: data type */
|
|
ulint is_unsigned) /* in: != 0 if unsigned integer type */
|
|
{
|
|
byte* ptr = mysql_data;
|
|
|
|
if (type == DATA_INT) {
|
|
/* Store integer data in Innobase in a big-endian format,
|
|
sign bit negated */
|
|
|
|
ptr = buf + col_len;
|
|
|
|
for (;;) {
|
|
ptr--;
|
|
*ptr = *mysql_data;
|
|
if (ptr == buf) {
|
|
break;
|
|
}
|
|
mysql_data++;
|
|
}
|
|
|
|
if (!is_unsigned) {
|
|
*ptr = (byte) (*ptr ^ 128);
|
|
}
|
|
} else if (type == DATA_VARCHAR || type == DATA_VARMYSQL
|
|
|| type == DATA_BINARY) {
|
|
ptr = row_mysql_read_var_ref(&col_len, mysql_data);
|
|
|
|
/* Remove trailing spaces */
|
|
while (col_len > 0 && ptr[col_len - 1] == ' ') {
|
|
col_len--;
|
|
}
|
|
|
|
} else if (type == DATA_BLOB) {
|
|
ptr = row_mysql_read_blob_ref(&col_len, mysql_data, col_len);
|
|
}
|
|
|
|
dfield_set_data(dfield, ptr, col_len);
|
|
}
|