mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Added Innobase to source distribution
Docs/manual.texi: Added Innobase documentation configure.in: Incremented version include/my_base.h: Added option for Innobase myisam/mi_check.c: cleanup mysql-test/t/bdb.test: cleanup mysql-test/t/innobase.test: Extended with new tests from bdb.test mysql-test/t/merge.test: Added test of SHOW create mysys/my_init.c: Fix for UNIXWARE 7 scripts/mysql_install_db.sh: Always write how to start mysqld scripts/safe_mysqld.sh: Fixed type sql/ha_innobase.cc: Update to new version sql/ha_innobase.h: Update to new version sql/handler.h: Added 'update_table_comment()' and 'append_create_info()' sql/sql_delete.cc: Fixes for Innobase sql/sql_select.cc: Fixes for Innobase sql/sql_show.cc: Append create information (for MERGE tables) sql/sql_update.cc: Fixes for Innobase
This commit is contained in:
97
innobase/include/row0mysql.ic
Normal file
97
innobase/include/row0mysql.ic
Normal file
@ -0,0 +1,97 @@
|
||||
/******************************************************
|
||||
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) /* 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);
|
||||
*/
|
||||
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 = *ptr ^ 128;
|
||||
}
|
||||
} else if (type == DATA_VARCHAR || type == DATA_VARMYSQL
|
||||
|| type == DATA_BINARY) {
|
||||
ptr = row_mysql_read_var_ref(&col_len, mysql_data);
|
||||
|
||||
} else if (type == DATA_BLOB) {
|
||||
ptr = row_mysql_read_blob_ref(&col_len, mysql_data, col_len);
|
||||
}
|
||||
|
||||
dfield_set_data(dfield, ptr, col_len);
|
||||
}
|
Reference in New Issue
Block a user