Merge bk@192.168.21.1:mysql-5.0
into mysql.com:/home/hf/work/mrg/mysql-5.0-opt
This commit is contained in:
commit
21847d6890
@ -4,7 +4,7 @@ The MySQL AB Exception for Free/Libre and Open Source
|
|||||||
Software-only Applications Using MySQL Client Libraries (the
|
Software-only Applications Using MySQL Client Libraries (the
|
||||||
"FLOSS Exception").
|
"FLOSS Exception").
|
||||||
|
|
||||||
Version 0.5, 30 August 2006
|
Version 0.6, 7 March 2007
|
||||||
|
|
||||||
Exception Intent
|
Exception Intent
|
||||||
|
|
||||||
@ -59,10 +59,12 @@ Apache Software License 1.0/1.1/2.0
|
|||||||
Apple Public Source License 2.0
|
Apple Public Source License 2.0
|
||||||
Artistic license From Perl 5.8.0
|
Artistic license From Perl 5.8.0
|
||||||
BSD license "July 22 1999"
|
BSD license "July 22 1999"
|
||||||
|
Common Development and Distribution License (CDDL) 1.0
|
||||||
Common Public License 1.0
|
Common Public License 1.0
|
||||||
|
Eclipse Public License 1.0
|
||||||
GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1
|
GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1
|
||||||
Jabber Open Source License 1.0
|
Jabber Open Source License 1.0
|
||||||
MIT license ---
|
MIT license (As listed in file MIT-License.txt) ---
|
||||||
Mozilla Public License (MPL) 1.0/1.1
|
Mozilla Public License (MPL) 1.0/1.1
|
||||||
Open Software License 2.0
|
Open Software License 2.0
|
||||||
OpenSSL license (with original SSLeay license) "2003" ("1998")
|
OpenSSL license (with original SSLeay license) "2003" ("1998")
|
||||||
|
@ -557,10 +557,6 @@ SOURCE=.\my_windac.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\my_winsem.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\my_winthread.c
|
SOURCE=.\my_winthread.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -4323,49 +4323,6 @@
|
|||||||
PreprocessorDefinitions=""/>
|
PreprocessorDefinitions=""/>
|
||||||
</FileConfiguration>
|
</FileConfiguration>
|
||||||
</File>
|
</File>
|
||||||
<File
|
|
||||||
RelativePath="my_winsem.c">
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Debug|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions=""/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Max|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions=""/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="Release|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions=""/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="TLS_DEBUG|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="0"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions=""/>
|
|
||||||
</FileConfiguration>
|
|
||||||
<FileConfiguration
|
|
||||||
Name="TLS|Win32">
|
|
||||||
<Tool
|
|
||||||
Name="VCCLCompilerTool"
|
|
||||||
Optimization="2"
|
|
||||||
AdditionalIncludeDirectories=""
|
|
||||||
PreprocessorDefinitions=""/>
|
|
||||||
</FileConfiguration>
|
|
||||||
</File>
|
|
||||||
<File
|
<File
|
||||||
RelativePath="my_winthread.c">
|
RelativePath="my_winthread.c">
|
||||||
<FileConfiguration
|
<FileConfiguration
|
||||||
|
@ -538,10 +538,6 @@ SOURCE=.\my_wincond.c
|
|||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
|
||||||
SOURCE=.\my_winsem.c
|
|
||||||
# End Source File
|
|
||||||
# Begin Source File
|
|
||||||
|
|
||||||
SOURCE=.\my_winthread.c
|
SOURCE=.\my_winthread.c
|
||||||
# End Source File
|
# End Source File
|
||||||
# Begin Source File
|
# Begin Source File
|
||||||
|
@ -778,8 +778,9 @@ AC_CHECK_FUNC(bind, , AC_CHECK_LIB(bind, bind))
|
|||||||
# Check if crypt() exists in libc or libcrypt, sets LIBS if needed
|
# Check if crypt() exists in libc or libcrypt, sets LIBS if needed
|
||||||
AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT, 1, [crypt]))
|
AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT, 1, [crypt]))
|
||||||
|
|
||||||
# For sem_xxx functions on Solaris 2.6
|
# For the sched_yield() function on Solaris
|
||||||
AC_CHECK_FUNC(sem_init, , AC_CHECK_LIB(posix4, sem_init))
|
AC_CHECK_FUNC(sched_yield, , AC_CHECK_LIB(posix4, sched_yield))
|
||||||
|
|
||||||
MYSQL_CHECK_ZLIB_WITH_COMPRESS
|
MYSQL_CHECK_ZLIB_WITH_COMPRESS
|
||||||
|
|
||||||
# For large pages support
|
# For large pages support
|
||||||
|
@ -21,7 +21,7 @@ HEADERS_ABI = mysql.h mysql_com.h mysql_time.h \
|
|||||||
my_list.h my_alloc.h typelib.h
|
my_list.h my_alloc.h typelib.h
|
||||||
pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
|
pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.h \
|
||||||
my_xml.h mysql_embed.h \
|
my_xml.h mysql_embed.h \
|
||||||
my_semaphore.h my_pthread.h my_no_pthread.h raid.h \
|
my_pthread.h my_no_pthread.h raid.h \
|
||||||
errmsg.h my_global.h my_net.h \
|
errmsg.h my_global.h my_net.h \
|
||||||
my_getopt.h sslopt-longopts.h my_dir.h \
|
my_getopt.h sslopt-longopts.h my_dir.h \
|
||||||
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
|
sslopt-vars.h sslopt-case.h sql_common.h keycache.h \
|
||||||
|
@ -1,64 +0,0 @@
|
|||||||
/*
|
|
||||||
* Module: semaphore.h
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Semaphores aren't actually part of the PThreads standard.
|
|
||||||
* They are defined by the POSIX Standard:
|
|
||||||
*
|
|
||||||
* POSIX 1003.1b-1993 (POSIX.1b)
|
|
||||||
*
|
|
||||||
* Pthreads-win32 - POSIX Threads Library for Win32
|
|
||||||
* Copyright (C) 1998
|
|
||||||
*
|
|
||||||
* 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; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* This is hacked by Monty to be included in mysys library */
|
|
||||||
|
|
||||||
#ifndef _my_semaphore_h_
|
|
||||||
#define _my_semaphore_h_
|
|
||||||
|
|
||||||
#ifdef THREAD
|
|
||||||
|
|
||||||
C_MODE_START
|
|
||||||
#ifdef HAVE_SEMAPHORE_H
|
|
||||||
#include <semaphore.h>
|
|
||||||
#elif !defined(__bsdi__)
|
|
||||||
#ifdef __WIN__
|
|
||||||
typedef HANDLE sem_t;
|
|
||||||
#else
|
|
||||||
typedef struct {
|
|
||||||
pthread_mutex_t mutex;
|
|
||||||
pthread_cond_t cond;
|
|
||||||
uint count;
|
|
||||||
} sem_t;
|
|
||||||
#endif /* __WIN__ */
|
|
||||||
|
|
||||||
int sem_init(sem_t * sem, int pshared, unsigned int value);
|
|
||||||
int sem_destroy(sem_t * sem);
|
|
||||||
int sem_trywait(sem_t * sem);
|
|
||||||
int sem_wait(sem_t * sem);
|
|
||||||
int sem_post(sem_t * sem);
|
|
||||||
int sem_post_multiple(sem_t * sem, unsigned int count);
|
|
||||||
int sem_getvalue(sem_t * sem, unsigned int * sval);
|
|
||||||
|
|
||||||
#endif /* !__bsdi__ */
|
|
||||||
|
|
||||||
C_MODE_END
|
|
||||||
|
|
||||||
#endif /* THREAD */
|
|
||||||
|
|
||||||
#endif /* !_my_semaphore_h_ */
|
|
@ -157,6 +157,10 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
|
|||||||
rec--;
|
rec--;
|
||||||
if (rec->type == (int) FIELD_SKIP_ZERO && rec->length == 1)
|
if (rec->type == (int) FIELD_SKIP_ZERO && rec->length == 1)
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
NOTE1: here we change a field type FIELD_SKIP_ZERO ->
|
||||||
|
FIELD_NORMAL
|
||||||
|
*/
|
||||||
rec->type=(int) FIELD_NORMAL;
|
rec->type=(int) FIELD_NORMAL;
|
||||||
packed--;
|
packed--;
|
||||||
min_pack_length++;
|
min_pack_length++;
|
||||||
|
@ -1199,7 +1199,7 @@ int mi_open_datafile(MI_INFO *info, MYISAM_SHARE *share, File file_to_dup __attr
|
|||||||
int mi_open_keyfile(MYISAM_SHARE *share)
|
int mi_open_keyfile(MYISAM_SHARE *share)
|
||||||
{
|
{
|
||||||
if ((share->kfile=my_open(share->unique_file_name, share->mode | O_SHARE,
|
if ((share->kfile=my_open(share->unique_file_name, share->mode | O_SHARE,
|
||||||
MYF(MY_WME))) < 0)
|
MYF(MY_WME))) < 0)
|
||||||
return 1;
|
return 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -184,6 +184,7 @@ int rtree_find_first(MI_INFO *info, uint keynr, uchar *key, uint key_length,
|
|||||||
/*
|
/*
|
||||||
Save searched key, include data pointer.
|
Save searched key, include data pointer.
|
||||||
The data pointer is required if the search_flag contains MBR_DATA.
|
The data pointer is required if the search_flag contains MBR_DATA.
|
||||||
|
(minimum bounding rectangle)
|
||||||
*/
|
*/
|
||||||
memcpy(info->first_mbr_key, key, keyinfo->keylength);
|
memcpy(info->first_mbr_key, key, keyinfo->keylength);
|
||||||
info->last_rkey_length = key_length;
|
info->last_rkey_length = key_length;
|
||||||
@ -538,16 +539,19 @@ static int rtree_insert_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
uint nod_flag;
|
uint nod_flag;
|
||||||
uchar *page_buf;
|
uchar *page_buf;
|
||||||
int res;
|
int res;
|
||||||
|
DBUG_ENTER("rtree_insert_req");
|
||||||
|
|
||||||
if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length +
|
if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length +
|
||||||
MI_MAX_KEY_BUFF)))
|
MI_MAX_KEY_BUFF)))
|
||||||
{
|
{
|
||||||
my_errno = HA_ERR_OUT_OF_MEM;
|
my_errno = HA_ERR_OUT_OF_MEM;
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
if (!_mi_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
|
if (!_mi_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
|
||||||
goto err1;
|
goto err1;
|
||||||
nod_flag = mi_test_if_nod(page_buf);
|
nod_flag = mi_test_if_nod(page_buf);
|
||||||
|
DBUG_PRINT("rtree", ("page: %lu level: %d ins_level: %d nod_flag: %u",
|
||||||
|
(ulong) page, level, ins_level, nod_flag));
|
||||||
|
|
||||||
if ((ins_level == -1 && nod_flag) || /* key: go down to leaf */
|
if ((ins_level == -1 && nod_flag) || /* key: go down to leaf */
|
||||||
(ins_level > -1 && ins_level > level)) /* branch: go down to ins_level */
|
(ins_level > -1 && ins_level > level)) /* branch: go down to ins_level */
|
||||||
@ -599,11 +603,11 @@ static int rtree_insert_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
|
|
||||||
ok:
|
ok:
|
||||||
my_afree((byte*)page_buf);
|
my_afree((byte*)page_buf);
|
||||||
return res;
|
DBUG_RETURN(res);
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
my_afree((byte*)page_buf);
|
my_afree((byte*)page_buf);
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -623,18 +627,19 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key,
|
|||||||
MI_KEYDEF *keyinfo = info->s->keyinfo + keynr;
|
MI_KEYDEF *keyinfo = info->s->keyinfo + keynr;
|
||||||
int res;
|
int res;
|
||||||
my_off_t new_page;
|
my_off_t new_page;
|
||||||
|
DBUG_ENTER("rtree_insert_level");
|
||||||
|
|
||||||
if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
|
if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
|
||||||
{
|
{
|
||||||
if ((old_root = _mi_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
|
if ((old_root = _mi_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
|
||||||
return -1;
|
DBUG_RETURN(-1);
|
||||||
info->buff_used = 1;
|
info->buff_used = 1;
|
||||||
mi_putint(info->buff, 2, 0);
|
mi_putint(info->buff, 2, 0);
|
||||||
res = rtree_add_key(info, keyinfo, key, key_length, info->buff, NULL);
|
res = rtree_add_key(info, keyinfo, key, key_length, info->buff, NULL);
|
||||||
if (_mi_write_keypage(info, keyinfo, old_root, DFLT_INIT_HITS, info->buff))
|
if (_mi_write_keypage(info, keyinfo, old_root, DFLT_INIT_HITS, info->buff))
|
||||||
return 1;
|
DBUG_RETURN(1);
|
||||||
info->s->state.key_root[keynr] = old_root;
|
info->s->state.key_root[keynr] = old_root;
|
||||||
return res;
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ((res = rtree_insert_req(info, keyinfo, key, key_length,
|
switch ((res = rtree_insert_req(info, keyinfo, key, key_length,
|
||||||
@ -651,11 +656,12 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key,
|
|||||||
uchar *new_key;
|
uchar *new_key;
|
||||||
uint nod_flag = info->s->base.key_reflength;
|
uint nod_flag = info->s->base.key_reflength;
|
||||||
|
|
||||||
|
DBUG_PRINT("rtree", ("root was split, grow a new root"));
|
||||||
if (!(new_root_buf = (uchar*)my_alloca((uint)keyinfo->block_length +
|
if (!(new_root_buf = (uchar*)my_alloca((uint)keyinfo->block_length +
|
||||||
MI_MAX_KEY_BUFF)))
|
MI_MAX_KEY_BUFF)))
|
||||||
{
|
{
|
||||||
my_errno = HA_ERR_OUT_OF_MEM;
|
my_errno = HA_ERR_OUT_OF_MEM;
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
|
|
||||||
mi_putint(new_root_buf, 2, nod_flag);
|
mi_putint(new_root_buf, 2, nod_flag);
|
||||||
@ -681,12 +687,14 @@ static int rtree_insert_level(MI_INFO *info, uint keynr, uchar *key,
|
|||||||
DFLT_INIT_HITS, new_root_buf))
|
DFLT_INIT_HITS, new_root_buf))
|
||||||
goto err1;
|
goto err1;
|
||||||
info->s->state.key_root[keynr] = new_root;
|
info->s->state.key_root[keynr] = new_root;
|
||||||
|
DBUG_PRINT("rtree", ("new root page: %lu level: %d nod_flag: %u",
|
||||||
|
(ulong) new_root, 0, mi_test_if_nod(new_root_buf)));
|
||||||
|
|
||||||
my_afree((byte*)new_root_buf);
|
my_afree((byte*)new_root_buf);
|
||||||
break;
|
break;
|
||||||
err1:
|
err1:
|
||||||
my_afree((byte*)new_root_buf);
|
my_afree((byte*)new_root_buf);
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
case -1: /* error */
|
case -1: /* error */
|
||||||
@ -694,7 +702,7 @@ err1:
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return res;
|
DBUG_RETURN(res);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -708,8 +716,10 @@ err1:
|
|||||||
|
|
||||||
int rtree_insert(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
int rtree_insert(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
||||||
{
|
{
|
||||||
return (!key_length ||
|
DBUG_ENTER("rtree_insert");
|
||||||
(rtree_insert_level(info, keynr, key, key_length, -1) == -1)) ? -1 : 0;
|
DBUG_RETURN((!key_length ||
|
||||||
|
(rtree_insert_level(info, keynr, key, key_length, -1) == -1)) ?
|
||||||
|
-1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -724,6 +734,8 @@ int rtree_insert(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
|||||||
static int rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t page,
|
static int rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t page,
|
||||||
int level)
|
int level)
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("rtree_fill_reinsert_list");
|
||||||
|
DBUG_PRINT("rtree", ("page: %lu level: %d", (ulong) page, level));
|
||||||
if (ReinsertList->n_pages == ReinsertList->m_pages)
|
if (ReinsertList->n_pages == ReinsertList->m_pages)
|
||||||
{
|
{
|
||||||
ReinsertList->m_pages += REINSERT_BUFFER_INC;
|
ReinsertList->m_pages += REINSERT_BUFFER_INC;
|
||||||
@ -735,10 +747,10 @@ static int rtree_fill_reinsert_list(stPageList *ReinsertList, my_off_t page,
|
|||||||
ReinsertList->pages[ReinsertList->n_pages].offs = page;
|
ReinsertList->pages[ReinsertList->n_pages].offs = page;
|
||||||
ReinsertList->pages[ReinsertList->n_pages].level = level;
|
ReinsertList->pages[ReinsertList->n_pages].level = level;
|
||||||
ReinsertList->n_pages++;
|
ReinsertList->n_pages++;
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -762,15 +774,18 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
uint nod_flag;
|
uint nod_flag;
|
||||||
uchar *page_buf;
|
uchar *page_buf;
|
||||||
int res;
|
int res;
|
||||||
|
DBUG_ENTER("rtree_delete_req");
|
||||||
|
|
||||||
if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length)))
|
if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length)))
|
||||||
{
|
{
|
||||||
my_errno = HA_ERR_OUT_OF_MEM;
|
my_errno = HA_ERR_OUT_OF_MEM;
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
if (!_mi_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
|
if (!_mi_fetch_keypage(info, keyinfo, page, DFLT_INIT_HITS, page_buf, 0))
|
||||||
goto err1;
|
goto err1;
|
||||||
nod_flag = mi_test_if_nod(page_buf);
|
nod_flag = mi_test_if_nod(page_buf);
|
||||||
|
DBUG_PRINT("rtree", ("page: %lu level: %d nod_flag: %u",
|
||||||
|
(ulong) page, level, nod_flag));
|
||||||
|
|
||||||
k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
|
k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
|
||||||
last = rt_PAGE_END(page_buf);
|
last = rt_PAGE_END(page_buf);
|
||||||
@ -791,6 +806,7 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
if (*page_size + key_length >= rt_PAGE_MIN_SIZE(keyinfo->block_length))
|
if (*page_size + key_length >= rt_PAGE_MIN_SIZE(keyinfo->block_length))
|
||||||
{
|
{
|
||||||
/* OK */
|
/* OK */
|
||||||
|
/* Calculate a new key value (MBR) for the shrinked block. */
|
||||||
if (rtree_set_key_mbr(info, keyinfo, k, key_length,
|
if (rtree_set_key_mbr(info, keyinfo, k, key_length,
|
||||||
_mi_kpos(nod_flag, k)))
|
_mi_kpos(nod_flag, k)))
|
||||||
goto err1;
|
goto err1;
|
||||||
@ -800,10 +816,23 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* too small: delete key & add it descendant to reinsert list */
|
/*
|
||||||
|
Too small: delete key & add it descendant to reinsert list.
|
||||||
|
Store position and level of the block so that it can be
|
||||||
|
accessed later for inserting the remaining keys.
|
||||||
|
*/
|
||||||
|
DBUG_PRINT("rtree", ("too small. move block to reinsert list"));
|
||||||
if (rtree_fill_reinsert_list(ReinsertList, _mi_kpos(nod_flag, k),
|
if (rtree_fill_reinsert_list(ReinsertList, _mi_kpos(nod_flag, k),
|
||||||
level + 1))
|
level + 1))
|
||||||
goto err1;
|
goto err1;
|
||||||
|
/*
|
||||||
|
Delete the key that references the block. This makes the
|
||||||
|
block disappear from the index. Hence we need to insert
|
||||||
|
its remaining keys later. Note: if the block is a branch
|
||||||
|
block, we do not only remove this block, but the whole
|
||||||
|
subtree. So we need to re-insert its keys on the same
|
||||||
|
level later to reintegrate the subtrees.
|
||||||
|
*/
|
||||||
rtree_delete_key(info, page_buf, k, key_length, nod_flag);
|
rtree_delete_key(info, page_buf, k, key_length, nod_flag);
|
||||||
if (_mi_write_keypage(info, keyinfo, page,
|
if (_mi_write_keypage(info, keyinfo, page,
|
||||||
DFLT_INIT_HITS, page_buf))
|
DFLT_INIT_HITS, page_buf))
|
||||||
@ -863,11 +892,11 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
|
|
||||||
ok:
|
ok:
|
||||||
my_afree((byte*)page_buf);
|
my_afree((byte*)page_buf);
|
||||||
return res;
|
DBUG_RETURN(res);
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
my_afree((byte*)page_buf);
|
my_afree((byte*)page_buf);
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -885,12 +914,15 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
|||||||
stPageList ReinsertList;
|
stPageList ReinsertList;
|
||||||
my_off_t old_root;
|
my_off_t old_root;
|
||||||
MI_KEYDEF *keyinfo = info->s->keyinfo + keynr;
|
MI_KEYDEF *keyinfo = info->s->keyinfo + keynr;
|
||||||
|
DBUG_ENTER("rtree_delete");
|
||||||
|
|
||||||
if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
|
if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
|
||||||
{
|
{
|
||||||
my_errno= HA_ERR_END_OF_FILE;
|
my_errno= HA_ERR_END_OF_FILE;
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
|
DBUG_PRINT("rtree", ("starting deletion at root page: %lu",
|
||||||
|
(ulong) old_root));
|
||||||
|
|
||||||
ReinsertList.pages = NULL;
|
ReinsertList.pages = NULL;
|
||||||
ReinsertList.n_pages = 0;
|
ReinsertList.n_pages = 0;
|
||||||
@ -899,12 +931,12 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
|||||||
switch (rtree_delete_req(info, keyinfo, key, key_length, old_root,
|
switch (rtree_delete_req(info, keyinfo, key, key_length, old_root,
|
||||||
&page_size, &ReinsertList, 0))
|
&page_size, &ReinsertList, 0))
|
||||||
{
|
{
|
||||||
case 2:
|
case 2: /* empty */
|
||||||
{
|
{
|
||||||
info->s->state.key_root[keynr] = HA_OFFSET_ERROR;
|
info->s->state.key_root[keynr] = HA_OFFSET_ERROR;
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
case 0:
|
case 0: /* deleted */
|
||||||
{
|
{
|
||||||
uint nod_flag;
|
uint nod_flag;
|
||||||
ulong i;
|
ulong i;
|
||||||
@ -923,16 +955,34 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
|||||||
DFLT_INIT_HITS, page_buf, 0))
|
DFLT_INIT_HITS, page_buf, 0))
|
||||||
goto err1;
|
goto err1;
|
||||||
nod_flag = mi_test_if_nod(page_buf);
|
nod_flag = mi_test_if_nod(page_buf);
|
||||||
|
DBUG_PRINT("rtree", ("reinserting keys from "
|
||||||
|
"page: %lu level: %d nod_flag: %u",
|
||||||
|
(ulong) ReinsertList.pages[i].offs,
|
||||||
|
ReinsertList.pages[i].level, nod_flag));
|
||||||
|
|
||||||
k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
|
k = rt_PAGE_FIRST_KEY(page_buf, nod_flag);
|
||||||
last = rt_PAGE_END(page_buf);
|
last = rt_PAGE_END(page_buf);
|
||||||
for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
|
for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
|
||||||
{
|
{
|
||||||
if (rtree_insert_level(info, keynr, k, key_length,
|
int res;
|
||||||
ReinsertList.pages[i].level) == -1)
|
if ((res= rtree_insert_level(info, keynr, k, key_length,
|
||||||
|
ReinsertList.pages[i].level)) == -1)
|
||||||
{
|
{
|
||||||
my_afree((byte*)page_buf);
|
my_afree((byte*)page_buf);
|
||||||
goto err1;
|
goto err1;
|
||||||
}
|
}
|
||||||
|
if (res)
|
||||||
|
{
|
||||||
|
ulong j;
|
||||||
|
DBUG_PRINT("rtree", ("root has been split, adjust levels"));
|
||||||
|
for (j= i; j < ReinsertList.n_pages; j++)
|
||||||
|
{
|
||||||
|
ReinsertList.pages[j].level++;
|
||||||
|
DBUG_PRINT("rtree", ("keys from page: %lu now level: %d",
|
||||||
|
(ulong) ReinsertList.pages[i].offs,
|
||||||
|
ReinsertList.pages[i].level));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
my_afree((byte*)page_buf);
|
my_afree((byte*)page_buf);
|
||||||
if (_mi_dispose(info, keyinfo, ReinsertList.pages[i].offs,
|
if (_mi_dispose(info, keyinfo, ReinsertList.pages[i].offs,
|
||||||
@ -959,20 +1009,20 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
|||||||
info->s->state.key_root[keynr] = new_root;
|
info->s->state.key_root[keynr] = new_root;
|
||||||
}
|
}
|
||||||
info->update= HA_STATE_DELETED;
|
info->update= HA_STATE_DELETED;
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
|
|
||||||
err1:
|
err1:
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
case 1: /* not found */
|
case 1: /* not found */
|
||||||
{
|
{
|
||||||
my_errno = HA_ERR_KEY_NOT_FOUND;
|
my_errno = HA_ERR_KEY_NOT_FOUND;
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
case -1: /* error */
|
case -1: /* error */
|
||||||
{
|
{
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,7 @@ int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
{
|
{
|
||||||
uint page_size = mi_getint(page_buf);
|
uint page_size = mi_getint(page_buf);
|
||||||
uint nod_flag = mi_test_if_nod(page_buf);
|
uint nod_flag = mi_test_if_nod(page_buf);
|
||||||
|
DBUG_ENTER("rtree_add_key");
|
||||||
|
|
||||||
if (page_size + key_length + info->s->base.rec_reflength <=
|
if (page_size + key_length + info->s->base.rec_reflength <=
|
||||||
keyinfo->block_length)
|
keyinfo->block_length)
|
||||||
@ -42,22 +43,26 @@ int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
|||||||
if (nod_flag)
|
if (nod_flag)
|
||||||
{
|
{
|
||||||
/* save key */
|
/* save key */
|
||||||
|
DBUG_ASSERT(_mi_kpos(nod_flag, key) < info->state->key_file_length);
|
||||||
memcpy(rt_PAGE_END(page_buf), key - nod_flag, key_length + nod_flag);
|
memcpy(rt_PAGE_END(page_buf), key - nod_flag, key_length + nod_flag);
|
||||||
page_size += key_length + nod_flag;
|
page_size += key_length + nod_flag;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* save key */
|
/* save key */
|
||||||
|
DBUG_ASSERT(_mi_dpos(info, nod_flag, key + key_length +
|
||||||
|
info->s->base.rec_reflength) <
|
||||||
|
info->state->data_file_length + info->s->base.pack_reclength);
|
||||||
memcpy(rt_PAGE_END(page_buf), key, key_length +
|
memcpy(rt_PAGE_END(page_buf), key, key_length +
|
||||||
info->s->base.rec_reflength);
|
info->s->base.rec_reflength);
|
||||||
page_size += key_length + info->s->base.rec_reflength;
|
page_size += key_length + info->s->base.rec_reflength;
|
||||||
}
|
}
|
||||||
mi_putint(page_buf, page_size, nod_flag);
|
mi_putint(page_buf, page_size, nod_flag);
|
||||||
return 0;
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
return (rtree_split_page(info, keyinfo, page_buf, key, key_length,
|
DBUG_RETURN((rtree_split_page(info, keyinfo, page_buf, key, key_length,
|
||||||
new_page) ? -1 : 1);
|
new_page) ? -1 : 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -89,11 +94,13 @@ int rtree_delete_key(MI_INFO *info, uchar *page_buf, uchar *key,
|
|||||||
int rtree_set_key_mbr(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
int rtree_set_key_mbr(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||||
uint key_length, my_off_t child_page)
|
uint key_length, my_off_t child_page)
|
||||||
{
|
{
|
||||||
|
DBUG_ENTER("rtree_set_key_mbr");
|
||||||
|
|
||||||
if (!_mi_fetch_keypage(info, keyinfo, child_page,
|
if (!_mi_fetch_keypage(info, keyinfo, child_page,
|
||||||
DFLT_INIT_HITS, info->buff, 0))
|
DFLT_INIT_HITS, info->buff, 0))
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
|
|
||||||
return rtree_page_mbr(info, keyinfo->seg, info->buff, key, key_length);
|
DBUG_RETURN(rtree_page_mbr(info, keyinfo->seg, info->buff, key, key_length));
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /*HAVE_RTREE_KEYS*/
|
#endif /*HAVE_RTREE_KEYS*/
|
||||||
|
@ -264,13 +264,15 @@ int rtree_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key,
|
|||||||
uint full_length= key_length + (nod_flag ? nod_flag :
|
uint full_length= key_length + (nod_flag ? nod_flag :
|
||||||
info->s->base.rec_reflength);
|
info->s->base.rec_reflength);
|
||||||
int max_keys= (mi_getint(page)-2) / (full_length);
|
int max_keys= (mi_getint(page)-2) / (full_length);
|
||||||
|
DBUG_ENTER("rtree_split_page");
|
||||||
|
DBUG_PRINT("rtree", ("splitting block"));
|
||||||
|
|
||||||
n_dim = keyinfo->keysegs / 2;
|
n_dim = keyinfo->keysegs / 2;
|
||||||
|
|
||||||
if (!(coord_buf= (double*) my_alloca(n_dim * 2 * sizeof(double) *
|
if (!(coord_buf= (double*) my_alloca(n_dim * 2 * sizeof(double) *
|
||||||
(max_keys + 1 + 4) +
|
(max_keys + 1 + 4) +
|
||||||
sizeof(SplitStruct) * (max_keys + 1))))
|
sizeof(SplitStruct) * (max_keys + 1))))
|
||||||
return -1;
|
DBUG_RETURN(-1); /* purecov: inspected */
|
||||||
|
|
||||||
task= (SplitStruct *)(coord_buf + n_dim * 2 * (max_keys + 1 + 4));
|
task= (SplitStruct *)(coord_buf + n_dim * 2 * (max_keys + 1 + 4));
|
||||||
|
|
||||||
@ -341,12 +343,13 @@ int rtree_split_page(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *page, uchar *key,
|
|||||||
else
|
else
|
||||||
err_code= _mi_write_keypage(info, keyinfo, *new_page_offs,
|
err_code= _mi_write_keypage(info, keyinfo, *new_page_offs,
|
||||||
DFLT_INIT_HITS, new_page);
|
DFLT_INIT_HITS, new_page);
|
||||||
|
DBUG_PRINT("rtree", ("split new block: %lu", (ulong) *new_page_offs));
|
||||||
|
|
||||||
my_afree((byte*)new_page);
|
my_afree((byte*)new_page);
|
||||||
|
|
||||||
split_err:
|
split_err:
|
||||||
my_afree((byte*) coord_buf);
|
my_afree((byte*) coord_buf);
|
||||||
return err_code;
|
DBUG_RETURN(err_code);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /*HAVE_RTREE_KEYS*/
|
#endif /*HAVE_RTREE_KEYS*/
|
||||||
|
@ -243,3 +243,10 @@ SET @@session.auto_increment_offset=
|
|||||||
@bug20830_old_session_auto_increment_offset;
|
@bug20830_old_session_auto_increment_offset;
|
||||||
SET @@session.auto_increment_increment=
|
SET @@session.auto_increment_increment=
|
||||||
@bug20830_old_session_auto_increment_increment;
|
@bug20830_old_session_auto_increment_increment;
|
||||||
|
CREATE TABLE t1(a BIT);
|
||||||
|
INSERT DELAYED INTO t1 VALUES(1);
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
SELECT HEX(a) FROM t1;
|
||||||
|
HEX(a)
|
||||||
|
1
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -873,6 +873,558 @@ SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
|||||||
1
|
1
|
||||||
1
|
1
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
CREATE TABLE t1 (id bigint(12) unsigned NOT NULL auto_increment,
|
||||||
|
c2 varchar(15) collate utf8_bin default NULL,
|
||||||
|
c1 varchar(15) collate utf8_bin default NULL,
|
||||||
|
c3 varchar(10) collate utf8_bin default NULL,
|
||||||
|
spatial_point point NOT NULL,
|
||||||
|
PRIMARY KEY(id),
|
||||||
|
SPATIAL KEY (spatial_point(32))
|
||||||
|
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('y', 's', 'j', GeomFromText('POINT(167 74)')),
|
||||||
|
('r', 'n', 'd', GeomFromText('POINT(215 118)')),
|
||||||
|
('g', 'n', 'e', GeomFromText('POINT(203 98)')),
|
||||||
|
('h', 'd', 'd', GeomFromText('POINT(54 193)')),
|
||||||
|
('r', 'x', 'y', GeomFromText('POINT(47 69)')),
|
||||||
|
('t', 'q', 'r', GeomFromText('POINT(109 42)')),
|
||||||
|
('a', 'z', 'd', GeomFromText('POINT(0 154)')),
|
||||||
|
('x', 'v', 'o', GeomFromText('POINT(174 131)')),
|
||||||
|
('b', 'r', 'a', GeomFromText('POINT(114 253)')),
|
||||||
|
('x', 'z', 'i', GeomFromText('POINT(163 21)')),
|
||||||
|
('w', 'p', 'i', GeomFromText('POINT(42 102)')),
|
||||||
|
('g', 'j', 'j', GeomFromText('POINT(170 133)')),
|
||||||
|
('m', 'g', 'n', GeomFromText('POINT(28 22)')),
|
||||||
|
('b', 'z', 'h', GeomFromText('POINT(174 28)')),
|
||||||
|
('q', 'k', 'f', GeomFromText('POINT(233 73)')),
|
||||||
|
('w', 'w', 'a', GeomFromText('POINT(124 200)')),
|
||||||
|
('t', 'j', 'w', GeomFromText('POINT(252 101)')),
|
||||||
|
('d', 'r', 'd', GeomFromText('POINT(98 18)')),
|
||||||
|
('w', 'o', 'y', GeomFromText('POINT(165 31)')),
|
||||||
|
('y', 'h', 't', GeomFromText('POINT(14 220)')),
|
||||||
|
('d', 'p', 'u', GeomFromText('POINT(223 196)')),
|
||||||
|
('g', 'y', 'g', GeomFromText('POINT(207 96)')),
|
||||||
|
('x', 'm', 'n', GeomFromText('POINT(214 3)')),
|
||||||
|
('g', 'v', 'e', GeomFromText('POINT(140 205)')),
|
||||||
|
('g', 'm', 'm', GeomFromText('POINT(10 236)')),
|
||||||
|
('i', 'r', 'j', GeomFromText('POINT(137 228)')),
|
||||||
|
('w', 's', 'p', GeomFromText('POINT(115 6)')),
|
||||||
|
('o', 'n', 'k', GeomFromText('POINT(158 129)')),
|
||||||
|
('j', 'h', 'l', GeomFromText('POINT(129 72)')),
|
||||||
|
('f', 'x', 'l', GeomFromText('POINT(139 207)')),
|
||||||
|
('u', 'd', 'n', GeomFromText('POINT(125 109)')),
|
||||||
|
('b', 'a', 'z', GeomFromText('POINT(30 32)')),
|
||||||
|
('m', 'h', 'o', GeomFromText('POINT(251 251)')),
|
||||||
|
('f', 'r', 'd', GeomFromText('POINT(243 211)')),
|
||||||
|
('b', 'd', 'r', GeomFromText('POINT(232 80)')),
|
||||||
|
('g', 'k', 'v', GeomFromText('POINT(15 100)')),
|
||||||
|
('i', 'f', 'c', GeomFromText('POINT(109 66)')),
|
||||||
|
('r', 't', 'j', GeomFromText('POINT(178 6)')),
|
||||||
|
('y', 'n', 'f', GeomFromText('POINT(233 211)')),
|
||||||
|
('f', 'y', 'm', GeomFromText('POINT(99 16)')),
|
||||||
|
('z', 'q', 'l', GeomFromText('POINT(39 49)')),
|
||||||
|
('j', 'c', 'r', GeomFromText('POINT(75 187)')),
|
||||||
|
('c', 'y', 'y', GeomFromText('POINT(246 253)')),
|
||||||
|
('w', 'u', 'd', GeomFromText('POINT(56 190)')),
|
||||||
|
('n', 'q', 'm', GeomFromText('POINT(73 149)')),
|
||||||
|
('d', 'y', 'a', GeomFromText('POINT(134 6)')),
|
||||||
|
('z', 's', 'w', GeomFromText('POINT(216 225)')),
|
||||||
|
('d', 'u', 'k', GeomFromText('POINT(132 70)')),
|
||||||
|
('f', 'v', 't', GeomFromText('POINT(187 141)')),
|
||||||
|
('r', 'r', 'a', GeomFromText('POINT(152 39)')),
|
||||||
|
('y', 'p', 'o', GeomFromText('POINT(45 27)')),
|
||||||
|
('p', 'n', 'm', GeomFromText('POINT(228 148)')),
|
||||||
|
('e', 'g', 'e', GeomFromText('POINT(88 81)')),
|
||||||
|
('m', 'a', 'h', GeomFromText('POINT(35 29)')),
|
||||||
|
('m', 'h', 'f', GeomFromText('POINT(30 71)')),
|
||||||
|
('h', 'k', 'i', GeomFromText('POINT(244 78)')),
|
||||||
|
('z', 'v', 'd', GeomFromText('POINT(241 38)')),
|
||||||
|
('q', 'l', 'j', GeomFromText('POINT(13 71)')),
|
||||||
|
('s', 'p', 'g', GeomFromText('POINT(108 38)')),
|
||||||
|
('q', 's', 'j', GeomFromText('POINT(92 101)')),
|
||||||
|
('l', 'h', 'g', GeomFromText('POINT(120 78)')),
|
||||||
|
('w', 't', 'b', GeomFromText('POINT(193 109)')),
|
||||||
|
('b', 's', 's', GeomFromText('POINT(223 211)')),
|
||||||
|
('w', 'w', 'y', GeomFromText('POINT(122 42)')),
|
||||||
|
('q', 'c', 'c', GeomFromText('POINT(104 102)')),
|
||||||
|
('w', 'g', 'n', GeomFromText('POINT(213 120)')),
|
||||||
|
('p', 'q', 'a', GeomFromText('POINT(247 148)')),
|
||||||
|
('c', 'z', 'e', GeomFromText('POINT(18 106)')),
|
||||||
|
('z', 'u', 'n', GeomFromText('POINT(70 133)')),
|
||||||
|
('j', 'n', 'x', GeomFromText('POINT(232 13)')),
|
||||||
|
('e', 'h', 'f', GeomFromText('POINT(22 135)')),
|
||||||
|
('w', 'l', 'f', GeomFromText('POINT(9 180)')),
|
||||||
|
('a', 'v', 'q', GeomFromText('POINT(163 228)')),
|
||||||
|
('i', 'z', 'o', GeomFromText('POINT(180 100)')),
|
||||||
|
('e', 'c', 'l', GeomFromText('POINT(182 231)')),
|
||||||
|
('c', 'k', 'o', GeomFromText('POINT(19 60)')),
|
||||||
|
('q', 'f', 'p', GeomFromText('POINT(79 95)')),
|
||||||
|
('m', 'd', 'r', GeomFromText('POINT(3 127)')),
|
||||||
|
('m', 'e', 't', GeomFromText('POINT(136 154)')),
|
||||||
|
('w', 'w', 'w', GeomFromText('POINT(102 15)')),
|
||||||
|
('l', 'n', 'q', GeomFromText('POINT(71 196)')),
|
||||||
|
('p', 'k', 'c', GeomFromText('POINT(47 139)')),
|
||||||
|
('j', 'o', 'r', GeomFromText('POINT(177 128)')),
|
||||||
|
('j', 'q', 'a', GeomFromText('POINT(170 6)')),
|
||||||
|
('b', 'a', 'o', GeomFromText('POINT(63 211)')),
|
||||||
|
('g', 's', 'o', GeomFromText('POINT(144 251)')),
|
||||||
|
('w', 'u', 'w', GeomFromText('POINT(221 214)')),
|
||||||
|
('g', 'a', 'm', GeomFromText('POINT(14 102)')),
|
||||||
|
('u', 'q', 'z', GeomFromText('POINT(86 200)')),
|
||||||
|
('k', 'a', 'm', GeomFromText('POINT(144 222)')),
|
||||||
|
('j', 'u', 'r', GeomFromText('POINT(216 142)')),
|
||||||
|
('q', 'k', 'v', GeomFromText('POINT(121 236)')),
|
||||||
|
('p', 'o', 'r', GeomFromText('POINT(108 102)')),
|
||||||
|
('b', 'd', 'x', GeomFromText('POINT(127 198)')),
|
||||||
|
('k', 's', 'a', GeomFromText('POINT(2 150)')),
|
||||||
|
('f', 'm', 'f', GeomFromText('POINT(160 191)')),
|
||||||
|
('q', 'y', 'x', GeomFromText('POINT(98 111)')),
|
||||||
|
('o', 'f', 'm', GeomFromText('POINT(232 218)')),
|
||||||
|
('c', 'w', 'j', GeomFromText('POINT(156 165)')),
|
||||||
|
('s', 'q', 'v', GeomFromText('POINT(98 161)'));
|
||||||
|
SET @@RAND_SEED1=692635050, @@RAND_SEED2=297339954;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=159925977, @@RAND_SEED2=942570618;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=328169745, @@RAND_SEED2=410451954;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=178507359, @@RAND_SEED2=332493072;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=1034033013, @@RAND_SEED2=558966507;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(230 9)') where c1 like 'y%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(95 35)') where c1 like 'j%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(93 99)') where c1 like 'a%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(19 81)') where c1 like 'r%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(20 177)') where c1 like 'h%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(221 193)') where c1 like 'u%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(195 205)') where c1 like 'd%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(15 213)') where c1 like 'u%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(214 63)') where c1 like 'n%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(243 171)') where c1 like 'c%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(198 82)') where c1 like 'y%';
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('f', 'y', 'p', GeomFromText('POINT(109 235)')),
|
||||||
|
('b', 'e', 'v', GeomFromText('POINT(20 48)')),
|
||||||
|
('i', 'u', 'f', GeomFromText('POINT(15 55)')),
|
||||||
|
('o', 'r', 'z', GeomFromText('POINT(105 64)')),
|
||||||
|
('a', 'p', 'a', GeomFromText('POINT(142 236)')),
|
||||||
|
('g', 'i', 'k', GeomFromText('POINT(10 49)')),
|
||||||
|
('x', 'z', 'x', GeomFromText('POINT(192 200)')),
|
||||||
|
('c', 'v', 'r', GeomFromText('POINT(94 168)')),
|
||||||
|
('y', 'z', 'e', GeomFromText('POINT(141 51)')),
|
||||||
|
('h', 'm', 'd', GeomFromText('POINT(35 251)')),
|
||||||
|
('v', 'm', 'q', GeomFromText('POINT(44 90)')),
|
||||||
|
('j', 'l', 'z', GeomFromText('POINT(67 237)')),
|
||||||
|
('i', 'v', 'a', GeomFromText('POINT(75 14)')),
|
||||||
|
('b', 'q', 't', GeomFromText('POINT(153 33)')),
|
||||||
|
('e', 'm', 'a', GeomFromText('POINT(247 49)')),
|
||||||
|
('l', 'y', 'g', GeomFromText('POINT(56 203)')),
|
||||||
|
('v', 'o', 'r', GeomFromText('POINT(90 54)')),
|
||||||
|
('r', 'n', 'd', GeomFromText('POINT(135 83)')),
|
||||||
|
('j', 't', 'u', GeomFromText('POINT(174 239)')),
|
||||||
|
('u', 'n', 'g', GeomFromText('POINT(104 191)')),
|
||||||
|
('p', 'q', 'y', GeomFromText('POINT(63 171)')),
|
||||||
|
('o', 'q', 'p', GeomFromText('POINT(192 103)')),
|
||||||
|
('f', 'x', 'e', GeomFromText('POINT(244 30)')),
|
||||||
|
('n', 'x', 'c', GeomFromText('POINT(92 103)')),
|
||||||
|
('r', 'q', 'z', GeomFromText('POINT(166 20)')),
|
||||||
|
('s', 'a', 'j', GeomFromText('POINT(137 205)')),
|
||||||
|
('z', 't', 't', GeomFromText('POINT(99 134)')),
|
||||||
|
('o', 'm', 'j', GeomFromText('POINT(217 3)')),
|
||||||
|
('n', 'h', 'j', GeomFromText('POINT(211 17)')),
|
||||||
|
('v', 'v', 'a', GeomFromText('POINT(41 137)')),
|
||||||
|
('q', 'o', 'j', GeomFromText('POINT(5 92)')),
|
||||||
|
('z', 'y', 'e', GeomFromText('POINT(175 212)')),
|
||||||
|
('j', 'z', 'h', GeomFromText('POINT(224 194)')),
|
||||||
|
('a', 'g', 'm', GeomFromText('POINT(31 119)')),
|
||||||
|
('p', 'c', 'f', GeomFromText('POINT(17 221)')),
|
||||||
|
('t', 'h', 'k', GeomFromText('POINT(26 203)')),
|
||||||
|
('u', 'w', 'p', GeomFromText('POINT(47 185)')),
|
||||||
|
('z', 'a', 'c', GeomFromText('POINT(61 133)')),
|
||||||
|
('u', 'k', 'a', GeomFromText('POINT(210 115)')),
|
||||||
|
('k', 'f', 'h', GeomFromText('POINT(125 113)')),
|
||||||
|
('t', 'v', 'y', GeomFromText('POINT(12 239)')),
|
||||||
|
('u', 'v', 'd', GeomFromText('POINT(90 24)')),
|
||||||
|
('m', 'y', 'w', GeomFromText('POINT(25 243)')),
|
||||||
|
('d', 'n', 'g', GeomFromText('POINT(122 92)')),
|
||||||
|
('z', 'm', 'f', GeomFromText('POINT(235 110)')),
|
||||||
|
('q', 'd', 'f', GeomFromText('POINT(233 217)')),
|
||||||
|
('a', 'v', 'u', GeomFromText('POINT(69 59)')),
|
||||||
|
('x', 'k', 'p', GeomFromText('POINT(240 14)')),
|
||||||
|
('i', 'v', 'r', GeomFromText('POINT(154 42)')),
|
||||||
|
('w', 'h', 'l', GeomFromText('POINT(178 156)')),
|
||||||
|
('d', 'h', 'n', GeomFromText('POINT(65 157)')),
|
||||||
|
('c', 'k', 'z', GeomFromText('POINT(62 33)')),
|
||||||
|
('e', 'l', 'w', GeomFromText('POINT(162 1)')),
|
||||||
|
('r', 'f', 'i', GeomFromText('POINT(127 71)')),
|
||||||
|
('q', 'm', 'c', GeomFromText('POINT(63 118)')),
|
||||||
|
('c', 'h', 'u', GeomFromText('POINT(205 203)')),
|
||||||
|
('d', 't', 'p', GeomFromText('POINT(234 87)')),
|
||||||
|
('s', 'g', 'h', GeomFromText('POINT(149 34)')),
|
||||||
|
('o', 'b', 'q', GeomFromText('POINT(159 179)')),
|
||||||
|
('k', 'u', 'f', GeomFromText('POINT(202 254)')),
|
||||||
|
('u', 'f', 'g', GeomFromText('POINT(70 15)')),
|
||||||
|
('x', 's', 'b', GeomFromText('POINT(25 181)')),
|
||||||
|
('s', 'c', 'g', GeomFromText('POINT(252 17)')),
|
||||||
|
('a', 'c', 'f', GeomFromText('POINT(89 67)')),
|
||||||
|
('r', 'e', 'q', GeomFromText('POINT(55 54)')),
|
||||||
|
('f', 'i', 'k', GeomFromText('POINT(178 230)')),
|
||||||
|
('p', 'e', 'l', GeomFromText('POINT(198 28)')),
|
||||||
|
('w', 'o', 'd', GeomFromText('POINT(204 189)')),
|
||||||
|
('c', 'a', 'g', GeomFromText('POINT(230 178)')),
|
||||||
|
('r', 'o', 'e', GeomFromText('POINT(61 116)')),
|
||||||
|
('w', 'a', 'a', GeomFromText('POINT(178 237)')),
|
||||||
|
('v', 'd', 'e', GeomFromText('POINT(70 85)')),
|
||||||
|
('k', 'c', 'e', GeomFromText('POINT(147 118)')),
|
||||||
|
('d', 'q', 't', GeomFromText('POINT(218 77)')),
|
||||||
|
('k', 'g', 'f', GeomFromText('POINT(192 113)')),
|
||||||
|
('w', 'n', 'e', GeomFromText('POINT(92 124)')),
|
||||||
|
('r', 'm', 'q', GeomFromText('POINT(130 65)')),
|
||||||
|
('o', 'r', 'r', GeomFromText('POINT(174 233)')),
|
||||||
|
('k', 'n', 't', GeomFromText('POINT(175 147)')),
|
||||||
|
('q', 'm', 'r', GeomFromText('POINT(18 208)')),
|
||||||
|
('l', 'd', 'i', GeomFromText('POINT(13 104)')),
|
||||||
|
('w', 'o', 'y', GeomFromText('POINT(207 39)')),
|
||||||
|
('p', 'u', 'o', GeomFromText('POINT(114 31)')),
|
||||||
|
('y', 'a', 'p', GeomFromText('POINT(106 59)')),
|
||||||
|
('a', 'x', 'z', GeomFromText('POINT(17 57)')),
|
||||||
|
('v', 'h', 'x', GeomFromText('POINT(170 13)')),
|
||||||
|
('t', 's', 'u', GeomFromText('POINT(84 18)')),
|
||||||
|
('z', 'z', 'f', GeomFromText('POINT(250 197)')),
|
||||||
|
('l', 'z', 't', GeomFromText('POINT(59 80)')),
|
||||||
|
('j', 'g', 's', GeomFromText('POINT(54 26)')),
|
||||||
|
('g', 'v', 'm', GeomFromText('POINT(89 98)')),
|
||||||
|
('q', 'v', 'b', GeomFromText('POINT(39 240)')),
|
||||||
|
('x', 'k', 'v', GeomFromText('POINT(246 207)')),
|
||||||
|
('k', 'u', 'i', GeomFromText('POINT(105 111)')),
|
||||||
|
('w', 'z', 's', GeomFromText('POINT(235 8)')),
|
||||||
|
('d', 'd', 'd', GeomFromText('POINT(105 4)')),
|
||||||
|
('c', 'z', 'q', GeomFromText('POINT(13 140)')),
|
||||||
|
('m', 'k', 'i', GeomFromText('POINT(208 120)')),
|
||||||
|
('g', 'a', 'g', GeomFromText('POINT(9 182)')),
|
||||||
|
('z', 'j', 'r', GeomFromText('POINT(149 153)')),
|
||||||
|
('h', 'f', 'g', GeomFromText('POINT(81 236)')),
|
||||||
|
('m', 'e', 'q', GeomFromText('POINT(209 215)')),
|
||||||
|
('c', 'h', 'y', GeomFromText('POINT(235 70)')),
|
||||||
|
('i', 'e', 'g', GeomFromText('POINT(138 26)')),
|
||||||
|
('m', 't', 'u', GeomFromText('POINT(119 237)')),
|
||||||
|
('o', 'w', 's', GeomFromText('POINT(193 166)')),
|
||||||
|
('f', 'm', 'q', GeomFromText('POINT(85 96)')),
|
||||||
|
('x', 'l', 'x', GeomFromText('POINT(58 115)')),
|
||||||
|
('x', 'q', 'u', GeomFromText('POINT(108 210)')),
|
||||||
|
('b', 'h', 'i', GeomFromText('POINT(250 139)')),
|
||||||
|
('y', 'd', 'x', GeomFromText('POINT(199 135)')),
|
||||||
|
('w', 'h', 'p', GeomFromText('POINT(247 233)')),
|
||||||
|
('p', 'z', 't', GeomFromText('POINT(148 249)')),
|
||||||
|
('q', 'a', 'u', GeomFromText('POINT(174 78)')),
|
||||||
|
('v', 't', 'm', GeomFromText('POINT(70 228)')),
|
||||||
|
('t', 'n', 'f', GeomFromText('POINT(123 2)')),
|
||||||
|
('x', 't', 'b', GeomFromText('POINT(35 50)')),
|
||||||
|
('r', 'j', 'f', GeomFromText('POINT(200 51)')),
|
||||||
|
('s', 'q', 'o', GeomFromText('POINT(23 184)')),
|
||||||
|
('u', 'v', 'z', GeomFromText('POINT(7 113)')),
|
||||||
|
('v', 'u', 'l', GeomFromText('POINT(145 190)')),
|
||||||
|
('o', 'k', 'i', GeomFromText('POINT(161 122)')),
|
||||||
|
('l', 'y', 'e', GeomFromText('POINT(17 232)')),
|
||||||
|
('t', 'b', 'e', GeomFromText('POINT(120 50)')),
|
||||||
|
('e', 's', 'u', GeomFromText('POINT(254 1)')),
|
||||||
|
('d', 'd', 'u', GeomFromText('POINT(167 140)')),
|
||||||
|
('o', 'b', 'x', GeomFromText('POINT(186 237)')),
|
||||||
|
('m', 's', 's', GeomFromText('POINT(172 149)')),
|
||||||
|
('t', 'y', 'a', GeomFromText('POINT(149 85)')),
|
||||||
|
('x', 't', 'r', GeomFromText('POINT(10 165)')),
|
||||||
|
('g', 'c', 'e', GeomFromText('POINT(95 165)')),
|
||||||
|
('e', 'e', 'z', GeomFromText('POINT(98 65)')),
|
||||||
|
('f', 'v', 'i', GeomFromText('POINT(149 144)')),
|
||||||
|
('o', 'p', 'm', GeomFromText('POINT(233 67)')),
|
||||||
|
('t', 'u', 'b', GeomFromText('POINT(109 215)')),
|
||||||
|
('o', 'o', 'b', GeomFromText('POINT(130 48)')),
|
||||||
|
('e', 'm', 'h', GeomFromText('POINT(88 189)')),
|
||||||
|
('e', 'v', 'y', GeomFromText('POINT(55 29)')),
|
||||||
|
('e', 't', 'm', GeomFromText('POINT(129 55)')),
|
||||||
|
('p', 'p', 'i', GeomFromText('POINT(126 222)')),
|
||||||
|
('c', 'i', 'c', GeomFromText('POINT(19 158)')),
|
||||||
|
('c', 'b', 's', GeomFromText('POINT(13 19)')),
|
||||||
|
('u', 'y', 'a', GeomFromText('POINT(114 5)')),
|
||||||
|
('a', 'o', 'f', GeomFromText('POINT(227 232)')),
|
||||||
|
('t', 'c', 'z', GeomFromText('POINT(63 62)')),
|
||||||
|
('d', 'o', 'k', GeomFromText('POINT(48 228)')),
|
||||||
|
('x', 'c', 'e', GeomFromText('POINT(204 2)')),
|
||||||
|
('e', 'e', 'g', GeomFromText('POINT(125 43)')),
|
||||||
|
('o', 'r', 'f', GeomFromText('POINT(171 140)'));
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(163 157)') where c1 like 'w%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(53 151)') where c1 like 'd%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(96 183)') where c1 like 'r%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(57 91)') where c1 like 'q%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(202 110)') where c1 like 'c%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(120 137)') where c1 like 'w%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(207 147)') where c1 like 'c%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(31 125)') where c1 like 'e%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(27 36)') where c1 like 'r%';
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('b', 'c', 'e', GeomFromText('POINT(41 137)')),
|
||||||
|
('p', 'y', 'k', GeomFromText('POINT(50 22)')),
|
||||||
|
('s', 'c', 'h', GeomFromText('POINT(208 173)')),
|
||||||
|
('x', 'u', 'l', GeomFromText('POINT(199 175)')),
|
||||||
|
('s', 'r', 'h', GeomFromText('POINT(85 192)')),
|
||||||
|
('j', 'k', 'u', GeomFromText('POINT(18 25)')),
|
||||||
|
('p', 'w', 'h', GeomFromText('POINT(152 197)')),
|
||||||
|
('e', 'd', 'c', GeomFromText('POINT(229 3)')),
|
||||||
|
('o', 'x', 'k', GeomFromText('POINT(187 155)')),
|
||||||
|
('o', 'b', 'k', GeomFromText('POINT(208 150)')),
|
||||||
|
('d', 'a', 'j', GeomFromText('POINT(70 87)')),
|
||||||
|
('f', 'e', 'k', GeomFromText('POINT(156 96)')),
|
||||||
|
('u', 'y', 'p', GeomFromText('POINT(239 193)')),
|
||||||
|
('n', 'v', 'p', GeomFromText('POINT(223 98)')),
|
||||||
|
('z', 'j', 'r', GeomFromText('POINT(87 89)')),
|
||||||
|
('h', 'x', 'x', GeomFromText('POINT(92 0)')),
|
||||||
|
('r', 'v', 'r', GeomFromText('POINT(159 139)')),
|
||||||
|
('v', 'g', 'g', GeomFromText('POINT(16 229)')),
|
||||||
|
('z', 'k', 'u', GeomFromText('POINT(99 52)')),
|
||||||
|
('p', 'p', 'o', GeomFromText('POINT(105 125)')),
|
||||||
|
('w', 'h', 'y', GeomFromText('POINT(105 154)')),
|
||||||
|
('v', 'y', 'z', GeomFromText('POINT(134 238)')),
|
||||||
|
('x', 'o', 'o', GeomFromText('POINT(178 88)')),
|
||||||
|
('z', 'w', 'd', GeomFromText('POINT(123 60)')),
|
||||||
|
('q', 'f', 'u', GeomFromText('POINT(64 90)')),
|
||||||
|
('s', 'n', 't', GeomFromText('POINT(50 138)')),
|
||||||
|
('v', 'p', 't', GeomFromText('POINT(114 91)')),
|
||||||
|
('a', 'o', 'n', GeomFromText('POINT(78 43)')),
|
||||||
|
('k', 'u', 'd', GeomFromText('POINT(185 161)')),
|
||||||
|
('w', 'd', 'n', GeomFromText('POINT(25 92)')),
|
||||||
|
('k', 'w', 'a', GeomFromText('POINT(59 238)')),
|
||||||
|
('t', 'c', 'f', GeomFromText('POINT(65 87)')),
|
||||||
|
('g', 's', 'p', GeomFromText('POINT(238 126)')),
|
||||||
|
('d', 'n', 'y', GeomFromText('POINT(107 173)')),
|
||||||
|
('l', 'a', 'w', GeomFromText('POINT(125 152)')),
|
||||||
|
('m', 'd', 'j', GeomFromText('POINT(146 53)')),
|
||||||
|
('q', 'm', 'c', GeomFromText('POINT(217 187)')),
|
||||||
|
('i', 'r', 'r', GeomFromText('POINT(6 113)')),
|
||||||
|
('e', 'j', 'b', GeomFromText('POINT(37 83)')),
|
||||||
|
('w', 'w', 'h', GeomFromText('POINT(83 199)')),
|
||||||
|
('k', 'b', 's', GeomFromText('POINT(170 64)')),
|
||||||
|
('s', 'b', 'c', GeomFromText('POINT(163 130)')),
|
||||||
|
('c', 'h', 'a', GeomFromText('POINT(141 3)')),
|
||||||
|
('k', 'j', 'u', GeomFromText('POINT(143 76)')),
|
||||||
|
('r', 'h', 'o', GeomFromText('POINT(243 92)')),
|
||||||
|
('i', 'd', 'b', GeomFromText('POINT(205 13)')),
|
||||||
|
('r', 'y', 'q', GeomFromText('POINT(138 8)')),
|
||||||
|
('m', 'o', 'i', GeomFromText('POINT(36 45)')),
|
||||||
|
('v', 'g', 'm', GeomFromText('POINT(0 40)')),
|
||||||
|
('f', 'e', 'i', GeomFromText('POINT(76 6)')),
|
||||||
|
('c', 'q', 'q', GeomFromText('POINT(115 248)')),
|
||||||
|
('x', 'c', 'i', GeomFromText('POINT(29 74)')),
|
||||||
|
('l', 's', 't', GeomFromText('POINT(83 18)')),
|
||||||
|
('t', 't', 'a', GeomFromText('POINT(26 168)')),
|
||||||
|
('u', 'n', 'x', GeomFromText('POINT(200 110)')),
|
||||||
|
('j', 'b', 'd', GeomFromText('POINT(216 136)')),
|
||||||
|
('s', 'p', 'w', GeomFromText('POINT(38 156)')),
|
||||||
|
('f', 'b', 'v', GeomFromText('POINT(29 186)')),
|
||||||
|
('v', 'e', 'r', GeomFromText('POINT(149 40)')),
|
||||||
|
('v', 't', 'm', GeomFromText('POINT(184 24)')),
|
||||||
|
('y', 'g', 'a', GeomFromText('POINT(219 105)')),
|
||||||
|
('s', 'f', 'i', GeomFromText('POINT(114 130)')),
|
||||||
|
('e', 'q', 'h', GeomFromText('POINT(203 135)')),
|
||||||
|
('h', 'g', 'b', GeomFromText('POINT(9 208)')),
|
||||||
|
('o', 'l', 'r', GeomFromText('POINT(245 79)')),
|
||||||
|
('s', 's', 'v', GeomFromText('POINT(238 198)')),
|
||||||
|
('w', 'w', 'z', GeomFromText('POINT(209 232)')),
|
||||||
|
('v', 'd', 'n', GeomFromText('POINT(30 193)')),
|
||||||
|
('q', 'w', 'k', GeomFromText('POINT(133 18)')),
|
||||||
|
('o', 'h', 'o', GeomFromText('POINT(42 140)')),
|
||||||
|
('f', 'f', 'h', GeomFromText('POINT(145 1)')),
|
||||||
|
('u', 's', 'r', GeomFromText('POINT(70 62)')),
|
||||||
|
('x', 'n', 'q', GeomFromText('POINT(33 86)')),
|
||||||
|
('u', 'p', 'v', GeomFromText('POINT(232 220)')),
|
||||||
|
('z', 'e', 'a', GeomFromText('POINT(130 69)')),
|
||||||
|
('r', 'u', 'z', GeomFromText('POINT(243 241)')),
|
||||||
|
('b', 'n', 't', GeomFromText('POINT(120 12)')),
|
||||||
|
('u', 'f', 's', GeomFromText('POINT(190 212)')),
|
||||||
|
('a', 'd', 'q', GeomFromText('POINT(235 191)')),
|
||||||
|
('f', 'q', 'm', GeomFromText('POINT(176 2)')),
|
||||||
|
('n', 'c', 's', GeomFromText('POINT(218 163)')),
|
||||||
|
('e', 'm', 'h', GeomFromText('POINT(163 108)')),
|
||||||
|
('c', 'f', 'l', GeomFromText('POINT(220 115)')),
|
||||||
|
('c', 'v', 'q', GeomFromText('POINT(66 45)')),
|
||||||
|
('w', 'v', 'x', GeomFromText('POINT(251 220)')),
|
||||||
|
('f', 'w', 'z', GeomFromText('POINT(146 149)')),
|
||||||
|
('h', 'n', 'h', GeomFromText('POINT(148 128)')),
|
||||||
|
('y', 'k', 'v', GeomFromText('POINT(28 110)')),
|
||||||
|
('c', 'x', 'q', GeomFromText('POINT(13 13)')),
|
||||||
|
('e', 'd', 's', GeomFromText('POINT(91 190)')),
|
||||||
|
('c', 'w', 'c', GeomFromText('POINT(10 231)')),
|
||||||
|
('u', 'j', 'n', GeomFromText('POINT(250 21)')),
|
||||||
|
('w', 'n', 'x', GeomFromText('POINT(141 69)')),
|
||||||
|
('f', 'p', 'y', GeomFromText('POINT(228 246)')),
|
||||||
|
('d', 'q', 'f', GeomFromText('POINT(194 22)')),
|
||||||
|
('d', 'z', 'l', GeomFromText('POINT(233 181)')),
|
||||||
|
('c', 'a', 'q', GeomFromText('POINT(183 96)')),
|
||||||
|
('m', 'i', 'd', GeomFromText('POINT(117 226)')),
|
||||||
|
('z', 'y', 'y', GeomFromText('POINT(62 81)')),
|
||||||
|
('g', 'v', 'm', GeomFromText('POINT(66 158)'));
|
||||||
|
SET @@RAND_SEED1=481064922, @@RAND_SEED2=438133497;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=280535103, @@RAND_SEED2=444518646;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=1072017234, @@RAND_SEED2=484203885;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=358851897, @@RAND_SEED2=358495224;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=509031459, @@RAND_SEED2=675962925;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(61 203)') where c1 like 'y%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(202 194)') where c1 like 'f%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(228 18)') where c1 like 'h%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(88 18)') where c1 like 'l%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(176 94)') where c1 like 'e%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(44 47)') where c1 like 'g%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(95 191)') where c1 like 'b%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(179 218)') where c1 like 'y%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(239 40)') where c1 like 'g%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(248 41)') where c1 like 'q%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(167 82)') where c1 like 't%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(13 104)') where c1 like 'u%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(139 84)') where c1 like 'a%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(145 108)') where c1 like 'p%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(147 57)') where c1 like 't%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(217 144)') where c1 like 'n%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(160 224)') where c1 like 'w%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(38 28)') where c1 like 'j%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(104 114)') where c1 like 'q%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(88 19)') where c1 like 'c%';
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('f', 'x', 'p', GeomFromText('POINT(92 181)')),
|
||||||
|
('s', 'i', 'c', GeomFromText('POINT(49 60)')),
|
||||||
|
('c', 'c', 'i', GeomFromText('POINT(7 57)')),
|
||||||
|
('n', 'g', 'k', GeomFromText('POINT(252 105)')),
|
||||||
|
('g', 'b', 'm', GeomFromText('POINT(180 11)')),
|
||||||
|
('u', 'l', 'r', GeomFromText('POINT(32 90)')),
|
||||||
|
('c', 'x', 'e', GeomFromText('POINT(143 24)')),
|
||||||
|
('x', 'u', 'a', GeomFromText('POINT(123 92)')),
|
||||||
|
('s', 'b', 'h', GeomFromText('POINT(190 108)')),
|
||||||
|
('c', 'x', 'b', GeomFromText('POINT(104 100)')),
|
||||||
|
('i', 'd', 't', GeomFromText('POINT(214 104)')),
|
||||||
|
('r', 'w', 'g', GeomFromText('POINT(29 67)')),
|
||||||
|
('b', 'f', 'g', GeomFromText('POINT(149 46)')),
|
||||||
|
('r', 'r', 'd', GeomFromText('POINT(242 196)')),
|
||||||
|
('j', 'l', 'a', GeomFromText('POINT(90 196)')),
|
||||||
|
('e', 't', 'b', GeomFromText('POINT(190 64)')),
|
||||||
|
('l', 'x', 'w', GeomFromText('POINT(250 73)')),
|
||||||
|
('q', 'y', 'r', GeomFromText('POINT(120 182)')),
|
||||||
|
('s', 'j', 'a', GeomFromText('POINT(180 175)')),
|
||||||
|
('n', 'i', 'y', GeomFromText('POINT(124 136)')),
|
||||||
|
('s', 'x', 's', GeomFromText('POINT(176 209)')),
|
||||||
|
('u', 'f', 's', GeomFromText('POINT(215 173)')),
|
||||||
|
('m', 'j', 'x', GeomFromText('POINT(44 140)')),
|
||||||
|
('v', 'g', 'x', GeomFromText('POINT(177 233)')),
|
||||||
|
('u', 't', 'b', GeomFromText('POINT(136 197)')),
|
||||||
|
('f', 'g', 'b', GeomFromText('POINT(10 8)')),
|
||||||
|
('v', 'c', 'j', GeomFromText('POINT(13 81)')),
|
||||||
|
('d', 's', 'q', GeomFromText('POINT(200 100)')),
|
||||||
|
('a', 'p', 'j', GeomFromText('POINT(33 40)')),
|
||||||
|
('i', 'c', 'g', GeomFromText('POINT(168 204)')),
|
||||||
|
('k', 'h', 'i', GeomFromText('POINT(93 243)')),
|
||||||
|
('s', 'b', 's', GeomFromText('POINT(157 13)')),
|
||||||
|
('v', 'l', 'l', GeomFromText('POINT(103 6)')),
|
||||||
|
('r', 'b', 'k', GeomFromText('POINT(244 137)')),
|
||||||
|
('l', 'd', 'r', GeomFromText('POINT(162 254)')),
|
||||||
|
('q', 'b', 'z', GeomFromText('POINT(136 246)')),
|
||||||
|
('x', 'x', 'p', GeomFromText('POINT(120 37)')),
|
||||||
|
('m', 'e', 'z', GeomFromText('POINT(203 167)')),
|
||||||
|
('q', 'n', 'p', GeomFromText('POINT(94 119)')),
|
||||||
|
('b', 'g', 'u', GeomFromText('POINT(93 248)')),
|
||||||
|
('r', 'v', 'v', GeomFromText('POINT(53 88)')),
|
||||||
|
('y', 'a', 'i', GeomFromText('POINT(98 219)')),
|
||||||
|
('a', 's', 'g', GeomFromText('POINT(173 138)')),
|
||||||
|
('c', 'a', 't', GeomFromText('POINT(235 135)')),
|
||||||
|
('q', 'm', 'd', GeomFromText('POINT(224 208)')),
|
||||||
|
('e', 'p', 'k', GeomFromText('POINT(161 238)')),
|
||||||
|
('n', 'g', 'q', GeomFromText('POINT(35 204)')),
|
||||||
|
('t', 't', 'x', GeomFromText('POINT(230 178)')),
|
||||||
|
('w', 'f', 'a', GeomFromText('POINT(150 221)')),
|
||||||
|
('z', 'm', 'z', GeomFromText('POINT(119 42)')),
|
||||||
|
('l', 'j', 's', GeomFromText('POINT(97 96)')),
|
||||||
|
('f', 'z', 'x', GeomFromText('POINT(208 65)')),
|
||||||
|
('i', 'v', 'c', GeomFromText('POINT(145 79)')),
|
||||||
|
('l', 'f', 'k', GeomFromText('POINT(83 234)')),
|
||||||
|
('u', 'a', 's', GeomFromText('POINT(250 49)')),
|
||||||
|
('o', 'k', 'p', GeomFromText('POINT(46 50)')),
|
||||||
|
('d', 'e', 'z', GeomFromText('POINT(30 198)')),
|
||||||
|
('r', 'r', 'l', GeomFromText('POINT(78 189)')),
|
||||||
|
('y', 'l', 'f', GeomFromText('POINT(188 132)')),
|
||||||
|
('d', 'q', 'm', GeomFromText('POINT(247 107)')),
|
||||||
|
('p', 'j', 'n', GeomFromText('POINT(148 227)')),
|
||||||
|
('b', 'o', 'i', GeomFromText('POINT(172 25)')),
|
||||||
|
('e', 'v', 'd', GeomFromText('POINT(94 248)')),
|
||||||
|
('q', 'd', 'f', GeomFromText('POINT(15 29)')),
|
||||||
|
('w', 'b', 'b', GeomFromText('POINT(74 111)')),
|
||||||
|
('g', 'q', 'f', GeomFromText('POINT(107 215)')),
|
||||||
|
('o', 'h', 'r', GeomFromText('POINT(25 168)')),
|
||||||
|
('u', 't', 'w', GeomFromText('POINT(251 188)')),
|
||||||
|
('h', 's', 'w', GeomFromText('POINT(254 247)')),
|
||||||
|
('f', 'f', 'b', GeomFromText('POINT(166 103)'));
|
||||||
|
SET @@RAND_SEED1=866613816, @@RAND_SEED2=92289615;
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('l', 'c', 'l', GeomFromText('POINT(202 98)')),
|
||||||
|
('k', 'c', 'b', GeomFromText('POINT(46 206)')),
|
||||||
|
('r', 'y', 'm', GeomFromText('POINT(74 140)')),
|
||||||
|
('y', 'z', 'd', GeomFromText('POINT(200 160)')),
|
||||||
|
('s', 'y', 's', GeomFromText('POINT(156 205)')),
|
||||||
|
('u', 'v', 'p', GeomFromText('POINT(86 82)')),
|
||||||
|
('j', 's', 's', GeomFromText('POINT(91 233)')),
|
||||||
|
('x', 'j', 'f', GeomFromText('POINT(3 14)')),
|
||||||
|
('l', 'z', 'v', GeomFromText('POINT(123 156)')),
|
||||||
|
('h', 'i', 'o', GeomFromText('POINT(145 229)')),
|
||||||
|
('o', 'r', 'd', GeomFromText('POINT(15 22)')),
|
||||||
|
('f', 'x', 't', GeomFromText('POINT(21 60)')),
|
||||||
|
('t', 'g', 'h', GeomFromText('POINT(50 153)')),
|
||||||
|
('g', 'u', 'b', GeomFromText('POINT(82 85)')),
|
||||||
|
('v', 'a', 'p', GeomFromText('POINT(231 178)')),
|
||||||
|
('n', 'v', 'o', GeomFromText('POINT(183 25)')),
|
||||||
|
('j', 'n', 'm', GeomFromText('POINT(50 144)')),
|
||||||
|
('e', 'f', 'i', GeomFromText('POINT(46 16)')),
|
||||||
|
('d', 'w', 'a', GeomFromText('POINT(66 6)')),
|
||||||
|
('f', 'x', 'a', GeomFromText('POINT(107 197)')),
|
||||||
|
('m', 'o', 'a', GeomFromText('POINT(142 80)')),
|
||||||
|
('q', 'l', 'g', GeomFromText('POINT(251 23)')),
|
||||||
|
('c', 's', 's', GeomFromText('POINT(158 43)')),
|
||||||
|
('y', 'd', 'o', GeomFromText('POINT(196 228)')),
|
||||||
|
('d', 'p', 'l', GeomFromText('POINT(107 5)')),
|
||||||
|
('h', 'a', 'b', GeomFromText('POINT(183 166)')),
|
||||||
|
('m', 'w', 'p', GeomFromText('POINT(19 59)')),
|
||||||
|
('b', 'y', 'o', GeomFromText('POINT(178 30)')),
|
||||||
|
('x', 'w', 'i', GeomFromText('POINT(168 94)')),
|
||||||
|
('t', 'k', 'z', GeomFromText('POINT(171 5)')),
|
||||||
|
('r', 'm', 'a', GeomFromText('POINT(222 19)')),
|
||||||
|
('u', 'v', 'e', GeomFromText('POINT(224 80)')),
|
||||||
|
('q', 'r', 'k', GeomFromText('POINT(212 218)')),
|
||||||
|
('d', 'p', 'j', GeomFromText('POINT(169 7)')),
|
||||||
|
('d', 'r', 'v', GeomFromText('POINT(193 23)')),
|
||||||
|
('n', 'y', 'y', GeomFromText('POINT(130 178)')),
|
||||||
|
('m', 'z', 'r', GeomFromText('POINT(81 200)')),
|
||||||
|
('j', 'e', 'w', GeomFromText('POINT(145 239)')),
|
||||||
|
('v', 'h', 'x', GeomFromText('POINT(24 105)')),
|
||||||
|
('z', 'm', 'a', GeomFromText('POINT(175 129)')),
|
||||||
|
('b', 'c', 'v', GeomFromText('POINT(213 10)')),
|
||||||
|
('t', 't', 'u', GeomFromText('POINT(2 129)')),
|
||||||
|
('r', 's', 'v', GeomFromText('POINT(209 192)')),
|
||||||
|
('x', 'p', 'g', GeomFromText('POINT(43 63)')),
|
||||||
|
('t', 'e', 'u', GeomFromText('POINT(139 210)')),
|
||||||
|
('l', 'e', 't', GeomFromText('POINT(245 148)')),
|
||||||
|
('a', 'i', 'k', GeomFromText('POINT(167 195)')),
|
||||||
|
('m', 'o', 'h', GeomFromText('POINT(206 120)')),
|
||||||
|
('g', 'z', 's', GeomFromText('POINT(169 240)')),
|
||||||
|
('z', 'u', 's', GeomFromText('POINT(202 120)')),
|
||||||
|
('i', 'b', 'a', GeomFromText('POINT(216 18)')),
|
||||||
|
('w', 'y', 'g', GeomFromText('POINT(119 236)')),
|
||||||
|
('h', 'y', 'p', GeomFromText('POINT(161 24)'));
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(33 100)') where c1 like 't%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(41 46)') where c1 like 'f%';
|
||||||
|
CHECK TABLE t1 EXTENDED;
|
||||||
|
Table Op Msg_type Msg_text
|
||||||
|
test.t1 check status OK
|
||||||
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1(foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
|
CREATE TABLE t1(foo GEOMETRY NOT NULL, SPATIAL INDEX(foo) );
|
||||||
INSERT INTO t1(foo) VALUES (NULL);
|
INSERT INTO t1(foo) VALUES (NULL);
|
||||||
ERROR 23000: Column 'foo' cannot be null
|
ERROR 23000: Column 'foo' cannot be null
|
||||||
|
@ -803,6 +803,24 @@ CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
|
|||||||
SELECT * FROM tm1;
|
SELECT * FROM tm1;
|
||||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||||
DROP TABLE t1, tm1;
|
DROP TABLE t1, tm1;
|
||||||
|
CREATE TABLE t1(c1 INT) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
|
||||||
|
INSERT DELAYED INTO t2 VALUES(1);
|
||||||
|
ERROR HY000: Table storage engine for 't2' doesn't have this option
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(1));
|
||||||
|
CREATE TABLE m1 LIKE t1;
|
||||||
|
ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
|
||||||
|
SELECT * FROM m1;
|
||||||
|
c1
|
||||||
|
DROP TABLE t1, m1;
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(4), c2 TINYINT, c3 TINYINT, c4 TINYINT,
|
||||||
|
c5 TINYINT, c6 TINYINT, c7 TINYINT, c8 TINYINT, c9 TINYINT);
|
||||||
|
CREATE TABLE m1 LIKE t1;
|
||||||
|
ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
|
||||||
|
SELECT * FROM m1;
|
||||||
|
c1 c2 c3 c4 c5 c6 c7 c8 c9
|
||||||
|
DROP TABLE t1, m1;
|
||||||
create table t1 (b bit(1));
|
create table t1 (b bit(1));
|
||||||
create table t2 (b bit(1));
|
create table t2 (b bit(1));
|
||||||
create table tm (b bit(1)) engine = merge union = (t1,t2);
|
create table tm (b bit(1)) engine = merge union = (t1,t2);
|
||||||
|
46
mysql-test/r/ndb_single_user.result
Normal file
46
mysql-test/r/ndb_single_user.result
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
use test;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
||||||
|
create table t1 (a int key, b int unique, c int) engine ndb;
|
||||||
|
ERROR HY000: Can't create table './test/t1.frm' (errno: 155)
|
||||||
|
create table t1 (a int key, b int unique, c int) engine ndb;
|
||||||
|
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
|
||||||
|
create table t2 as select * from t1;
|
||||||
|
select * from t1 where a = 1;
|
||||||
|
a b c
|
||||||
|
1 1 0
|
||||||
|
select * from t1 where b = 4;
|
||||||
|
a b c
|
||||||
|
4 4 0
|
||||||
|
select * from t1 where a > 4 order by a;
|
||||||
|
a b c
|
||||||
|
5 5 0
|
||||||
|
6 6 0
|
||||||
|
7 7 0
|
||||||
|
8 8 0
|
||||||
|
9 9 0
|
||||||
|
10 10 0
|
||||||
|
update t1 set b=102 where a = 2;
|
||||||
|
update t1 set b=103 where b = 3;
|
||||||
|
update t1 set b=b+100;
|
||||||
|
update t1 set b=b+100 where a > 7;
|
||||||
|
delete from t1;
|
||||||
|
insert into t1 select * from t2;
|
||||||
|
drop table t1;
|
||||||
|
ERROR 42S02: Unknown table 't1'
|
||||||
|
create index new_index on t1 (c);
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
select * from t1 where a = 1;
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
select * from t1 where b = 4;
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
update t1 set b=102 where a = 2;
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
update t1 set b=103 where b = 3;
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
update t1 set b=b+100;
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
update t1 set b=b+100 where a > 7;
|
||||||
|
ERROR 42S02: Table 'test.t1' doesn't exist
|
||||||
|
drop table t1;
|
@ -234,3 +234,11 @@ SET @@session.auto_increment_offset=
|
|||||||
SET @@session.auto_increment_increment=
|
SET @@session.auto_increment_increment=
|
||||||
@bug20830_old_session_auto_increment_increment;
|
@bug20830_old_session_auto_increment_increment;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#26238 - inserted delayed always inserts 0 for BIT columns
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(a BIT);
|
||||||
|
INSERT DELAYED INTO t1 VALUES(1);
|
||||||
|
FLUSH TABLE t1;
|
||||||
|
SELECT HEX(a) FROM t1;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -12,3 +12,4 @@
|
|||||||
|
|
||||||
ndb_load : Bug#17233
|
ndb_load : Bug#17233
|
||||||
user_limits : Bug#23921 random failure of user_limits.test
|
user_limits : Bug#23921 random failure of user_limits.test
|
||||||
|
ndb_single_user : Bug#27021 Error codes in mysqld in single user mode varies
|
||||||
|
@ -241,6 +241,562 @@ INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,1)));
|
|||||||
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,0)));
|
INSERT INTO t1 (foo) VALUES (PointFromWKB(POINT(0,0)));
|
||||||
SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#25673 - spatial index corruption, error 126 incorrect key file for table
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (id bigint(12) unsigned NOT NULL auto_increment,
|
||||||
|
c2 varchar(15) collate utf8_bin default NULL,
|
||||||
|
c1 varchar(15) collate utf8_bin default NULL,
|
||||||
|
c3 varchar(10) collate utf8_bin default NULL,
|
||||||
|
spatial_point point NOT NULL,
|
||||||
|
PRIMARY KEY(id),
|
||||||
|
SPATIAL KEY (spatial_point(32))
|
||||||
|
)ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
|
||||||
|
#
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('y', 's', 'j', GeomFromText('POINT(167 74)')),
|
||||||
|
('r', 'n', 'd', GeomFromText('POINT(215 118)')),
|
||||||
|
('g', 'n', 'e', GeomFromText('POINT(203 98)')),
|
||||||
|
('h', 'd', 'd', GeomFromText('POINT(54 193)')),
|
||||||
|
('r', 'x', 'y', GeomFromText('POINT(47 69)')),
|
||||||
|
('t', 'q', 'r', GeomFromText('POINT(109 42)')),
|
||||||
|
('a', 'z', 'd', GeomFromText('POINT(0 154)')),
|
||||||
|
('x', 'v', 'o', GeomFromText('POINT(174 131)')),
|
||||||
|
('b', 'r', 'a', GeomFromText('POINT(114 253)')),
|
||||||
|
('x', 'z', 'i', GeomFromText('POINT(163 21)')),
|
||||||
|
('w', 'p', 'i', GeomFromText('POINT(42 102)')),
|
||||||
|
('g', 'j', 'j', GeomFromText('POINT(170 133)')),
|
||||||
|
('m', 'g', 'n', GeomFromText('POINT(28 22)')),
|
||||||
|
('b', 'z', 'h', GeomFromText('POINT(174 28)')),
|
||||||
|
('q', 'k', 'f', GeomFromText('POINT(233 73)')),
|
||||||
|
('w', 'w', 'a', GeomFromText('POINT(124 200)')),
|
||||||
|
('t', 'j', 'w', GeomFromText('POINT(252 101)')),
|
||||||
|
('d', 'r', 'd', GeomFromText('POINT(98 18)')),
|
||||||
|
('w', 'o', 'y', GeomFromText('POINT(165 31)')),
|
||||||
|
('y', 'h', 't', GeomFromText('POINT(14 220)')),
|
||||||
|
('d', 'p', 'u', GeomFromText('POINT(223 196)')),
|
||||||
|
('g', 'y', 'g', GeomFromText('POINT(207 96)')),
|
||||||
|
('x', 'm', 'n', GeomFromText('POINT(214 3)')),
|
||||||
|
('g', 'v', 'e', GeomFromText('POINT(140 205)')),
|
||||||
|
('g', 'm', 'm', GeomFromText('POINT(10 236)')),
|
||||||
|
('i', 'r', 'j', GeomFromText('POINT(137 228)')),
|
||||||
|
('w', 's', 'p', GeomFromText('POINT(115 6)')),
|
||||||
|
('o', 'n', 'k', GeomFromText('POINT(158 129)')),
|
||||||
|
('j', 'h', 'l', GeomFromText('POINT(129 72)')),
|
||||||
|
('f', 'x', 'l', GeomFromText('POINT(139 207)')),
|
||||||
|
('u', 'd', 'n', GeomFromText('POINT(125 109)')),
|
||||||
|
('b', 'a', 'z', GeomFromText('POINT(30 32)')),
|
||||||
|
('m', 'h', 'o', GeomFromText('POINT(251 251)')),
|
||||||
|
('f', 'r', 'd', GeomFromText('POINT(243 211)')),
|
||||||
|
('b', 'd', 'r', GeomFromText('POINT(232 80)')),
|
||||||
|
('g', 'k', 'v', GeomFromText('POINT(15 100)')),
|
||||||
|
('i', 'f', 'c', GeomFromText('POINT(109 66)')),
|
||||||
|
('r', 't', 'j', GeomFromText('POINT(178 6)')),
|
||||||
|
('y', 'n', 'f', GeomFromText('POINT(233 211)')),
|
||||||
|
('f', 'y', 'm', GeomFromText('POINT(99 16)')),
|
||||||
|
('z', 'q', 'l', GeomFromText('POINT(39 49)')),
|
||||||
|
('j', 'c', 'r', GeomFromText('POINT(75 187)')),
|
||||||
|
('c', 'y', 'y', GeomFromText('POINT(246 253)')),
|
||||||
|
('w', 'u', 'd', GeomFromText('POINT(56 190)')),
|
||||||
|
('n', 'q', 'm', GeomFromText('POINT(73 149)')),
|
||||||
|
('d', 'y', 'a', GeomFromText('POINT(134 6)')),
|
||||||
|
('z', 's', 'w', GeomFromText('POINT(216 225)')),
|
||||||
|
('d', 'u', 'k', GeomFromText('POINT(132 70)')),
|
||||||
|
('f', 'v', 't', GeomFromText('POINT(187 141)')),
|
||||||
|
('r', 'r', 'a', GeomFromText('POINT(152 39)')),
|
||||||
|
('y', 'p', 'o', GeomFromText('POINT(45 27)')),
|
||||||
|
('p', 'n', 'm', GeomFromText('POINT(228 148)')),
|
||||||
|
('e', 'g', 'e', GeomFromText('POINT(88 81)')),
|
||||||
|
('m', 'a', 'h', GeomFromText('POINT(35 29)')),
|
||||||
|
('m', 'h', 'f', GeomFromText('POINT(30 71)')),
|
||||||
|
('h', 'k', 'i', GeomFromText('POINT(244 78)')),
|
||||||
|
('z', 'v', 'd', GeomFromText('POINT(241 38)')),
|
||||||
|
('q', 'l', 'j', GeomFromText('POINT(13 71)')),
|
||||||
|
('s', 'p', 'g', GeomFromText('POINT(108 38)')),
|
||||||
|
('q', 's', 'j', GeomFromText('POINT(92 101)')),
|
||||||
|
('l', 'h', 'g', GeomFromText('POINT(120 78)')),
|
||||||
|
('w', 't', 'b', GeomFromText('POINT(193 109)')),
|
||||||
|
('b', 's', 's', GeomFromText('POINT(223 211)')),
|
||||||
|
('w', 'w', 'y', GeomFromText('POINT(122 42)')),
|
||||||
|
('q', 'c', 'c', GeomFromText('POINT(104 102)')),
|
||||||
|
('w', 'g', 'n', GeomFromText('POINT(213 120)')),
|
||||||
|
('p', 'q', 'a', GeomFromText('POINT(247 148)')),
|
||||||
|
('c', 'z', 'e', GeomFromText('POINT(18 106)')),
|
||||||
|
('z', 'u', 'n', GeomFromText('POINT(70 133)')),
|
||||||
|
('j', 'n', 'x', GeomFromText('POINT(232 13)')),
|
||||||
|
('e', 'h', 'f', GeomFromText('POINT(22 135)')),
|
||||||
|
('w', 'l', 'f', GeomFromText('POINT(9 180)')),
|
||||||
|
('a', 'v', 'q', GeomFromText('POINT(163 228)')),
|
||||||
|
('i', 'z', 'o', GeomFromText('POINT(180 100)')),
|
||||||
|
('e', 'c', 'l', GeomFromText('POINT(182 231)')),
|
||||||
|
('c', 'k', 'o', GeomFromText('POINT(19 60)')),
|
||||||
|
('q', 'f', 'p', GeomFromText('POINT(79 95)')),
|
||||||
|
('m', 'd', 'r', GeomFromText('POINT(3 127)')),
|
||||||
|
('m', 'e', 't', GeomFromText('POINT(136 154)')),
|
||||||
|
('w', 'w', 'w', GeomFromText('POINT(102 15)')),
|
||||||
|
('l', 'n', 'q', GeomFromText('POINT(71 196)')),
|
||||||
|
('p', 'k', 'c', GeomFromText('POINT(47 139)')),
|
||||||
|
('j', 'o', 'r', GeomFromText('POINT(177 128)')),
|
||||||
|
('j', 'q', 'a', GeomFromText('POINT(170 6)')),
|
||||||
|
('b', 'a', 'o', GeomFromText('POINT(63 211)')),
|
||||||
|
('g', 's', 'o', GeomFromText('POINT(144 251)')),
|
||||||
|
('w', 'u', 'w', GeomFromText('POINT(221 214)')),
|
||||||
|
('g', 'a', 'm', GeomFromText('POINT(14 102)')),
|
||||||
|
('u', 'q', 'z', GeomFromText('POINT(86 200)')),
|
||||||
|
('k', 'a', 'm', GeomFromText('POINT(144 222)')),
|
||||||
|
('j', 'u', 'r', GeomFromText('POINT(216 142)')),
|
||||||
|
('q', 'k', 'v', GeomFromText('POINT(121 236)')),
|
||||||
|
('p', 'o', 'r', GeomFromText('POINT(108 102)')),
|
||||||
|
('b', 'd', 'x', GeomFromText('POINT(127 198)')),
|
||||||
|
('k', 's', 'a', GeomFromText('POINT(2 150)')),
|
||||||
|
('f', 'm', 'f', GeomFromText('POINT(160 191)')),
|
||||||
|
('q', 'y', 'x', GeomFromText('POINT(98 111)')),
|
||||||
|
('o', 'f', 'm', GeomFromText('POINT(232 218)')),
|
||||||
|
('c', 'w', 'j', GeomFromText('POINT(156 165)')),
|
||||||
|
('s', 'q', 'v', GeomFromText('POINT(98 161)'));
|
||||||
|
SET @@RAND_SEED1=692635050, @@RAND_SEED2=297339954;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=159925977, @@RAND_SEED2=942570618;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=328169745, @@RAND_SEED2=410451954;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=178507359, @@RAND_SEED2=332493072;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=1034033013, @@RAND_SEED2=558966507;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(230 9)') where c1 like 'y%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(95 35)') where c1 like 'j%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(93 99)') where c1 like 'a%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(19 81)') where c1 like 'r%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(20 177)') where c1 like 'h%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(221 193)') where c1 like 'u%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(195 205)') where c1 like 'd%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(15 213)') where c1 like 'u%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(214 63)') where c1 like 'n%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(243 171)') where c1 like 'c%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(198 82)') where c1 like 'y%';
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('f', 'y', 'p', GeomFromText('POINT(109 235)')),
|
||||||
|
('b', 'e', 'v', GeomFromText('POINT(20 48)')),
|
||||||
|
('i', 'u', 'f', GeomFromText('POINT(15 55)')),
|
||||||
|
('o', 'r', 'z', GeomFromText('POINT(105 64)')),
|
||||||
|
('a', 'p', 'a', GeomFromText('POINT(142 236)')),
|
||||||
|
('g', 'i', 'k', GeomFromText('POINT(10 49)')),
|
||||||
|
('x', 'z', 'x', GeomFromText('POINT(192 200)')),
|
||||||
|
('c', 'v', 'r', GeomFromText('POINT(94 168)')),
|
||||||
|
('y', 'z', 'e', GeomFromText('POINT(141 51)')),
|
||||||
|
('h', 'm', 'd', GeomFromText('POINT(35 251)')),
|
||||||
|
('v', 'm', 'q', GeomFromText('POINT(44 90)')),
|
||||||
|
('j', 'l', 'z', GeomFromText('POINT(67 237)')),
|
||||||
|
('i', 'v', 'a', GeomFromText('POINT(75 14)')),
|
||||||
|
('b', 'q', 't', GeomFromText('POINT(153 33)')),
|
||||||
|
('e', 'm', 'a', GeomFromText('POINT(247 49)')),
|
||||||
|
('l', 'y', 'g', GeomFromText('POINT(56 203)')),
|
||||||
|
('v', 'o', 'r', GeomFromText('POINT(90 54)')),
|
||||||
|
('r', 'n', 'd', GeomFromText('POINT(135 83)')),
|
||||||
|
('j', 't', 'u', GeomFromText('POINT(174 239)')),
|
||||||
|
('u', 'n', 'g', GeomFromText('POINT(104 191)')),
|
||||||
|
('p', 'q', 'y', GeomFromText('POINT(63 171)')),
|
||||||
|
('o', 'q', 'p', GeomFromText('POINT(192 103)')),
|
||||||
|
('f', 'x', 'e', GeomFromText('POINT(244 30)')),
|
||||||
|
('n', 'x', 'c', GeomFromText('POINT(92 103)')),
|
||||||
|
('r', 'q', 'z', GeomFromText('POINT(166 20)')),
|
||||||
|
('s', 'a', 'j', GeomFromText('POINT(137 205)')),
|
||||||
|
('z', 't', 't', GeomFromText('POINT(99 134)')),
|
||||||
|
('o', 'm', 'j', GeomFromText('POINT(217 3)')),
|
||||||
|
('n', 'h', 'j', GeomFromText('POINT(211 17)')),
|
||||||
|
('v', 'v', 'a', GeomFromText('POINT(41 137)')),
|
||||||
|
('q', 'o', 'j', GeomFromText('POINT(5 92)')),
|
||||||
|
('z', 'y', 'e', GeomFromText('POINT(175 212)')),
|
||||||
|
('j', 'z', 'h', GeomFromText('POINT(224 194)')),
|
||||||
|
('a', 'g', 'm', GeomFromText('POINT(31 119)')),
|
||||||
|
('p', 'c', 'f', GeomFromText('POINT(17 221)')),
|
||||||
|
('t', 'h', 'k', GeomFromText('POINT(26 203)')),
|
||||||
|
('u', 'w', 'p', GeomFromText('POINT(47 185)')),
|
||||||
|
('z', 'a', 'c', GeomFromText('POINT(61 133)')),
|
||||||
|
('u', 'k', 'a', GeomFromText('POINT(210 115)')),
|
||||||
|
('k', 'f', 'h', GeomFromText('POINT(125 113)')),
|
||||||
|
('t', 'v', 'y', GeomFromText('POINT(12 239)')),
|
||||||
|
('u', 'v', 'd', GeomFromText('POINT(90 24)')),
|
||||||
|
('m', 'y', 'w', GeomFromText('POINT(25 243)')),
|
||||||
|
('d', 'n', 'g', GeomFromText('POINT(122 92)')),
|
||||||
|
('z', 'm', 'f', GeomFromText('POINT(235 110)')),
|
||||||
|
('q', 'd', 'f', GeomFromText('POINT(233 217)')),
|
||||||
|
('a', 'v', 'u', GeomFromText('POINT(69 59)')),
|
||||||
|
('x', 'k', 'p', GeomFromText('POINT(240 14)')),
|
||||||
|
('i', 'v', 'r', GeomFromText('POINT(154 42)')),
|
||||||
|
('w', 'h', 'l', GeomFromText('POINT(178 156)')),
|
||||||
|
('d', 'h', 'n', GeomFromText('POINT(65 157)')),
|
||||||
|
('c', 'k', 'z', GeomFromText('POINT(62 33)')),
|
||||||
|
('e', 'l', 'w', GeomFromText('POINT(162 1)')),
|
||||||
|
('r', 'f', 'i', GeomFromText('POINT(127 71)')),
|
||||||
|
('q', 'm', 'c', GeomFromText('POINT(63 118)')),
|
||||||
|
('c', 'h', 'u', GeomFromText('POINT(205 203)')),
|
||||||
|
('d', 't', 'p', GeomFromText('POINT(234 87)')),
|
||||||
|
('s', 'g', 'h', GeomFromText('POINT(149 34)')),
|
||||||
|
('o', 'b', 'q', GeomFromText('POINT(159 179)')),
|
||||||
|
('k', 'u', 'f', GeomFromText('POINT(202 254)')),
|
||||||
|
('u', 'f', 'g', GeomFromText('POINT(70 15)')),
|
||||||
|
('x', 's', 'b', GeomFromText('POINT(25 181)')),
|
||||||
|
('s', 'c', 'g', GeomFromText('POINT(252 17)')),
|
||||||
|
('a', 'c', 'f', GeomFromText('POINT(89 67)')),
|
||||||
|
('r', 'e', 'q', GeomFromText('POINT(55 54)')),
|
||||||
|
('f', 'i', 'k', GeomFromText('POINT(178 230)')),
|
||||||
|
('p', 'e', 'l', GeomFromText('POINT(198 28)')),
|
||||||
|
('w', 'o', 'd', GeomFromText('POINT(204 189)')),
|
||||||
|
('c', 'a', 'g', GeomFromText('POINT(230 178)')),
|
||||||
|
('r', 'o', 'e', GeomFromText('POINT(61 116)')),
|
||||||
|
('w', 'a', 'a', GeomFromText('POINT(178 237)')),
|
||||||
|
('v', 'd', 'e', GeomFromText('POINT(70 85)')),
|
||||||
|
('k', 'c', 'e', GeomFromText('POINT(147 118)')),
|
||||||
|
('d', 'q', 't', GeomFromText('POINT(218 77)')),
|
||||||
|
('k', 'g', 'f', GeomFromText('POINT(192 113)')),
|
||||||
|
('w', 'n', 'e', GeomFromText('POINT(92 124)')),
|
||||||
|
('r', 'm', 'q', GeomFromText('POINT(130 65)')),
|
||||||
|
('o', 'r', 'r', GeomFromText('POINT(174 233)')),
|
||||||
|
('k', 'n', 't', GeomFromText('POINT(175 147)')),
|
||||||
|
('q', 'm', 'r', GeomFromText('POINT(18 208)')),
|
||||||
|
('l', 'd', 'i', GeomFromText('POINT(13 104)')),
|
||||||
|
('w', 'o', 'y', GeomFromText('POINT(207 39)')),
|
||||||
|
('p', 'u', 'o', GeomFromText('POINT(114 31)')),
|
||||||
|
('y', 'a', 'p', GeomFromText('POINT(106 59)')),
|
||||||
|
('a', 'x', 'z', GeomFromText('POINT(17 57)')),
|
||||||
|
('v', 'h', 'x', GeomFromText('POINT(170 13)')),
|
||||||
|
('t', 's', 'u', GeomFromText('POINT(84 18)')),
|
||||||
|
('z', 'z', 'f', GeomFromText('POINT(250 197)')),
|
||||||
|
('l', 'z', 't', GeomFromText('POINT(59 80)')),
|
||||||
|
('j', 'g', 's', GeomFromText('POINT(54 26)')),
|
||||||
|
('g', 'v', 'm', GeomFromText('POINT(89 98)')),
|
||||||
|
('q', 'v', 'b', GeomFromText('POINT(39 240)')),
|
||||||
|
('x', 'k', 'v', GeomFromText('POINT(246 207)')),
|
||||||
|
('k', 'u', 'i', GeomFromText('POINT(105 111)')),
|
||||||
|
('w', 'z', 's', GeomFromText('POINT(235 8)')),
|
||||||
|
('d', 'd', 'd', GeomFromText('POINT(105 4)')),
|
||||||
|
('c', 'z', 'q', GeomFromText('POINT(13 140)')),
|
||||||
|
('m', 'k', 'i', GeomFromText('POINT(208 120)')),
|
||||||
|
('g', 'a', 'g', GeomFromText('POINT(9 182)')),
|
||||||
|
('z', 'j', 'r', GeomFromText('POINT(149 153)')),
|
||||||
|
('h', 'f', 'g', GeomFromText('POINT(81 236)')),
|
||||||
|
('m', 'e', 'q', GeomFromText('POINT(209 215)')),
|
||||||
|
('c', 'h', 'y', GeomFromText('POINT(235 70)')),
|
||||||
|
('i', 'e', 'g', GeomFromText('POINT(138 26)')),
|
||||||
|
('m', 't', 'u', GeomFromText('POINT(119 237)')),
|
||||||
|
('o', 'w', 's', GeomFromText('POINT(193 166)')),
|
||||||
|
('f', 'm', 'q', GeomFromText('POINT(85 96)')),
|
||||||
|
('x', 'l', 'x', GeomFromText('POINT(58 115)')),
|
||||||
|
('x', 'q', 'u', GeomFromText('POINT(108 210)')),
|
||||||
|
('b', 'h', 'i', GeomFromText('POINT(250 139)')),
|
||||||
|
('y', 'd', 'x', GeomFromText('POINT(199 135)')),
|
||||||
|
('w', 'h', 'p', GeomFromText('POINT(247 233)')),
|
||||||
|
('p', 'z', 't', GeomFromText('POINT(148 249)')),
|
||||||
|
('q', 'a', 'u', GeomFromText('POINT(174 78)')),
|
||||||
|
('v', 't', 'm', GeomFromText('POINT(70 228)')),
|
||||||
|
('t', 'n', 'f', GeomFromText('POINT(123 2)')),
|
||||||
|
('x', 't', 'b', GeomFromText('POINT(35 50)')),
|
||||||
|
('r', 'j', 'f', GeomFromText('POINT(200 51)')),
|
||||||
|
('s', 'q', 'o', GeomFromText('POINT(23 184)')),
|
||||||
|
('u', 'v', 'z', GeomFromText('POINT(7 113)')),
|
||||||
|
('v', 'u', 'l', GeomFromText('POINT(145 190)')),
|
||||||
|
('o', 'k', 'i', GeomFromText('POINT(161 122)')),
|
||||||
|
('l', 'y', 'e', GeomFromText('POINT(17 232)')),
|
||||||
|
('t', 'b', 'e', GeomFromText('POINT(120 50)')),
|
||||||
|
('e', 's', 'u', GeomFromText('POINT(254 1)')),
|
||||||
|
('d', 'd', 'u', GeomFromText('POINT(167 140)')),
|
||||||
|
('o', 'b', 'x', GeomFromText('POINT(186 237)')),
|
||||||
|
('m', 's', 's', GeomFromText('POINT(172 149)')),
|
||||||
|
('t', 'y', 'a', GeomFromText('POINT(149 85)')),
|
||||||
|
('x', 't', 'r', GeomFromText('POINT(10 165)')),
|
||||||
|
('g', 'c', 'e', GeomFromText('POINT(95 165)')),
|
||||||
|
('e', 'e', 'z', GeomFromText('POINT(98 65)')),
|
||||||
|
('f', 'v', 'i', GeomFromText('POINT(149 144)')),
|
||||||
|
('o', 'p', 'm', GeomFromText('POINT(233 67)')),
|
||||||
|
('t', 'u', 'b', GeomFromText('POINT(109 215)')),
|
||||||
|
('o', 'o', 'b', GeomFromText('POINT(130 48)')),
|
||||||
|
('e', 'm', 'h', GeomFromText('POINT(88 189)')),
|
||||||
|
('e', 'v', 'y', GeomFromText('POINT(55 29)')),
|
||||||
|
('e', 't', 'm', GeomFromText('POINT(129 55)')),
|
||||||
|
('p', 'p', 'i', GeomFromText('POINT(126 222)')),
|
||||||
|
('c', 'i', 'c', GeomFromText('POINT(19 158)')),
|
||||||
|
('c', 'b', 's', GeomFromText('POINT(13 19)')),
|
||||||
|
('u', 'y', 'a', GeomFromText('POINT(114 5)')),
|
||||||
|
('a', 'o', 'f', GeomFromText('POINT(227 232)')),
|
||||||
|
('t', 'c', 'z', GeomFromText('POINT(63 62)')),
|
||||||
|
('d', 'o', 'k', GeomFromText('POINT(48 228)')),
|
||||||
|
('x', 'c', 'e', GeomFromText('POINT(204 2)')),
|
||||||
|
('e', 'e', 'g', GeomFromText('POINT(125 43)')),
|
||||||
|
('o', 'r', 'f', GeomFromText('POINT(171 140)'));
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(163 157)') where c1 like 'w%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(53 151)') where c1 like 'd%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(96 183)') where c1 like 'r%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(57 91)') where c1 like 'q%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(202 110)') where c1 like 'c%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(120 137)') where c1 like 'w%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(207 147)') where c1 like 'c%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(31 125)') where c1 like 'e%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(27 36)') where c1 like 'r%';
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('b', 'c', 'e', GeomFromText('POINT(41 137)')),
|
||||||
|
('p', 'y', 'k', GeomFromText('POINT(50 22)')),
|
||||||
|
('s', 'c', 'h', GeomFromText('POINT(208 173)')),
|
||||||
|
('x', 'u', 'l', GeomFromText('POINT(199 175)')),
|
||||||
|
('s', 'r', 'h', GeomFromText('POINT(85 192)')),
|
||||||
|
('j', 'k', 'u', GeomFromText('POINT(18 25)')),
|
||||||
|
('p', 'w', 'h', GeomFromText('POINT(152 197)')),
|
||||||
|
('e', 'd', 'c', GeomFromText('POINT(229 3)')),
|
||||||
|
('o', 'x', 'k', GeomFromText('POINT(187 155)')),
|
||||||
|
('o', 'b', 'k', GeomFromText('POINT(208 150)')),
|
||||||
|
('d', 'a', 'j', GeomFromText('POINT(70 87)')),
|
||||||
|
('f', 'e', 'k', GeomFromText('POINT(156 96)')),
|
||||||
|
('u', 'y', 'p', GeomFromText('POINT(239 193)')),
|
||||||
|
('n', 'v', 'p', GeomFromText('POINT(223 98)')),
|
||||||
|
('z', 'j', 'r', GeomFromText('POINT(87 89)')),
|
||||||
|
('h', 'x', 'x', GeomFromText('POINT(92 0)')),
|
||||||
|
('r', 'v', 'r', GeomFromText('POINT(159 139)')),
|
||||||
|
('v', 'g', 'g', GeomFromText('POINT(16 229)')),
|
||||||
|
('z', 'k', 'u', GeomFromText('POINT(99 52)')),
|
||||||
|
('p', 'p', 'o', GeomFromText('POINT(105 125)')),
|
||||||
|
('w', 'h', 'y', GeomFromText('POINT(105 154)')),
|
||||||
|
('v', 'y', 'z', GeomFromText('POINT(134 238)')),
|
||||||
|
('x', 'o', 'o', GeomFromText('POINT(178 88)')),
|
||||||
|
('z', 'w', 'd', GeomFromText('POINT(123 60)')),
|
||||||
|
('q', 'f', 'u', GeomFromText('POINT(64 90)')),
|
||||||
|
('s', 'n', 't', GeomFromText('POINT(50 138)')),
|
||||||
|
('v', 'p', 't', GeomFromText('POINT(114 91)')),
|
||||||
|
('a', 'o', 'n', GeomFromText('POINT(78 43)')),
|
||||||
|
('k', 'u', 'd', GeomFromText('POINT(185 161)')),
|
||||||
|
('w', 'd', 'n', GeomFromText('POINT(25 92)')),
|
||||||
|
('k', 'w', 'a', GeomFromText('POINT(59 238)')),
|
||||||
|
('t', 'c', 'f', GeomFromText('POINT(65 87)')),
|
||||||
|
('g', 's', 'p', GeomFromText('POINT(238 126)')),
|
||||||
|
('d', 'n', 'y', GeomFromText('POINT(107 173)')),
|
||||||
|
('l', 'a', 'w', GeomFromText('POINT(125 152)')),
|
||||||
|
('m', 'd', 'j', GeomFromText('POINT(146 53)')),
|
||||||
|
('q', 'm', 'c', GeomFromText('POINT(217 187)')),
|
||||||
|
('i', 'r', 'r', GeomFromText('POINT(6 113)')),
|
||||||
|
('e', 'j', 'b', GeomFromText('POINT(37 83)')),
|
||||||
|
('w', 'w', 'h', GeomFromText('POINT(83 199)')),
|
||||||
|
('k', 'b', 's', GeomFromText('POINT(170 64)')),
|
||||||
|
('s', 'b', 'c', GeomFromText('POINT(163 130)')),
|
||||||
|
('c', 'h', 'a', GeomFromText('POINT(141 3)')),
|
||||||
|
('k', 'j', 'u', GeomFromText('POINT(143 76)')),
|
||||||
|
('r', 'h', 'o', GeomFromText('POINT(243 92)')),
|
||||||
|
('i', 'd', 'b', GeomFromText('POINT(205 13)')),
|
||||||
|
('r', 'y', 'q', GeomFromText('POINT(138 8)')),
|
||||||
|
('m', 'o', 'i', GeomFromText('POINT(36 45)')),
|
||||||
|
('v', 'g', 'm', GeomFromText('POINT(0 40)')),
|
||||||
|
('f', 'e', 'i', GeomFromText('POINT(76 6)')),
|
||||||
|
('c', 'q', 'q', GeomFromText('POINT(115 248)')),
|
||||||
|
('x', 'c', 'i', GeomFromText('POINT(29 74)')),
|
||||||
|
('l', 's', 't', GeomFromText('POINT(83 18)')),
|
||||||
|
('t', 't', 'a', GeomFromText('POINT(26 168)')),
|
||||||
|
('u', 'n', 'x', GeomFromText('POINT(200 110)')),
|
||||||
|
('j', 'b', 'd', GeomFromText('POINT(216 136)')),
|
||||||
|
('s', 'p', 'w', GeomFromText('POINT(38 156)')),
|
||||||
|
('f', 'b', 'v', GeomFromText('POINT(29 186)')),
|
||||||
|
('v', 'e', 'r', GeomFromText('POINT(149 40)')),
|
||||||
|
('v', 't', 'm', GeomFromText('POINT(184 24)')),
|
||||||
|
('y', 'g', 'a', GeomFromText('POINT(219 105)')),
|
||||||
|
('s', 'f', 'i', GeomFromText('POINT(114 130)')),
|
||||||
|
('e', 'q', 'h', GeomFromText('POINT(203 135)')),
|
||||||
|
('h', 'g', 'b', GeomFromText('POINT(9 208)')),
|
||||||
|
('o', 'l', 'r', GeomFromText('POINT(245 79)')),
|
||||||
|
('s', 's', 'v', GeomFromText('POINT(238 198)')),
|
||||||
|
('w', 'w', 'z', GeomFromText('POINT(209 232)')),
|
||||||
|
('v', 'd', 'n', GeomFromText('POINT(30 193)')),
|
||||||
|
('q', 'w', 'k', GeomFromText('POINT(133 18)')),
|
||||||
|
('o', 'h', 'o', GeomFromText('POINT(42 140)')),
|
||||||
|
('f', 'f', 'h', GeomFromText('POINT(145 1)')),
|
||||||
|
('u', 's', 'r', GeomFromText('POINT(70 62)')),
|
||||||
|
('x', 'n', 'q', GeomFromText('POINT(33 86)')),
|
||||||
|
('u', 'p', 'v', GeomFromText('POINT(232 220)')),
|
||||||
|
('z', 'e', 'a', GeomFromText('POINT(130 69)')),
|
||||||
|
('r', 'u', 'z', GeomFromText('POINT(243 241)')),
|
||||||
|
('b', 'n', 't', GeomFromText('POINT(120 12)')),
|
||||||
|
('u', 'f', 's', GeomFromText('POINT(190 212)')),
|
||||||
|
('a', 'd', 'q', GeomFromText('POINT(235 191)')),
|
||||||
|
('f', 'q', 'm', GeomFromText('POINT(176 2)')),
|
||||||
|
('n', 'c', 's', GeomFromText('POINT(218 163)')),
|
||||||
|
('e', 'm', 'h', GeomFromText('POINT(163 108)')),
|
||||||
|
('c', 'f', 'l', GeomFromText('POINT(220 115)')),
|
||||||
|
('c', 'v', 'q', GeomFromText('POINT(66 45)')),
|
||||||
|
('w', 'v', 'x', GeomFromText('POINT(251 220)')),
|
||||||
|
('f', 'w', 'z', GeomFromText('POINT(146 149)')),
|
||||||
|
('h', 'n', 'h', GeomFromText('POINT(148 128)')),
|
||||||
|
('y', 'k', 'v', GeomFromText('POINT(28 110)')),
|
||||||
|
('c', 'x', 'q', GeomFromText('POINT(13 13)')),
|
||||||
|
('e', 'd', 's', GeomFromText('POINT(91 190)')),
|
||||||
|
('c', 'w', 'c', GeomFromText('POINT(10 231)')),
|
||||||
|
('u', 'j', 'n', GeomFromText('POINT(250 21)')),
|
||||||
|
('w', 'n', 'x', GeomFromText('POINT(141 69)')),
|
||||||
|
('f', 'p', 'y', GeomFromText('POINT(228 246)')),
|
||||||
|
('d', 'q', 'f', GeomFromText('POINT(194 22)')),
|
||||||
|
('d', 'z', 'l', GeomFromText('POINT(233 181)')),
|
||||||
|
('c', 'a', 'q', GeomFromText('POINT(183 96)')),
|
||||||
|
('m', 'i', 'd', GeomFromText('POINT(117 226)')),
|
||||||
|
('z', 'y', 'y', GeomFromText('POINT(62 81)')),
|
||||||
|
('g', 'v', 'm', GeomFromText('POINT(66 158)'));
|
||||||
|
SET @@RAND_SEED1=481064922, @@RAND_SEED2=438133497;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=280535103, @@RAND_SEED2=444518646;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=1072017234, @@RAND_SEED2=484203885;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=358851897, @@RAND_SEED2=358495224;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
SET @@RAND_SEED1=509031459, @@RAND_SEED2=675962925;
|
||||||
|
DELETE FROM t1 ORDER BY RAND() LIMIT 10;
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(61 203)') where c1 like 'y%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(202 194)') where c1 like 'f%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(228 18)') where c1 like 'h%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(88 18)') where c1 like 'l%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(176 94)') where c1 like 'e%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(44 47)') where c1 like 'g%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(95 191)') where c1 like 'b%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(179 218)') where c1 like 'y%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(239 40)') where c1 like 'g%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(248 41)') where c1 like 'q%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(167 82)') where c1 like 't%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(13 104)') where c1 like 'u%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(139 84)') where c1 like 'a%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(145 108)') where c1 like 'p%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(147 57)') where c1 like 't%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(217 144)') where c1 like 'n%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(160 224)') where c1 like 'w%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(38 28)') where c1 like 'j%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(104 114)') where c1 like 'q%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(88 19)') where c1 like 'c%';
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('f', 'x', 'p', GeomFromText('POINT(92 181)')),
|
||||||
|
('s', 'i', 'c', GeomFromText('POINT(49 60)')),
|
||||||
|
('c', 'c', 'i', GeomFromText('POINT(7 57)')),
|
||||||
|
('n', 'g', 'k', GeomFromText('POINT(252 105)')),
|
||||||
|
('g', 'b', 'm', GeomFromText('POINT(180 11)')),
|
||||||
|
('u', 'l', 'r', GeomFromText('POINT(32 90)')),
|
||||||
|
('c', 'x', 'e', GeomFromText('POINT(143 24)')),
|
||||||
|
('x', 'u', 'a', GeomFromText('POINT(123 92)')),
|
||||||
|
('s', 'b', 'h', GeomFromText('POINT(190 108)')),
|
||||||
|
('c', 'x', 'b', GeomFromText('POINT(104 100)')),
|
||||||
|
('i', 'd', 't', GeomFromText('POINT(214 104)')),
|
||||||
|
('r', 'w', 'g', GeomFromText('POINT(29 67)')),
|
||||||
|
('b', 'f', 'g', GeomFromText('POINT(149 46)')),
|
||||||
|
('r', 'r', 'd', GeomFromText('POINT(242 196)')),
|
||||||
|
('j', 'l', 'a', GeomFromText('POINT(90 196)')),
|
||||||
|
('e', 't', 'b', GeomFromText('POINT(190 64)')),
|
||||||
|
('l', 'x', 'w', GeomFromText('POINT(250 73)')),
|
||||||
|
('q', 'y', 'r', GeomFromText('POINT(120 182)')),
|
||||||
|
('s', 'j', 'a', GeomFromText('POINT(180 175)')),
|
||||||
|
('n', 'i', 'y', GeomFromText('POINT(124 136)')),
|
||||||
|
('s', 'x', 's', GeomFromText('POINT(176 209)')),
|
||||||
|
('u', 'f', 's', GeomFromText('POINT(215 173)')),
|
||||||
|
('m', 'j', 'x', GeomFromText('POINT(44 140)')),
|
||||||
|
('v', 'g', 'x', GeomFromText('POINT(177 233)')),
|
||||||
|
('u', 't', 'b', GeomFromText('POINT(136 197)')),
|
||||||
|
('f', 'g', 'b', GeomFromText('POINT(10 8)')),
|
||||||
|
('v', 'c', 'j', GeomFromText('POINT(13 81)')),
|
||||||
|
('d', 's', 'q', GeomFromText('POINT(200 100)')),
|
||||||
|
('a', 'p', 'j', GeomFromText('POINT(33 40)')),
|
||||||
|
('i', 'c', 'g', GeomFromText('POINT(168 204)')),
|
||||||
|
('k', 'h', 'i', GeomFromText('POINT(93 243)')),
|
||||||
|
('s', 'b', 's', GeomFromText('POINT(157 13)')),
|
||||||
|
('v', 'l', 'l', GeomFromText('POINT(103 6)')),
|
||||||
|
('r', 'b', 'k', GeomFromText('POINT(244 137)')),
|
||||||
|
('l', 'd', 'r', GeomFromText('POINT(162 254)')),
|
||||||
|
('q', 'b', 'z', GeomFromText('POINT(136 246)')),
|
||||||
|
('x', 'x', 'p', GeomFromText('POINT(120 37)')),
|
||||||
|
('m', 'e', 'z', GeomFromText('POINT(203 167)')),
|
||||||
|
('q', 'n', 'p', GeomFromText('POINT(94 119)')),
|
||||||
|
('b', 'g', 'u', GeomFromText('POINT(93 248)')),
|
||||||
|
('r', 'v', 'v', GeomFromText('POINT(53 88)')),
|
||||||
|
('y', 'a', 'i', GeomFromText('POINT(98 219)')),
|
||||||
|
('a', 's', 'g', GeomFromText('POINT(173 138)')),
|
||||||
|
('c', 'a', 't', GeomFromText('POINT(235 135)')),
|
||||||
|
('q', 'm', 'd', GeomFromText('POINT(224 208)')),
|
||||||
|
('e', 'p', 'k', GeomFromText('POINT(161 238)')),
|
||||||
|
('n', 'g', 'q', GeomFromText('POINT(35 204)')),
|
||||||
|
('t', 't', 'x', GeomFromText('POINT(230 178)')),
|
||||||
|
('w', 'f', 'a', GeomFromText('POINT(150 221)')),
|
||||||
|
('z', 'm', 'z', GeomFromText('POINT(119 42)')),
|
||||||
|
('l', 'j', 's', GeomFromText('POINT(97 96)')),
|
||||||
|
('f', 'z', 'x', GeomFromText('POINT(208 65)')),
|
||||||
|
('i', 'v', 'c', GeomFromText('POINT(145 79)')),
|
||||||
|
('l', 'f', 'k', GeomFromText('POINT(83 234)')),
|
||||||
|
('u', 'a', 's', GeomFromText('POINT(250 49)')),
|
||||||
|
('o', 'k', 'p', GeomFromText('POINT(46 50)')),
|
||||||
|
('d', 'e', 'z', GeomFromText('POINT(30 198)')),
|
||||||
|
('r', 'r', 'l', GeomFromText('POINT(78 189)')),
|
||||||
|
('y', 'l', 'f', GeomFromText('POINT(188 132)')),
|
||||||
|
('d', 'q', 'm', GeomFromText('POINT(247 107)')),
|
||||||
|
('p', 'j', 'n', GeomFromText('POINT(148 227)')),
|
||||||
|
('b', 'o', 'i', GeomFromText('POINT(172 25)')),
|
||||||
|
('e', 'v', 'd', GeomFromText('POINT(94 248)')),
|
||||||
|
('q', 'd', 'f', GeomFromText('POINT(15 29)')),
|
||||||
|
('w', 'b', 'b', GeomFromText('POINT(74 111)')),
|
||||||
|
('g', 'q', 'f', GeomFromText('POINT(107 215)')),
|
||||||
|
('o', 'h', 'r', GeomFromText('POINT(25 168)')),
|
||||||
|
('u', 't', 'w', GeomFromText('POINT(251 188)')),
|
||||||
|
('h', 's', 'w', GeomFromText('POINT(254 247)')),
|
||||||
|
('f', 'f', 'b', GeomFromText('POINT(166 103)'));
|
||||||
|
SET @@RAND_SEED1=866613816, @@RAND_SEED2=92289615;
|
||||||
|
INSERT INTO t1 (c2, c1, c3, spatial_point) VALUES
|
||||||
|
('l', 'c', 'l', GeomFromText('POINT(202 98)')),
|
||||||
|
('k', 'c', 'b', GeomFromText('POINT(46 206)')),
|
||||||
|
('r', 'y', 'm', GeomFromText('POINT(74 140)')),
|
||||||
|
('y', 'z', 'd', GeomFromText('POINT(200 160)')),
|
||||||
|
('s', 'y', 's', GeomFromText('POINT(156 205)')),
|
||||||
|
('u', 'v', 'p', GeomFromText('POINT(86 82)')),
|
||||||
|
('j', 's', 's', GeomFromText('POINT(91 233)')),
|
||||||
|
('x', 'j', 'f', GeomFromText('POINT(3 14)')),
|
||||||
|
('l', 'z', 'v', GeomFromText('POINT(123 156)')),
|
||||||
|
('h', 'i', 'o', GeomFromText('POINT(145 229)')),
|
||||||
|
('o', 'r', 'd', GeomFromText('POINT(15 22)')),
|
||||||
|
('f', 'x', 't', GeomFromText('POINT(21 60)')),
|
||||||
|
('t', 'g', 'h', GeomFromText('POINT(50 153)')),
|
||||||
|
('g', 'u', 'b', GeomFromText('POINT(82 85)')),
|
||||||
|
('v', 'a', 'p', GeomFromText('POINT(231 178)')),
|
||||||
|
('n', 'v', 'o', GeomFromText('POINT(183 25)')),
|
||||||
|
('j', 'n', 'm', GeomFromText('POINT(50 144)')),
|
||||||
|
('e', 'f', 'i', GeomFromText('POINT(46 16)')),
|
||||||
|
('d', 'w', 'a', GeomFromText('POINT(66 6)')),
|
||||||
|
('f', 'x', 'a', GeomFromText('POINT(107 197)')),
|
||||||
|
('m', 'o', 'a', GeomFromText('POINT(142 80)')),
|
||||||
|
('q', 'l', 'g', GeomFromText('POINT(251 23)')),
|
||||||
|
('c', 's', 's', GeomFromText('POINT(158 43)')),
|
||||||
|
('y', 'd', 'o', GeomFromText('POINT(196 228)')),
|
||||||
|
('d', 'p', 'l', GeomFromText('POINT(107 5)')),
|
||||||
|
('h', 'a', 'b', GeomFromText('POINT(183 166)')),
|
||||||
|
('m', 'w', 'p', GeomFromText('POINT(19 59)')),
|
||||||
|
('b', 'y', 'o', GeomFromText('POINT(178 30)')),
|
||||||
|
('x', 'w', 'i', GeomFromText('POINT(168 94)')),
|
||||||
|
('t', 'k', 'z', GeomFromText('POINT(171 5)')),
|
||||||
|
('r', 'm', 'a', GeomFromText('POINT(222 19)')),
|
||||||
|
('u', 'v', 'e', GeomFromText('POINT(224 80)')),
|
||||||
|
('q', 'r', 'k', GeomFromText('POINT(212 218)')),
|
||||||
|
('d', 'p', 'j', GeomFromText('POINT(169 7)')),
|
||||||
|
('d', 'r', 'v', GeomFromText('POINT(193 23)')),
|
||||||
|
('n', 'y', 'y', GeomFromText('POINT(130 178)')),
|
||||||
|
('m', 'z', 'r', GeomFromText('POINT(81 200)')),
|
||||||
|
('j', 'e', 'w', GeomFromText('POINT(145 239)')),
|
||||||
|
('v', 'h', 'x', GeomFromText('POINT(24 105)')),
|
||||||
|
('z', 'm', 'a', GeomFromText('POINT(175 129)')),
|
||||||
|
('b', 'c', 'v', GeomFromText('POINT(213 10)')),
|
||||||
|
('t', 't', 'u', GeomFromText('POINT(2 129)')),
|
||||||
|
('r', 's', 'v', GeomFromText('POINT(209 192)')),
|
||||||
|
('x', 'p', 'g', GeomFromText('POINT(43 63)')),
|
||||||
|
('t', 'e', 'u', GeomFromText('POINT(139 210)')),
|
||||||
|
('l', 'e', 't', GeomFromText('POINT(245 148)')),
|
||||||
|
('a', 'i', 'k', GeomFromText('POINT(167 195)')),
|
||||||
|
('m', 'o', 'h', GeomFromText('POINT(206 120)')),
|
||||||
|
('g', 'z', 's', GeomFromText('POINT(169 240)')),
|
||||||
|
('z', 'u', 's', GeomFromText('POINT(202 120)')),
|
||||||
|
('i', 'b', 'a', GeomFromText('POINT(216 18)')),
|
||||||
|
('w', 'y', 'g', GeomFromText('POINT(119 236)')),
|
||||||
|
('h', 'y', 'p', GeomFromText('POINT(161 24)'));
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(33 100)') where c1 like 't%';
|
||||||
|
UPDATE t1 set spatial_point=GeomFromText('POINT(41 46)') where c1 like 'f%';
|
||||||
|
CHECK TABLE t1 EXTENDED;
|
||||||
|
DROP TABLE t1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -430,6 +430,32 @@ CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
|
|||||||
SELECT * FROM tm1;
|
SELECT * FROM tm1;
|
||||||
DROP TABLE t1, tm1;
|
DROP TABLE t1, tm1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#26464 - insert delayed + update + merge = corruption
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(c1 INT) ENGINE=MyISAM;
|
||||||
|
CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
|
||||||
|
--error 1031
|
||||||
|
INSERT DELAYED INTO t2 VALUES(1);
|
||||||
|
DROP TABLE t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG#26881 - Large MERGE tables report incorrect specification when no
|
||||||
|
# differences in tables
|
||||||
|
#
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(1));
|
||||||
|
CREATE TABLE m1 LIKE t1;
|
||||||
|
ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
|
||||||
|
SELECT * FROM m1;
|
||||||
|
DROP TABLE t1, m1;
|
||||||
|
|
||||||
|
CREATE TABLE t1(c1 VARCHAR(4), c2 TINYINT, c3 TINYINT, c4 TINYINT,
|
||||||
|
c5 TINYINT, c6 TINYINT, c7 TINYINT, c8 TINYINT, c9 TINYINT);
|
||||||
|
CREATE TABLE m1 LIKE t1;
|
||||||
|
ALTER TABLE m1 ENGINE=MERGE UNION=(t1);
|
||||||
|
SELECT * FROM m1;
|
||||||
|
DROP TABLE t1, m1;
|
||||||
|
|
||||||
# End of 4.1 tests
|
# End of 4.1 tests
|
||||||
|
|
||||||
#
|
#
|
||||||
|
84
mysql-test/t/ndb_single_user.test
Normal file
84
mysql-test/t/ndb_single_user.test
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
-- source include/have_ndb.inc
|
||||||
|
-- source include/have_multi_ndb.inc
|
||||||
|
-- source include/ndb_default_cluster.inc
|
||||||
|
-- source include/not_embedded.inc
|
||||||
|
|
||||||
|
--disable_warnings
|
||||||
|
use test;
|
||||||
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9,t10;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
# operations allowed while cluster is in single user mode
|
||||||
|
|
||||||
|
--connection server1
|
||||||
|
--let $node_id= `SHOW STATUS LIKE 'Ndb_cluster_node_id'`
|
||||||
|
--disable_query_log
|
||||||
|
--eval set @node_id= SUBSTRING('$node_id', 20)+0
|
||||||
|
--enable_query_log
|
||||||
|
--let $node_id= `SELECT @node_id`
|
||||||
|
--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "enter single user mode $node_id" >> $NDB_TOOLS_OUTPUT
|
||||||
|
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" --single-user >> $NDB_TOOLS_OUTPUT
|
||||||
|
|
||||||
|
# verify that we are indeed in single user mode
|
||||||
|
--connection server2
|
||||||
|
--error 1005
|
||||||
|
create table t1 (a int key, b int unique, c int) engine ndb;
|
||||||
|
|
||||||
|
# test some sql on first mysqld
|
||||||
|
--connection server1
|
||||||
|
create table t1 (a int key, b int unique, c int) engine ndb;
|
||||||
|
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
|
||||||
|
create table t2 as select * from t1;
|
||||||
|
# read with pk
|
||||||
|
select * from t1 where a = 1;
|
||||||
|
# read with unique index
|
||||||
|
select * from t1 where b = 4;
|
||||||
|
# read with ordered index
|
||||||
|
select * from t1 where a > 4 order by a;
|
||||||
|
# update with pk
|
||||||
|
update t1 set b=102 where a = 2;
|
||||||
|
# update with unique index
|
||||||
|
update t1 set b=103 where b = 3;
|
||||||
|
# update with full table scan
|
||||||
|
update t1 set b=b+100;
|
||||||
|
# update with ordered insex scan
|
||||||
|
update t1 set b=b+100 where a > 7;
|
||||||
|
# delete with full table scan
|
||||||
|
delete from t1;
|
||||||
|
insert into t1 select * from t2;
|
||||||
|
|
||||||
|
# test some sql on other mysqld
|
||||||
|
--connection server2
|
||||||
|
--error 1051
|
||||||
|
drop table t1;
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
create index new_index on t1 (c);
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
insert into t1 values (1,1,0),(2,2,0),(3,3,0),(4,4,0),(5,5,0),(6,6,0),(7,7,0),(8,8,0),(9,9,0),(10,10,0);
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
select * from t1 where a = 1;
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
select * from t1 where b = 4;
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
update t1 set b=102 where a = 2;
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
update t1 set b=103 where b = 3;
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
update t1 set b=b+100;
|
||||||
|
--error 1146
|
||||||
|
#--error 1296
|
||||||
|
update t1 set b=b+100 where a > 7;
|
||||||
|
|
||||||
|
--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "exit single user mode" >> $NDB_TOOLS_OUTPUT
|
||||||
|
--exec $NDB_TOOLS_DIR/ndb_waiter --no-defaults >> $NDB_TOOLS_OUTPUT
|
||||||
|
|
||||||
|
# cleanup
|
||||||
|
--connection server1
|
||||||
|
drop table t1;
|
@ -39,7 +39,7 @@ ADD_LIBRARY(mysys array.c charset-def.c charset.c checksum.c default.c default_m
|
|||||||
my_mkdir.c my_mmap.c my_net.c my_once.c my_open.c my_pread.c my_pthread.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
|
my_quick.c my_read.c my_realloc.c my_redel.c my_rename.c my_seek.c my_sleep.c
|
||||||
my_static.c my_symlink.c my_symlink2.c my_sync.c my_thr_init.c my_wincond.c
|
my_static.c my_symlink.c my_symlink2.c my_sync.c my_thr_init.c my_wincond.c
|
||||||
my_windac.c my_winsem.c my_winthread.c my_write.c ptr_cmp.c queues.c
|
my_windac.c my_winthread.c my_write.c ptr_cmp.c queues.c
|
||||||
rijndael.c safemalloc.c sha1.c string.c thr_alarm.c thr_lock.c thr_mutex.c
|
rijndael.c safemalloc.c sha1.c string.c thr_alarm.c thr_lock.c thr_mutex.c
|
||||||
thr_rwlock.c tree.c typelib.c base64.c my_memmem.c
|
thr_rwlock.c tree.c typelib.c base64.c my_memmem.c
|
||||||
my_getpagesize.c)
|
my_getpagesize.c)
|
||||||
|
@ -50,7 +50,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \
|
|||||||
my_sync.c my_getopt.c my_mkdir.c \
|
my_sync.c my_getopt.c my_mkdir.c \
|
||||||
default_modify.c default.c \
|
default_modify.c default.c \
|
||||||
my_compress.c checksum.c raid.cc \
|
my_compress.c checksum.c raid.cc \
|
||||||
my_net.c my_semaphore.c my_port.c my_sleep.c \
|
my_net.c my_port.c my_sleep.c \
|
||||||
charset.c charset-def.c my_bitmap.c my_bit.c md5.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_gethostbyname.c rijndael.c my_aes.c sha1.c \
|
||||||
my_handler.c my_netware.c my_largepage.c \
|
my_handler.c my_netware.c my_largepage.c \
|
||||||
@ -58,7 +58,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c my_mmap.c \
|
|||||||
my_windac.c my_access.c base64.c my_libwrap.c
|
my_windac.c my_access.c base64.c my_libwrap.c
|
||||||
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
|
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
|
||||||
thr_mutex.c thr_rwlock.c mf_soundex.c my_conio.c \
|
thr_mutex.c thr_rwlock.c mf_soundex.c my_conio.c \
|
||||||
my_wincond.c my_winsem.c my_winthread.c CMakeLists.txt
|
my_wincond.c my_winthread.c CMakeLists.txt
|
||||||
libmysys_a_LIBADD = @THREAD_LOBJECTS@
|
libmysys_a_LIBADD = @THREAD_LOBJECTS@
|
||||||
# test_dir_DEPENDENCIES= $(LIBRARIES)
|
# test_dir_DEPENDENCIES= $(LIBRARIES)
|
||||||
# testhash_DEPENDENCIES= $(LIBRARIES)
|
# testhash_DEPENDENCIES= $(LIBRARIES)
|
||||||
|
@ -1,103 +0,0 @@
|
|||||||
/* Copyright (C) 2002-2003 MySQL AB
|
|
||||||
|
|
||||||
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 General Public License for more details.
|
|
||||||
|
|
||||||
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 */
|
|
||||||
|
|
||||||
/*
|
|
||||||
Simple implementation of semaphores, needed to compile MySQL on systems
|
|
||||||
that doesn't support semaphores.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <my_global.h>
|
|
||||||
#include <my_semaphore.h>
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
#if !defined(__WIN__) && !defined(HAVE_SEMAPHORE_H) && defined(THREAD)
|
|
||||||
|
|
||||||
int sem_init(sem_t * sem, int pshared, uint value)
|
|
||||||
{
|
|
||||||
sem->count=value;
|
|
||||||
pthread_cond_init(&sem->cond, 0);
|
|
||||||
pthread_mutex_init(&sem->mutex, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sem_destroy(sem_t * sem)
|
|
||||||
{
|
|
||||||
int err1,err2;
|
|
||||||
err1=pthread_cond_destroy(&sem->cond);
|
|
||||||
err2=pthread_mutex_destroy(&sem->mutex);
|
|
||||||
if (err1 || err2)
|
|
||||||
{
|
|
||||||
errno=err1 ? err1 : err2;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sem_wait(sem_t * sem)
|
|
||||||
{
|
|
||||||
if ((errno=pthread_mutex_lock(&sem->mutex)))
|
|
||||||
return -1;
|
|
||||||
while (!sem->count)
|
|
||||||
pthread_cond_wait(&sem->cond, &sem->mutex);
|
|
||||||
if (errno)
|
|
||||||
return -1;
|
|
||||||
sem->count--; /* mutex is locked here */
|
|
||||||
pthread_mutex_unlock(&sem->mutex);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sem_trywait(sem_t * sem)
|
|
||||||
{
|
|
||||||
if ((errno=pthread_mutex_lock(&sem->mutex)))
|
|
||||||
return -1;
|
|
||||||
if (sem->count)
|
|
||||||
sem->count--;
|
|
||||||
else
|
|
||||||
errno=EAGAIN;
|
|
||||||
pthread_mutex_unlock(&sem->mutex);
|
|
||||||
return errno ? -1 : 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int sem_post(sem_t * sem)
|
|
||||||
{
|
|
||||||
if ((errno=pthread_mutex_lock(&sem->mutex)))
|
|
||||||
return -1;
|
|
||||||
sem->count++;
|
|
||||||
pthread_mutex_unlock(&sem->mutex); /* does it really matter what to do */
|
|
||||||
pthread_cond_signal(&sem->cond); /* first: x_unlock or x_signal ? */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sem_post_multiple(sem_t * sem, uint count)
|
|
||||||
{
|
|
||||||
if ((errno=pthread_mutex_lock(&sem->mutex)))
|
|
||||||
return -1;
|
|
||||||
sem->count+=count;
|
|
||||||
pthread_mutex_unlock(&sem->mutex); /* does it really matter what to do */
|
|
||||||
pthread_cond_broadcast(&sem->cond); /* first: x_unlock or x_broadcast ? */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int sem_getvalue(sem_t * sem, uint *sval)
|
|
||||||
{
|
|
||||||
if ((errno=pthread_mutex_lock(&sem->mutex)))
|
|
||||||
return -1;
|
|
||||||
*sval=sem->count;
|
|
||||||
pthread_mutex_unlock(&sem->mutex);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* !defined(__WIN__) && !defined(HAVE_SEMAPHORE_H) && defined(THREAD) */
|
|
@ -1,406 +0,0 @@
|
|||||||
/*
|
|
||||||
* -------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Module: my_semaphore.c (Original: semaphore.c from pthreads library)
|
|
||||||
*
|
|
||||||
* Purpose:
|
|
||||||
* Semaphores aren't actually part of the PThreads standard.
|
|
||||||
* They are defined by the POSIX Standard:
|
|
||||||
*
|
|
||||||
* POSIX 1003.1b-1993 (POSIX.1b)
|
|
||||||
*
|
|
||||||
* -------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Pthreads-win32 - POSIX Threads Library for Win32
|
|
||||||
* Copyright (C) 1998
|
|
||||||
*
|
|
||||||
* 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; either
|
|
||||||
* version 2 of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
NEED_SEM is not used in MySQL and should only be needed under
|
|
||||||
Windows CE.
|
|
||||||
|
|
||||||
The big changes compared to the original version was to not allocate
|
|
||||||
any additional memory in sem_init() but to instead store everthing
|
|
||||||
we need in sem_t.
|
|
||||||
|
|
||||||
TODO:
|
|
||||||
To get HAVE_CREATESEMAPHORE we have to define the struct
|
|
||||||
in my_semaphore.h
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "mysys_priv.h"
|
|
||||||
#ifdef __WIN__
|
|
||||||
#include "my_semaphore.h"
|
|
||||||
#include <errno.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
DOCPUBLIC
|
|
||||||
This function initializes an unnamed semaphore. the
|
|
||||||
initial value of the semaphore is 'value'
|
|
||||||
|
|
||||||
PARAMETERS
|
|
||||||
sem Pointer to an instance of sem_t
|
|
||||||
|
|
||||||
pshared If zero, this semaphore may only be shared between
|
|
||||||
threads in the same process.
|
|
||||||
If nonzero, the semaphore can be shared between
|
|
||||||
processes
|
|
||||||
|
|
||||||
value Initial value of the semaphore counter
|
|
||||||
|
|
||||||
RESULTS
|
|
||||||
0 Successfully created semaphore,
|
|
||||||
-1 Failed, error in errno
|
|
||||||
|
|
||||||
ERRNO
|
|
||||||
EINVAL 'sem' is not a valid semaphore,
|
|
||||||
ENOSPC A required resource has been exhausted,
|
|
||||||
ENOSYS Semaphores are not supported,
|
|
||||||
EPERM The process lacks appropriate privilege
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_init (sem_t *sem, int pshared, unsigned int value)
|
|
||||||
{
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
if (pshared != 0)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
We don't support creating a semaphore that can be shared between
|
|
||||||
processes
|
|
||||||
*/
|
|
||||||
result = EPERM;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
sem->value = value;
|
|
||||||
sem->event = CreateEvent(NULL,
|
|
||||||
FALSE, /* manual reset */
|
|
||||||
FALSE, /* initial state */
|
|
||||||
NULL);
|
|
||||||
if (!sem->event)
|
|
||||||
result = ENOSPC;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (value)
|
|
||||||
SetEvent(sem->event);
|
|
||||||
InitializeCriticalSection(&sem->sem_lock_cs);
|
|
||||||
}
|
|
||||||
#else /* HAVE_CREATESEMAPHORE */
|
|
||||||
*sem = CreateSemaphore (NULL, /* Always NULL */
|
|
||||||
value, /* Initial value */
|
|
||||||
0x7FFFFFFFL, /* Maximum value */
|
|
||||||
NULL); /* Name */
|
|
||||||
if (!*sem)
|
|
||||||
result = ENOSPC;
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
}
|
|
||||||
if (result != 0)
|
|
||||||
{
|
|
||||||
errno = result;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
} /* sem_init */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
DOCPUBLIC
|
|
||||||
This function destroys an unnamed semaphore.
|
|
||||||
|
|
||||||
PARAMETERS
|
|
||||||
sem Pointer to an instance of sem_t
|
|
||||||
|
|
||||||
RESULTS
|
|
||||||
0 Successfully destroyed semaphore,
|
|
||||||
-1 Failed, error in errno
|
|
||||||
ERRNO
|
|
||||||
EINVAL 'sem' is not a valid semaphore,
|
|
||||||
ENOSYS Semaphores are not supported,
|
|
||||||
EBUSY Threads (or processes) are currently blocked on 'sem'
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_destroy (sem_t * sem)
|
|
||||||
{
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
#ifdef EXTRA_DEBUG
|
|
||||||
if (sem == NULL || *sem == NULL)
|
|
||||||
{
|
|
||||||
errno=EINVAL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
#endif /* EXTRA_DEBUG */
|
|
||||||
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
if (! CloseHandle(sem->event))
|
|
||||||
result = EINVAL;
|
|
||||||
else
|
|
||||||
DeleteCriticalSection(&sem->sem_lock_cs);
|
|
||||||
#else /* HAVE_CREATESEMAPHORE */
|
|
||||||
if (!CloseHandle(*sem))
|
|
||||||
result = EINVAL;
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
errno = result;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
*sem=0; /* Safety */
|
|
||||||
return 0;
|
|
||||||
} /* sem_destroy */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
DOCPUBLIC
|
|
||||||
This function tries to wait on a semaphore. If the
|
|
||||||
semaphore value is greater than zero, it decreases
|
|
||||||
its value by one. If the semaphore value is zero, then
|
|
||||||
this function returns immediately with the error EAGAIN
|
|
||||||
|
|
||||||
PARAMETERS
|
|
||||||
sem Pointer to an instance of sem_t
|
|
||||||
|
|
||||||
RESULTS
|
|
||||||
0 Successfully decreased semaphore,
|
|
||||||
-1 Failed, error in errno
|
|
||||||
|
|
||||||
ERRNO
|
|
||||||
EAGAIN The semaphore was already locked,
|
|
||||||
EINVAL 'sem' is not a valid semaphore,
|
|
||||||
ENOSYS Semaphores are not supported,
|
|
||||||
EINTR The function was interrupted by a signal,
|
|
||||||
EDEADLK A deadlock condition was detected.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_trywait(sem_t * sem)
|
|
||||||
{
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
/* not yet implemented! */
|
|
||||||
int errno = EINVAL;
|
|
||||||
return -1;
|
|
||||||
#else /* HAVE_CREATESEMAPHORE */
|
|
||||||
#ifdef EXTRA_DEBUG
|
|
||||||
if (sem == NULL || *sem == NULL)
|
|
||||||
{
|
|
||||||
errno=EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* EXTRA_DEBUG */
|
|
||||||
if (WaitForSingleObject (*sem, 0) == WAIT_TIMEOUT)
|
|
||||||
{
|
|
||||||
errno= EAGAIN;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
|
|
||||||
} /* sem_trywait */
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
|
|
||||||
static void
|
|
||||||
ptw32_decrease_semaphore(sem_t * sem)
|
|
||||||
{
|
|
||||||
EnterCriticalSection(&sem->sem_lock_cs);
|
|
||||||
DBUG_ASSERT(sem->value != 0);
|
|
||||||
sem->value--;
|
|
||||||
if (sem->value != 0)
|
|
||||||
SetEvent(sem->event);
|
|
||||||
LeaveCriticalSection(&sem->sem_lock_cs);
|
|
||||||
}
|
|
||||||
|
|
||||||
static BOOL
|
|
||||||
ptw32_increase_semaphore(sem_t * sem, unsigned int n)
|
|
||||||
{
|
|
||||||
BOOL result=FALSE;
|
|
||||||
|
|
||||||
EnterCriticalSection(&sem->sem_lock_cs);
|
|
||||||
if (sem->value + n > sem->value)
|
|
||||||
{
|
|
||||||
sem->value += n;
|
|
||||||
SetEvent(sem->event);
|
|
||||||
result = TRUE;
|
|
||||||
}
|
|
||||||
LeaveCriticalSection(&sem->sem_lock_cs);
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
------------------------------------------------------
|
|
||||||
DOCPUBLIC
|
|
||||||
This function waits on a semaphore. If the
|
|
||||||
semaphore value is greater than zero, it decreases
|
|
||||||
its value by one. If the semaphore value is zero, then
|
|
||||||
the calling thread (or process) is blocked until it can
|
|
||||||
successfully decrease the value or until interrupted by
|
|
||||||
a signal.
|
|
||||||
|
|
||||||
PARAMETERS
|
|
||||||
sem Pointer to an instance of sem_t
|
|
||||||
|
|
||||||
RESULTS
|
|
||||||
0 Successfully decreased semaphore,
|
|
||||||
-1 Failed, error in errno
|
|
||||||
|
|
||||||
ERRNO
|
|
||||||
EINVAL 'Sem' is not a valid semaphore,
|
|
||||||
ENOSYS Semaphores are not supported,
|
|
||||||
EINTR The function was interrupted by a signal,
|
|
||||||
EDEADLK A deadlock condition was detected.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_wait(sem_t *sem)
|
|
||||||
{
|
|
||||||
int result;
|
|
||||||
|
|
||||||
#ifdef EXTRA_DEBUG
|
|
||||||
if (sem == NULL || *sem == NULL)
|
|
||||||
{
|
|
||||||
errno=EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* EXTRA_DEBUG */
|
|
||||||
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
result=WaitForSingleObject(sem->event, INFINITE);
|
|
||||||
#else
|
|
||||||
result=WaitForSingleObject(*sem, INFINITE);
|
|
||||||
#endif
|
|
||||||
if (result == WAIT_FAILED || result == WAIT_ABANDONED_0)
|
|
||||||
result = EINVAL;
|
|
||||||
else if (result == WAIT_TIMEOUT)
|
|
||||||
result = ETIMEDOUT;
|
|
||||||
else
|
|
||||||
result=0;
|
|
||||||
if (result)
|
|
||||||
{
|
|
||||||
errno = result;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
ptw32_decrease_semaphore(sem);
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
------------------------------------------------------
|
|
||||||
DOCPUBLIC
|
|
||||||
This function posts a wakeup to a semaphore. If there
|
|
||||||
are waiting threads (or processes), one is awakened;
|
|
||||||
otherwise, the semaphore value is incremented by one.
|
|
||||||
|
|
||||||
PARAMETERS
|
|
||||||
sem Pointer to an instance of sem_t
|
|
||||||
|
|
||||||
RESULTS
|
|
||||||
0 Successfully posted semaphore,
|
|
||||||
-1 Failed, error in errno
|
|
||||||
|
|
||||||
ERRNO
|
|
||||||
EINVAL 'sem' is not a valid semaphore,
|
|
||||||
ENOSYS Semaphores are not supported,
|
|
||||||
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_post (sem_t * sem)
|
|
||||||
{
|
|
||||||
#ifdef EXTRA_DEBUG
|
|
||||||
if (sem == NULL || *sem == NULL)
|
|
||||||
{
|
|
||||||
errno=EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* EXTRA_DEBUG */
|
|
||||||
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
if (! ptw32_increase_semaphore(sem, 1))
|
|
||||||
#else /* HAVE_CREATESEMAPHORE */
|
|
||||||
if (! ReleaseSemaphore(*sem, 1, 0))
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
{
|
|
||||||
errno=EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
------------------------------------------------------
|
|
||||||
DOCPUBLIC
|
|
||||||
This function posts multiple wakeups to a semaphore. If there
|
|
||||||
are waiting threads (or processes), n <= count are awakened;
|
|
||||||
the semaphore value is incremented by count - n.
|
|
||||||
|
|
||||||
PARAMETERS
|
|
||||||
sem Pointer to an instance of sem_t
|
|
||||||
count Counter, must be greater than zero.
|
|
||||||
|
|
||||||
RESULTS
|
|
||||||
0 Successfully posted semaphore,
|
|
||||||
-1 Failed, error in errno
|
|
||||||
|
|
||||||
ERRNO
|
|
||||||
EINVAL 'sem' is not a valid semaphore or count is less
|
|
||||||
than or equal to zero.
|
|
||||||
*/
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_post_multiple (sem_t * sem, unsigned int count)
|
|
||||||
{
|
|
||||||
#ifdef EXTRA_DEBUG
|
|
||||||
if (sem == NULL || *sem == NULL || count <= 0)
|
|
||||||
{
|
|
||||||
errno=EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
#endif /* EXTRA_DEBUG */
|
|
||||||
#ifndef HAVE_CREATESEMAPHORE
|
|
||||||
if (! ptw32_increase_semaphore (sem, count))
|
|
||||||
#else /* HAVE_CREATESEMAPHORE */
|
|
||||||
if (! ReleaseSemaphore(*sem, count, 0))
|
|
||||||
#endif /* HAVE_CREATESEMAPHORE */
|
|
||||||
{
|
|
||||||
errno = EINVAL;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
sem_getvalue (sem_t *sem, unsigned int *sval)
|
|
||||||
{
|
|
||||||
errno = ENOSYS;
|
|
||||||
return -1;
|
|
||||||
} /* sem_getvalue */
|
|
||||||
|
|
||||||
#endif /* __WIN__ */
|
|
@ -2910,9 +2910,7 @@ Dbdict::execCREATE_TABLE_REQ(Signal* signal){
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getNodeState().getSingleUserMode() &&
|
if (checkSingleUserMode(signal->getSendersBlockRef()))
|
||||||
(refToNode(signal->getSendersBlockRef()) !=
|
|
||||||
getNodeState().getSingleUserApi()))
|
|
||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
parseRecord.errorCode = CreateTableRef::SingleUser;
|
parseRecord.errorCode = CreateTableRef::SingleUser;
|
||||||
@ -3081,9 +3079,7 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getNodeState().getSingleUserMode() &&
|
if (checkSingleUserMode(signal->getSendersBlockRef()))
|
||||||
(refToNode(signal->getSendersBlockRef()) !=
|
|
||||||
getNodeState().getSingleUserApi()))
|
|
||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
alterTableRef(signal, req, AlterTableRef::SingleUser);
|
alterTableRef(signal, req, AlterTableRef::SingleUser);
|
||||||
@ -5414,9 +5410,7 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(getNodeState().getSingleUserMode() &&
|
if (checkSingleUserMode(signal->getSendersBlockRef()))
|
||||||
(refToNode(signal->getSendersBlockRef()) !=
|
|
||||||
getNodeState().getSingleUserApi()))
|
|
||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
dropTableRef(signal, req, DropTableRef::SingleUser);
|
dropTableRef(signal, req, DropTableRef::SingleUser);
|
||||||
@ -6553,9 +6547,7 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal)
|
|||||||
jam();
|
jam();
|
||||||
tmperr = CreateIndxRef::Busy;
|
tmperr = CreateIndxRef::Busy;
|
||||||
}
|
}
|
||||||
else if(getNodeState().getSingleUserMode() &&
|
else if (checkSingleUserMode(senderRef))
|
||||||
(refToNode(senderRef) !=
|
|
||||||
getNodeState().getSingleUserApi()))
|
|
||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
tmperr = CreateIndxRef::SingleUser;
|
tmperr = CreateIndxRef::SingleUser;
|
||||||
@ -7130,9 +7122,7 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
|
|||||||
jam();
|
jam();
|
||||||
tmperr = DropIndxRef::Busy;
|
tmperr = DropIndxRef::Busy;
|
||||||
}
|
}
|
||||||
else if(getNodeState().getSingleUserMode() &&
|
else if (checkSingleUserMode(senderRef))
|
||||||
(refToNode(senderRef) !=
|
|
||||||
getNodeState().getSingleUserApi()))
|
|
||||||
{
|
{
|
||||||
jam();
|
jam();
|
||||||
tmperr = DropIndxRef::SingleUser;
|
tmperr = DropIndxRef::SingleUser;
|
||||||
@ -10574,4 +10564,20 @@ Dbdict::getMetaAttribute(MetaData::Attribute& attr, const MetaData::Table& table
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
return 1 if all of the below is true
|
||||||
|
a) node in single user mode
|
||||||
|
b) senderRef is not a db node
|
||||||
|
c) senderRef nodeid is not the singleUserApi
|
||||||
|
*/
|
||||||
|
|
||||||
|
int Dbdict::checkSingleUserMode(Uint32 senderRef)
|
||||||
|
{
|
||||||
|
Uint32 nodeId = refToNode(senderRef);
|
||||||
|
return
|
||||||
|
getNodeState().getSingleUserMode() &&
|
||||||
|
(getNodeInfo(nodeId).m_type != NodeInfo::DB) &&
|
||||||
|
(nodeId != getNodeState().getSingleUserApi());
|
||||||
|
}
|
||||||
|
|
||||||
CArray<KeyDescriptor> g_key_descriptor_pool;
|
CArray<KeyDescriptor> g_key_descriptor_pool;
|
||||||
|
@ -2003,6 +2003,8 @@ private:
|
|||||||
int getMetaTable(MetaData::Table& table, const char* tableName);
|
int getMetaTable(MetaData::Table& table, const char* tableName);
|
||||||
int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, Uint32 attributeId);
|
int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, Uint32 attributeId);
|
||||||
int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, const char* attributeName);
|
int getMetaAttribute(MetaData::Attribute& attribute, const MetaData::Table& table, const char* attributeName);
|
||||||
|
|
||||||
|
int checkSingleUserMode(Uint32 senderRef);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -800,7 +800,9 @@ NdbBlob::writeDataPrivate(const char* buf, Uint32 bytes)
|
|||||||
DBUG_RETURN(-1);
|
DBUG_RETURN(-1);
|
||||||
Uint32 n = thePartSize - off;
|
Uint32 n = thePartSize - off;
|
||||||
if (n > len) {
|
if (n > len) {
|
||||||
memset(thePartBuf.data + off + len, theFillChar, n - len);
|
/* If we are adding data at the end, fill rest of part. */
|
||||||
|
if (pos + len >= theLength)
|
||||||
|
memset(thePartBuf.data + off + len, theFillChar, n - len);
|
||||||
n = len;
|
n = len;
|
||||||
}
|
}
|
||||||
memcpy(thePartBuf.data + off, buf, n);
|
memcpy(thePartBuf.data + off, buf, n);
|
||||||
|
@ -880,6 +880,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* signal,
|
|||||||
r = m_transporter->sendSignal(signal, aNodeId);
|
r = m_transporter->sendSignal(signal, aNodeId);
|
||||||
}
|
}
|
||||||
if(r != 0){
|
if(r != 0){
|
||||||
|
m_error.code= 4007;
|
||||||
m_transporter->unlock_mutex();
|
m_transporter->unlock_mutex();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@ -903,7 +904,10 @@ NdbDictInterface::dictSignal(NdbApiSignal* signal,
|
|||||||
* Handle error codes
|
* Handle error codes
|
||||||
*/
|
*/
|
||||||
if(m_waiter.m_state == WAIT_NODE_FAILURE)
|
if(m_waiter.m_state == WAIT_NODE_FAILURE)
|
||||||
|
{
|
||||||
|
m_error.code = 4013;
|
||||||
continue;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(m_waiter.m_state == WST_WAIT_TIMEOUT)
|
if(m_waiter.m_state == WST_WAIT_TIMEOUT)
|
||||||
{
|
{
|
||||||
|
@ -55,7 +55,7 @@ NdbRecAttr::setup(const NdbColumnImpl* anAttrInfo, char* aValue)
|
|||||||
|
|
||||||
if (theStorageX)
|
if (theStorageX)
|
||||||
delete[] theStorageX;
|
delete[] theStorageX;
|
||||||
|
|
||||||
// check alignment to signal data
|
// check alignment to signal data
|
||||||
// a future version could check alignment per data type as well
|
// a future version could check alignment per data type as well
|
||||||
|
|
||||||
@ -181,7 +181,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
|
|||||||
out << "[NULL]";
|
out << "[NULL]";
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
const NdbDictionary::Column* c = r.getColumn();
|
const NdbDictionary::Column* c = r.getColumn();
|
||||||
uint length = c->getLength();
|
uint length = c->getLength();
|
||||||
if (length > 1)
|
if (length > 1)
|
||||||
@ -192,196 +192,200 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
|
|||||||
if (j > 0)
|
if (j > 0)
|
||||||
out << " ";
|
out << " ";
|
||||||
|
|
||||||
switch(r.getType())
|
switch(r.getType()){
|
||||||
{
|
case NdbDictionary::Column::Bigunsigned:
|
||||||
case NdbDictionary::Column::Bigunsigned:
|
out << r.u_64_value();
|
||||||
out << r.u_64_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Bit:
|
|
||||||
out << hex << "H'" << r.u_32_value() << dec;
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Unsigned:
|
|
||||||
out << r.u_32_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Smallunsigned:
|
|
||||||
out << r.u_short_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Tinyunsigned:
|
|
||||||
out << (unsigned) r.u_char_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Bigint:
|
|
||||||
out << r.int64_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Int:
|
|
||||||
out << r.int32_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Smallint:
|
|
||||||
out << r.short_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Tinyint:
|
|
||||||
out << (int) r.char_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Binary:
|
|
||||||
ndbrecattr_print_string(out,"Binary",r.aRef(),r.arraySize());
|
|
||||||
j = r.arraySize();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Char:
|
|
||||||
ndbrecattr_print_string(out,"Char",r.aRef(),r.arraySize());
|
|
||||||
j = length;
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Varchar:
|
|
||||||
{
|
|
||||||
unsigned len = *(const unsigned char*)r.aRef();
|
|
||||||
ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len);
|
|
||||||
j = length;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Varbinary:
|
|
||||||
{
|
|
||||||
unsigned len = *(const unsigned char*)r.aRef();
|
|
||||||
ndbrecattr_print_string(out,"Varbinary", r.aRef()+1,len);
|
|
||||||
j = length;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Float:
|
|
||||||
out << r.float_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Double:
|
|
||||||
out << r.double_value();
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Olddecimal:
|
|
||||||
{
|
|
||||||
short len = 1 + c->getPrecision() + (c->getScale() > 0);
|
|
||||||
out.print("%.*s", len, r.aRef());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Olddecimalunsigned:
|
|
||||||
{
|
|
||||||
short len = 0 + c->getPrecision() + (c->getScale() > 0);
|
|
||||||
out.print("%.*s", len, r.aRef());
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Decimal:
|
|
||||||
case NdbDictionary::Column::Decimalunsigned:
|
|
||||||
goto unknown; // TODO
|
|
||||||
break;
|
|
||||||
// for dates cut-and-paste from field.cc
|
|
||||||
case NdbDictionary::Column::Datetime:
|
|
||||||
{
|
|
||||||
ulonglong tmp=r.u_64_value();
|
|
||||||
long part1,part2,part3;
|
|
||||||
part1=(long) (tmp/LL(1000000));
|
|
||||||
part2=(long) (tmp - (ulonglong) part1*LL(1000000));
|
|
||||||
char buf[40];
|
|
||||||
char* pos=(char*) buf+19;
|
|
||||||
*pos--=0;
|
|
||||||
*pos--= (char) ('0'+(char) (part2%10)); part2/=10;
|
|
||||||
*pos--= (char) ('0'+(char) (part2%10)); part3= (int) (part2 / 10);
|
|
||||||
*pos--= ':';
|
|
||||||
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
|
||||||
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
|
||||||
*pos--= ':';
|
|
||||||
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
|
||||||
*pos--= (char) ('0'+(char) part3);
|
|
||||||
*pos--= '/';
|
|
||||||
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
|
|
||||||
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
|
|
||||||
*pos--= '-';
|
|
||||||
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
|
|
||||||
*pos--= (char) ('0'+(char) (part1%10)); part3= (int) (part1/10);
|
|
||||||
*pos--= '-';
|
|
||||||
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
|
||||||
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
|
||||||
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
|
||||||
*pos=(char) ('0'+(char) part3);
|
|
||||||
out << buf;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Date:
|
|
||||||
{
|
|
||||||
uint32 tmp=(uint32) uint3korr(r.aRef());
|
|
||||||
int part;
|
|
||||||
char buf[40];
|
|
||||||
char *pos=(char*) buf+10;
|
|
||||||
*pos--=0;
|
|
||||||
part=(int) (tmp & 31);
|
|
||||||
*pos--= (char) ('0'+part%10);
|
|
||||||
*pos--= (char) ('0'+part/10);
|
|
||||||
*pos--= '-';
|
|
||||||
part=(int) (tmp >> 5 & 15);
|
|
||||||
*pos--= (char) ('0'+part%10);
|
|
||||||
*pos--= (char) ('0'+part/10);
|
|
||||||
*pos--= '-';
|
|
||||||
part=(int) (tmp >> 9);
|
|
||||||
*pos--= (char) ('0'+part%10); part/=10;
|
|
||||||
*pos--= (char) ('0'+part%10); part/=10;
|
|
||||||
*pos--= (char) ('0'+part%10); part/=10;
|
|
||||||
*pos= (char) ('0'+part);
|
|
||||||
out << buf;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Time:
|
|
||||||
{
|
|
||||||
long tmp=(long) sint3korr(r.aRef());
|
|
||||||
int hour=(uint) (tmp/10000);
|
|
||||||
int minute=(uint) (tmp/100 % 100);
|
|
||||||
int second=(uint) (tmp % 100);
|
|
||||||
char buf[40];
|
|
||||||
sprintf(buf, "%02d:%02d:%02d", hour, minute, second);
|
|
||||||
out << buf;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Year:
|
|
||||||
{
|
|
||||||
uint year = 1900 + r.u_char_value();
|
|
||||||
char buf[40];
|
|
||||||
sprintf(buf, "%04d", year);
|
|
||||||
out << buf;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Timestamp:
|
|
||||||
{
|
|
||||||
time_t time = r.u_32_value();
|
|
||||||
out << (uint)time;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case NdbDictionary::Column::Blob:
|
|
||||||
case NdbDictionary::Column::Text:
|
|
||||||
{
|
|
||||||
// user defined aRef() may not be aligned to Uint64
|
|
||||||
NdbBlob::Head head;
|
|
||||||
memcpy(&head, r.aRef(), sizeof(head));
|
|
||||||
out << head.length << ":";
|
|
||||||
const unsigned char* p = (const unsigned char*)r.aRef() + sizeof(head);
|
|
||||||
if (r.arraySize() < sizeof(head))
|
|
||||||
out << "***error***"; // really cannot happen
|
|
||||||
else {
|
|
||||||
unsigned n = r.arraySize() - sizeof(head);
|
|
||||||
for (unsigned k = 0; k < n && k < head.length; k++) {
|
|
||||||
if (r.getType() == NdbDictionary::Column::Blob)
|
|
||||||
out.print("%02X", (int)p[k]);
|
|
||||||
else
|
|
||||||
out.print("%c", (int)p[k]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
j = length;
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case NdbDictionary::Column::Longvarchar:
|
case NdbDictionary::Column::Bit:
|
||||||
{
|
out << hex << "H'" << r.u_32_value() << dec;
|
||||||
unsigned len = uint2korr(r.aRef());
|
break;
|
||||||
ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len);
|
case NdbDictionary::Column::Unsigned:
|
||||||
j = length;
|
out << r.u_32_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Smallunsigned:
|
||||||
|
out << r.u_short_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Tinyunsigned:
|
||||||
|
out << (unsigned) r.u_char_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Bigint:
|
||||||
|
out << r.int64_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Int:
|
||||||
|
out << r.int32_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Smallint:
|
||||||
|
out << r.short_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Tinyint:
|
||||||
|
out << (int) r.char_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Binary:
|
||||||
|
j = r.arraySize();
|
||||||
|
ndbrecattr_print_string(out,"Binary", r.aRef(), j);
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Char:
|
||||||
|
j = length;
|
||||||
|
ndbrecattr_print_string(out,"Char", r.aRef(), r.arraySize());
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Varchar:
|
||||||
|
{
|
||||||
|
unsigned len = *(const unsigned char*)r.aRef();
|
||||||
|
ndbrecattr_print_string(out,"Varchar", r.aRef()+1,len);
|
||||||
|
j = length;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Varbinary:
|
||||||
|
{
|
||||||
|
unsigned len = *(const unsigned char*)r.aRef();
|
||||||
|
ndbrecattr_print_string(out,"Varbinary", r.aRef()+1,len);
|
||||||
|
j = length;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Float:
|
||||||
|
out << r.float_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Double:
|
||||||
|
out << r.double_value();
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Olddecimal:
|
||||||
|
{
|
||||||
|
short len = 1 + c->getPrecision() + (c->getScale() > 0);
|
||||||
|
out.print("%.*s", len, r.aRef());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Olddecimalunsigned:
|
||||||
|
{
|
||||||
|
short len = 0 + c->getPrecision() + (c->getScale() > 0);
|
||||||
|
out.print("%.*s", len, r.aRef());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Decimal:
|
||||||
|
case NdbDictionary::Column::Decimalunsigned:
|
||||||
|
goto unknown; // TODO
|
||||||
|
break;
|
||||||
|
// for dates cut-and-paste from field.cc
|
||||||
|
case NdbDictionary::Column::Datetime:
|
||||||
|
{
|
||||||
|
ulonglong tmp=r.u_64_value();
|
||||||
|
long part1,part2,part3;
|
||||||
|
part1=(long) (tmp/LL(1000000));
|
||||||
|
part2=(long) (tmp - (ulonglong) part1*LL(1000000));
|
||||||
|
char buf[40];
|
||||||
|
char* pos=(char*) buf+19;
|
||||||
|
*pos--=0;
|
||||||
|
*pos--= (char) ('0'+(char) (part2%10)); part2/=10;
|
||||||
|
*pos--= (char) ('0'+(char) (part2%10)); part3= (int) (part2 / 10);
|
||||||
|
*pos--= ':';
|
||||||
|
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
||||||
|
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
||||||
|
*pos--= ':';
|
||||||
|
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
||||||
|
*pos--= (char) ('0'+(char) part3);
|
||||||
|
*pos--= '/';
|
||||||
|
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
|
||||||
|
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
|
||||||
|
*pos--= '-';
|
||||||
|
*pos--= (char) ('0'+(char) (part1%10)); part1/=10;
|
||||||
|
*pos--= (char) ('0'+(char) (part1%10)); part3= (int) (part1/10);
|
||||||
|
*pos--= '-';
|
||||||
|
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
||||||
|
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
||||||
|
*pos--= (char) ('0'+(char) (part3%10)); part3/=10;
|
||||||
|
*pos=(char) ('0'+(char) part3);
|
||||||
|
out << buf;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Date:
|
||||||
|
{
|
||||||
|
uint32 tmp=(uint32) uint3korr(r.aRef());
|
||||||
|
int part;
|
||||||
|
char buf[40];
|
||||||
|
char *pos=(char*) buf+10;
|
||||||
|
*pos--=0;
|
||||||
|
part=(int) (tmp & 31);
|
||||||
|
*pos--= (char) ('0'+part%10);
|
||||||
|
*pos--= (char) ('0'+part/10);
|
||||||
|
*pos--= '-';
|
||||||
|
part=(int) (tmp >> 5 & 15);
|
||||||
|
*pos--= (char) ('0'+part%10);
|
||||||
|
*pos--= (char) ('0'+part/10);
|
||||||
|
*pos--= '-';
|
||||||
|
part=(int) (tmp >> 9);
|
||||||
|
*pos--= (char) ('0'+part%10); part/=10;
|
||||||
|
*pos--= (char) ('0'+part%10); part/=10;
|
||||||
|
*pos--= (char) ('0'+part%10); part/=10;
|
||||||
|
*pos= (char) ('0'+part);
|
||||||
|
out << buf;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Time:
|
||||||
|
{
|
||||||
|
long tmp=(long) sint3korr(r.aRef());
|
||||||
|
int hour=(uint) (tmp/10000);
|
||||||
|
int minute=(uint) (tmp/100 % 100);
|
||||||
|
int second=(uint) (tmp % 100);
|
||||||
|
char buf[40];
|
||||||
|
sprintf(buf, "%02d:%02d:%02d", hour, minute, second);
|
||||||
|
out << buf;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Year:
|
||||||
|
{
|
||||||
|
uint year = 1900 + r.u_char_value();
|
||||||
|
char buf[40];
|
||||||
|
sprintf(buf, "%04d", year);
|
||||||
|
out << buf;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Timestamp:
|
||||||
|
{
|
||||||
|
time_t time = r.u_32_value();
|
||||||
|
out << (uint)time;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Blob:
|
||||||
|
case NdbDictionary::Column::Text:
|
||||||
|
{
|
||||||
|
// user defined aRef() may not be aligned to Uint64
|
||||||
|
NdbBlob::Head head;
|
||||||
|
memcpy(&head, r.aRef(), sizeof(head));
|
||||||
|
out << head.length << ":";
|
||||||
|
const unsigned char* p = (const unsigned char*)r.aRef() + sizeof(head);
|
||||||
|
if (r.arraySize() < sizeof(head))
|
||||||
|
out << "***error***"; // really cannot happen
|
||||||
|
else {
|
||||||
|
unsigned n = r.arraySize() - sizeof(head);
|
||||||
|
for (unsigned k = 0; k < n && k < head.length; k++) {
|
||||||
|
if (r.getType() == NdbDictionary::Column::Blob)
|
||||||
|
out.print("%02X", (int)p[k]);
|
||||||
|
else
|
||||||
|
out.print("%c", (int)p[k]);
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
unknown:
|
|
||||||
default: /* no print functions for the rest, just print type */
|
|
||||||
out << (int) r.getType();
|
|
||||||
j = length;
|
|
||||||
if (j > 1)
|
|
||||||
out << " " << j << " times";
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
j = length;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case NdbDictionary::Column::Longvarchar:
|
||||||
|
{
|
||||||
|
unsigned len = uint2korr(r.aRef());
|
||||||
|
ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len);
|
||||||
|
j = length;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case NdbDictionary::Column::Undefined:
|
||||||
|
case NdbDictionary::Column::Mediumint:
|
||||||
|
case NdbDictionary::Column::Mediumunsigned:
|
||||||
|
case NdbDictionary::Column::Longvarbinary:
|
||||||
|
unknown:
|
||||||
|
//default: /* no print functions for the rest, just print type */
|
||||||
|
out << (int) r.getType();
|
||||||
|
j = length;
|
||||||
|
if (j > 1)
|
||||||
|
out << " " << j << " times";
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (length > 1)
|
if (length > 1)
|
||||||
|
@ -137,10 +137,12 @@ ErrorBundle ErrorCodes[] = {
|
|||||||
/**
|
/**
|
||||||
* Unknown result
|
* Unknown result
|
||||||
*/
|
*/
|
||||||
|
{ 4007, UR, "Send to ndbd node failed" },
|
||||||
{ 4008, UR, "Receive from NDB failed" },
|
{ 4008, UR, "Receive from NDB failed" },
|
||||||
{ 4009, UR, "Cluster Failure" },
|
{ 4009, UR, "Cluster Failure" },
|
||||||
{ 4012, UR,
|
{ 4012, UR,
|
||||||
"Request ndbd time-out, maybe due to high load or communication problems"},
|
"Request ndbd time-out, maybe due to high load or communication problems"},
|
||||||
|
{ 4013, UR, "Request timed out in waiting for node failure"},
|
||||||
{ 4024, UR,
|
{ 4024, UR,
|
||||||
"Time-out, most likely caused by simple read or cluster failure" },
|
"Time-out, most likely caused by simple read or cluster failure" },
|
||||||
|
|
||||||
|
@ -138,6 +138,7 @@ printusage()
|
|||||||
<< " 2 readData / writeData" << endl
|
<< " 2 readData / writeData" << endl
|
||||||
<< "bug tests (no blob test)" << endl
|
<< "bug tests (no blob test)" << endl
|
||||||
<< " -bug 4088 ndb api hang with mixed ops on index table" << endl
|
<< " -bug 4088 ndb api hang with mixed ops on index table" << endl
|
||||||
|
<< " -bug 27018 middle partial part write clobbers rest of part" << endl
|
||||||
<< " -bug nnnn delete + write gives 626" << endl
|
<< " -bug nnnn delete + write gives 626" << endl
|
||||||
<< " -bug nnnn acc crash on delete and long key" << endl
|
<< " -bug nnnn acc crash on delete and long key" << endl
|
||||||
;
|
;
|
||||||
@ -1806,6 +1807,56 @@ bugtest_4088()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
bugtest_27018()
|
||||||
|
{
|
||||||
|
DBG("bug test 27018 - middle partial part write clobbers rest of part");
|
||||||
|
|
||||||
|
// insert rows
|
||||||
|
calcTups(false);
|
||||||
|
CHK(insertPk(false) == 0);
|
||||||
|
// new trans
|
||||||
|
for (unsigned k= 0; k < g_opt.m_rows; k++)
|
||||||
|
{
|
||||||
|
Tup& tup= g_tups[k];
|
||||||
|
|
||||||
|
CHK((g_con= g_ndb->startTransaction()) != 0);
|
||||||
|
CHK((g_opr= g_con->getNdbOperation(g_opt.m_tname)) != 0);
|
||||||
|
CHK(g_opr->updateTuple() == 0);
|
||||||
|
CHK(g_opr->equal("PK1", tup.m_pk1) == 0);
|
||||||
|
if (g_opt.m_pk2len != 0)
|
||||||
|
CHK(g_opr->equal("PK2", tup.m_pk2) == 0);
|
||||||
|
CHK(getBlobHandles(g_opr) == 0);
|
||||||
|
CHK(g_con->execute(NoCommit) == 0);
|
||||||
|
|
||||||
|
/* Update one byte in random position. */
|
||||||
|
Uint32 offset= urandom(tup.m_blob1.m_len);
|
||||||
|
tup.m_blob1.m_buf[0]= 0xff ^ tup.m_blob1.m_val[offset];
|
||||||
|
CHK(g_bh1->setPos(offset) == 0);
|
||||||
|
CHK(g_bh1->writeData(&(tup.m_blob1.m_buf[0]), 1) == 0);
|
||||||
|
CHK(g_con->execute(Commit) == 0);
|
||||||
|
g_ndb->closeTransaction(g_con);
|
||||||
|
|
||||||
|
CHK((g_con= g_ndb->startTransaction()) != 0);
|
||||||
|
CHK((g_opr= g_con->getNdbOperation(g_opt.m_tname)) != 0);
|
||||||
|
CHK(g_opr->readTuple() == 0);
|
||||||
|
CHK(g_opr->equal("PK1", tup.m_pk1) == 0);
|
||||||
|
if (g_opt.m_pk2len != 0)
|
||||||
|
CHK(g_opr->equal("PK2", tup.m_pk2) == 0);
|
||||||
|
CHK(getBlobHandles(g_opr) == 0);
|
||||||
|
|
||||||
|
CHK(g_bh1->getValue(tup.m_blob1.m_buf, tup.m_blob1.m_len) == 0);
|
||||||
|
CHK(g_con->execute(Commit) == 0);
|
||||||
|
Uint64 len= ~0;
|
||||||
|
CHK(g_bh1->getLength(len) == 0 && len == tup.m_blob1.m_len);
|
||||||
|
tup.m_blob1.m_buf[offset]^= 0xff;
|
||||||
|
CHK(memcmp(tup.m_blob1.m_buf, tup.m_blob1.m_val, tup.m_blob1.m_len) == 0);
|
||||||
|
g_ndb->closeTransaction(g_con);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
bugtest_2222()
|
bugtest_2222()
|
||||||
{
|
{
|
||||||
@ -1822,7 +1873,8 @@ static struct {
|
|||||||
int m_bug;
|
int m_bug;
|
||||||
int (*m_test)();
|
int (*m_test)();
|
||||||
} g_bugtest[] = {
|
} g_bugtest[] = {
|
||||||
{ 4088, bugtest_4088 }
|
{ 4088, bugtest_4088 },
|
||||||
|
{ 27018, bugtest_27018 }
|
||||||
};
|
};
|
||||||
|
|
||||||
NDB_COMMAND(testOdbcDriver, "testBlobs", "testBlobs", "testBlobs", 65535)
|
NDB_COMMAND(testOdbcDriver, "testBlobs", "testBlobs", "testBlobs", 65535)
|
||||||
|
@ -30,12 +30,14 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status,
|
|||||||
unsigned int _timeout);
|
unsigned int _timeout);
|
||||||
|
|
||||||
enum ndb_waiter_options {
|
enum ndb_waiter_options {
|
||||||
OPT_WAIT_STATUS_NOT_STARTED = NDB_STD_OPTIONS_LAST
|
OPT_WAIT_STATUS_NOT_STARTED = NDB_STD_OPTIONS_LAST,
|
||||||
|
OPT_WAIT_STATUS_SINGLE_USER
|
||||||
};
|
};
|
||||||
NDB_STD_OPTS_VARS;
|
NDB_STD_OPTS_VARS;
|
||||||
|
|
||||||
static int _no_contact = 0;
|
static int _no_contact = 0;
|
||||||
static int _not_started = 0;
|
static int _not_started = 0;
|
||||||
|
static int _single_user = 0;
|
||||||
static int _timeout = 120;
|
static int _timeout = 120;
|
||||||
|
|
||||||
const char *load_default_groups[]= { "mysql_cluster",0 };
|
const char *load_default_groups[]= { "mysql_cluster",0 };
|
||||||
@ -49,6 +51,10 @@ static struct my_option my_long_options[] =
|
|||||||
{ "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started",
|
{ "not-started", OPT_WAIT_STATUS_NOT_STARTED, "Wait for cluster not started",
|
||||||
(gptr*) &_not_started, (gptr*) &_not_started, 0,
|
(gptr*) &_not_started, (gptr*) &_not_started, 0,
|
||||||
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
|
||||||
|
{ "single-user", OPT_WAIT_STATUS_SINGLE_USER,
|
||||||
|
"Wait for cluster to enter single user mode",
|
||||||
|
(gptr*) &_single_user, (gptr*) &_single_user, 0,
|
||||||
|
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0 },
|
||||||
{ "timeout", 't', "Timeout to wait",
|
{ "timeout", 't', "Timeout to wait",
|
||||||
(gptr*) &_timeout, (gptr*) &_timeout, 0,
|
(gptr*) &_timeout, (gptr*) &_timeout, 0,
|
||||||
GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 },
|
GET_INT, REQUIRED_ARG, 120, 0, 0, 0, 0, 0 },
|
||||||
@ -90,6 +96,10 @@ int main(int argc, char** argv){
|
|||||||
{
|
{
|
||||||
wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED;
|
wait_status= NDB_MGM_NODE_STATUS_NOT_STARTED;
|
||||||
}
|
}
|
||||||
|
else if (_single_user)
|
||||||
|
{
|
||||||
|
wait_status= NDB_MGM_NODE_STATUS_SINGLEUSER;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
wait_status= NDB_MGM_NODE_STATUS_STARTED;
|
wait_status= NDB_MGM_NODE_STATUS_STARTED;
|
||||||
|
@ -225,7 +225,7 @@ public:
|
|||||||
ptr=ptr_arg; null_ptr=null_ptr_arg; null_bit=null_bit_arg;
|
ptr=ptr_arg; null_ptr=null_ptr_arg; null_bit=null_bit_arg;
|
||||||
}
|
}
|
||||||
inline void move_field(char *ptr_arg) { ptr=ptr_arg; }
|
inline void move_field(char *ptr_arg) { ptr=ptr_arg; }
|
||||||
inline void move_field(my_ptrdiff_t ptr_diff)
|
virtual inline void move_field(my_ptrdiff_t ptr_diff)
|
||||||
{
|
{
|
||||||
ptr=ADD_TO_PTR(ptr,ptr_diff,char*);
|
ptr=ADD_TO_PTR(ptr,ptr_diff,char*);
|
||||||
if (null_ptr)
|
if (null_ptr)
|
||||||
@ -1407,6 +1407,11 @@ public:
|
|||||||
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
|
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
|
||||||
char *new_ptr, uchar *new_null_ptr,
|
char *new_ptr, uchar *new_null_ptr,
|
||||||
uint new_null_bit);
|
uint new_null_bit);
|
||||||
|
inline void move_field(my_ptrdiff_t ptr_diff)
|
||||||
|
{
|
||||||
|
Field::move_field(ptr_diff);
|
||||||
|
bit_ptr= ADD_TO_PTR(bit_ptr, ptr_diff, uchar*);
|
||||||
|
}
|
||||||
void set_bit_ptr(uchar *bit_ptr_arg, uchar bit_ofs_arg)
|
void set_bit_ptr(uchar *bit_ptr_arg, uchar bit_ofs_arg)
|
||||||
{
|
{
|
||||||
bit_ptr= bit_ptr_arg;
|
bit_ptr= bit_ptr_arg;
|
||||||
|
@ -342,6 +342,12 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
|
|||||||
RETURN VALUE
|
RETURN VALUE
|
||||||
0 - Equal definitions.
|
0 - Equal definitions.
|
||||||
1 - Different definitions.
|
1 - Different definitions.
|
||||||
|
|
||||||
|
TODO
|
||||||
|
- compare FULLTEXT keys;
|
||||||
|
- compare SPATIAL keys;
|
||||||
|
- compare FIELD_SKIP_ZERO which is converted to FIELD_NORMAL correctly
|
||||||
|
(should be corretly detected in table2myisam).
|
||||||
*/
|
*/
|
||||||
|
|
||||||
int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
||||||
@ -367,6 +373,28 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
|||||||
{
|
{
|
||||||
HA_KEYSEG *t1_keysegs= t1_keyinfo[i].seg;
|
HA_KEYSEG *t1_keysegs= t1_keyinfo[i].seg;
|
||||||
HA_KEYSEG *t2_keysegs= t2_keyinfo[i].seg;
|
HA_KEYSEG *t2_keysegs= t2_keyinfo[i].seg;
|
||||||
|
if (t1_keyinfo[i].flag & HA_FULLTEXT && t2_keyinfo[i].flag & HA_FULLTEXT)
|
||||||
|
continue;
|
||||||
|
else if (t1_keyinfo[i].flag & HA_FULLTEXT ||
|
||||||
|
t2_keyinfo[i].flag & HA_FULLTEXT)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("error", ("Key %d has different definition", i));
|
||||||
|
DBUG_PRINT("error", ("t1_fulltext= %d, t2_fulltext=%d",
|
||||||
|
test(t1_keyinfo[i].flag & HA_FULLTEXT),
|
||||||
|
test(t2_keyinfo[i].flag & HA_FULLTEXT)));
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
|
if (t1_keyinfo[i].flag & HA_SPATIAL && t2_keyinfo[i].flag & HA_SPATIAL)
|
||||||
|
continue;
|
||||||
|
else if (t1_keyinfo[i].flag & HA_SPATIAL ||
|
||||||
|
t2_keyinfo[i].flag & HA_SPATIAL)
|
||||||
|
{
|
||||||
|
DBUG_PRINT("error", ("Key %d has different definition", i));
|
||||||
|
DBUG_PRINT("error", ("t1_spatial= %d, t2_spatial=%d",
|
||||||
|
test(t1_keyinfo[i].flag & HA_SPATIAL),
|
||||||
|
test(t2_keyinfo[i].flag & HA_SPATIAL)));
|
||||||
|
DBUG_RETURN(1);
|
||||||
|
}
|
||||||
if (t1_keyinfo[i].keysegs != t2_keyinfo[i].keysegs ||
|
if (t1_keyinfo[i].keysegs != t2_keyinfo[i].keysegs ||
|
||||||
t1_keyinfo[i].key_alg != t2_keyinfo[i].key_alg)
|
t1_keyinfo[i].key_alg != t2_keyinfo[i].key_alg)
|
||||||
{
|
{
|
||||||
@ -403,7 +431,14 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
|
|||||||
{
|
{
|
||||||
MI_COLUMNDEF *t1_rec= &t1_recinfo[i];
|
MI_COLUMNDEF *t1_rec= &t1_recinfo[i];
|
||||||
MI_COLUMNDEF *t2_rec= &t2_recinfo[i];
|
MI_COLUMNDEF *t2_rec= &t2_recinfo[i];
|
||||||
if (t1_rec->type != t2_rec->type ||
|
/*
|
||||||
|
FIELD_SKIP_ZERO can be changed to FIELD_NORMAL in mi_create,
|
||||||
|
see NOTE1 in mi_create.c
|
||||||
|
*/
|
||||||
|
if ((t1_rec->type != t2_rec->type &&
|
||||||
|
!(t1_rec->type == (int) FIELD_SKIP_ZERO &&
|
||||||
|
t1_rec->length == 1 &&
|
||||||
|
t2_rec->type == (int) FIELD_NORMAL)) ||
|
||||||
t1_rec->length != t2_rec->length ||
|
t1_rec->length != t2_rec->length ||
|
||||||
t1_rec->null_bit != t2_rec->null_bit)
|
t1_rec->null_bit != t2_rec->null_bit)
|
||||||
{
|
{
|
||||||
|
@ -36,8 +36,7 @@ class ha_myisammrg: public handler
|
|||||||
{
|
{
|
||||||
return (HA_REC_NOT_IN_SEQ | HA_AUTO_PART_KEY | HA_READ_RND_SAME |
|
return (HA_REC_NOT_IN_SEQ | HA_AUTO_PART_KEY | HA_READ_RND_SAME |
|
||||||
HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED |
|
HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED |
|
||||||
HA_CAN_INSERT_DELAYED | HA_ANY_INDEX_MAY_BE_UNIQUE |
|
HA_ANY_INDEX_MAY_BE_UNIQUE | HA_CAN_BIT_FIELD);
|
||||||
HA_CAN_BIT_FIELD);
|
|
||||||
}
|
}
|
||||||
ulong index_flags(uint inx, uint part, bool all_parts) const
|
ulong index_flags(uint inx, uint part, bool all_parts) const
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user