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
|
||||
"FLOSS Exception").
|
||||
|
||||
Version 0.5, 30 August 2006
|
||||
Version 0.6, 7 March 2007
|
||||
|
||||
Exception Intent
|
||||
|
||||
@ -59,10 +59,12 @@ Apache Software License 1.0/1.1/2.0
|
||||
Apple Public Source License 2.0
|
||||
Artistic license From Perl 5.8.0
|
||||
BSD license "July 22 1999"
|
||||
Common Development and Distribution License (CDDL) 1.0
|
||||
Common Public License 1.0
|
||||
Eclipse Public License 1.0
|
||||
GNU Library or "Lesser" General Public License (LGPL) 2.0/2.1
|
||||
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
|
||||
Open Software License 2.0
|
||||
OpenSSL license (with original SSLeay license) "2003" ("1998")
|
||||
|
@ -557,10 +557,6 @@ SOURCE=.\my_windac.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\my_winsem.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\my_winthread.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -4323,49 +4323,6 @@
|
||||
PreprocessorDefinitions=""/>
|
||||
</FileConfiguration>
|
||||
</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
|
||||
RelativePath="my_winthread.c">
|
||||
<FileConfiguration
|
||||
|
@ -538,10 +538,6 @@ SOURCE=.\my_wincond.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\my_winsem.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\my_winthread.c
|
||||
# End 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
|
||||
AC_SEARCH_LIBS(crypt, crypt, AC_DEFINE(HAVE_CRYPT, 1, [crypt]))
|
||||
|
||||
# For sem_xxx functions on Solaris 2.6
|
||||
AC_CHECK_FUNC(sem_init, , AC_CHECK_LIB(posix4, sem_init))
|
||||
# For the sched_yield() function on Solaris
|
||||
AC_CHECK_FUNC(sched_yield, , AC_CHECK_LIB(posix4, sched_yield))
|
||||
|
||||
MYSQL_CHECK_ZLIB_WITH_COMPRESS
|
||||
|
||||
# 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
|
||||
pkginclude_HEADERS = $(HEADERS_ABI) my_dbug.h m_string.h my_sys.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 \
|
||||
my_getopt.h sslopt-longopts.h my_dir.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--;
|
||||
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;
|
||||
packed--;
|
||||
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)
|
||||
{
|
||||
if ((share->kfile=my_open(share->unique_file_name, share->mode | O_SHARE,
|
||||
MYF(MY_WME))) < 0)
|
||||
MYF(MY_WME))) < 0)
|
||||
return 1;
|
||||
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.
|
||||
The data pointer is required if the search_flag contains MBR_DATA.
|
||||
(minimum bounding rectangle)
|
||||
*/
|
||||
memcpy(info->first_mbr_key, key, keyinfo->keylength);
|
||||
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;
|
||||
uchar *page_buf;
|
||||
int res;
|
||||
DBUG_ENTER("rtree_insert_req");
|
||||
|
||||
if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length +
|
||||
MI_MAX_KEY_BUFF)))
|
||||
{
|
||||
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))
|
||||
goto err1;
|
||||
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 */
|
||||
(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:
|
||||
my_afree((byte*)page_buf);
|
||||
return res;
|
||||
DBUG_RETURN(res);
|
||||
|
||||
err1:
|
||||
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;
|
||||
int res;
|
||||
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 = _mi_new(info, keyinfo, DFLT_INIT_HITS)) == HA_OFFSET_ERROR)
|
||||
return -1;
|
||||
DBUG_RETURN(-1);
|
||||
info->buff_used = 1;
|
||||
mi_putint(info->buff, 2, 0);
|
||||
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))
|
||||
return 1;
|
||||
DBUG_RETURN(1);
|
||||
info->s->state.key_root[keynr] = old_root;
|
||||
return res;
|
||||
DBUG_RETURN(res);
|
||||
}
|
||||
|
||||
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;
|
||||
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 +
|
||||
MI_MAX_KEY_BUFF)))
|
||||
{
|
||||
my_errno = HA_ERR_OUT_OF_MEM;
|
||||
return -1;
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
}
|
||||
|
||||
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))
|
||||
goto err1;
|
||||
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);
|
||||
break;
|
||||
err1:
|
||||
my_afree((byte*)new_root_buf);
|
||||
return -1;
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
}
|
||||
default:
|
||||
case -1: /* error */
|
||||
@ -694,7 +702,7 @@ err1:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return res;
|
||||
DBUG_RETURN(res);
|
||||
}
|
||||
|
||||
|
||||
@ -708,8 +716,10 @@ err1:
|
||||
|
||||
int rtree_insert(MI_INFO *info, uint keynr, uchar *key, uint key_length)
|
||||
{
|
||||
return (!key_length ||
|
||||
(rtree_insert_level(info, keynr, key, key_length, -1) == -1)) ? -1 : 0;
|
||||
DBUG_ENTER("rtree_insert");
|
||||
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,
|
||||
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)
|
||||
{
|
||||
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].level = level;
|
||||
ReinsertList->n_pages++;
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
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;
|
||||
uchar *page_buf;
|
||||
int res;
|
||||
DBUG_ENTER("rtree_delete_req");
|
||||
|
||||
if (!(page_buf = (uchar*)my_alloca((uint)keyinfo->block_length)))
|
||||
{
|
||||
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))
|
||||
goto err1;
|
||||
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);
|
||||
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))
|
||||
{
|
||||
/* OK */
|
||||
/* Calculate a new key value (MBR) for the shrinked block. */
|
||||
if (rtree_set_key_mbr(info, keyinfo, k, key_length,
|
||||
_mi_kpos(nod_flag, k)))
|
||||
goto err1;
|
||||
@ -800,10 +816,23 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
}
|
||||
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),
|
||||
level + 1))
|
||||
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);
|
||||
if (_mi_write_keypage(info, keyinfo, page,
|
||||
DFLT_INIT_HITS, page_buf))
|
||||
@ -863,11 +892,11 @@ static int rtree_delete_req(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
|
||||
ok:
|
||||
my_afree((byte*)page_buf);
|
||||
return res;
|
||||
DBUG_RETURN(res);
|
||||
|
||||
err1:
|
||||
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;
|
||||
my_off_t old_root;
|
||||
MI_KEYDEF *keyinfo = info->s->keyinfo + keynr;
|
||||
DBUG_ENTER("rtree_delete");
|
||||
|
||||
if ((old_root = info->s->state.key_root[keynr]) == HA_OFFSET_ERROR)
|
||||
{
|
||||
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.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,
|
||||
&page_size, &ReinsertList, 0))
|
||||
{
|
||||
case 2:
|
||||
case 2: /* empty */
|
||||
{
|
||||
info->s->state.key_root[keynr] = HA_OFFSET_ERROR;
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
case 0:
|
||||
case 0: /* deleted */
|
||||
{
|
||||
uint nod_flag;
|
||||
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))
|
||||
goto err1;
|
||||
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);
|
||||
last = rt_PAGE_END(page_buf);
|
||||
for (; k < last; k = rt_PAGE_NEXT_KEY(k, key_length, nod_flag))
|
||||
{
|
||||
if (rtree_insert_level(info, keynr, k, key_length,
|
||||
ReinsertList.pages[i].level) == -1)
|
||||
int res;
|
||||
if ((res= rtree_insert_level(info, keynr, k, key_length,
|
||||
ReinsertList.pages[i].level)) == -1)
|
||||
{
|
||||
my_afree((byte*)page_buf);
|
||||
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);
|
||||
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->update= HA_STATE_DELETED;
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
|
||||
err1:
|
||||
return -1;
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
}
|
||||
case 1: /* not found */
|
||||
{
|
||||
my_errno = HA_ERR_KEY_NOT_FOUND;
|
||||
return -1;
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
}
|
||||
default:
|
||||
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 nod_flag = mi_test_if_nod(page_buf);
|
||||
DBUG_ENTER("rtree_add_key");
|
||||
|
||||
if (page_size + key_length + info->s->base.rec_reflength <=
|
||||
keyinfo->block_length)
|
||||
@ -42,22 +43,26 @@ int rtree_add_key(MI_INFO *info, MI_KEYDEF *keyinfo, uchar *key,
|
||||
if (nod_flag)
|
||||
{
|
||||
/* 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);
|
||||
page_size += key_length + nod_flag;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* 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 +
|
||||
info->s->base.rec_reflength);
|
||||
page_size += key_length + info->s->base.rec_reflength;
|
||||
}
|
||||
mi_putint(page_buf, page_size, nod_flag);
|
||||
return 0;
|
||||
DBUG_RETURN(0);
|
||||
}
|
||||
|
||||
return (rtree_split_page(info, keyinfo, page_buf, key, key_length,
|
||||
new_page) ? -1 : 1);
|
||||
DBUG_RETURN((rtree_split_page(info, keyinfo, page_buf, key, key_length,
|
||||
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,
|
||||
uint key_length, my_off_t child_page)
|
||||
{
|
||||
DBUG_ENTER("rtree_set_key_mbr");
|
||||
|
||||
if (!_mi_fetch_keypage(info, keyinfo, child_page,
|
||||
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*/
|
||||
|
@ -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 :
|
||||
info->s->base.rec_reflength);
|
||||
int max_keys= (mi_getint(page)-2) / (full_length);
|
||||
DBUG_ENTER("rtree_split_page");
|
||||
DBUG_PRINT("rtree", ("splitting block"));
|
||||
|
||||
n_dim = keyinfo->keysegs / 2;
|
||||
|
||||
if (!(coord_buf= (double*) my_alloca(n_dim * 2 * sizeof(double) *
|
||||
(max_keys + 1 + 4) +
|
||||
sizeof(SplitStruct) * (max_keys + 1))))
|
||||
return -1;
|
||||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
|
||||
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
|
||||
err_code= _mi_write_keypage(info, keyinfo, *new_page_offs,
|
||||
DFLT_INIT_HITS, new_page);
|
||||
DBUG_PRINT("rtree", ("split new block: %lu", (ulong) *new_page_offs));
|
||||
|
||||
my_afree((byte*)new_page);
|
||||
|
||||
split_err:
|
||||
my_afree((byte*) coord_buf);
|
||||
return err_code;
|
||||
DBUG_RETURN(err_code);
|
||||
}
|
||||
|
||||
#endif /*HAVE_RTREE_KEYS*/
|
||||
|
@ -243,3 +243,10 @@ SET @@session.auto_increment_offset=
|
||||
@bug20830_old_session_auto_increment_offset;
|
||||
SET @@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
|
||||
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) );
|
||||
INSERT INTO t1(foo) VALUES (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;
|
||||
ERROR HY000: Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist
|
||||
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 t2 (b bit(1));
|
||||
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=
|
||||
@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
|
||||
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)));
|
||||
SELECT 1 FROM t1 WHERE foo != PointFromWKB(POINT(0,0));
|
||||
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
|
||||
|
||||
#
|
||||
|
@ -430,6 +430,32 @@ CREATE TABLE tm1(a SMALLINT, b SMALLINT, KEY(a)) ENGINE=MERGE UNION=(t1);
|
||||
SELECT * FROM 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
|
||||
|
||||
#
|
||||
|
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_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_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
|
||||
thr_rwlock.c tree.c typelib.c base64.c my_memmem.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 \
|
||||
default_modify.c default.c \
|
||||
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 \
|
||||
my_gethostbyname.c rijndael.c my_aes.c sha1.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
|
||||
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 \
|
||||
my_wincond.c my_winsem.c my_winthread.c CMakeLists.txt
|
||||
my_wincond.c my_winthread.c CMakeLists.txt
|
||||
libmysys_a_LIBADD = @THREAD_LOBJECTS@
|
||||
# test_dir_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;
|
||||
}
|
||||
|
||||
if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(signal->getSendersBlockRef()) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
if (checkSingleUserMode(signal->getSendersBlockRef()))
|
||||
{
|
||||
jam();
|
||||
parseRecord.errorCode = CreateTableRef::SingleUser;
|
||||
@ -3081,9 +3079,7 @@ Dbdict::execALTER_TABLE_REQ(Signal* signal)
|
||||
return;
|
||||
}
|
||||
|
||||
if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(signal->getSendersBlockRef()) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
if (checkSingleUserMode(signal->getSendersBlockRef()))
|
||||
{
|
||||
jam();
|
||||
alterTableRef(signal, req, AlterTableRef::SingleUser);
|
||||
@ -5414,9 +5410,7 @@ Dbdict::execDROP_TABLE_REQ(Signal* signal){
|
||||
return;
|
||||
}
|
||||
|
||||
if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(signal->getSendersBlockRef()) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
if (checkSingleUserMode(signal->getSendersBlockRef()))
|
||||
{
|
||||
jam();
|
||||
dropTableRef(signal, req, DropTableRef::SingleUser);
|
||||
@ -6553,9 +6547,7 @@ Dbdict::execCREATE_INDX_REQ(Signal* signal)
|
||||
jam();
|
||||
tmperr = CreateIndxRef::Busy;
|
||||
}
|
||||
else if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(senderRef) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
else if (checkSingleUserMode(senderRef))
|
||||
{
|
||||
jam();
|
||||
tmperr = CreateIndxRef::SingleUser;
|
||||
@ -7130,9 +7122,7 @@ Dbdict::execDROP_INDX_REQ(Signal* signal)
|
||||
jam();
|
||||
tmperr = DropIndxRef::Busy;
|
||||
}
|
||||
else if(getNodeState().getSingleUserMode() &&
|
||||
(refToNode(senderRef) !=
|
||||
getNodeState().getSingleUserApi()))
|
||||
else if (checkSingleUserMode(senderRef))
|
||||
{
|
||||
jam();
|
||||
tmperr = DropIndxRef::SingleUser;
|
||||
@ -10574,4 +10564,20 @@ Dbdict::getMetaAttribute(MetaData::Attribute& attr, const MetaData::Table& table
|
||||
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;
|
||||
|
@ -2003,6 +2003,8 @@ private:
|
||||
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, const char* attributeName);
|
||||
|
||||
int checkSingleUserMode(Uint32 senderRef);
|
||||
};
|
||||
|
||||
#endif
|
||||
|
@ -800,7 +800,9 @@ NdbBlob::writeDataPrivate(const char* buf, Uint32 bytes)
|
||||
DBUG_RETURN(-1);
|
||||
Uint32 n = thePartSize - off;
|
||||
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;
|
||||
}
|
||||
memcpy(thePartBuf.data + off, buf, n);
|
||||
|
@ -880,6 +880,7 @@ NdbDictInterface::dictSignal(NdbApiSignal* signal,
|
||||
r = m_transporter->sendSignal(signal, aNodeId);
|
||||
}
|
||||
if(r != 0){
|
||||
m_error.code= 4007;
|
||||
m_transporter->unlock_mutex();
|
||||
continue;
|
||||
}
|
||||
@ -903,7 +904,10 @@ NdbDictInterface::dictSignal(NdbApiSignal* signal,
|
||||
* Handle error codes
|
||||
*/
|
||||
if(m_waiter.m_state == WAIT_NODE_FAILURE)
|
||||
{
|
||||
m_error.code = 4013;
|
||||
continue;
|
||||
}
|
||||
|
||||
if(m_waiter.m_state == WST_WAIT_TIMEOUT)
|
||||
{
|
||||
|
@ -55,7 +55,7 @@ NdbRecAttr::setup(const NdbColumnImpl* anAttrInfo, char* aValue)
|
||||
|
||||
if (theStorageX)
|
||||
delete[] theStorageX;
|
||||
|
||||
|
||||
// check alignment to signal data
|
||||
// a future version could check alignment per data type as well
|
||||
|
||||
@ -181,7 +181,7 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
|
||||
out << "[NULL]";
|
||||
return out;
|
||||
}
|
||||
|
||||
|
||||
const NdbDictionary::Column* c = r.getColumn();
|
||||
uint length = c->getLength();
|
||||
if (length > 1)
|
||||
@ -192,196 +192,200 @@ NdbOut& operator<<(NdbOut& out, const NdbRecAttr &r)
|
||||
if (j > 0)
|
||||
out << " ";
|
||||
|
||||
switch(r.getType())
|
||||
{
|
||||
case NdbDictionary::Column::Bigunsigned:
|
||||
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;
|
||||
}
|
||||
switch(r.getType()){
|
||||
case NdbDictionary::Column::Bigunsigned:
|
||||
out << r.u_64_value();
|
||||
break;
|
||||
case NdbDictionary::Column::Longvarchar:
|
||||
{
|
||||
unsigned len = uint2korr(r.aRef());
|
||||
ndbrecattr_print_string(out,"Longvarchar", r.aRef()+2,len);
|
||||
j = length;
|
||||
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:
|
||||
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)
|
||||
|
@ -137,10 +137,12 @@ ErrorBundle ErrorCodes[] = {
|
||||
/**
|
||||
* Unknown result
|
||||
*/
|
||||
{ 4007, UR, "Send to ndbd node failed" },
|
||||
{ 4008, UR, "Receive from NDB failed" },
|
||||
{ 4009, UR, "Cluster Failure" },
|
||||
{ 4012, UR,
|
||||
"Request ndbd time-out, maybe due to high load or communication problems"},
|
||||
{ 4013, UR, "Request timed out in waiting for node failure"},
|
||||
{ 4024, UR,
|
||||
"Time-out, most likely caused by simple read or cluster failure" },
|
||||
|
||||
|
@ -138,6 +138,7 @@ printusage()
|
||||
<< " 2 readData / writeData" << endl
|
||||
<< "bug tests (no blob test)" << 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 acc crash on delete and long key" << endl
|
||||
;
|
||||
@ -1806,6 +1807,56 @@ bugtest_4088()
|
||||
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
|
||||
bugtest_2222()
|
||||
{
|
||||
@ -1822,7 +1873,8 @@ static struct {
|
||||
int m_bug;
|
||||
int (*m_test)();
|
||||
} g_bugtest[] = {
|
||||
{ 4088, bugtest_4088 }
|
||||
{ 4088, bugtest_4088 },
|
||||
{ 27018, bugtest_27018 }
|
||||
};
|
||||
|
||||
NDB_COMMAND(testOdbcDriver, "testBlobs", "testBlobs", "testBlobs", 65535)
|
||||
|
@ -30,12 +30,14 @@ waitClusterStatus(const char* _addr, ndb_mgm_node_status _status,
|
||||
unsigned int _timeout);
|
||||
|
||||
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;
|
||||
|
||||
static int _no_contact = 0;
|
||||
static int _not_started = 0;
|
||||
static int _single_user = 0;
|
||||
static int _timeout = 120;
|
||||
|
||||
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",
|
||||
(gptr*) &_not_started, (gptr*) &_not_started, 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",
|
||||
(gptr*) &_timeout, (gptr*) &_timeout, 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;
|
||||
}
|
||||
else if (_single_user)
|
||||
{
|
||||
wait_status= NDB_MGM_NODE_STATUS_SINGLEUSER;
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
}
|
||||
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*);
|
||||
if (null_ptr)
|
||||
@ -1407,6 +1407,11 @@ public:
|
||||
Field *new_key_field(MEM_ROOT *root, struct st_table *new_table,
|
||||
char *new_ptr, uchar *new_null_ptr,
|
||||
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)
|
||||
{
|
||||
bit_ptr= bit_ptr_arg;
|
||||
|
@ -342,6 +342,12 @@ int table2myisam(TABLE *table_arg, MI_KEYDEF **keydef_out,
|
||||
RETURN VALUE
|
||||
0 - Equal 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,
|
||||
@ -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 *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 ||
|
||||
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 *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->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 |
|
||||
HA_NULL_IN_KEY | HA_CAN_INDEX_BLOBS | HA_FILE_BASED |
|
||||
HA_CAN_INSERT_DELAYED | HA_ANY_INDEX_MAY_BE_UNIQUE |
|
||||
HA_CAN_BIT_FIELD);
|
||||
HA_ANY_INDEX_MAY_BE_UNIQUE | HA_CAN_BIT_FIELD);
|
||||
}
|
||||
ulong index_flags(uint inx, uint part, bool all_parts) const
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user