Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
MariaDB
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
29015489
Commit
29015489
authored
Mar 28, 2011
by
Sergey Glukhov
Browse files
Options
Browse Files
Download
Plain Diff
automerge
parents
a88faf2a
9ff72a1a
Changes
22
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
350 additions
and
310 deletions
+350
-310
extra/perror.c
extra/perror.c
+30
-1
include/Makefile.am
include/Makefile.am
+1
-1
include/heap.h
include/heap.h
+1
-1
include/my_compare.h
include/my_compare.h
+89
-0
include/my_global.h
include/my_global.h
+1
-1
include/myisam.h
include/myisam.h
+23
-1
libmysql/CMakeLists.txt
libmysql/CMakeLists.txt
+1
-1
libmysql/Makefile.shared
libmysql/Makefile.shared
+1
-1
mysys/CMakeLists.txt
mysys/CMakeLists.txt
+2
-2
mysys/Makefile.am
mysys/Makefile.am
+3
-3
mysys/my_compare.c
mysys/my_compare.c
+14
-143
mysys/my_gethostbyname.c
mysys/my_gethostbyname.c
+0
-113
mysys/my_net.c
mysys/my_net.c
+89
-0
mysys/my_port.c
mysys/my_port.c
+0
-40
sql/field.h
sql/field.h
+2
-0
sql/handler.h
sql/handler.h
+0
-1
storage/myisam/ft_stopwords.c
storage/myisam/ft_stopwords.c
+1
-1
storage/myisam/mi_check.c
storage/myisam/mi_check.c
+87
-0
storage/myisam/mi_test1.c
storage/myisam/mi_test1.c
+1
-0
storage/myisam/mi_write.c
storage/myisam/mi_write.c
+1
-0
storage/myisam/myisamdef.h
storage/myisam/myisamdef.h
+2
-0
storage/myisam/sp_test.c
storage/myisam/sp_test.c
+1
-0
No files found.
extra/perror.c
View file @
29015489
...
...
@@ -32,7 +32,6 @@ static my_bool verbose, print_all_codes;
#include "../include/my_base.h"
#include "../mysys/my_handler_errors.h"
#include "../include/my_handler.h"
#ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
static
my_bool
ndb_code
;
...
...
@@ -185,6 +184,36 @@ static const char *get_ha_error_msg(int code)
}
/*
Register handler error messages for usage with my_error()
NOTES
This is safe to call multiple times as my_error_register()
will ignore calls to register already registered error numbers.
*/
void
my_handler_error_register
(
void
)
{
/*
If you got compilation error here about compile_time_assert array, check
that every HA_ERR_xxx constant has a corresponding error message in
handler_error_messages[] list (check mysys/ma_handler_errors.h and
include/my_base.h).
*/
compile_time_assert
(
HA_ERR_FIRST
+
array_elements
(
handler_error_messages
)
==
HA_ERR_LAST
+
1
);
my_error_register
(
handler_error_messages
,
HA_ERR_FIRST
,
HA_ERR_FIRST
+
array_elements
(
handler_error_messages
)
-
1
);
}
void
my_handler_error_unregister
(
void
)
{
my_error_unregister
(
HA_ERR_FIRST
,
HA_ERR_FIRST
+
array_elements
(
handler_error_messages
)
-
1
);
}
#if defined(__WIN__)
static
my_bool
print_win_error_msg
(
DWORD
error
,
my_bool
verbose
)
{
...
...
include/Makefile.am
View file @
29015489
...
...
@@ -37,7 +37,7 @@ noinst_HEADERS = config-win.h config-netware.h my_bit.h \
my_nosys.h my_alarm.h queues.h rijndael.h sha1.h
\
my_aes.h my_tree.h my_trie.h hash.h thr_alarm.h
\
thr_lock.h t_ctype.h violite.h my_md5.h base64.h
\
my_
handler
.h my_time.h my_vle.h my_user.h
\
my_
compare
.h my_time.h my_vle.h my_user.h
\
my_libwrap.h my_stacktrace.h
EXTRA_DIST
=
mysql.h.pp mysql/plugin.h.pp
...
...
include/heap.h
View file @
29015489
...
...
@@ -30,7 +30,7 @@ extern "C" {
#include <thr_lock.h>
#endif
#include "my_
handler
.h"
#include "my_
compare
.h"
#include "my_tree.h"
/* defines used by heap-funktions */
...
...
include/my_
handler
.h
→
include/my_
compare
.h
View file @
29015489
/* Copyright (
C) 2002-2006 MySQL AB
/* Copyright (
c) 2011, Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; version 2
of the License.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
Library
General Public License for more details.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU
General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifndef _my_
handler
_h
#define _my_
handler
_h
#ifndef _my_
compare
_h
#define _my_
compare
_h
#include "my_base.h"
#include "m_ctype.h"
#include "myisampack.h"
#ifdef __cplusplus
extern
"C"
{
#endif
/*
There is a hard limit for the maximum number of keys as there are only
8 bits in the index file header for the number of keys in a table.
This means that 0..255 keys can exist for a table. The idea of
HA_MAX_POSSIBLE_KEY is to ensure that one can use myisamchk & tools on
a MyISAM table for which one has more keys than MyISAM is normally
compiled for. If you don't have this, you will get a core dump when
running myisamchk compiled for 128 keys on a table with 255 keys.
*/
#define HA_MAX_POSSIBLE_KEY 255
/* For myisamchk */
/*
The following defines can be increased if necessary.
But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and HA_MAX_KEY_LENGTH.
*/
#define HA_MAX_KEY_LENGTH 1000
/* Max length in bytes */
#define HA_MAX_KEY_SEG 16
/* Max segments for key */
#define HA_MAX_POSSIBLE_KEY_BUFF (HA_MAX_KEY_LENGTH + 24+ 6+6)
#define HA_MAX_KEY_BUFF (HA_MAX_KEY_LENGTH+HA_MAX_KEY_SEG*6+8+8)
typedef
struct
st_HA_KEYSEG
/* Key-portion */
{
...
...
@@ -61,35 +36,33 @@ typedef struct st_HA_KEYSEG /* Key-portion */
}
HA_KEYSEG
;
#define get_key_length(length,key) \
{ if (
*(uchar*)
(key) != 255) \
length= (uint)
*(uchar*)
((key)++); \
{ if (
(uchar) *
(key) != 255) \
length= (uint)
(uchar) *
((key)++); \
else \
{ length=
mi_uint2korr((key)+1); (key)+=3; } \
{ length=mi_uint2korr((key)+1); (key)+=3; } \
}
#define get_key_length_rdonly(length,key) \
{ if (
*(uchar*)
(key) != 255) \
length= ((uint)
*(uchar*)
((key))); \
{ if (
(uchar) *
(key) != 255) \
length= ((uint)
(uchar) *
((key))); \
else \
{ length=
mi_uint2korr((key)+1); } \
{ length=mi_uint2korr((key)+1); } \
}
#define get_key_pack_length(length,length_pack,key) \
{ if (
*(uchar*)
(key) != 255) \
{ length= (uint)
*(uchar*) ((key)++); length_pack=
1; }\
{ if (
(uchar) *
(key) != 255) \
{ length= (uint)
(uchar) *((key)++); length_pack=
1; }\
else \
{ length=mi_uint2korr((key)+1); (key)+=
3; length_pack=
3; } \
{ length=mi_uint2korr((key)+1); (key)+=
3; length_pack=
3; } \
}
#define store_key_length_inc(key,length) \
{ if ((length) < 255) \
{ *(key)++=
(length); } \
{ *(key)++=(length); } \
else \
{ *(key)=255; mi_int2store((key)+1,(length)); (key)+=3; } \
}
#define size_to_store_key_length(length) ((length) < 255 ? 1 : 3)
#define get_rec_bits(bit_ptr, bit_ofs, bit_len) \
(((((uint16) (bit_ptr)[1] << 8) | (uint16) (bit_ptr)[0]) >> (bit_ofs)) & \
((1 << (bit_len)) - 1))
...
...
@@ -112,17 +85,5 @@ extern int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
register
uchar
*
b
,
uint
key_length
,
uint
nextflag
,
uint
*
diff_pos
);
extern
HA_KEYSEG
*
ha_find_null
(
HA_KEYSEG
*
keyseg
,
uchar
*
a
);
extern
void
my_handler_error_register
(
void
);
extern
void
my_handler_error_unregister
(
void
);
/*
Inside an in-memory data record, memory pointers to pieces of the
record (like BLOBs) are stored in their native byte order and in
this amount of bytes.
*/
#define portable_sizeof_char_ptr 8
#ifdef __cplusplus
}
#endif
#endif
/* _my_
handler
_h */
#endif
/* _my_
compare
_h */
include/my_global.h
View file @
29015489
...
...
@@ -359,7 +359,7 @@ C_MODE_END
#define ulonglong2double(A) my_ulonglong2double(A)
#define my_off_t2double(A) my_ulonglong2double(A)
C_MODE_START
double
my_ulonglong2double
(
unsigned
long
long
A
);
inline
double
my_ulonglong2double
(
unsigned
long
long
A
)
{
return
(
double
)
A
;
}
C_MODE_END
#endif
/* _AIX */
...
...
include/myisam.h
View file @
29015489
...
...
@@ -30,8 +30,30 @@ extern "C" {
#ifndef _keycache_h
#include "keycache.h"
#endif
#include "my_handler.h"
#include <mysql/plugin.h>
#include "my_compare.h"
/*
There is a hard limit for the maximum number of keys as there are only
8 bits in the index file header for the number of keys in a table.
This means that 0..255 keys can exist for a table. The idea of
HA_MAX_POSSIBLE_KEY is to ensure that one can use myisamchk & tools on
a MyISAM table for which one has more keys than MyISAM is normally
compiled for. If you don't have this, you will get a core dump when
running myisamchk compiled for 128 keys on a table with 255 keys.
*/
#define HA_MAX_POSSIBLE_KEY 255
/* For myisamchk */
/*
The following defines can be increased if necessary.
But beware the dependency of MI_MAX_POSSIBLE_KEY_BUFF and HA_MAX_KEY_LENGTH.
*/
#define HA_MAX_KEY_LENGTH 1000
/* Max length in bytes */
#define HA_MAX_KEY_SEG 16
/* Max segments for key */
#define HA_MAX_POSSIBLE_KEY_BUFF (HA_MAX_KEY_LENGTH + 24+ 6+6)
#define HA_MAX_KEY_BUFF (HA_MAX_KEY_LENGTH+HA_MAX_KEY_SEG*6+8+8)
/*
Limit max keys according to HA_MAX_POSSIBLE_KEY
...
...
libmysql/CMakeLists.txt
View file @
29015489
...
...
@@ -82,7 +82,7 @@ SET(CLIENT_SOURCES ../mysys/array.c ../strings/bchange.c ../strings/bmove.c
../mysys/mf_wcomp.c ../mysys/mulalloc.c ../mysys/my_access.c ../mysys/my_alloc.c
../mysys/my_chsize.c ../mysys/my_compress.c ../mysys/my_create.c
../mysys/my_delete.c ../mysys/my_div.c ../mysys/my_error.c ../mysys/my_file.c
../mysys/my_fopen.c ../mysys/my_fstream.c
../mysys/my_gethostbyname.c
../mysys/my_fopen.c ../mysys/my_fstream.c
../mysys/my_getopt.c ../mysys/my_getwd.c ../mysys/my_init.c ../mysys/my_lib.c
../mysys/my_malloc.c ../mysys/my_messnc.c ../mysys/my_net.c ../mysys/my_once.c
../mysys/my_open.c ../mysys/my_pread.c ../mysys/my_pthread.c ../mysys/my_read.c
...
...
libmysql/Makefile.shared
View file @
29015489
...
...
@@ -66,7 +66,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
charset.lo charset-def.lo hash.lo mf_iocache.lo
\
mf_iocache2.lo my_seek.lo my_sleep.lo
\
my_pread.lo mf_cache.lo md5.lo sha1.lo
\
my_getopt.lo
my_gethostbyname.lo my_port.lo
\
my_getopt.lo
\
my_rename.lo my_chsize.lo my_sync.lo my_getsystime.lo
sqlobjects
=
net.lo
sql_cmn_objects
=
pack.lo client.lo my_time.lo
...
...
mysys/CMakeLists.txt
View file @
29015489
...
...
@@ -33,8 +33,8 @@ SET(MYSYS_SOURCES array.c charset-def.c charset.c checksum.c default.c default_
mf_tempfile.c mf_unixpath.c mf_wcomp.c mf_wfile.c mulalloc.c my_access.c
my_aes.c my_alarm.c my_alloc.c my_append.c my_bit.c my_bitmap.c my_chsize.c
my_clock.c my_compress.c my_conio.c my_copy.c my_crc32.c my_create.c my_delete.c
my_div.c my_error.c my_file.c my_fopen.c my_fstream.c
my_gethostbyname.c
my_gethwaddr.c my_getopt.c my_getsystime.c my_getwd.c my_
handler
.c my_init.c
my_div.c my_error.c my_file.c my_fopen.c my_fstream.c
my_gethwaddr.c my_getopt.c my_getsystime.c my_getwd.c my_
compare
.c my_init.c
my_lib.c my_lock.c my_lockmem.c my_malloc.c my_messnc.c
my_mkdir.c my_mmap.c my_net.c my_once.c my_open.c my_pread.c my_pthread.c
my_quick.c my_read.c my_realloc.c my_redel.c my_rename.c my_seek.c my_sleep.c
...
...
mysys/Makefile.am
View file @
29015489
...
...
@@ -46,10 +46,10 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \
my_sync.c my_getopt.c my_mkdir.c
\
default_modify.c default.c
\
my_compress.c checksum.c
\
my_net.c my_
port.c my_
sleep.c
\
my_net.c my_sleep.c
\
charset.c charset-def.c my_bitmap.c my_bit.c md5.c
\
my_gethostbyname.c
rijndael.c my_aes.c sha1.c
\
my_
handler
.c my_netware.c my_largepage.c
\
rijndael.c my_aes.c sha1.c
\
my_
compare
.c my_netware.c my_largepage.c
\
my_memmem.c stacktrace.c
\
my_windac.c my_access.c base64.c my_libwrap.c
...
...
mysys/my_
handler
.c
→
mysys/my_
compare
.c
View file @
29015489
/* Copyright (C) 2002-2006 MySQL AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; version 2
of the License.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
/* Copyright (c) 2011 Oracle and/or its affiliates. All rights reserved.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
#include <my_global.h>
#include <m_ctype.h>
#include <my_base.h>
#include <my_handler.h>
#include <my_sys.h>
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#include "my_
handler_errors
.h"
#include "my_
compare
.h"
int
ha_compare_text
(
CHARSET_INFO
*
charset_info
,
uchar
*
a
,
uint
a_length
,
uchar
*
b
,
uint
b_length
,
my_bool
part_key
,
...
...
@@ -269,6 +261,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
return
((
keyseg
->
flag
&
HA_REVERSE_SORT
)
?
-
flag
:
flag
);
a
+=
a_length
;
b
+=
b_length
;
break
;
}
break
;
case
HA_KEYTYPE_INT8
:
...
...
@@ -474,125 +467,3 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
}
return
0
;
}
/* ha_key_cmp */
/*
Find the first NULL value in index-suffix values tuple
SYNOPSIS
ha_find_null()
keyseg Array of keyparts for key suffix
a Key suffix value tuple
DESCRIPTION
Find the first NULL value in index-suffix values tuple.
TODO
Consider optimizing this function or its use so we don't search for
NULL values in completely NOT NULL index suffixes.
RETURN
First key part that has NULL as value in values tuple, or the last key
part (with keyseg->type==HA_TYPE_END) if values tuple doesn't contain
NULLs.
*/
HA_KEYSEG
*
ha_find_null
(
HA_KEYSEG
*
keyseg
,
uchar
*
a
)
{
for
(;
(
enum
ha_base_keytype
)
keyseg
->
type
!=
HA_KEYTYPE_END
;
keyseg
++
)
{
uchar
*
end
;
if
(
keyseg
->
null_bit
)
{
if
(
!*
a
++
)
return
keyseg
;
}
end
=
a
+
keyseg
->
length
;
switch
((
enum
ha_base_keytype
)
keyseg
->
type
)
{
case
HA_KEYTYPE_TEXT
:
case
HA_KEYTYPE_BINARY
:
case
HA_KEYTYPE_BIT
:
if
(
keyseg
->
flag
&
HA_SPACE_PACK
)
{
int
a_length
;
get_key_length
(
a_length
,
a
);
a
+=
a_length
;
break
;
}
else
a
=
end
;
break
;
case
HA_KEYTYPE_VARTEXT1
:
case
HA_KEYTYPE_VARTEXT2
:
case
HA_KEYTYPE_VARBINARY1
:
case
HA_KEYTYPE_VARBINARY2
:
{
int
a_length
;
get_key_length
(
a_length
,
a
);
a
+=
a_length
;
break
;
}
case
HA_KEYTYPE_NUM
:
if
(
keyseg
->
flag
&
HA_SPACE_PACK
)
{
int
alength
=
*
a
++
;
end
=
a
+
alength
;
}
a
=
end
;
break
;
case
HA_KEYTYPE_INT8
:
case
HA_KEYTYPE_SHORT_INT
:
case
HA_KEYTYPE_USHORT_INT
:
case
HA_KEYTYPE_LONG_INT
:
case
HA_KEYTYPE_ULONG_INT
:
case
HA_KEYTYPE_INT24
:
case
HA_KEYTYPE_UINT24
:
#ifdef HAVE_LONG_LONG
case
HA_KEYTYPE_LONGLONG
:
case
HA_KEYTYPE_ULONGLONG
:
#endif
case
HA_KEYTYPE_FLOAT
:
case
HA_KEYTYPE_DOUBLE
:
a
=
end
;
break
;
case
HA_KEYTYPE_END
:
/* purecov: inspected */
/* keep compiler happy */
DBUG_ASSERT
(
0
);
break
;
}
}
return
keyseg
;
}
/*
Register handler error messages for usage with my_error()
NOTES
This is safe to call multiple times as my_error_register()
will ignore calls to register already registered error numbers.
*/
void
my_handler_error_register
(
void
)
{
/*
If you got compilation error here about compile_time_assert array, check
that every HA_ERR_xxx constant has a corresponding error message in
handler_error_messages[] list (check mysys/ma_handler_errors.h and
include/my_base.h).
*/
compile_time_assert
(
HA_ERR_FIRST
+
array_elements
(
handler_error_messages
)
==
HA_ERR_LAST
+
1
);
my_error_register
(
handler_error_messages
,
HA_ERR_FIRST
,
HA_ERR_FIRST
+
array_elements
(
handler_error_messages
)
-
1
);
}
void
my_handler_error_unregister
(
void
)
{
my_error_unregister
(
HA_ERR_FIRST
,
HA_ERR_FIRST
+
array_elements
(
handler_error_messages
)
-
1
);
}
mysys/my_gethostbyname.c
deleted
100644 → 0
View file @
a88faf2a
/* Copyright (C) 2002, 2004 MySQL AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; version 2
of the License.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/* Thread safe version of gethostbyname_r() */
#include "mysys_priv.h"
#if !defined(__WIN__)
#include <netdb.h>
#endif
#include <my_net.h>
/* This file is not needed if my_gethostbyname_r is a macro */
#if !defined(my_gethostbyname_r)
/*
Emulate SOLARIS style calls, not because it's better, but just to make the
usage of getbostbyname_r simpler.
*/
#if defined(HAVE_GETHOSTBYNAME_R)
#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
struct
hostent
*
hp
;
DBUG_ASSERT
((
size_t
)
buflen
>=
sizeof
(
*
result
));
if
(
gethostbyname_r
(
name
,
result
,
buffer
,
(
size_t
)
buflen
,
&
hp
,
h_errnop
))
return
0
;
return
hp
;
}
#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
if
(
gethostbyname_r
(
name
,
result
,(
struct
hostent_data
*
)
buffer
)
==
-
1
)
{
*
h_errnop
=
errno
;
return
0
;
}
return
result
;
}
#else
/* gethostbyname_r with similar interface as gethostbyname() */
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
struct
hostent
*
hp
;
DBUG_ASSERT
(
buflen
>=
sizeof
(
struct
hostent_data
));
hp
=
gethostbyname_r
(
name
,
result
,(
struct
hostent_data
*
)
buffer
);
*
h_errnop
=
errno
;
return
hp
;
}
#endif
/* GLIBC2_STYLE_GETHOSTBYNAME_R */
#else
/* !HAVE_GETHOSTBYNAME_R */
#ifdef THREAD
extern
pthread_mutex_t
LOCK_gethostbyname_r
;
#endif
/*
No gethostbyname_r() function exists.
In this case we have to keep a mutex over the call to ensure that no
other thread is going to reuse the internal memory.
The user is responsible to call my_gethostbyname_r_free() when he
is finished with the structure.
*/
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
res
__attribute__
((
unused
)),
char
*
buffer
__attribute__
((
unused
)),
int
buflen
__attribute__
((
unused
)),
int
*
h_errnop
)
{
struct
hostent
*
hp
;
pthread_mutex_lock
(
&
LOCK_gethostbyname_r
);
hp
=
gethostbyname
(
name
);
*
h_errnop
=
h_errno
;
return
hp
;
}
void
my_gethostbyname_r_free
()
{
pthread_mutex_unlock
(
&
LOCK_gethostbyname_r
);
}
#endif
/* !HAVE_GETHOSTBYNAME_R */
#endif
/* !my_gethostbyname_r */
mysys/my_net.c
View file @
29015489
...
...
@@ -31,6 +31,8 @@
#include <arpa/inet.h>
#endif
#endif
/* !defined(__WIN__) */
#include "my_net.h"
void
my_inet_ntoa
(
struct
in_addr
in
,
char
*
buf
)
{
...
...
@@ -40,3 +42,90 @@ void my_inet_ntoa(struct in_addr in, char *buf)
strmov
(
buf
,
ptr
);
pthread_mutex_unlock
(
&
THR_LOCK_net
);
}
/* This code is not needed if my_gethostbyname_r is a macro */
#if !defined(my_gethostbyname_r)
/*
Emulate SOLARIS style calls, not because it's better, but just to make the
usage of getbostbyname_r simpler.
*/
#if defined(HAVE_GETHOSTBYNAME_R)
#if defined(HAVE_GETHOSTBYNAME_R_GLIBC2_STYLE)
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
struct
hostent
*
hp
;
DBUG_ASSERT
((
size_t
)
buflen
>=
sizeof
(
*
result
));
if
(
gethostbyname_r
(
name
,
result
,
buffer
,
(
size_t
)
buflen
,
&
hp
,
h_errnop
))
return
0
;
return
hp
;
}
#elif defined(HAVE_GETHOSTBYNAME_R_RETURN_INT)
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
if
(
gethostbyname_r
(
name
,
result
,(
struct
hostent_data
*
)
buffer
)
==
-
1
)
{
*
h_errnop
=
errno
;
return
0
;
}
return
result
;
}
#else
/* gethostbyname_r with similar interface as gethostbyname() */
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
struct
hostent
*
hp
;
DBUG_ASSERT
(
buflen
>=
sizeof
(
struct
hostent_data
));
hp
=
gethostbyname_r
(
name
,
result
,(
struct
hostent_data
*
)
buffer
);
*
h_errnop
=
errno
;
return
hp
;
}
#endif
/* GLIBC2_STYLE_GETHOSTBYNAME_R */
#else
/* !HAVE_GETHOSTBYNAME_R */
#ifdef THREAD
extern
pthread_mutex_t
LOCK_gethostbyname_r
;
#endif
/*
No gethostbyname_r() function exists.
In this case we have to keep a mutex over the call to ensure that no
other thread is going to reuse the internal memory.
The user is responsible to call my_gethostbyname_r_free() when he
is finished with the structure.
*/
struct
hostent
*
my_gethostbyname_r
(
const
char
*
name
,
struct
hostent
*
result
,
char
*
buffer
,
int
buflen
,
int
*
h_errnop
)
{
struct
hostent
*
hp
;
pthread_mutex_lock
(
&
LOCK_gethostbyname_r
);
hp
=
gethostbyname
(
name
);
*
h_errnop
=
h_errno
;
return
hp
;
}
void
my_gethostbyname_r_free
()
{
pthread_mutex_unlock
(
&
LOCK_gethostbyname_r
);
}
#endif
/* !HAVE_GETHOSTBYNAME_R */
#endif
/* !my_gethostbyname_r */
mysys/my_port.c
deleted
100644 → 0
View file @
a88faf2a
/* Copyright (C) 2002 MySQL AB
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; version 2
of the License.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, USA */
/*
Small functions to make code portable
*/
#include "mysys_priv.h"
#ifdef _AIX
/*
On AIX, at least with gcc 3.1, the expression
'(double) (ulonglong) var' doesn't always work for big unsigned
integers like '18446744073709551615'. The end result is that the
high bit is simply dropped. (probably bug in gcc optimizations)
Handling the conversion in a sub function seems to work.
*/
double
my_ulonglong2double
(
unsigned
long
long
nr
)
{
return
(
double
)
nr
;
}
#endif
/* _AIX */
sql/field.h
View file @
29015489
...
...
@@ -13,6 +13,8 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include "my_compare.h"
/* for clr_rec_bits */
/*
Because of the function new_field() all field classes that have static
variables must declare the size_of() member function.
...
...
sql/handler.h
View file @
29015489
...
...
@@ -20,7 +20,6 @@
#pragma interface
/* gcc class implementation */
#endif
#include <my_handler.h>
#include <ft_global.h>
#include <keycache.h>
...
...
storage/myisam/ft_stopwords.c
View file @
29015489
...
...
@@ -16,7 +16,7 @@
/* Written by Sergei A. Golubchik, who has a shared copyright to this code */
#include "ftdefs.h"
#include "my_
handler
.h"
#include "my_
compare
.h"
typedef
struct
st_ft_stopwords
{
...
...
storage/myisam/mi_check.c
View file @
29015489
...
...
@@ -85,6 +85,7 @@ static SORT_KEY_BLOCKS *alloc_key_blocks(MI_CHECK *param, uint blocks,
uint
buffer_length
);
static
ha_checksum
mi_byte_checksum
(
const
uchar
*
buf
,
uint
length
);
static
void
set_data_file_type
(
SORT_INFO
*
sort_info
,
MYISAM_SHARE
*
share
);
static
HA_KEYSEG
*
ha_find_null
(
HA_KEYSEG
*
keyseg
,
uchar
*
a
);
void
myisamchk_init
(
MI_CHECK
*
param
)
{
...
...
@@ -4739,3 +4740,89 @@ set_data_file_type(SORT_INFO *sort_info, MYISAM_SHARE *share)
share
->
delete_record
=
tmp
.
delete_record
;
}
}
/*
Find the first NULL value in index-suffix values tuple
SYNOPSIS
ha_find_null()
keyseg Array of keyparts for key suffix
a Key suffix value tuple
DESCRIPTION
Find the first NULL value in index-suffix values tuple.
TODO Consider optimizing this fuction or its use so we don't search for
NULL values in completely NOT NULL index suffixes.
RETURN
First key part that has NULL as value in values tuple, or the last key part
(with keyseg->type==HA_TYPE_END) if values tuple doesn't contain NULLs.
*/
static
HA_KEYSEG
*
ha_find_null
(
HA_KEYSEG
*
keyseg
,
uchar
*
a
)
{
for
(;
(
enum
ha_base_keytype
)
keyseg
->
type
!=
HA_KEYTYPE_END
;
keyseg
++
)
{
uchar
*
end
;
if
(
keyseg
->
null_bit
)
{
if
(
!*
a
++
)
return
keyseg
;
}
end
=
a
+
keyseg
->
length
;
switch
((
enum
ha_base_keytype
)
keyseg
->
type
)
{
case
HA_KEYTYPE_TEXT
:
case
HA_KEYTYPE_BINARY
:
case
HA_KEYTYPE_BIT
:
if
(
keyseg
->
flag
&
HA_SPACE_PACK
)
{
int
a_length
;
get_key_length
(
a_length
,
a
);
a
+=
a_length
;
break
;
}
else
a
=
end
;
break
;
case
HA_KEYTYPE_VARTEXT1
:
case
HA_KEYTYPE_VARTEXT2
:
case
HA_KEYTYPE_VARBINARY1
:
case
HA_KEYTYPE_VARBINARY2
:
{
int
a_length
;
get_key_length
(
a_length
,
a
);
a
+=
a_length
;
break
;
}
case
HA_KEYTYPE_NUM
:
if
(
keyseg
->
flag
&
HA_SPACE_PACK
)
{
int
alength
=
*
a
++
;
end
=
a
+
alength
;
}
a
=
end
;
break
;
case
HA_KEYTYPE_INT8
:
case
HA_KEYTYPE_SHORT_INT
:
case
HA_KEYTYPE_USHORT_INT
:
case
HA_KEYTYPE_LONG_INT
:
case
HA_KEYTYPE_ULONG_INT
:
case
HA_KEYTYPE_INT24
:
case
HA_KEYTYPE_UINT24
:
#ifdef HAVE_LONG_LONG
case
HA_KEYTYPE_LONGLONG
:
case
HA_KEYTYPE_ULONGLONG
:
#endif
case
HA_KEYTYPE_FLOAT
:
case
HA_KEYTYPE_DOUBLE
:
a
=
end
;
break
;
case
HA_KEYTYPE_END
:
/* purecov: inspected */
/* keep compiler happy */
DBUG_ASSERT
(
0
);
break
;
}
}
return
keyseg
;
}
storage/myisam/mi_test1.c
View file @
29015489
...
...
@@ -16,6 +16,7 @@
/* Testing of the basic functions of a MyISAM table */
#include "myisam.h"
#include "myisamdef.h"
#include <my_getopt.h>
#include <m_string.h>
...
...
storage/myisam/mi_write.c
View file @
29015489
...
...
@@ -17,6 +17,7 @@
#include "fulltext.h"
#include "rt_index.h"
#include "my_compare.h"
#define MAX_POINTER_LENGTH 8
...
...
storage/myisam/myisamdef.h
View file @
29015489
...
...
@@ -424,6 +424,8 @@ typedef struct st_mi_sort_param
#define get_pack_length(length) ((length) >= 255 ? 3 : 1)
#define portable_sizeof_char_ptr 8
#define MI_MIN_BLOCK_LENGTH 20
/* Because of delete-link */
#define MI_EXTEND_BLOCK_LENGTH 20
/* Don't use to small record-blocks */
#define MI_SPLIT_LENGTH ((MI_EXTEND_BLOCK_LENGTH+4)*2)
...
...
storage/myisam/sp_test.c
View file @
29015489
...
...
@@ -17,6 +17,7 @@
/* Written by Alex Barkov, who has a shared copyright to this code */
#include "myisam.h"
#include "myisamdef.h"
#ifdef HAVE_SPATIAL
#include "sp_defs.h"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment