summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <georg@lmy002.wdf.sap.corp>2005-07-24 08:12:20 +0200
committerunknown <georg@lmy002.wdf.sap.corp>2005-07-24 08:12:20 +0200
commit0eea2a124bd5c8269a5382da9ac82526a5e2f384 (patch)
treeaab3f32553806a9761a8c97806ac71260754861d /sql
parent53118f40e7a7b6984af2c04373efdaf8ce965972 (diff)
parent478e6f2928cbb0e35731da6712823f7dd2d4a952 (diff)
downloadmariadb-git-0eea2a124bd5c8269a5382da9ac82526a5e2f384.tar.gz
Merge grichter@bk-internal.mysql.com:/home/bk/mysql-5.0
into lmy002.wdf.sap.corp:/home/georg/work/mysql/prod/mysql-5.0
Diffstat (limited to 'sql')
-rw-r--r--sql/ha_federated.cc1
-rw-r--r--sql/item_strfunc.cc2
-rw-r--r--sql/mysql_priv.h9
-rw-r--r--sql/share/errmsg.txt26
-rw-r--r--sql/sql_cache.cc46
-rw-r--r--sql/sql_parse.cc5
-rw-r--r--sql/sql_table.cc14
-rw-r--r--sql/table.cc21
-rw-r--r--sql/unireg.cc12
9 files changed, 94 insertions, 42 deletions
diff --git a/sql/ha_federated.cc b/sql/ha_federated.cc
index bc8aebdfff6..639f09d10ca 100644
--- a/sql/ha_federated.cc
+++ b/sql/ha_federated.cc
@@ -765,7 +765,6 @@ uint ha_federated::convert_row_to_internal_format(byte *record, MYSQL_ROW row)
(*field)->move_field(-old_ptr);
}
- DBUG_DUMP("record", record, table->s->reclength);
DBUG_RETURN(0);
}
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index eb37609c28e..256090d3e61 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2076,7 +2076,6 @@ void Item_func_rpad::fix_length_and_dec()
{
ulonglong length= ((ulonglong) args[1]->val_int() *
collation.collation->mbmaxlen);
- length= max((ulonglong) args[0]->max_length, length);
if (length >= MAX_BLOB_WIDTH)
{
length= MAX_BLOB_WIDTH;
@@ -2164,7 +2163,6 @@ void Item_func_lpad::fix_length_and_dec()
{
ulonglong length= ((ulonglong) args[1]->val_int() *
collation.collation->mbmaxlen);
- length= max((ulonglong) args[0]->max_length, length);
if (length >= MAX_BLOB_WIDTH)
{
length= MAX_BLOB_WIDTH;
diff --git a/sql/mysql_priv.h b/sql/mysql_priv.h
index 3db56a2a9d1..72b308a3075 100644
--- a/sql/mysql_priv.h
+++ b/sql/mysql_priv.h
@@ -526,6 +526,7 @@ struct Query_cache_query_flags
{
unsigned int client_long_flag:1;
unsigned int client_protocol_41:1;
+ unsigned int more_results_exists:1;
uint character_set_client_num;
uint character_set_results_num;
uint collation_connection_num;
@@ -1245,10 +1246,13 @@ void unlock_table_names(THD *thd, TABLE_LIST *table_list,
void unireg_init(ulong options);
void unireg_end(void);
bool mysql_create_frm(THD *thd, my_string file_name,
+ const char *table, const char* db,
HA_CREATE_INFO *create_info,
List<create_field> &create_field,
uint key_count,KEY *key_info,handler *db_type);
-int rea_create_table(THD *thd, my_string file_name,HA_CREATE_INFO *create_info,
+int rea_create_table(THD *thd, my_string file_name,
+ const char *table, const char* db,
+ HA_CREATE_INFO *create_info,
List<create_field> &create_field,
uint key_count,KEY *key_info);
int format_number(uint inputflag,uint max_length,my_string pos,uint length,
@@ -1315,7 +1319,8 @@ ulong make_new_entry(File file,uchar *fileinfo,TYPELIB *formnames,
const char *newname);
ulong next_io_size(ulong pos);
void append_unescaped(String *res, const char *pos, uint length);
-int create_frm(THD *thd, char *name,uint reclength,uchar *fileinfo,
+int create_frm(THD *thd, char *name, const char *table, const char *db,
+ uint reclength,uchar *fileinfo,
HA_CREATE_INFO *create_info, uint keys);
void update_create_info_from_table(HA_CREATE_INFO *info, TABLE *form);
int rename_file_ext(const char * from,const char * to,const char * ext);
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index 4953004cc24..459560ccac8 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -4094,20 +4094,20 @@ ER_ERROR_DURING_CHECKPOINT
swe "Fick fel %d vid CHECKPOINT"
ukr "ïÔÒÉÍÁÎÏ ÐÏÍÉÌËÕ %d Ð¦Ä ÞÁÓ CHECKPOINT"
ER_NEW_ABORTING_CONNECTION 08S01
- cze "Spojen-Bí %ld do databáze: '%-.64s' u¾ivatel: '%-.32s' stroj: `%-.64s' (%-.64s) bylo pøeru¹eno"
- dan "Afbrød forbindelsen %ld til databasen '%-.64s' bruger: '%-.32s' vært: `%-.64s' (%-.64s)"
- nla "Afgebroken verbinding %ld naar db: '%-.64s' gebruiker: '%-.32s' host: `%-.64s' (%-.64s)"
- eng "Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)"
- est "Ühendus katkestatud %ld andmebaas: '%-.64s' kasutaja: '%-.32s' masin: `%-.64s' (%-.64s)"
- fre "Connection %ld avortée vers la bd: '%-.64s' utilisateur: '%-.32s' hôte: `%-.64s' (%-.64s)"
- ger "Verbindungsabbruch %ld zur Datenbank '%-.64s'. Benutzer: '%-.32s', Host: `%-.64s' (%-.64s)"
+ cze "Spojen-Bí %ld do databáze: '%-.64s' u¾ivatel: '%-.32s' stroj: '%-.64s' (%-.64s) bylo pøeru¹eno"
+ dan "Afbrød forbindelsen %ld til databasen '%-.64s' bruger: '%-.32s' vært: '%-.64s' (%-.64s)"
+ nla "Afgebroken verbinding %ld naar db: '%-.64s' gebruiker: '%-.32s' host: '%-.64s' (%-.64s)"
+ eng "Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: '%-.64s' (%-.64s)"
+ est "Ühendus katkestatud %ld andmebaas: '%-.64s' kasutaja: '%-.32s' masin: '%-.64s' (%-.64s)"
+ fre "Connection %ld avortée vers la bd: '%-.64s' utilisateur: '%-.32s' hôte: '%-.64s' (%-.64s)"
+ ger "Verbindungsabbruch %ld zur Datenbank '%-.64s'. Benutzer: '%-.32s', Host: '%-.64s' (%-.64s)"
ita "Interrotta la connessione %ld al db: ''%-.64s' utente: '%-.32s' host: '%-.64s' (%-.64s)"
- por "Conexão %ld abortada para banco de dados '%-.64s' - usuário '%-.32s' - 'host' `%-.64s' ('%-.64s')"
- rus "ðÒÅÒ×ÁÎÏ ÓÏÅÄÉÎÅÎÉÅ %ld Ë ÂÁÚÅ ÄÁÎÎÙÈ '%-.64s' ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' Ó ÈÏÓÔÁ `%-.64s' (%-.64s)"
- serbian "Prekinuta konekcija broj %ld ka bazi: '%-.64s' korisnik je bio: '%-.32s' a host: `%-.64s' (%-.64s)"
- spa "Abortada conexión %ld para db: '%-.64s' usuario: '%-.32s' servidor: `%-.64s' (%-.64s)"
+ por "Conexão %ld abortada para banco de dados '%-.64s' - usuário '%-.32s' - 'host' '%-.64s' ('%-.64s')"
+ rus "ðÒÅÒ×ÁÎÏ ÓÏÅÄÉÎÅÎÉÅ %ld Ë ÂÁÚÅ ÄÁÎÎÙÈ '%-.64s' ÐÏÌØÚÏ×ÁÔÅÌÑ '%-.32s' Ó ÈÏÓÔÁ '%-.64s' (%-.64s)"
+ serbian "Prekinuta konekcija broj %ld ka bazi: '%-.64s' korisnik je bio: '%-.32s' a host: '%-.64s' (%-.64s)"
+ spa "Abortada conexión %ld para db: '%-.64s' usuario: '%-.32s' servidor: '%-.64s' (%-.64s)"
swe "Avbröt länken för tråd %ld till db '%-.64s', användare '%-.32s', host '%-.64s' (%-.64s)"
- ukr "ðÅÒÅÒ×ÁÎÏ Ú'¤ÄÎÁÎÎÑ %ld ÄÏ ÂÁÚÉ ÄÁÎÎÉÈ: '%-.64s' ËÏÒÉÓÔÕ×ÁÞ: '%-.32s' ÈÏÓÔ: `%-.64s' (%-.64s)"
+ ukr "ðÅÒÅÒ×ÁÎÏ Ú'¤ÄÎÁÎÎÑ %ld ÄÏ ÂÁÚÉ ÄÁÎÎÉÈ: '%-.64s' ËÏÒÉÓÔÕ×ÁÞ: '%-.32s' ÈÏÓÔ: '%-.64s' (%-.64s)"
ER_DUMP_NOT_IMPLEMENTED
cze "Handler tabulky nepodporuje bin-Bární dump"
dan "Denne tabeltype unserstøtter ikke binært tabeldump"
@@ -5384,3 +5384,5 @@ ER_CANT_CREATE_FEDERATED_TABLE
eng "Can't create federated table. Foreign data src error : '%-.64s'"
ER_TRG_IN_WRONG_SCHEMA
eng "Trigger in wrong schema"
+ER_STACK_OVERRUN_NEED_MORE
+ eng "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Use 'mysqld -O thread_stack=#' to specify a bigger stack."
diff --git a/sql/sql_cache.cc b/sql/sql_cache.cc
index 3d2d776f74e..15d4f699bc9 100644
--- a/sql/sql_cache.cc
+++ b/sql/sql_cache.cc
@@ -774,10 +774,11 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
Query_cache_query_flags flags;
// fill all gaps between fields with 0 to get repeatable key
bzero(&flags, QUERY_CACHE_FLAGS_SIZE);
- flags.client_long_flag= (thd->client_capabilities & CLIENT_LONG_FLAG ?
- 1 : 0);
- flags.client_protocol_41= (thd->client_capabilities & CLIENT_PROTOCOL_41 ?
- 1 : 0);
+ flags.client_long_flag= test(thd->client_capabilities & CLIENT_LONG_FLAG);
+ flags.client_protocol_41= test(thd->client_capabilities &
+ CLIENT_PROTOCOL_41);
+ flags.more_results_exists= test(thd->server_status &
+ SERVER_MORE_RESULTS_EXISTS);
flags.character_set_client_num=
thd->variables.character_set_client->number;
flags.character_set_results_num=
@@ -791,6 +792,20 @@ void Query_cache::store_query(THD *thd, TABLE_LIST *tables_used)
flags.sql_mode= thd->variables.sql_mode;
flags.max_sort_length= thd->variables.max_sort_length;
flags.group_concat_max_len= thd->variables.group_concat_max_len;
+ DBUG_PRINT("qcache", ("long %d, 4.1: %d, more results %d, \
+CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
+sql mode: 0x%lx, sort len: %lu, conncat len: %lu",
+ (int)flags.client_long_flag,
+ (int)flags.client_protocol_41,
+ (int)flags.more_results_exists,
+ flags.character_set_client_num,
+ flags.character_set_results_num,
+ flags.collation_connection_num,
+ flags.limit,
+ (ulong)flags.time_zone,
+ flags.sql_mode,
+ flags.max_sort_length,
+ flags.group_concat_max_len));
STRUCT_LOCK(&structure_guard_mutex);
if (query_cache_size == 0)
@@ -973,10 +988,11 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
// fill all gaps between fields with 0 to get repeatable key
bzero(&flags, QUERY_CACHE_FLAGS_SIZE);
- flags.client_long_flag= (thd->client_capabilities & CLIENT_LONG_FLAG ?
- 1 : 0);
- flags.client_protocol_41= (thd->client_capabilities & CLIENT_PROTOCOL_41 ?
- 1 : 0);
+ flags.client_long_flag= test(thd->client_capabilities & CLIENT_LONG_FLAG);
+ flags.client_protocol_41= test(thd->client_capabilities &
+ CLIENT_PROTOCOL_41);
+ flags.more_results_exists= test(thd->server_status &
+ SERVER_MORE_RESULTS_EXISTS);
flags.character_set_client_num= thd->variables.character_set_client->number;
flags.character_set_results_num=
(thd->variables.character_set_results ?
@@ -988,6 +1004,20 @@ Query_cache::send_result_to_client(THD *thd, char *sql, uint query_length)
flags.sql_mode= thd->variables.sql_mode;
flags.max_sort_length= thd->variables.max_sort_length;
flags.group_concat_max_len= thd->variables.group_concat_max_len;
+ DBUG_PRINT("qcache", ("long %d, 4.1: %d, more results %d, \
+CS client: %u, CS result: %u, CS conn: %u, limit: %lu, TZ: 0x%lx, \
+sql mode: 0x%lx, sort len: %lu, conncat len: %lu",
+ (int)flags.client_long_flag,
+ (int)flags.client_protocol_41,
+ (int)flags.more_results_exists,
+ flags.character_set_client_num,
+ flags.character_set_results_num,
+ flags.collation_connection_num,
+ flags.limit,
+ (ulong)flags.time_zone,
+ flags.sql_mode,
+ flags.max_sort_length,
+ flags.group_concat_max_len));
memcpy((void *)(sql + (tot_length - QUERY_CACHE_FLAGS_SIZE)),
&flags, QUERY_CACHE_FLAGS_SIZE);
query_block = (Query_cache_block *) hash_search(&queries, (byte*) sql,
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 23403e6e00a..23aa676c8fc 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -5087,8 +5087,9 @@ bool check_stack_overrun(THD *thd, long margin,
if ((stack_used=used_stack(thd->thread_stack,(char*) &stack_used)) >=
(long) (thread_stack - margin))
{
- sprintf(errbuff[0],ER(ER_STACK_OVERRUN),stack_used,thread_stack);
- my_message(ER_STACK_OVERRUN,errbuff[0],MYF(0));
+ sprintf(errbuff[0],ER(ER_STACK_OVERRUN_NEED_MORE),
+ stack_used,thread_stack,margin);
+ my_message(ER_STACK_OVERRUN_NEED_MORE,errbuff[0],MYF(0));
thd->fatal_error();
return 1;
}
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index e91142d450a..e7f573e1680 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -1620,12 +1620,10 @@ bool mysql_create_table(THD *thd,const char *db, const char *table_name,
create_info->data_file_name= create_info->index_file_name= 0;
create_info->table_options=db_options;
- if (rea_create_table(thd, path, create_info, fields, key_count,
+ if (rea_create_table(thd, path, table_name, db,
+ create_info, fields, key_count,
key_info_buffer))
- {
- /* my_error(ER_CANT_CREATE_TABLE,MYF(0),table_name,my_errno); */
goto end;
- }
if (create_info->options & HA_LEX_CREATE_TMP_TABLE)
{
/* Open table and put in temporary table list */
@@ -2660,8 +2658,14 @@ bool mysql_create_like_table(THD* thd, TABLE_LIST* table,
/*
Create a new table by copying from source table
*/
- if (my_copy(src_path, dst_path, MYF(MY_WME|MY_DONT_OVERWRITE_FILE)))
+ if (my_copy(src_path, dst_path, MYF(MY_DONT_OVERWRITE_FILE)))
+ {
+ if (my_errno == ENOENT)
+ my_error(ER_BAD_DB_ERROR,MYF(0),db);
+ else
+ my_error(ER_CANT_CREATE_FILE,MYF(0),dst_path,my_errno);
goto err;
+ }
/*
As mysql_truncate don't work on a new table at this stage of
diff --git a/sql/table.cc b/sql/table.cc
index 220aba27d5b..f20809d7eba 100644
--- a/sql/table.cc
+++ b/sql/table.cc
@@ -702,10 +702,9 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
key_part->key_part_flag|= HA_BIT_PART;
if (i == 0 && key != primary_key)
- field->flags |=
- ((keyinfo->flags & HA_NOSAME) &&
- field->key_length() ==
- keyinfo->key_length ? UNIQUE_KEY_FLAG : MULTIPLE_KEY_FLAG);
+ field->flags |= ((keyinfo->flags & HA_NOSAME) &&
+ (keyinfo->key_parts == 1)) ?
+ UNIQUE_KEY_FLAG : MULTIPLE_KEY_FLAG;
if (i == 0)
field->key_start.set_bit(key);
if (field->key_length() == key_part->length &&
@@ -1343,8 +1342,9 @@ void append_unescaped(String *res, const char *pos, uint length)
/* Create a .frm file */
-File create_frm(THD *thd, register my_string name, uint reclength,
- uchar *fileinfo, HA_CREATE_INFO *create_info, uint keys)
+File create_frm(THD *thd, register my_string name, const char *table,
+ const char *db, uint reclength, uchar *fileinfo,
+ HA_CREATE_INFO *create_info, uint keys)
{
register File file;
ulong length;
@@ -1367,7 +1367,7 @@ File create_frm(THD *thd, register my_string name, uint reclength,
*/
set_if_smaller(create_info->raid_chunks, 255);
- if ((file= my_create(name, CREATE_MODE, create_flags, MYF(MY_WME))) >= 0)
+ if ((file= my_create(name, CREATE_MODE, create_flags, MYF(0))) >= 0)
{
uint key_length, tmp_key_length;
uint tmp;
@@ -1414,6 +1414,13 @@ File create_frm(THD *thd, register my_string name, uint reclength,
}
}
}
+ else
+ {
+ if (my_errno == ENOENT)
+ my_error(ER_BAD_DB_ERROR,MYF(0),db);
+ else
+ my_error(ER_CANT_CREATE_TABLE,MYF(0),table,my_errno);
+ }
return (file);
} /* create_frm */
diff --git a/sql/unireg.cc b/sql/unireg.cc
index 7f170b3ef87..47bd713075e 100644
--- a/sql/unireg.cc
+++ b/sql/unireg.cc
@@ -55,6 +55,8 @@ static bool make_empty_rec(THD *thd, int file, enum db_type table_type,
mysql_create_frm()
thd Thread handler
file_name Name of file (including database and .frm)
+ table Name of table
+ db Name of database
create_info create info parameters
create_fields Fields to create
keys number of keys to create
@@ -67,6 +69,7 @@ static bool make_empty_rec(THD *thd, int file, enum db_type table_type,
*/
bool mysql_create_frm(THD *thd, my_string file_name,
+ const char *table, const char *db,
HA_CREATE_INFO *create_info,
List<create_field> &create_fields,
uint keys, KEY *key_info,
@@ -113,7 +116,7 @@ bool mysql_create_frm(THD *thd, my_string file_name,
}
reclength=uint2korr(forminfo+266);
- if ((file=create_frm(thd, file_name, reclength, fileinfo,
+ if ((file=create_frm(thd, file_name, table, db, reclength, fileinfo,
create_info, keys)) < 0)
{
my_free((gptr) screen_buff,MYF(0));
@@ -211,9 +214,11 @@ err3:
Create a frm (table definition) file and the tables
SYNOPSIS
- mysql_create_frm()
+ rea_create_table()
thd Thread handler
file_name Name of file (including database and .frm)
+ table Name of table
+ db Name of database
create_info create info parameters
create_fields Fields to create
keys number of keys to create
@@ -226,13 +231,14 @@ err3:
*/
int rea_create_table(THD *thd, my_string file_name,
+ const char *table, const char *db,
HA_CREATE_INFO *create_info,
List<create_field> &create_fields,
uint keys, KEY *key_info)
{
DBUG_ENTER("rea_create_table");
- if (mysql_create_frm(thd, file_name, create_info,
+ if (mysql_create_frm(thd, file_name, table, db, create_info,
create_fields, keys, key_info, NULL))
DBUG_RETURN(1);
if (!create_info->frm_only && ha_create_table(file_name,create_info,0))