2001-02-17 13:19:19 +01:00
|
|
|
/******************************************************
|
|
|
|
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 */
|
2001-11-05 22:48:03 +01:00
|
|
|
ulint len __attribute__((unused))) /* in: length, must fit in two
|
|
|
|
bytes */
|
2001-02-17 13:19:19 +01:00
|
|
|
{
|
|
|
|
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);
|
|
|
|
*/
|
ut0ut.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0pool.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0file.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0shm.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0thread.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
page0page.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
que0que.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0ins.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0mysql.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0sel.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0upd.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0vers.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0srv.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0start.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0arr.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0rw.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0sync.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
trx0rec.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
trx0trx.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0srv.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0rw.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0sync.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
ut0dbg.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
lock0lock.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
log0log.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
log0recv.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
ibuf0ibuf.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
hash0hash.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mach0data.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0mem.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0pool.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mtr0mtr.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0file.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0thread.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
univ.i Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0mysql.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
com0shm.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
data0data.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
data0type.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
dict0crea.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
dict0dict.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fil0fil.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fsp0fsp.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fut0lst.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0sea.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0flu.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0btr.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0cur.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
2001-03-02 16:33:11 +01:00
|
|
|
UT_NOT_USED(len);
|
|
|
|
|
2001-02-17 13:19:19 +01:00
|
|
|
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) {
|
ut0ut.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0pool.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0file.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0shm.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0thread.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
page0page.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
que0que.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0ins.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0mysql.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0sel.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0upd.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0vers.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0srv.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0start.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0arr.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0rw.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0sync.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
trx0rec.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
trx0trx.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
srv0srv.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0rw.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
sync0sync.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
ut0dbg.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
lock0lock.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
log0log.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
log0recv.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
ibuf0ibuf.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
hash0hash.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mach0data.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0mem.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mem0pool.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
mtr0mtr.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0file.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0sync.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
os0thread.h Fixes for 64-bit Linux, bug fixes, compiler warning fixes
univ.i Fixes for 64-bit Linux, bug fixes, compiler warning fixes
row0mysql.ic Fixes for 64-bit Linux, bug fixes, compiler warning fixes
com0shm.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
data0data.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
data0type.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
dict0crea.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
dict0dict.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fil0fil.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fsp0fsp.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
fut0lst.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0sea.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0buf.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
buf0flu.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0btr.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
btr0cur.c Fixes for 64-bit Linux, bug fixes, compiler warning fixes
2001-03-02 16:33:11 +01:00
|
|
|
*ptr = (byte) (*ptr ^ 128);
|
2001-02-17 13:19:19 +01:00
|
|
|
}
|
|
|
|
} else if (type == DATA_VARCHAR || type == DATA_VARMYSQL
|
|
|
|
|| type == DATA_BINARY) {
|
2001-03-02 18:07:29 +01:00
|
|
|
ptr = row_mysql_read_var_ref(&col_len, mysql_data);
|
|
|
|
|
|
|
|
/* Remove trailing spaces */
|
|
|
|
while (col_len > 0 && ptr[col_len - 1] == ' ') {
|
|
|
|
col_len--;
|
|
|
|
}
|
2001-02-17 13:19:19 +01:00
|
|
|
|
|
|
|
} else if (type == DATA_BLOB) {
|
|
|
|
ptr = row_mysql_read_blob_ref(&col_len, mysql_data, col_len);
|
|
|
|
}
|
|
|
|
|
|
|
|
dfield_set_data(dfield, ptr, col_len);
|
|
|
|
}
|