Commit a8652e99 authored by unknown's avatar unknown

Fixed problem in fulltest testcase


include/my_base.h:
  Fix to ensure that old tables works in 4.1
myisam/mi_open.c:
  cleanup
mysys/my_handler.c:
  Fixed problem in fulltest testcase
sql/spatial.cc:
  cleanup
sql/sql_table.cc:
  cleanup
parent c811538f
...@@ -147,11 +147,11 @@ enum ha_base_keytype { ...@@ -147,11 +147,11 @@ enum ha_base_keytype {
#define HA_NOSAME 1 /* Set if not dupplicated records */ #define HA_NOSAME 1 /* Set if not dupplicated records */
#define HA_PACK_KEY 2 /* Pack string key to previous key */ #define HA_PACK_KEY 2 /* Pack string key to previous key */
#define HA_AUTO_KEY 1024 #define HA_AUTO_KEY 16
#define HA_BINARY_PACK_KEY 32 /* Packing of all keys to prev key */ #define HA_BINARY_PACK_KEY 32 /* Packing of all keys to prev key */
#define HA_FULLTEXT 128 /* SerG: for full-text search */ #define HA_FULLTEXT 128 /* For full-text search */
#define HA_UNIQUE_CHECK 256 /* Check the key for uniqueness */ #define HA_UNIQUE_CHECK 256 /* Check the key for uniqueness */
#define HA_SPATIAL 16 /* Alex Barkov: for spatial search */ #define HA_SPATIAL 1024 /* For spatial search */
#define HA_NULL_ARE_EQUAL 2048 /* NULL in key are cmp as equal */ #define HA_NULL_ARE_EQUAL 2048 /* NULL in key are cmp as equal */
......
...@@ -920,7 +920,7 @@ uint mi_keydef_write(File file, MI_KEYDEF *keydef) ...@@ -920,7 +920,7 @@ uint mi_keydef_write(File file, MI_KEYDEF *keydef)
uchar *ptr=buff; uchar *ptr=buff;
*ptr++ = (uchar) keydef->keysegs; *ptr++ = (uchar) keydef->keysegs;
*ptr++ = keydef->key_alg; /* +BAR Rtree or Btree */ *ptr++ = keydef->key_alg; /* Rtree or Btree */
mi_int2store(ptr,keydef->flag); ptr +=2; mi_int2store(ptr,keydef->flag); ptr +=2;
mi_int2store(ptr,keydef->block_length); ptr +=2; mi_int2store(ptr,keydef->block_length); ptr +=2;
mi_int2store(ptr,keydef->keylength); ptr +=2; mi_int2store(ptr,keydef->keylength); ptr +=2;
...@@ -932,7 +932,7 @@ uint mi_keydef_write(File file, MI_KEYDEF *keydef) ...@@ -932,7 +932,7 @@ uint mi_keydef_write(File file, MI_KEYDEF *keydef)
char *mi_keydef_read(char *ptr, MI_KEYDEF *keydef) char *mi_keydef_read(char *ptr, MI_KEYDEF *keydef)
{ {
keydef->keysegs = (uint) *ptr++; keydef->keysegs = (uint) *ptr++;
keydef->key_alg = *ptr++; /* +BAR Rtree or Btree */ keydef->key_alg = *ptr++; /* Rtree or Btree */
keydef->flag = mi_uint2korr(ptr); ptr +=2; keydef->flag = mi_uint2korr(ptr); ptr +=2;
keydef->block_length = mi_uint2korr(ptr); ptr +=2; keydef->block_length = mi_uint2korr(ptr); ptr +=2;
......
...@@ -58,18 +58,18 @@ static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length, ...@@ -58,18 +58,18 @@ static int compare_bin(uchar *a, uint a_length, uchar *b, uint b_length,
return (int) (a_length-b_length); return (int) (a_length-b_length);
} }
#define CMP(a,b) (a<b ? -1 : a == b ? 0 : 1)
#define FCMP(A,B) ((int) (A) - (int) (B)) #define FCMP(A,B) ((int) (A) - (int) (B))
/* /*
Compare two keys Compare two keys
Returns <0, 0, >0 acording to which is bigger Returns <0, 0, >0 acording to which is bigger
Key_length specifies length of key to use. Number-keys can't be splited Key_length specifies length of key to use. Number-keys can't be splited
If flag <> SEARCH_FIND compare also position If flag <> SEARCH_FIND compare also position
*/ */
int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
register uchar *b, uint key_length, uint nextflag, register uchar *b, uint key_length, uint nextflag,
uint *diff_pos) uint *diff_pos)
{ {
int flag; int flag;
int16 s_1,s_2; int16 s_1,s_2;
...@@ -83,13 +83,14 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -83,13 +83,14 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
for ( ; (int) key_length >0 ; key_length=next_key_length, keyseg++) for ( ; (int) key_length >0 ; key_length=next_key_length, keyseg++)
{ {
uchar *end; uchar *end;
uint piks=! (keyseg->flag & HA_NO_SORT);
(*diff_pos)++; (*diff_pos)++;
/* Handle NULL part */ /* Handle NULL part */
if (keyseg->null_bit) if (keyseg->null_bit)
{ {
key_length--; key_length--;
if (*a != *b) if (*a != *b && piks)
{ {
flag = (int) *a - (int) *b; flag = (int) *a - (int) *b;
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -115,7 +116,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -115,7 +116,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
get_key_pack_length(b_length,pack_length,b); get_key_pack_length(b_length,pack_length,b);
next_key_length=key_length-b_length-pack_length; next_key_length=key_length-b_length-pack_length;
if ((flag= mi_compare_text(keyseg->charset,a,a_length,b,b_length, if (piks &&
(flag= mi_compare_text(keyseg->charset,a,a_length,b,b_length,
(my_bool) ((nextflag & SEARCH_PREFIX) && (my_bool) ((nextflag & SEARCH_PREFIX) &&
next_key_length <= 0)))) next_key_length <= 0))))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -133,7 +135,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -133,7 +135,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
while (b_length && b[b_length-1] == ' ') while (b_length && b[b_length-1] == ' ')
b_length--; b_length--;
} }
if ((flag= mi_compare_text(keyseg->charset,a,a_length,b,b_length, if (piks &&
(flag= mi_compare_text(keyseg->charset,a,a_length,b,b_length,
(my_bool) ((nextflag & SEARCH_PREFIX) && (my_bool) ((nextflag & SEARCH_PREFIX) &&
next_key_length <= 0)))) next_key_length <= 0))))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -149,7 +152,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -149,7 +152,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
get_key_pack_length(b_length,pack_length,b); get_key_pack_length(b_length,pack_length,b);
next_key_length=key_length-b_length-pack_length; next_key_length=key_length-b_length-pack_length;
if ((flag=compare_bin(a,a_length,b,b_length, if (piks &&
(flag=compare_bin(a,a_length,b,b_length,
(my_bool) ((nextflag & SEARCH_PREFIX) && (my_bool) ((nextflag & SEARCH_PREFIX) &&
next_key_length <= 0)))) next_key_length <= 0))))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -160,7 +164,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -160,7 +164,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
else else
{ {
uint length=keyseg->length; uint length=keyseg->length;
if ((flag=compare_bin(a,length,b,length, if (piks &&
(flag=compare_bin(a,length,b,length,
(my_bool) ((nextflag & SEARCH_PREFIX) && (my_bool) ((nextflag & SEARCH_PREFIX) &&
next_key_length <= 0)))) next_key_length <= 0))))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -175,7 +180,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -175,7 +180,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
get_key_pack_length(b_length,pack_length,b); get_key_pack_length(b_length,pack_length,b);
next_key_length=key_length-b_length-pack_length; next_key_length=key_length-b_length-pack_length;
if ((flag= mi_compare_text(keyseg->charset,a,a_length,b,b_length, if (piks &&
(flag= mi_compare_text(keyseg->charset,a,a_length,b,b_length,
(my_bool) ((nextflag & SEARCH_PREFIX) && (my_bool) ((nextflag & SEARCH_PREFIX) &&
next_key_length <= 0)))) next_key_length <= 0))))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -191,7 +197,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -191,7 +197,8 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
get_key_pack_length(b_length,pack_length,b); get_key_pack_length(b_length,pack_length,b);
next_key_length=key_length-b_length-pack_length; next_key_length=key_length-b_length-pack_length;
if ((flag=compare_bin(a,a_length,b,b_length, if (piks &&
(flag=compare_bin(a,a_length,b,b_length,
(my_bool) ((nextflag & SEARCH_PREFIX) && (my_bool) ((nextflag & SEARCH_PREFIX) &&
next_key_length <= 0)))) next_key_length <= 0))))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
...@@ -204,7 +211,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -204,7 +211,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
{ {
int i_1= (int) *((signed char*) a); int i_1= (int) *((signed char*) a);
int i_2= (int) *((signed char*) b); int i_2= (int) *((signed char*) b);
if ((flag = CMP(i_1,i_2))) if (piks && (flag = CMP_NUM(i_1,i_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b++; b++;
...@@ -213,7 +220,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -213,7 +220,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_SHORT_INT: case HA_KEYTYPE_SHORT_INT:
s_1= mi_sint2korr(a); s_1= mi_sint2korr(a);
s_2= mi_sint2korr(b); s_2= mi_sint2korr(b);
if ((flag = CMP(s_1,s_2))) if (piks && (flag = CMP_NUM(s_1,s_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 2; /* sizeof(short int); */ b+= 2; /* sizeof(short int); */
...@@ -223,7 +230,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -223,7 +230,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
uint16 us_1,us_2; uint16 us_1,us_2;
us_1= mi_sint2korr(a); us_1= mi_sint2korr(a);
us_2= mi_sint2korr(b); us_2= mi_sint2korr(b);
if ((flag = CMP(us_1,us_2))) if (piks && (flag = CMP_NUM(us_1,us_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+=2; /* sizeof(short int); */ b+=2; /* sizeof(short int); */
...@@ -232,7 +239,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -232,7 +239,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_LONG_INT: case HA_KEYTYPE_LONG_INT:
l_1= mi_sint4korr(a); l_1= mi_sint4korr(a);
l_2= mi_sint4korr(b); l_2= mi_sint4korr(b);
if ((flag = CMP(l_1,l_2))) if (piks && (flag = CMP_NUM(l_1,l_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 4; /* sizeof(long int); */ b+= 4; /* sizeof(long int); */
...@@ -240,7 +247,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -240,7 +247,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_ULONG_INT: case HA_KEYTYPE_ULONG_INT:
u_1= mi_sint4korr(a); u_1= mi_sint4korr(a);
u_2= mi_sint4korr(b); u_2= mi_sint4korr(b);
if ((flag = CMP(u_1,u_2))) if (piks && (flag = CMP_NUM(u_1,u_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 4; /* sizeof(long int); */ b+= 4; /* sizeof(long int); */
...@@ -248,7 +255,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -248,7 +255,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_INT24: case HA_KEYTYPE_INT24:
l_1=mi_sint3korr(a); l_1=mi_sint3korr(a);
l_2=mi_sint3korr(b); l_2=mi_sint3korr(b);
if ((flag = CMP(l_1,l_2))) if (piks && (flag = CMP_NUM(l_1,l_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 3; b+= 3;
...@@ -256,7 +263,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -256,7 +263,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_UINT24: case HA_KEYTYPE_UINT24:
l_1=mi_uint3korr(a); l_1=mi_uint3korr(a);
l_2=mi_uint3korr(b); l_2=mi_uint3korr(b);
if ((flag = CMP(l_1,l_2))) if (piks && (flag = CMP_NUM(l_1,l_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 3; b+= 3;
...@@ -264,7 +271,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -264,7 +271,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_FLOAT: case HA_KEYTYPE_FLOAT:
mi_float4get(f_1,a); mi_float4get(f_1,a);
mi_float4get(f_2,b); mi_float4get(f_2,b);
if ((flag = CMP(f_1,f_2))) if (piks && (flag = CMP_NUM(f_1,f_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 4; /* sizeof(float); */ b+= 4; /* sizeof(float); */
...@@ -272,7 +279,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -272,7 +279,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
case HA_KEYTYPE_DOUBLE: case HA_KEYTYPE_DOUBLE:
mi_float8get(d_1,a); mi_float8get(d_1,a);
mi_float8get(d_2,b); mi_float8get(d_2,b);
if ((flag = CMP(d_1,d_2))) if (piks && (flag = CMP_NUM(d_1,d_2)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 8; /* sizeof(double); */ b+= 8; /* sizeof(double); */
...@@ -303,32 +310,40 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -303,32 +310,40 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
for ( ; blength && *b == ' ' ; b++, blength--) ; for ( ; blength && *b == ' ' ; b++, blength--) ;
} }
if (*a == '-') if (piks)
{ {
if (*b != '-') if (*a == '-')
return -1; {
a++; b++; if (*b != '-')
swap(uchar*,a,b); return -1;
swap(int,alength,blength); a++; b++;
swap_flag=1-swap_flag; swap(uchar*,a,b);
alength--; blength--; swap(int,alength,blength);
end=a+alength; swap_flag=1-swap_flag;
} alength--; blength--;
else if (*b == '-') end=a+alength;
return 1; }
while (alength && (*a == '+' || *a == '0')) else if (*b == '-')
{ return 1;
a++; alength--; while (alength && (*a == '+' || *a == '0'))
{
a++; alength--;
}
while (blength && (*b == '+' || *b == '0'))
{
b++; blength--;
}
if (alength != blength)
return (alength < blength) ? -1 : 1;
while (a < end)
if (*a++ != *b++)
return ((int) a[-1] - (int) b[-1]);
} }
while (blength && (*b == '+' || *b == '0')) else
{ {
b++; blength--; b+=(end-a);
a=end;
} }
if (alength != blength)
return (alength < blength) ? -1 : 1;
while (a < end)
if (*a++ != *b++)
return ((int) a[-1] - (int) b[-1]);
if (swap_flag) /* Restore pointers */ if (swap_flag) /* Restore pointers */
swap(uchar*,a,b); swap(uchar*,a,b);
...@@ -340,7 +355,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -340,7 +355,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
longlong ll_a,ll_b; longlong ll_a,ll_b;
ll_a= mi_sint8korr(a); ll_a= mi_sint8korr(a);
ll_b= mi_sint8korr(b); ll_b= mi_sint8korr(b);
if ((flag = CMP(ll_a,ll_b))) if (piks && (flag = CMP_NUM(ll_a,ll_b)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 8; b+= 8;
...@@ -351,7 +366,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a, ...@@ -351,7 +366,7 @@ int ha_key_cmp(register HA_KEYSEG *keyseg, register uchar *a,
ulonglong ll_a,ll_b; ulonglong ll_a,ll_b;
ll_a= mi_uint8korr(a); ll_a= mi_uint8korr(a);
ll_b= mi_uint8korr(b); ll_b= mi_uint8korr(b);
if ((flag = CMP(ll_a,ll_b))) if (piks && (flag = CMP_NUM(ll_a,ll_b)))
return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag); return ((keyseg->flag & HA_REVERSE_SORT) ? -flag : flag);
a= end; a= end;
b+= 8; b+= 8;
......
...@@ -680,13 +680,16 @@ int GPolygon::centroid_xy(double *x, double *y) const ...@@ -680,13 +680,16 @@ int GPolygon::centroid_xy(double *x, double *y) const
uint32 i; uint32 i;
double res_area, res_cx, res_cy; double res_area, res_cx, res_cy;
const char *data = m_data; const char *data = m_data;
LINT_INIT(res_area);
LINT_INIT(res_cx);
LINT_INIT(res_cy);
if (no_data(data, 4)) if (no_data(data, 4))
return 1; return 1;
n_linear_rings = uint4korr(data); n_linear_rings = uint4korr(data);
data += 4; data += 4;
for(i = 0; i < n_linear_rings; ++i) for (i = 0; i < n_linear_rings; ++i)
{ {
if (no_data(data, 4)) if (no_data(data, 4))
return 1; return 1;
...@@ -720,7 +723,8 @@ int GPolygon::centroid_xy(double *x, double *y) const ...@@ -720,7 +723,8 @@ int GPolygon::centroid_xy(double *x, double *y) const
cur_area = fabs(cur_area) / 2; cur_area = fabs(cur_area) / 2;
cur_cx = cur_cx / (n_points - 1); cur_cx = cur_cx / (n_points - 1);
cur_cy = cur_cy / (n_points - 1); cur_cy = cur_cy / (n_points - 1);
if(i)
if (i)
{ {
double d_area = res_area - cur_area; double d_area = res_area - cur_area;
if (d_area <= 0) if (d_area <= 0)
...@@ -1195,6 +1199,10 @@ int GMultiPolygon::centroid(String *result) const ...@@ -1195,6 +1199,10 @@ int GMultiPolygon::centroid(String *result) const
double res_area, res_cx, res_cy; double res_area, res_cx, res_cy;
double cur_area, cur_cx, cur_cy; double cur_area, cur_cx, cur_cy;
LINT_INIT(res_area);
LINT_INIT(res_cx);
LINT_INIT(res_cy);
const char *data = m_data; const char *data = m_data;
if (no_data(data, 4)) if (no_data(data, 4))
return 1; return 1;
...@@ -1211,7 +1219,7 @@ int GMultiPolygon::centroid(String *result) const ...@@ -1211,7 +1219,7 @@ int GMultiPolygon::centroid(String *result) const
if (p.centroid_xy(&cur_cx, &cur_cy)) if (p.centroid_xy(&cur_cx, &cur_cy))
return 1; return 1;
if(i) if (i)
{ {
double sum_area = res_area + cur_area; double sum_area = res_area + cur_area;
res_cx = (res_area * res_cx + cur_area * cur_cx) / sum_area; res_cx = (res_area * res_cx + cur_area * cur_cx) / sum_area;
......
...@@ -476,20 +476,22 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name, ...@@ -476,20 +476,22 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
checking for proper key parts number: checking for proper key parts number:
*/ */
if(key_info->flags == HA_SPATIAL){ if (key_info->flags == HA_SPATIAL)
if(key_info->key_parts!=1){ {
if (key_info->key_parts != 1)
{
my_printf_error(ER_WRONG_ARGUMENTS, my_printf_error(ER_WRONG_ARGUMENTS,
ER(ER_WRONG_ARGUMENTS),MYF(0),"SPATIAL INDEX"); ER(ER_WRONG_ARGUMENTS),MYF(0),"SPATIAL INDEX");
DBUG_RETURN(-1); DBUG_RETURN(-1);
} }
}else }
else if (key_info->algorithm == HA_KEY_ALG_RTREE)
{ {
if(key_info->algorithm == HA_KEY_ALG_RTREE){ if ((key_info->key_parts & 1) == 1)
if((key_info->key_parts&1)==1){ {
my_printf_error(ER_WRONG_ARGUMENTS, my_printf_error(ER_WRONG_ARGUMENTS,
ER(ER_WRONG_ARGUMENTS),MYF(0),"RTREE INDEX"); ER(ER_WRONG_ARGUMENTS),MYF(0),"RTREE INDEX");
DBUG_RETURN(-1); DBUG_RETURN(-1);
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment