mirror of
https://github.com/MariaDB/server.git
synced 2025-07-27 18:02:13 +03:00
Move init_compiled_charsets to own file
Remove dependency of charsets (in my_init) to get smaller binaries when charsets are not used Simple code cleanup
This commit is contained in:
@ -1474,6 +1474,7 @@ static void print_help_item(MYSQL_ROW *cur, int num_name, int num_cat, char *las
|
|||||||
tee_fprintf(PAGER, " %s\n", (*cur)[num_name]);
|
tee_fprintf(PAGER, " %s\n", (*cur)[num_name]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int com_server_help(String *buffer __attribute__((unused)),
|
static int com_server_help(String *buffer __attribute__((unused)),
|
||||||
char *line __attribute__((unused)), char *help_arg)
|
char *line __attribute__((unused)), char *help_arg)
|
||||||
{
|
{
|
||||||
@ -1575,23 +1576,19 @@ com_help(String *buffer __attribute__((unused)),
|
|||||||
char * help_arg= strchr(line,' ');
|
char * help_arg= strchr(line,' ');
|
||||||
|
|
||||||
if (help_arg)
|
if (help_arg)
|
||||||
{
|
|
||||||
return com_server_help(buffer,line,help_arg+1);
|
return com_server_help(buffer,line,help_arg+1);
|
||||||
}
|
|
||||||
else
|
put_info("\nFor the complete MySQL Manual online visit:\n http://www.mysql.com/documentation\n", INFO_INFO);
|
||||||
|
put_info("For info on technical support from MySQL developers visit:\n http://www.mysql.com/support\n", INFO_INFO);
|
||||||
|
put_info("For info on MySQL books, utilities, consultants, etc. visit:\n http://www.mysql.com/portal\n", INFO_INFO);
|
||||||
|
put_info("List of all MySQL commands:", INFO_INFO);
|
||||||
|
if (!named_cmds)
|
||||||
|
put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO);
|
||||||
|
for (i = 0; commands[i].name; i++)
|
||||||
{
|
{
|
||||||
put_info("\nFor the complete MySQL Manual online visit:\n http://www.mysql.com/documentation\n", INFO_INFO);
|
if (commands[i].func)
|
||||||
put_info("For info on technical support from MySQL developers visit:\n http://www.mysql.com/support\n", INFO_INFO);
|
tee_fprintf(stdout, "%s\t(\\%c)\t%s\n", commands[i].name,
|
||||||
put_info("For info on MySQL books, utilities, consultants, etc. visit:\n http://www.mysql.com/portal\n", INFO_INFO);
|
commands[i].cmd_char, commands[i].doc);
|
||||||
put_info("List of all MySQL commands:", INFO_INFO);
|
|
||||||
if (!named_cmds)
|
|
||||||
put_info("Note that all text commands must be first on line and end with ';'",INFO_INFO);
|
|
||||||
for (i = 0; commands[i].name; i++)
|
|
||||||
{
|
|
||||||
if (commands[i].func)
|
|
||||||
tee_fprintf(stdout, "%s\t(\\%c)\t%s\n", commands[i].name,
|
|
||||||
commands[i].cmd_char, commands[i].doc);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (connected && mysql_get_server_version(&mysql) >= 40100)
|
if (connected && mysql_get_server_version(&mysql) >= 40100)
|
||||||
put_info("\nFor server side help, type 'help all'\n", INFO_INFO);
|
put_info("\nFor server side help, type 'help all'\n", INFO_INFO);
|
||||||
|
@ -220,7 +220,8 @@ extern CHARSET_INFO *get_charset_by_csname(const char *cs_name,
|
|||||||
extern void free_charsets(void);
|
extern void free_charsets(void);
|
||||||
extern char *get_charsets_dir(char *buf);
|
extern char *get_charsets_dir(char *buf);
|
||||||
extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
|
extern my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2);
|
||||||
|
extern my_bool init_compiled_charsets(myf flags);
|
||||||
|
extern void add_compiled_collation(CHARSET_INFO *cs);
|
||||||
|
|
||||||
/* statistics */
|
/* statistics */
|
||||||
extern ulong my_cache_w_requests, my_cache_write, my_cache_r_requests,
|
extern ulong my_cache_w_requests, my_cache_write, my_cache_r_requests,
|
||||||
|
@ -278,7 +278,7 @@ typedef struct st_mysql_res {
|
|||||||
#define MANAGER_CLIENT_ERR 450
|
#define MANAGER_CLIENT_ERR 450
|
||||||
#define MANAGER_INTERNAL_ERR 500
|
#define MANAGER_INTERNAL_ERR 500
|
||||||
|
|
||||||
#ifndef MYSQL_SERVER
|
#if !defined(MYSQL_SERVER) && !defined(MYSQL_CLIENT)
|
||||||
#define MYSQL_CLIENT
|
#define MYSQL_CLIENT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ mysysobjects1 = my_init.lo my_static.lo my_malloc.lo my_realloc.lo \
|
|||||||
mf_loadpath.lo my_pthread.lo my_thr_init.lo \
|
mf_loadpath.lo my_pthread.lo my_thr_init.lo \
|
||||||
thr_mutex.lo mulalloc.lo string.lo default.lo \
|
thr_mutex.lo mulalloc.lo string.lo default.lo \
|
||||||
my_compress.lo array.lo my_once.lo list.lo my_net.lo \
|
my_compress.lo array.lo my_once.lo list.lo my_net.lo \
|
||||||
charset.lo hash.lo mf_iocache.lo \
|
charset.lo charset-def.lo hash.lo mf_iocache.lo \
|
||||||
mf_iocache2.lo my_seek.lo my_sleep.lo \
|
mf_iocache2.lo my_seek.lo my_sleep.lo \
|
||||||
my_pread.lo mf_cache.lo md5.lo sha1.lo\
|
my_pread.lo mf_cache.lo md5.lo sha1.lo\
|
||||||
my_getopt.lo my_gethostbyname.lo my_port.lo
|
my_getopt.lo my_gethostbyname.lo my_port.lo
|
||||||
|
@ -50,7 +50,7 @@ libmysys_a_SOURCES = my_init.c my_getwd.c mf_getdate.c\
|
|||||||
my_getopt.c my_mkdir.c \
|
my_getopt.c my_mkdir.c \
|
||||||
default.c my_compress.c checksum.c raid.cc \
|
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_semaphore.c my_port.c my_sleep.c \
|
||||||
charset.c my_bitmap.c my_bit.c md5.c \
|
charset.c charset-def.c my_bitmap.c my_bit.c md5.c \
|
||||||
my_gethostbyname.c rijndael.c my_aes.c sha1.c \
|
my_gethostbyname.c rijndael.c my_aes.c sha1.c \
|
||||||
my_handler.c my_netware.c
|
my_handler.c my_netware.c
|
||||||
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
|
EXTRA_DIST = thr_alarm.c thr_lock.c my_pthread.c my_thr_init.c \
|
||||||
|
93
mysys/charset-def.c
Normal file
93
mysys/charset-def.c
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
/* Copyright (C) 2000 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; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
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 */
|
||||||
|
|
||||||
|
#include "mysys_priv.h"
|
||||||
|
|
||||||
|
/*
|
||||||
|
Include all compiled character sets into the client
|
||||||
|
If a client don't want to use all of them, he can define his own
|
||||||
|
init_compiled_charsets() that only adds those that he wants
|
||||||
|
*/
|
||||||
|
|
||||||
|
my_bool init_compiled_charsets(myf flags __attribute__((unused)))
|
||||||
|
{
|
||||||
|
CHARSET_INFO *cs;
|
||||||
|
|
||||||
|
add_compiled_collation(&my_charset_bin);
|
||||||
|
|
||||||
|
add_compiled_collation(&my_charset_latin1);
|
||||||
|
add_compiled_collation(&my_charset_latin1_bin);
|
||||||
|
add_compiled_collation(&my_charset_latin1_german2_ci);
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_big5
|
||||||
|
add_compiled_collation(&my_charset_big5_chinese_ci);
|
||||||
|
add_compiled_collation(&my_charset_big5_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_cp1250
|
||||||
|
add_compiled_collation(&my_charset_cp1250_czech_ci);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_latin2
|
||||||
|
add_compiled_collation(&my_charset_latin2_czech_ci);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_euckr
|
||||||
|
add_compiled_collation(&my_charset_euckr_korean_ci);
|
||||||
|
add_compiled_collation(&my_charset_euckr_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_gb2312
|
||||||
|
add_compiled_collation(&my_charset_gb2312_chinese_ci);
|
||||||
|
add_compiled_collation(&my_charset_gb2312_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_gbk
|
||||||
|
add_compiled_collation(&my_charset_gbk_chinese_ci);
|
||||||
|
add_compiled_collation(&my_charset_gbk_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_sjis
|
||||||
|
add_compiled_collation(&my_charset_sjis_japanese_ci);
|
||||||
|
add_compiled_collation(&my_charset_sjis_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_tis620
|
||||||
|
add_compiled_collation(&my_charset_tis620_thai_ci);
|
||||||
|
add_compiled_collation(&my_charset_tis620_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_ucs2
|
||||||
|
add_compiled_collation(&my_charset_ucs2_general_ci);
|
||||||
|
add_compiled_collation(&my_charset_ucs2_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_ujis
|
||||||
|
add_compiled_collation(&my_charset_ujis_japanese_ci);
|
||||||
|
add_compiled_collation(&my_charset_ujis_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef HAVE_CHARSET_utf8
|
||||||
|
add_compiled_collation(&my_charset_utf8_general_ci);
|
||||||
|
add_compiled_collation(&my_charset_utf8_bin);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Copy compiled charsets */
|
||||||
|
for (cs=compiled_charsets; cs->name; cs++)
|
||||||
|
add_compiled_collation(cs);
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
}
|
101
mysys/charset.c
101
mysys/charset.c
@ -21,9 +21,18 @@
|
|||||||
#include <my_dir.h>
|
#include <my_dir.h>
|
||||||
#include <my_xml.h>
|
#include <my_xml.h>
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int nchars;
|
||||||
|
MY_UNI_IDX uidx;
|
||||||
|
} uni_idx;
|
||||||
|
|
||||||
|
#define PLANE_SIZE 0x100
|
||||||
|
#define PLANE_NUM 0x100
|
||||||
|
#define PLANE_NUMBER(x) (((x)>>8) % PLANE_NUM)
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
The code below implements this functionality:
|
The code below implements this functionality:
|
||||||
|
|
||||||
- Initializing charset related structures
|
- Initializing charset related structures
|
||||||
@ -38,6 +47,7 @@ my_bool my_charset_same(CHARSET_INFO *cs1, CHARSET_INFO *cs2)
|
|||||||
return ((cs1 == cs2) || !strcmp(cs1->csname,cs2->csname));
|
return ((cs1 == cs2) || !strcmp(cs1->csname,cs2->csname));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void set_max_sort_char(CHARSET_INFO *cs)
|
static void set_max_sort_char(CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
uchar max_char;
|
uchar max_char;
|
||||||
@ -110,37 +120,21 @@ static void init_state_maps(CHARSET_INFO *cs)
|
|||||||
state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX;
|
state_map[(uchar)'x']= state_map[(uchar)'X']= (uchar) MY_LEX_IDENT_OR_HEX;
|
||||||
state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN;
|
state_map[(uchar)'b']= state_map[(uchar)'b']= (uchar) MY_LEX_IDENT_OR_BIN;
|
||||||
state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR;
|
state_map[(uchar)'n']= state_map[(uchar)'N']= (uchar) MY_LEX_IDENT_OR_NCHAR;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void simple_cs_init_functions(CHARSET_INFO *cs)
|
static void simple_cs_init_functions(CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (cs->state & MY_CS_BINSORT)
|
if (cs->state & MY_CS_BINSORT)
|
||||||
{
|
|
||||||
cs->coll= &my_collation_8bit_bin_handler;
|
cs->coll= &my_collation_8bit_bin_handler;
|
||||||
}
|
|
||||||
else
|
else
|
||||||
{
|
|
||||||
cs->coll= &my_collation_8bit_simple_ci_handler;
|
cs->coll= &my_collation_8bit_simple_ci_handler;
|
||||||
}
|
|
||||||
|
|
||||||
cs->cset= &my_charset_8bit_handler;
|
cs->cset= &my_charset_8bit_handler;
|
||||||
cs->mbmaxlen = 1;
|
cs->mbmaxlen = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
int nchars;
|
|
||||||
MY_UNI_IDX uidx;
|
|
||||||
} uni_idx;
|
|
||||||
|
|
||||||
#define PLANE_SIZE 0x100
|
|
||||||
#define PLANE_NUM 0x100
|
|
||||||
#define PLANE_NUMBER(x) (((x)>>8) % PLANE_NUM)
|
|
||||||
|
|
||||||
static int pcmp(const void * f, const void * s)
|
static int pcmp(const void * f, const void * s)
|
||||||
{
|
{
|
||||||
const uni_idx *F= (const uni_idx*) f;
|
const uni_idx *F= (const uni_idx*) f;
|
||||||
@ -401,82 +395,13 @@ char *get_charsets_dir(char *buf)
|
|||||||
CHARSET_INFO *all_charsets[256];
|
CHARSET_INFO *all_charsets[256];
|
||||||
CHARSET_INFO *default_charset_info = &my_charset_latin1;
|
CHARSET_INFO *default_charset_info = &my_charset_latin1;
|
||||||
|
|
||||||
static void add_compiled_collation(CHARSET_INFO *cs)
|
void add_compiled_collation(CHARSET_INFO *cs)
|
||||||
{
|
{
|
||||||
all_charsets[cs->number]= cs;
|
all_charsets[cs->number]= cs;
|
||||||
cs->state|= MY_CS_AVAILABLE;
|
cs->state|= MY_CS_AVAILABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static my_bool init_compiled_charsets(myf flags __attribute__((unused)))
|
|
||||||
{
|
|
||||||
CHARSET_INFO *cs;
|
|
||||||
|
|
||||||
add_compiled_collation(&my_charset_bin);
|
|
||||||
|
|
||||||
add_compiled_collation(&my_charset_latin1);
|
|
||||||
add_compiled_collation(&my_charset_latin1_bin);
|
|
||||||
add_compiled_collation(&my_charset_latin1_german2_ci);
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_big5
|
|
||||||
add_compiled_collation(&my_charset_big5_chinese_ci);
|
|
||||||
add_compiled_collation(&my_charset_big5_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_cp1250
|
|
||||||
add_compiled_collation(&my_charset_cp1250_czech_ci);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_latin2
|
|
||||||
add_compiled_collation(&my_charset_latin2_czech_ci);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_euckr
|
|
||||||
add_compiled_collation(&my_charset_euckr_korean_ci);
|
|
||||||
add_compiled_collation(&my_charset_euckr_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_gb2312
|
|
||||||
add_compiled_collation(&my_charset_gb2312_chinese_ci);
|
|
||||||
add_compiled_collation(&my_charset_gb2312_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_gbk
|
|
||||||
add_compiled_collation(&my_charset_gbk_chinese_ci);
|
|
||||||
add_compiled_collation(&my_charset_gbk_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_sjis
|
|
||||||
add_compiled_collation(&my_charset_sjis_japanese_ci);
|
|
||||||
add_compiled_collation(&my_charset_sjis_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_tis620
|
|
||||||
add_compiled_collation(&my_charset_tis620_thai_ci);
|
|
||||||
add_compiled_collation(&my_charset_tis620_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_ucs2
|
|
||||||
add_compiled_collation(&my_charset_ucs2_general_ci);
|
|
||||||
add_compiled_collation(&my_charset_ucs2_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_ujis
|
|
||||||
add_compiled_collation(&my_charset_ujis_japanese_ci);
|
|
||||||
add_compiled_collation(&my_charset_ujis_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef HAVE_CHARSET_utf8
|
|
||||||
add_compiled_collation(&my_charset_utf8_general_ci);
|
|
||||||
add_compiled_collation(&my_charset_utf8_bin);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Copy compiled charsets */
|
|
||||||
for (cs=compiled_charsets; cs->name; cs++)
|
|
||||||
add_compiled_collation(cs);
|
|
||||||
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef __NETWARE__
|
#ifdef __NETWARE__
|
||||||
my_bool STDCALL init_available_charsets(myf myflags)
|
my_bool STDCALL init_available_charsets(myf myflags)
|
||||||
|
@ -130,7 +130,6 @@ void my_end(int infoflag)
|
|||||||
DBUG_PRINT("error",("%s",errbuff[0]));
|
DBUG_PRINT("error",("%s",errbuff[0]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
free_charsets();
|
|
||||||
my_once_free();
|
my_once_free();
|
||||||
if (infoflag & MY_GIVE_INFO || info_file != stderr)
|
if (infoflag & MY_GIVE_INFO || info_file != stderr)
|
||||||
{
|
{
|
||||||
|
@ -150,7 +150,7 @@ then
|
|||||||
INSERT INTO user (host,user) values ('$hostname','');"
|
INSERT INTO user (host,user) values ('$hostname','');"
|
||||||
else
|
else
|
||||||
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
i_u="INSERT INTO user VALUES ('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);"
|
||||||
if test "$windows" -eq 0
|
if test "$windows" = "0"
|
||||||
then
|
then
|
||||||
i_u="$i_u
|
i_u="$i_u
|
||||||
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
INSERT INTO user VALUES ('$hostname','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0);
|
||||||
|
@ -99,3 +99,38 @@ ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
|
|||||||
ALTER TABLE host
|
ALTER TABLE host
|
||||||
ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
ADD Create_tmp_table_priv enum('N','Y') DEFAULT 'N' NOT NULL,
|
||||||
ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
|
ADD Lock_tables_priv enum('N','Y') DEFAULT 'N' NOT NULL;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Create some possible missing tables
|
||||||
|
#
|
||||||
|
CREATE TABLE IF NOT EXISTS help_topic (
|
||||||
|
help_topic_id int unsigned not null,
|
||||||
|
name varchar(64) not null,
|
||||||
|
help_category_id smallint unsigned not null,
|
||||||
|
description text not null,
|
||||||
|
example text not null,
|
||||||
|
url varchar(128) not null,
|
||||||
|
primary key (help_topic_id), unique index (name)
|
||||||
|
) comment='help topics';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS help_category (
|
||||||
|
help_category_id smallint unsigned not null,
|
||||||
|
name varchar(64) not null,
|
||||||
|
parent_category_id smallint unsigned null,
|
||||||
|
url varchar(128) not null,
|
||||||
|
primary key (help_category_id),
|
||||||
|
unique index (name)
|
||||||
|
) comment='help categories';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS help_relation (
|
||||||
|
help_topic_id int unsigned not null references help_topic,
|
||||||
|
help_keyword_id int unsigned not null references help_keyword,
|
||||||
|
primary key (help_keyword_id, help_topic_id)
|
||||||
|
) comment='keyword-topic relation';
|
||||||
|
|
||||||
|
CREATE TABLE IF NOT EXISTS help_keyword (
|
||||||
|
help_keyword_id int unsigned not null,
|
||||||
|
name varchar(64) not null,
|
||||||
|
primary key (help_keyword_id),
|
||||||
|
unique index (name)
|
||||||
|
) comment='help keywords';
|
||||||
|
@ -172,13 +172,15 @@ int mysql_insert(THD *thd,TABLE_LIST *table_list,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((table= delayed_get_table(thd,table_list)) && !thd->is_fatal_error)
|
if ((table= delayed_get_table(thd,table_list)) && !thd->is_fatal_error)
|
||||||
if (table_list->next && table)
|
{
|
||||||
|
res= 0;
|
||||||
|
if (table_list->next) /* if sub select */
|
||||||
res= open_and_lock_tables(thd, table_list->next);
|
res= open_and_lock_tables(thd, table_list->next);
|
||||||
else
|
}
|
||||||
res= (table == 0);
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
lock_type=TL_WRITE;
|
/* Too many delayed insert threads; Use a normal insert */
|
||||||
|
table_list->lock_type= lock_type= TL_WRITE;
|
||||||
res= open_and_lock_tables(thd, table_list);
|
res= open_and_lock_tables(thd, table_list);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user