1
/* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
2
* vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
4
* Copyright (C) 2008 Sun Microsystems
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; version 2 of the License.
10
* This program is distributed in the hope that it will be useful,
11
* but WITHOUT ANY WARRANTY; without even the implied warranty of
12
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
* GNU General Public License for more details.
15
* You should have received a copy of the GNU General Public License
16
* along with this program; if not, write to the Free Software
17
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
1
/* Copyright (C) 2002-2006 MySQL AB
3
This library is free software; you can redistribute it and/or
4
modify it under the terms of the GNU Library General Public
5
License as published by the Free Software Foundation; version 2
8
This library is distributed in the hope that it will be useful,
9
but WITHOUT ANY WARRANTY; without even the implied warranty of
10
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11
Library General Public License for more details.
13
You should have received a copy of the GNU Library General Public
14
License along with this library; if not, write to the Free
15
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
18
#include "mysys_priv.h"
22
20
#include <mystrings/m_ctype.h>
23
21
#include <drizzled/base.h>
24
#include <storage/myisam/my_handler.h>
25
#include <mysys/my_sys.h>
22
#include <my_handler.h>
25
#include "my_handler_errors.h"
28
28
Swap the contents of two variables.
38
#define CMP_NUM(a,b) (((a) < (b)) ? -1 : ((a) == (b)) ? 0 : 1)
41
int ha_compare_text(const CHARSET_INFO * const charset_info, unsigned char *a, uint32_t a_length,
42
unsigned char *b, uint32_t b_length, bool part_key,
38
int ha_compare_text(const CHARSET_INFO * const charset_info, uchar *a, uint a_length,
39
uchar *b, uint b_length, bool part_key,
43
40
bool skip_end_space)
53
static int compare_bin(unsigned char *a, uint32_t a_length, unsigned char *b, uint32_t b_length,
50
static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length,
54
51
bool part_key, bool skip_end_space)
56
uint32_t length= cmin(a_length,b_length);
57
unsigned char *end= a+ length;
53
uint length= min(a_length,b_length);
54
uchar *end= a+ length;
134
131
#define FCMP(A,B) ((int) (A) - (int) (B))
136
int ha_key_cmp(register HA_KEYSEG *keyseg, register unsigned char *a,
137
register unsigned char *b, uint32_t key_length, uint32_t nextflag,
133
int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
134
register uchar *b, uint key_length, uint nextflag,
143
140
uint32_t u_1,u_2;
146
uint32_t next_key_length;
147
unsigned char *orig_b= b;
143
uint next_key_length;
150
147
for ( ; (int) key_length >0 ; key_length=next_key_length, keyseg++)
153
uint32_t piks=! (keyseg->flag & HA_NO_SORT);
150
uint piks=! (keyseg->flag & HA_NO_SORT);
155
152
diff_pos[1]= (uint)(b - orig_b);
181
178
continue; /* To next key part */
184
end= a+ cmin(keyseg->length,key_length);
181
end= a+ min(keyseg->length,key_length);
185
182
next_key_length=key_length-keyseg->length;
187
184
switch ((enum ha_base_keytype) keyseg->type) {
208
uint32_t length=(uint) (end-a), a_length=length, b_length=length;
205
uint length=(uint) (end-a), a_length=length, b_length=length;
210
207
(flag= ha_compare_text(keyseg->charset, a, a_length, b, b_length,
211
208
(bool) ((nextflag & SEARCH_PREFIX) &&
239
uint32_t length=keyseg->length;
236
uint length=keyseg->length;
241
238
(flag=compare_bin(a,length,b,length,
242
239
(bool) ((nextflag & SEARCH_PREFIX) &&
382
379
if (keyseg->flag & HA_REVERSE_SORT)
384
swap_variables(unsigned char*, a, b);
381
swap_variables(uchar*, a, b);
385
382
swap_flag=1; /* Remember swap of a & b */
386
383
end= a+ (int) (end-b);
409
swap_variables(unsigned char*, a, b);
406
swap_variables(uchar*, a, b);
410
407
swap_variables(int, alength, blength);
411
408
swap_flag=1-swap_flag;
412
409
alength--; blength--;
437
434
if (swap_flag) /* Restore pointers */
438
swap_variables(unsigned char*, a, b);
435
swap_variables(uchar*, a, b);
441
438
case HA_KEYTYPE_LONGLONG:
580
Register handler error messages for usage with my_error()
583
This is safe to call multiple times as my_error_register()
584
will ignore calls to register already registered error numbers.
588
void my_handler_error_register(void)
591
If you got compilation error here about compile_time_assert array, check
592
that every HA_ERR_xxx constant has a corresponding error message in
593
handler_error_messages[] list (check mysys/ma_handler_errors.h and
596
compile_time_assert(HA_ERR_FIRST + array_elements(handler_error_messages) ==
598
my_error_register(handler_error_messages, HA_ERR_FIRST,
599
HA_ERR_FIRST+ array_elements(handler_error_messages)-1);
603
void my_handler_error_unregister(void)
605
my_error_unregister(HA_ERR_FIRST,
606
HA_ERR_FIRST+ array_elements(handler_error_messages)-1);