Below is the list of changes that have just been committed into a local
5.0 repository of pem. When pem does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
ChangeSet
1.1980 05/12/06 13:34:18 pem@stripped +9 -0
Merge mysql.com:/usr/local/bk/mysql-5.0
into mysql.com:/usr/home/pem/bug14233/mysql-5.0
sql/share/errmsg.txt
1.54 05/12/06 13:34:10 pem@stripped +0 -0
SCCS merged
sql/sql_yacc.yy
1.443 05/12/06 13:20:53 pem@stripped +0 -0
Auto merged
sql/sql_trigger.h
1.16 05/12/06 13:20:53 pem@stripped +0 -0
Auto merged
sql/sql_parse.cc
1.523 05/12/06 13:20:53 pem@stripped +0 -0
Auto merged
sql/sql_base.cc
1.316 05/12/06 13:20:52 pem@stripped +0 -0
Auto merged
sql/sp.h
1.31 05/12/06 13:20:52 pem@stripped +0 -0
Auto merged
sql/sp.cc
1.99 05/12/06 13:20:52 pem@stripped +0 -0
Auto merged
mysql-test/t/sp.test
1.163 05/12/06 13:20:52 pem@stripped +0 -0
Auto merged
mysql-test/r/sp-error.result
1.94 05/12/06 13:20:52 pem@stripped +0 -0
Auto merged
# This is a BitKeeper patch. What follows are the unified diffs for the
# set of deltas contained in the patch. The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User: pem
# Host: mysql.comhem.se
# Root: /usr/home/pem/bug14233/mysql-5.0/RESYNC
--- 1.315/sql/sql_base.cc 2005-11-25 17:09:18 +01:00
+++ 1.316/sql/sql_base.cc 2005-12-06 13:20:52 +01:00
@@ -37,11 +37,11 @@
TABLE_LIST *table_list, MEM_ROOT *mem_root);
static void free_cache_entry(TABLE *entry);
static void mysql_rm_tmp_tables(void);
-static my_bool open_new_frm(const char *path, const char *alias,
- const char *db, const char *table_name,
- uint db_stat, uint prgflag,
- uint ha_open_flags, TABLE *outparam,
- TABLE_LIST *table_desc, MEM_ROOT *mem_root);
+static bool open_new_frm(THD *thd, const char *path, const char *alias,
+ const char *db, const char *table_name,
+ uint db_stat, uint prgflag,
+ uint ha_open_flags, TABLE *outparam,
+ TABLE_LIST *table_desc, MEM_ROOT *mem_root);
extern "C" byte *table_cache_key(const byte *record,uint *length,
my_bool not_used __attribute__((unused)))
@@ -311,7 +311,8 @@
thd->proc_info="Flushing tables";
close_old_data_files(thd,thd->open_tables,1,1);
- mysql_ha_flush(thd, tables, MYSQL_HA_REOPEN_ON_USAGE | MYSQL_HA_FLUSH_ALL);
+ mysql_ha_flush(thd, tables, MYSQL_HA_REOPEN_ON_USAGE | MYSQL_HA_FLUSH_ALL,
+ TRUE);
bool found=1;
/* Wait until all threads has closed all the tables we had locked */
DBUG_PRINT("info",
@@ -1087,6 +1088,11 @@
/* find a unused table in the open table cache */
if (refresh)
*refresh=0;
+
+ /* an open table operation needs a lot of the stack space */
+ if (check_stack_overrun(thd, STACK_MIN_SIZE_FOR_OPEN, (char *)&alias))
+ return 0;
+
if (thd->killed)
DBUG_RETURN(0);
key_length= (uint) (strmov(strmov(key, table_list->db)+1,
@@ -1193,22 +1199,22 @@
*/
{
char path[FN_REFLEN];
+ db_type not_used;
strxnmov(path, FN_REFLEN, mysql_data_home, "/", table_list->db, "/",
table_list->table_name, reg_ext, NullS);
(void) unpack_filename(path, path);
- if (mysql_frm_type(path) == FRMTYPE_VIEW)
+ if (mysql_frm_type(thd, path, ¬_used) == FRMTYPE_VIEW)
{
- TABLE tab;// will not be used (because it's VIEW) but have to be passed
+ /*
+ Will not be used (because it's VIEW) but has to be passed.
+ Also we will not free it (because it is a stack variable).
+ */
+ TABLE tab;
table= &tab;
VOID(pthread_mutex_lock(&LOCK_open));
- if (open_unireg_entry(thd, table, table_list->db,
- table_list->table_name,
- alias, table_list, mem_root))
- {
- table->next=table->prev=table;
- free_cache_entry(table);
- }
- else
+ if (!open_unireg_entry(thd, table, table_list->db,
+ table_list->table_name,
+ alias, table_list, mem_root))
{
DBUG_ASSERT(table_list->view != 0);
VOID(pthread_mutex_unlock(&LOCK_open));
@@ -1237,7 +1243,7 @@
/* close handler tables which are marked for flush */
if (thd->handler_tables)
- mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE);
+ mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE, TRUE);
for (table=(TABLE*) hash_search(&open_cache,(byte*) key,key_length) ;
table && table->in_use ;
@@ -1641,7 +1647,7 @@
{
thd->some_tables_deleted=0;
close_old_data_files(thd,thd->open_tables,0,dropping_tables != 0);
- mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE);
+ mysql_ha_flush(thd, (TABLE_LIST*) NULL, MYSQL_HA_REOPEN_ON_USAGE, TRUE);
if (!table_is_used(thd->open_tables,1))
break;
(void) pthread_cond_wait(&COND_refresh,&LOCK_open);
@@ -1755,7 +1761,7 @@
thd->open_options, entry)) &&
(error != 5 ||
(fn_format(path, path, 0, reg_ext, MY_UNPACK_FILENAME),
- open_new_frm(path, alias, db, name,
+ open_new_frm(thd, path, alias, db, name,
(uint) (HA_OPEN_KEYFILE | HA_OPEN_RNDFILE |
HA_GET_INDEX | HA_TRY_READ_ONLY),
READ_KEYINFO | COMPUTE_TYPES | EXTRA_RECORD,
@@ -2665,7 +2671,7 @@
if (my_delete(path,MYF(0)))
error=1; /* purecov: inspected */
*fn_ext(path)='\0'; // remove extension
- handler *file=get_new_handler((TABLE*) 0, base);
+ handler *file= get_new_handler((TABLE*) 0, current_thd->mem_root, base);
if (file && file->delete_table(path))
{
error=1;
@@ -2736,16 +2742,14 @@
{
if (!check_grants)
return FALSE;
- Security_context *save_security_ctx= 0;
+ Security_context *save_security_ctx= thd->security_ctx;
bool res;
if (sctx)
{
- save_security_ctx= thd->security_ctx;
thd->security_ctx= sctx;
}
res= check_grant_column(thd, grant, db, table, name, length);
- if (save_security_ctx)
- thd->security_ctx= save_security_ctx;
+ thd->security_ctx= save_security_ctx;
return res;
}
#endif
@@ -5291,6 +5295,7 @@
SYNOPSIS
open_new_frm()
+ THD thread handler
path path to .frm
alias alias for table
db database
@@ -5304,8 +5309,8 @@
mem_root temporary MEM_ROOT for parsing
*/
-static my_bool
-open_new_frm(const char *path, const char *alias,
+static bool
+open_new_frm(THD *thd, const char *path, const char *alias,
const char *db, const char *table_name,
uint db_stat, uint prgflag,
uint ha_open_flags, TABLE *outparam, TABLE_LIST *table_desc,
@@ -5327,7 +5332,7 @@
my_error(ER_WRONG_OBJECT, MYF(0), db, table_name, "BASE TABLE");
goto err;
}
- if (mysql_make_view(parser, table_desc))
+ if (mysql_make_view(thd, parser, table_desc))
goto err;
}
else
--- 1.522/sql/sql_parse.cc 2005-12-04 19:55:16 +01:00
+++ 1.523/sql/sql_parse.cc 2005-12-06 13:20:53 +01:00
@@ -4133,14 +4133,6 @@
}
}
#endif
- if (lex->sphead->m_type == TYPE_ENUM_FUNCTION &&
- !(lex->sphead->m_flags & sp_head::HAS_RETURN))
- {
- my_error(ER_SP_NORETURN, MYF(0), name);
- delete lex->sphead;
- lex->sphead= 0;
- goto error;
- }
/*
We need to copy name and db in order to use them for
--- 1.442/sql/sql_yacc.yy 2005-12-02 20:19:21 +01:00
+++ 1.443/sql/sql_yacc.yy 2005-12-06 13:20:53 +01:00
@@ -1407,6 +1407,11 @@
YYABORT;
lex->sql_command= SQLCOM_CREATE_SPFUNCTION;
sp->init_strings(YYTHD, lex, lex->spname);
+ if (!(sp->m_flags & sp_head::HAS_RETURN))
+ {
+ my_error(ER_SP_NORETURN, MYF(0), sp->m_qname.str);
+ YYABORT;
+ }
/* Restore flag if it was cleared above */
if (sp->m_old_cmq)
YYTHD->client_capabilities |= CLIENT_MULTI_QUERIES;
--- 1.53/sql/share/errmsg.txt 2005-11-25 17:09:18 +01:00
+++ 1.54/sql/share/errmsg.txt 2005-12-06 13:34:10 +01:00
@@ -132,7 +132,7 @@
est "Ei suuda luua andmebaasi '%-.64s': andmebaas juba eksisteerib"
- ger "Kann Datenbank '%-.64s' nicht erzeugen. Datenbank '%-.64s' existiert bereits"
+ ger "Kann Datenbank '%-.64s' nicht erzeugen. Datenbank existiert bereits"
hun "Az '%-.64s' adatbazis nem hozhato letre Az adatbazis mar letezik"
ita "Impossibile creare il database '%-.64s'; il database esiste"
@@ -157,7 +157,7 @@
est "Ei suuda kustutada andmebaasi '%-.64s': andmebaasi ei eksisteeri"
fre "Ne peut effacer la base '%-.64s'; elle n'existe pas"
hun "A(z) '%-.64s' adatbazis nem szuntetheto meg. Az adatbazis nem letezik"
ita "Impossibile cancellare '%-.64s'; il database non esiste"
@@ -182,7 +182,7 @@
est "Viga andmebaasi kustutamisel (ei suuda kustutada faili '%-.64s', veakood: %d)"
fre "Ne peut effacer la base '%-.64s' (erreur %d)"
hun "Adatbazis megszuntetesi hiba ('%-.64s' nem torolheto, hibakod: %d)"
ita "Errore durante la cancellazione del database (impossibile cancellare '%-.64s', errno: %d)"
@@ -207,7 +207,7 @@
est "Viga andmebaasi kustutamisel (ei suuda kustutada kataloogi '%-.64s', veakood: %d)"
hun "Adatbazis megszuntetesi hiba ('%-.64s' nem szuntetheto meg, hibakod: %d)"
ita "Errore durante la cancellazione del database (impossibile rmdir '%-.64s', errno: %d)"
@@ -357,7 +357,7 @@
est "Ei suuda avada faili '%-.64s' (veakood: %d)"
fre "Ne peut ouvrir le fichier: '%-.64s' (Errcode: %d)"
hun "A '%-.64s' file nem nyithato meg (hibakod: %d)"
ita "Impossibile aprire il file: '%-.64s' (errno: %d)"
@@ -702,7 +702,7 @@
eng "Got error %d from storage engine"
est "Tabeli handler tagastas vea %d"
- ger "Fehler %d (Tabellenhandler)"
+ ger "Fehler %d (Speicher-Engine)"
hun "%d hibajelzes a tablakezelotol"
ita "Rilevato l'errore %d dal gestore delle tabelle"
@@ -726,7 +726,7 @@
eng "Table storage engine for '%-.64s' doesn't have this option"
est "Tabeli '%-.64s' handler ei toeta antud operatsiooni"
fre "Le handler de la table '%-.64s' n'a pas cette option"
- ger "Diese Option gibt es nicht (Tabellenhandler)"
hun "A(z) '%-.64s' tablakezelonek nincs ilyen opcioja"
ita "Il gestore delle tabelle per '%-.64s' non ha questa opzione"
@@ -751,7 +751,7 @@
est "Ei suuda leida kirjet '%-.64s'-s"
fre "Ne peut trouver l'enregistrement dans '%-.64s'"
- ger "Kann Datensatz nicht finden"
+ ger "Kann Datensatz in '%-.64s' nicht finden"
hun "Nem talalhato a rekord '%-.64s'-ben"
ita "Impossibile trovare il record in '%-.64s'"
@@ -801,7 +801,7 @@
hun "Ervenytelen kulcsfile a tablahoz: '%-.64s'; probalja kijavitani!"
ita "File chiave errato per la tabella : '%-.64s'; prova a riparalo"
@@ -826,7 +826,7 @@
hun "Regi kulcsfile a '%-.64s'tablahoz; probalja kijavitani!"
ita "File chiave vecchio per la tabella '%-.64s'; riparalo!"
@@ -851,7 +851,7 @@
est "Tabel '%-.64s' on ainult lugemiseks"
fre "'%-.64s' est en lecture seulement"
- ger "'%-.64s' ist nur lesbar"
+ ger "Tabelle '%-.64s' ist nur lesbar"
hun "'%-.64s' irasvedett"
ita "'%-.64s' e` di sola lettura"
@@ -901,7 +901,7 @@
hun "Nincs eleg memoria a rendezeshez. Novelje a rendezo demon puffermeretet"
ita "Memoria per gli ordinamenti esaurita. Incrementare il 'sort_buffer' al demone"
@@ -976,7 +976,7 @@
hun "Elfogyott a thread-memoria"
ita "Fine dello spazio/memoria per i thread"
@@ -1025,7 +1025,7 @@
eng "Bad handshake"
fre "Mauvais 'handshake'"
- ger "Schlechter Handshake"
hun "A kapcsolatfelvetel nem sikerult (Bad handshake)"
ita "Negoziazione impossibile"
@@ -1245,7 +1245,7 @@
eng "Column '%-.64s' in %-.64s is ambiguous"
fre "Champ: '%-.64s' dans %s est ambigu"
- ger "Spalte '%-.64s' in %-.64s ist nicht eindeutig"
+ ger "Feld '%-.64s' in %-.64s ist nicht eindeutig"
hun "A(z) '%-.64s' oszlop %-.64s-ben ketertelmu"
ita "Colonna: '%-.64s' di %-.64s e` ambigua"
@@ -1411,7 +1411,7 @@
est "Identifikaatori '%-.100s' nimi on liiga pikk"
fre "Le nom de l'identificateur '%-.64s' est trop long"
- ger "Name des Bezeichners '%-.64s' ist zu lang"
+ ger "Name des Bezeichners '%-.100s' ist zu lang"
hun "A(z) '%-.100s' azonositonev tul hosszu."
ita "Il nome dell'identificatore '%-.100s' e` troppo lungo"
@@ -1436,7 +1436,7 @@
est "Kattuv tulba nimi '%-.64s'"
- ger "Doppelter Spaltenname vorhanden: '%-.64s'"
+ ger "Doppelter Spaltenname: '%-.64s'"
hun "Duplikalt oszlopazonosito: '%-.64s'"
ita "Nome colonna duplicato '%-.64s'"
@@ -1461,7 +1461,7 @@
hun "Duplikalt kulcsazonosito: '%-.64s'"
ita "Nome chiave duplicato '%-.64s'"
@@ -1510,7 +1510,7 @@
eng "Incorrect column specifier for column '%-.64s'"
est "Vigane tulba kirjeldus tulbale '%-.64s'"
hun "Rossz oszlopazonosito: '%-.64s'"
ita "Specifica errata per la colonna '%-.64s'"
@@ -1608,7 +1608,7 @@
eng "Invalid default value for '%-.64s'"
- ger "Fehlerhafter Vorgabewert (DEFAULT): '%-.64s'"
hun "Ervenytelen ertek: '%-.64s'"
ita "Valore di default non valido per '%-.64s'"
@@ -1632,7 +1632,7 @@
hun "Tobbszoros elsodleges kulcs definialas."
ita "Definite piu` chiave primarie"
@@ -1681,7 +1681,7 @@
eng "Too many key parts specified; max %d parts allowed"
hun "Tul sok kulcsdarabot definialt. Maximum %d resz engedelyezett"
ita "Troppe parti di chiave specificate. Sono ammesse max %d parti"
@@ -1730,7 +1730,7 @@
hun "A(z) '%-.64s'kulcsoszlop nem letezik a tablaban"
ita "La colonna chiave '%-.64s' non esiste nella tabella"
@@ -1778,7 +1778,7 @@
fre "Champ '%-.64s' trop long (max = %d). Utilisez un BLOB"
hun "A(z) '%-.64s' oszlop tul hosszu. (maximum = %d). Hasznaljon BLOB tipust inkabb."
ita "La colonna '%-.64s' e` troppo grande (max=%d). Utilizza un BLOB."
@@ -1803,7 +1803,7 @@
hun "Csak egy auto mezo lehetseges, es azt kulcskent kell definialni."
ita "Puo` esserci solo un campo AUTO e deve essere definito come chiave"
@@ -1828,7 +1828,7 @@
hun "%s: kapcsolatra kesz"
ita "%s: Pronto per le connessioni\n"
@@ -1901,7 +1901,7 @@
- ger "%-.64s: Heruntergefahren (shutdown)\n"
+ ger "%-.64s: Herunterfahren beendet\n"
hun "%s: A leallitas kesz\n"
ita "%s: Shutdown completato\n"
@@ -1976,7 +1976,7 @@
- ger "Tabelle '%-.64s' besitzt keinen wie den in CREATE INDEX verwendeten Index. Index neu anlegen"
+ ger "Tabelle '%-.64s' besitzt keinen wie den in CREATE INDEX verwendeten Index. Tabelle neu anlegen"
hun "A(z) '%-.64s' tablahoz nincs meg a CREATE INDEX altal hasznalt index. Alakitsa at a tablat"
ita "La tabella '%-.64s' non ha nessun indice come quello specificatato dalla CREATE INDEX. Ricrea la tabella"
@@ -2048,7 +2048,7 @@
hun "A(z) '%-.64s'-nak az adatbazis konyvtarban kell lennie, vagy mindenki szamara olvashatonak"
ita "Il file '%-.64s' deve essere nella directory del database e deve essere leggibile da tutti"
@@ -2073,7 +2073,7 @@
est "Fail '%-.80s' juba eksisteerib"
- ger "Datei '%-.64s' bereits vorhanden"
+ ger "Datei '%-.80s' bereits vorhanden"
hun "A '%-.64s' file mar letezik."
ita "Il file '%-.64s' esiste gia`"
@@ -2147,7 +2147,7 @@
eng "Incorrect sub part key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique sub keys"
hun "Rossz alkulcs. A hasznalt kulcsresz nem karaktersorozat vagy hosszabb, mint a kulcsresz"
ita "Sotto-parte della chiave errata. La parte di chiave utilizzata non e` una stringa o la lunghezza e` maggiore della parte di chiave."
@@ -2197,7 +2197,7 @@
hun "A DROP '%-.64s' nem lehetseges. Ellenorizze, hogy a mezo/kulcs letezik-e"
ita "Impossibile cancellare '%-.64s'. Controllare che il campo chiave esista"
@@ -2325,7 +2325,7 @@
eng "Too many strings for column %-.64s and SET"
hun "Tul sok karakter: %-.64s es SET"
ita "Troppe stringhe per la colonna %-.64s e la SET"
@@ -2348,7 +2348,7 @@
eng "Can't generate a unique log-filename %-.64s.(1-999)\n"
est "Ei suuda luua unikaalset logifaili nime %-.64s.(1-999)\n"
hun "Egyedi log-filenev nem generalhato: %-.64s.(1-999)\n"
ita "Impossibile generare un nome del file log unico %-.64s.(1-999)\n"
@@ -2421,7 +2421,7 @@
eng "BLOB/TEXT column '%-.64s' can't have a default value"
- ger "BLOB-Feld '%-.64s' darf keinen Vorgabewert (DEFAULT) haben"
+ ger "BLOB/TEXT-Feld '%-.64s' darf keinen Vorgabewert (DEFAULT) haben"
hun "A(z) '%-.64s' blob objektumnak nem lehet alapertelmezett erteke"
ita "Il campo BLOB '%-.64s' non puo` avere un valore di default"
@@ -2446,7 +2446,7 @@
est "Vigane andmebaasi nimi '%-.100s'"
- ger "Unerlaubter Datenbankname '%-.64s'"
+ ger "Unerlaubter Datenbankname '%-.100s'"
hun "Hibas adatbazisnev: '%-.100s'"
ita "Nome database errato '%-.100s'"
@@ -2471,7 +2471,7 @@
est "Vigane tabeli nimi '%-.100s'"
- ger "Unerlaubter Tabellenname '%-.64s'"
+ ger "Unerlaubter Tabellenname '%-.100s'"
hun "Hibas tablanev: '%-.100s'"
ita "Nome tabella errato '%-.100s'"
@@ -2495,7 +2495,7 @@
eng "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay"
hun "A SELECT tul sok rekordot fog megvizsgalni es nagyon sokaig fog tartani. Ellenorizze a WHERE-t es hasznalja a SET SQL_BIG_SELECTS=1 beallitast, ha a SELECT okay"
ita "La SELECT dovrebbe esaminare troppi record e usare troppo tempo. Controllare la WHERE e usa SET SQL_BIG_SELECTS=1 se e` tutto a posto."
@@ -2676,7 +2676,7 @@
eng "Table '%-.64s' uses an extension that doesn't exist in this MySQL version"
est "Tabel '%-.64s' kasutab laiendust, mis ei eksisteeri antud MySQL versioonis"
fre "Table '%-.64s' : utilise une extension invalide pour cette version de MySQL"
hun "A(z) '%-.64s' tabla olyan bovitest hasznal, amely nem letezik ebben a MySQL versioban."
ita "La tabella '%-.64s' usa un'estensione che non esiste in questa versione di MySQL"
@@ -2700,7 +2700,7 @@
fre "Une table doit comporter au moins une colonne"
+ ger "Eine Tabelle muss mindestens eine Spalte besitzen"
hun "A tablanak legalabb egy oszlopot tartalmazni kell"
ita "Una tabella deve avere almeno 1 colonna"
@@ -2788,7 +2788,7 @@
est "Liiga palju tulpasid"
fre "Trop de champs"
- ger "Zu viele Spalten"
+ ger "Zu viele Felder"
hun "Tul sok mezo"
ita "Troppi campi"
@@ -2810,7 +2810,7 @@
fre "Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est %d. Changez le type de quelques colonnes en BLOB"
hun "Tul nagy sormeret. A maximalis sormeret (nem szamolva a blob objektumokat) %d. Nehany mezot meg kell valtoztatnia"
ita "Riga troppo grande. La massima grandezza di una riga, non contando i BLOB, e` %d. Devi cambiare alcuni campi in BLOB"
@@ -2831,7 +2831,7 @@
eng "Thread stack overrun: Used: %ld of a %ld stack. Use 'mysqld -O thread_stack=#' to specify a bigger stack if needed"
hun "Thread verem tullepes: Used: %ld of a %ld stack. Hasznalja a 'mysqld -O thread_stack=#' nagyobb verem definialasahoz"
ita "Thread stack overrun: Usati: %ld di uno stack di %ld. Usa 'mysqld -O thread_stack=#' per specificare uno stack piu` grande."
@@ -3003,15 +3003,15 @@
ER_CANT_FIND_DL_ENTRY
- dan "Kan ikke finde funktionen '%-.64s' i bibliotek'"
+ dan "Kan ikke finde funktionen '%-.64s' i bibliotek"
nla "Kan functie '%-.64s' niet in library vinden"
- eng "Can't find function '%-.64s' in library'"
+ eng "Can't find function '%-.64s' in library"
est "Ei leia funktsiooni '%-.64s' antud teegis"
ger "Kann Funktion '%-.64s' in der Library nicht finden"
hun "A(z) '%-.64s' fuggveny nem talalhato a konyvtarban"
ita "Impossibile trovare la funzione '%-.64s' nella libreria"
@@ -3020,10 +3020,10 @@
rum "Nu pot gasi functia '%-.64s' in libraria"
serbian "Ne mogu da pronadjem funkciju '%-.64s' u biblioteci"
swe "Hittar inte funktionen '%-.64s' in det dynamiska biblioteket"
ER_FUNCTION_NOT_DEFINED
dan "Funktionen '%-.64s' er ikke defineret"
@@ -3198,7 +3198,7 @@
nla "Kolom aantal komt niet overeen met waarde aantal in rij %ld"
eng "Column count doesn't match value count at row %ld"
hun "Az oszlopban talalhato ertek nem egyezik meg a %ld sorban szamitott ertekkel"
ita "Il numero delle colonne non corrisponde al conteggio alla riga %ld"
@@ -3276,7 +3276,7 @@
eng "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause"
est "GROUP tulpade (MIN(),MAX(),COUNT()...) kooskasutamine tavaliste tulpadega ilma GROUP BY klauslita ei ole lubatud"
hun "A GROUP mezok (MIN(),MAX(),COUNT()...) kevert hasznalata nem lehetseges GROUP BY hivatkozas nelkul"
ita "Il mescolare funzioni di aggregazione (MIN(),MAX(),COUNT()...) e non e` illegale se non c'e` una clausula GROUP BY"
@@ -3315,7 +3315,7 @@
hun "%-.16s parancs a '%-.32s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.64s' tablaban"
ita "Comando %-.16s negato per l'utente: '%-.32s'@'%-.64s' sulla tabella '%-.64s'"
@@ -3335,7 +3335,7 @@
hun "%-.16s parancs a '%-.32s'@'%-.64s' felhasznalo szamara nem engedelyezett a '%-.64s' mezo eseten a '%-.64s' tablaban"
ita "Comando %-.16s negato per l'utente: '%-.32s'@'%-.64s' sulla colonna '%-.64s' della tabella '%-.64s'"
@@ -3419,7 +3419,7 @@
eng "There is no such grant defined for user '%-.32s' on host '%-.64s' on table '%-.64s'"
hun "A '%-.32s' felhasznalo szamara a '%-.64s' host '%-.64s' tablajaban ez a parancs nem engedelyezett"
ita "GRANT non definita per l'utente '%-.32s' dalla macchina '%-.64s' sulla tabella '%-.64s'"
@@ -3455,7 +3455,7 @@
eng "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use"
fre "Erreur de syntaxe"
+ ger "Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen"
greek "You have an error in your SQL syntax"
hun "Szintaktikai hiba"
ita "Errore di sintassi nella query SQL"
@@ -3538,7 +3538,7 @@
eng "Got a packet bigger than 'max_allowed_packet' bytes"
est "Saabus suurem pakett kui lubatud 'max_allowed_packet' muutujaga"
hun "A kapott csomag nagyobb, mint a maximalisan engedelyezett: 'max_allowed_packet'"
ita "Ricevuto un pacchetto piu` grande di 'max_allowed_packet'"
@@ -3556,7 +3556,7 @@
eng "Got a read error from the connection pipe"
- ger "Lese-Fehler bei einer Kommunikations-Pipe"
+ ger "Lese-Fehler bei einer Verbindungs-Pipe"
hun "Olvasasi hiba a kapcsolat soran"
ita "Rilevato un errore di lettura dalla pipe di connessione"
@@ -3700,7 +3700,7 @@
eng "Result string is longer than 'max_allowed_packet' bytes"
est "Tulemus on pikem kui lubatud 'max_allowed_packet' muutujaga"
hun "Ez eredmeny sztring nagyobb, mint a lehetseges maximum: 'max_allowed_packet'"
ita "La stringa di risposta e` piu` lunga di 'max_allowed_packet'"
@@ -3717,7 +3717,7 @@
eng "The used table type doesn't support BLOB/TEXT columns"
fre "Ce type de table ne supporte pas les colonnes BLOB/TEXT"
hun "A hasznalt tabla tipus nem tamogatja a BLOB/TEXT mezoket"
ita "Il tipo di tabella usata non supporta colonne di tipo BLOB/TEXT"
@@ -3734,7 +3734,7 @@
eng "The used table type doesn't support AUTO_INCREMENT columns"
fre "Ce type de table ne supporte pas les colonnes AUTO_INCREMENT"
hun "A hasznalt tabla tipus nem tamogatja az AUTO_INCREMENT tipusu mezoket"
ita "Il tipo di tabella usata non supporta colonne di tipo AUTO_INCREMENT"
@@ -3751,7 +3751,7 @@
eng "INSERT DELAYED can't be used with table '%-.64s' because it is locked with LOCK TABLES"
- ger "INSERT DELAYED kann nicht auf Tabelle '%-.64s' angewendet werden, da diese mit LOCK TABLES gesperrt ist"
greek "INSERT DELAYED can't be used with table '%-.64s', because it is locked with LOCK TABLES"
hun "Az INSERT DELAYED nem hasznalhato a '%-.64s' tablahoz, mert a tabla zarolt (LOCK TABLES)"
ita "L'inserimento ritardato (INSERT DELAYED) non puo` essere usato con la tabella '%-.64s', perche` soggetta a lock da 'LOCK TABLES'"
@@ -3792,7 +3792,7 @@
eng "The used storage engine can't index column '%-.64s'"
est "Tabelihandler ei oska indekseerida tulpa '%-.64s'"
- ger "Der verwendete Tabellen-Handler kann die Spalte '%-.64s' nicht indizieren"
+ ger "Die verwendete Speicher-Engine kann die Spalte '%-.64s' nicht indizieren"
greek "The used table handler can't index column '%-.64s'"
hun "A hasznalt tablakezelo nem tudja a '%-.64s' mezot indexelni"
ita "Il gestore delle tabelle non puo` indicizzare la colonna '%-.64s'"
@@ -3839,7 +3839,7 @@
eng "Can't write, because of unique constraint, to table '%-.64s'"
hun "A '%-.64s' nem irhato, az egyedi mezok miatt"
ita "Impossibile scrivere nella tabella '%-.64s' per limitazione di unicita`"
@@ -3880,7 +3880,7 @@
eng "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead"
hun "Az elsodleges kulcs teljes egeszeben csak NOT NULL tipusu lehet; Ha NULL mezot szeretne a kulcskent, hasznalja inkabb a UNIQUE-ot"
ita "Tutte le parti di una chiave primaria devono essere dichiarate NOT NULL; se necessitano valori NULL nelle chiavi utilizzare UNIQUE"
@@ -3914,7 +3914,7 @@
eng "This table type requires a primary key"
hun "Az adott tablatipushoz elsodleges kulcs hasznalata kotelezo"
ita "Questo tipo di tabella richiede una chiave primaria"
@@ -3948,7 +3948,7 @@
eng "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column"
est "Katse muuta tabelit turvalises rezhiimis ilma WHERE klauslita"
hun "On a biztonsagos update modot hasznalja, es WHERE that uses a KEY column"
ita "In modalita` 'safe update' si e` cercato di aggiornare una tabella senza clausola WHERE su una chiave"
@@ -4100,7 +4100,7 @@
eng "Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: '%-.64s' (%-.64s)"
- ger "Verbindungsabbruch %ld zur Datenbank '%-.64s'. Benutzer: '%-.32s', Host: '%-.64s' (%-.64s)"
+ ger "Abbruch der Verbindung %ld zur Datenbank '%-.64s'. Benutzer: '%-.32s', Host: '%-.64s' (%-.64s)"
ita "Interrotta la connessione %ld al db: ''%-.64s' utente: '%-.32s' host: '%-.64s' (%-.64s)"
@@ -4137,7 +4137,7 @@
nla "Gefaald tijdens heropbouw index van gedumpte tabel '%-.64s'"
eng "Failed rebuilding the index of dumped table '%-.64s'"
- ger "Neuerstellung des Indizes der Dump-Tabelle '%-.64s' fehlgeschlagen"
+ ger "Neuerstellung des Index der Dump-Tabelle '%-.64s' fehlgeschlagen"
greek "Failed rebuilding the index of dumped table '%-.64s'"
hun "Failed rebuilding the index of dumped table '%-.64s'"
ita "Fallita la ricostruzione dell'indice della tabella copiata '%-.64s'"
@@ -4195,7 +4195,7 @@
eng "Can't find FULLTEXT index matching the column list"
est "Ei suutnud leida FULLTEXT indeksit, mis kattuks kasutatud tulpadega"
- ger "Kann keinen FULLTEXT-Index finden, der der Spaltenliste entspricht"
+ ger "Kann keinen FULLTEXT-Index finden, der der Feldliste entspricht"
ita "Impossibile trovare un indice FULLTEXT che corrisponda all'elenco delle colonne"
@@ -4283,7 +4283,7 @@
eng "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mysqld variable and try again"
ita "La transazione a comandi multipli (multi-statement) ha richiesto piu` di 'max_binlog_cache_size' bytes di disco: aumentare questa variabile di mysqld e riprovare"
@@ -4295,7 +4295,7 @@
nla "Deze operatie kan niet worden uitgevoerd met een actieve slave, doe eerst STOP SLAVE"
eng "This operation cannot be performed with a running slave; run STOP SLAVE first"
ita "Questa operazione non puo' essere eseguita con un database 'slave' che gira, lanciare prima STOP SLAVE"
@@ -4332,6 +4332,7 @@
ER_MASTER_INFO
eng "Could not initialize master info structure; more error messages can be found in the MySQL error log"
serbian "Nisam mogao da inicijalizujem informacionu strukturu glavnog servera, proverite da li imam privilegije potrebne za pristup file-u 'master.info'"
ER_SLAVE_THREAD
@@ -4339,7 +4340,7 @@
nla "Kon slave thread niet aanmaken, controleer systeem resources"
eng "Could not create slave thread; check system resources"
ita "Impossibile creare il thread 'slave', controllare le risorse di sistema"
@@ -4353,7 +4354,7 @@
eng "User %-.64s already has more than 'max_user_connections' active connections"
- ger "Benutzer '%-.64s' hat mehr als max_user_connections aktive Verbindungen"
+ ger "Benutzer '%-.64s' hat mehr als 'max_user_connections' aktive Verbindungen"
ita "L'utente %-.64s ha gia' piu' di 'max_user_connections' connessioni attive"
@@ -4409,7 +4410,7 @@
eng "Update locks cannot be acquired during a READ UNCOMMITTED transaction"
ita "I lock di aggiornamento non possono essere acquisiti durante una transazione 'READ UNCOMMITTED'"
@@ -4463,7 +4464,7 @@
eng "'%-.32s'@'%-.64s' is not allowed to create new users"
est "Kasutajal '%-.32s'@'%-.64s' ei ole lubatud luua uusi kasutajaid"
ita "A '%-.32s'@'%-.64s' non e' permesso creare nuovi utenti"
@@ -4488,7 +4489,7 @@
eng "Deadlock found when trying to get lock; try restarting transaction"
est "Lukustamisel tekkis tupik (deadlock); alusta transaktsiooni otsast"
- ger "Beim Versuch, eine Sperre anzufordern, ist ein Deadlock aufgetreten. Versuchen Sie, die Transaktion erneut zu starten"
+ ger "Beim Versuch, eine Sperre anzufordern, ist ein Deadlock aufgetreten. Versuchen Sie, die Transaktion neu zu starten"
ita "Trovato deadlock durante il lock; Provare a far ripartire la transazione"
@@ -4512,7 +4513,7 @@
nla "Kan foreign key beperking niet toevoegen"
eng "Cannot add foreign key constraint"
fre "Impossible d'ajouter des contraintes d'index externe"
ita "Impossibile aggiungere il vincolo di integrita' referenziale (foreign key constraint)"
@@ -4523,7 +4524,7 @@
nla "Kan onderliggende rij niet toevoegen: foreign key beperking gefaald"
eng "Cannot add or update a child row: a foreign key constraint fails"
greek "Cannot add a child row: a foreign key constraint fails"
hun "Cannot add a child row: a foreign key constraint fails"
ita "Impossibile aggiungere la riga: un vincolo d'integrita' referenziale non e' soddisfatto"
@@ -4535,7 +4536,7 @@
ER_ROW_IS_REFERENCED 23000
eng "Cannot delete or update a parent row: a foreign key constraint fails"
greek "Cannot delete a parent row: a foreign key constraint fails"
hun "Cannot delete a parent row: a foreign key constraint fails"
ita "Impossibile cancellare la riga: un vincolo d'integrita' referenziale non e' soddisfatto"
@@ -4589,7 +4590,7 @@
nla "De gebruikte SELECT commando's hebben een verschillend aantal kolommen"
eng "The used SELECT statements have a different number of columns"
est "Tulpade arv kasutatud SELECT lausetes ei kattu"
ita "La SELECT utilizzata ha un numero di colonne differente"
@@ -4600,7 +4601,7 @@
nla "Kan de query niet uitvoeren vanwege een conflicterende read lock"
eng "Can't execute the query because you have a conflicting read lock"
ita "Impossibile eseguire la query perche' c'e' un conflitto con in lock di lettura"
@@ -4640,7 +4641,7 @@
ER_SPECIFIC_ACCESS_DENIED_ERROR 42000
nla "Toegang geweigerd. U moet het %-.128s privilege hebben voor deze operatie"
eng "Access denied; you need the %-.128s privilege for this operation"
ita "Accesso non consentito. Serve il privilegio %-.128s per questa operazione"
@@ -4722,7 +4723,7 @@
ER_MASTER_FATAL_ERROR_READING_BINLOG
nla "Kreeg fatale fout %d: '%-.128s' van master tijdens lezen van data uit binaire log"
eng "Got fatal error %d: '%-.128s' from master when reading data from binary log"
ita "Errore fatale %d: '%-.128s' dal master leggendo i dati dal log binario"
por "Obteve fatal erro %d: '%-.128s' do master quando lendo dados do binary log"
@@ -4737,11 +4738,12 @@
ER_INCORRECT_GLOBAL_LOCAL_VAR
eng "Variable '%-.64s' is a %s variable"
serbian "Incorrect foreign key definition for '%-.64s': %s"
+ ger "Variable '%-.64s' ist eine %s-Variable"
spa "Variable '%-.64s' es una %s variable"
ER_WRONG_FK_DEF 42000
eng "Incorrect foreign key definition for '%-.64s': %s"
@@ -4753,7 +4755,7 @@
ER_OPERAND_COLUMNS 21000
eng "Operand should contain %d column(s)"
- ger "Operand solle %d Spalte(n) enthalten"
+ ger "Operand sollte %d Spalte(n) enthalten"
spa "Operando debe tener %d columna(s)"
@@ -4789,7 +4791,7 @@
ER_AUTO_CONVERT
eng "Converting column '%s' from %s to %s"
- ger "Spalte '%s' wird von %s nach %s umgewandelt"
+ ger "Feld '%s' wird von %s nach %s umgewandelt"
por "Convertendo coluna '%s' de %s para %s"
spa "Convirtiendo columna '%s' de %s para %s"
@@ -4831,7 +4833,7 @@
ER_SPATIAL_CANT_HAVE_NULL 42000
eng "All parts of a SPATIAL index must be NOT NULL"
por "Todas as partes de uma SPATIAL index devem ser NOT NULL"
spa "Todas las partes de una SPATIAL index deben ser NOT NULL"
@@ -4855,12 +4857,12 @@
swe "Slaven har redan stoppat"
ER_TOO_BIG_FOR_UNCOMPRESS
eng "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)"
ER_ZLIB_Z_MEM_ERROR
eng "ZLIB: Not enough memory"
+ ger "ZLIB: Nicht genug Speicher"
spa "Z_MEM_ERROR: No suficiente memoria para zlib"
ER_ZLIB_Z_BUF_ERROR
@@ -4882,27 +4884,27 @@
ukr "%d line(s) was(were) cut by group_concat()"
ER_WARN_TOO_FEW_RECORDS 01000
eng "Row %ld doesn't contain data for all columns"
ER_WARN_TOO_MANY_RECORDS 01000
eng "Row %ld was truncated; it contained more data than there were input columns"
ER_WARN_NULL_TO_NOTNULL 22004
eng "Column set to default value; NULL supplied to NOT NULL column '%s' at row %ld"
por "Dado truncado, NULL fornecido para NOT NULL coluna '%s' na linha %ld"
ER_WARN_DATA_OUT_OF_RANGE 22003
eng "Out of range value adjusted for column '%s' at row %ld"
por "Dado truncado, fora de alcance para coluna '%s' na linha %ld"
WARN_DATA_TRUNCATED 01000
eng "Data truncated for column '%s' at row %ld"
por "Dado truncado para coluna '%s' na linha %ld"
ER_WARN_USING_OTHER_HANDLER
@@ -4913,40 +4915,40 @@
ER_CANT_AGGREGATE_2COLLATIONS
eng "Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'"
ER_DROP_USER
eng "Cannot drop one or more of the requested users"
ER_REVOKE_GRANTS
- eng "Can't revoke all privileges, grant for one or more of the requested users"
- ger "Kann nicht alle Berechtigungen widerrufen, grant for one or more of the requested users"
+ eng "Can't revoke all privileges for one or more of the requested users"
spa "No puede revocar todos los privilegios, derecho para uno o mas de los usuarios solicitados"
ER_CANT_AGGREGATE_3COLLATIONS
eng "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'"
ER_CANT_AGGREGATE_NCOLLATIONS
eng "Illegal mix of collations for operation '%s'"
ER_VARIABLE_IS_NOT_STRUCT
eng "Variable '%-.64s' is not a variable component (can't be used as XXXX.variable_name)"
- ger "Variable '%-.64s' ist keine Variablen-Komponenten (kann nicht als XXXX.variablen_name verwendet werden)"
+ ger "Variable '%-.64s' ist keine Variablen-Komponente (kann nicht als XXXX.variablen_name verwendet werden)"
spa "Variable '%-.64s' no es una variable componente (No puede ser usada como XXXX.variable_name)"
ER_UNKNOWN_COLLATION
eng "Unknown collation: '%-.64s'"
- ger "Unbekannte Kollation: '%-.64s'"
+ ger "Unbekannte Sortierreihenfolge: '%-.64s'"
por "Collation desconhecida: '%-.64s'"
spa "Collation desconocida: '%-.64s'"
ER_SLAVE_IGNORED_SSL_PARAMS
eng "SSL parameters in CHANGE MASTER are ignored because this MySQL slave was compiled without SSL support; they can be used later if MySQL slave with SSL is started"
spa "Parametros SSL en CHANGE MASTER son ignorados porque este slave MySQL fue compilado sin soporte SSL; pueden ser usados despues cuando el slave MySQL con SSL sea inicializado"
ER_SERVER_IS_IN_SECURE_AUTH_MODE
@@ -4969,7 +4971,7 @@
ER_MISSING_SKIP_SLAVE
eng "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mysqld restart"
ER_UNTIL_COND_IGNORED
@@ -4979,16 +4981,19 @@
spa "SQL thread no es inicializado tal que opciones UNTIL son ignoradas"
ER_WRONG_NAME_FOR_INDEX 42000
eng "Incorrect index name '%-.100s'"
+ ger "Falscher Indexname '%-.100s'"
swe "Felaktigt index namn '%-.100s'"
ER_WRONG_NAME_FOR_CATALOG 42000
eng "Incorrect catalog name '%-.100s'"
+ ger "Falscher Katalogname '%-.100s'"
spa "Nombre de catalog incorrecto '%-.100s'"
swe "Felaktigt katalog namn '%-.100s'"
ER_WARN_QC_RESIZE
eng "Query cache failed to set size %lu; new query cache size is %lu"
@@ -4996,28 +5001,34 @@
ER_BAD_FT_COLUMN
eng "Column '%-.64s' cannot be part of FULLTEXT index"
+ ger "Feld '%-.64s' kann nicht Teil eines FULLTEXT-Index sein"
spa "Columna '%-.64s' no puede ser parte de FULLTEXT index"
swe "Kolumn '%-.64s' kan inte vara del av ett FULLTEXT index"
ER_UNKNOWN_KEY_CACHE
eng "Unknown key cache '%-.100s'"
por "Key cache desconhecida '%-.100s'"
spa "Desconocida key cache '%-.100s'"
ER_WARN_HOSTNAME_WONT_WORK
eng "MySQL is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work"
ER_UNKNOWN_STORAGE_ENGINE 42000
eng "Unknown table engine '%s'"
+ ger "Unbekannte Speicher-Engine '%s'"
por "Motor de tabela desconhecido '%s'"
spa "Desconocido motor de tabla '%s'"
ER_WARN_DEPRECATED_SYNTAX
eng "'%s' is deprecated; use '%s' instead"
+ ger "'%s' ist veraltet. Bitte benutzen Sie '%s'"
ER_NON_UPDATABLE_TABLE
eng "The target table %-.100s of the %s is not updatable"
+ ger "Die Zieltabelle %-.100s von %s ist nicht aktualisierbar"
spa "La tabla destino %-.100s del %s no es actualizable"
@@ -5025,401 +5036,569 @@
ER_FEATURE_DISABLED
eng "The '%s' feature is disabled; you need MySQL built with '%s' to have it working"
spa "El recurso '%s' fue deshabilitado; usted necesita construir MySQL con '%s' para tener eso funcionando"
ER_OPTION_PREVENTS_STATEMENT
eng "The MySQL server is running with the %s option so it cannot execute this statement"
ER_DUPLICATED_VALUE_IN_TYPE
eng "Column '%-.100s' has duplicated value '%-.64s' in %s"
+ ger "Feld '%-.100s' hat doppelten Wert '%-.64s' in %s"
por "Coluna '%-.100s' tem valor duplicado '%-.64s' em %s"
spa "Columna '%-.100s' tiene valor doblado '%-.64s' en %s"
ER_TRUNCATED_WRONG_VALUE 22007
eng "Truncated incorrect %-.32s value: '%-.128s'"
por "Truncado errado %-.32s valor: '%-.128s'"
spa "Equivocado truncado %-.32s valor: '%-.128s'"
ER_TOO_MUCH_AUTO_TIMESTAMP_COLS
eng "Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause"
+ ger "Fehlerhafte Tabellendefinition. Es kann nur eine einzige TIMESTAMP-Spalte mit CURRENT_TIMESTAMP als DEFAULT oder in einer ON-UPDATE-Klausel geben"
ER_INVALID_ON_UPDATE
eng "Invalid ON UPDATE clause for '%-.64s' column"
ER_UNSUPPORTED_PS
eng "This command is not supported in the prepared statement protocol yet"
ER_GET_ERRMSG
dan "Modtog fejl %d '%-.100s' fra %s"
eng "Got error %d '%-.100s' from %s"
+ ger "Fehler %d '%-.100s' von %s"
nor "Mottok feil %d '%-.100s' fa %s"
norwegian-ny "Mottok feil %d '%-.100s' fra %s"
ER_GET_TEMPORARY_ERRMSG
dan "Modtog temporary fejl %d '%-.100s' fra %s"
eng "Got temporary error %d '%-.100s' from %s"
nor "Mottok temporary feil %d '%-.100s' fra %s"
norwegian-ny "Mottok temporary feil %d '%-.100s' fra %s"
ER_UNKNOWN_TIME_ZONE
eng "Unknown or incorrect time zone: '%-.64s'"
+ ger "Unbekannte oder falsche Zeitzone: '%-.64s'"
ER_WARN_INVALID_TIMESTAMP
eng "Invalid TIMESTAMP value in column '%s' at row %ld"
ER_INVALID_CHARACTER_STRING
eng "Invalid %s character string: '%.64s'"
ER_WARN_ALLOWED_PACKET_OVERFLOWED
eng "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
ER_CONFLICTING_DECLARATIONS
eng "Conflicting declarations: '%s%s' and '%s%s'"
ER_SP_NO_RECURSIVE_CREATE 2F003
eng "Can't create a %s from within another stored routine"
+ ger "Kann kein %s innerhalb einer anderen gespeicherten Routine erzeugen"
ER_SP_ALREADY_EXISTS 42000
eng "%s %s already exists"
+ ger "%s %s existiert bereits"
ER_SP_DOES_NOT_EXIST 42000
eng "%s %s does not exist"
+ ger "%s %s existiert nicht"
ER_SP_DROP_FAILED
eng "Failed to DROP %s %s"
+ ger "DROP %s %s ist fehlgeschlagen"
ER_SP_STORE_FAILED
eng "Failed to CREATE %s %s"
+ ger "CREATE %s %s ist fehlgeschlagen"
ER_SP_LILABEL_MISMATCH 42000
eng "%s with no matching label: %s"
+ ger "%s ohne passende Marke: %s"
ER_SP_LABEL_REDEFINE 42000
eng "Redefining label %s"
+ ger "Neudefinition der Marke %s"
ER_SP_LABEL_MISMATCH 42000
eng "End-label %s without match"
ER_SP_UNINIT_VAR 01000
eng "Referring to uninitialized variable %s"
+ ger "Zugriff auf nichtinitialisierte Variable %s"
ER_SP_BADSELECT 0A000
eng "PROCEDURE %s can't return a result set in the given context"
ER_SP_BADRETURN 42000
eng "RETURN is only allowed in a FUNCTION"
+ ger "RETURN ist nur innerhalb einer FUNCTION erlaubt"
ER_SP_BADSTATEMENT 0A000
eng "%s is not allowed in stored procedures"
+ ger "%s ist in gespeicherten Prozeduren nicht erlaubt"
ER_UPDATE_LOG_DEPRECATED_IGNORED 42000
eng "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored"
ER_UPDATE_LOG_DEPRECATED_TRANSLATED 42000
eng "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN"
ER_QUERY_INTERRUPTED 70100
eng "Query execution was interrupted"
ER_SP_WRONG_NO_OF_ARGS 42000
eng "Incorrect number of arguments for %s %s; expected %u, got %u"
ER_SP_COND_MISMATCH 42000
eng "Undefined CONDITION: %s"
+ ger "Undefinierte CONDITION: %s"
ER_SP_NORETURN 42000
eng "No RETURN found in FUNCTION %s"
+ ger "Kein RETURN in FUNCTION %s gefunden"
ER_SP_NORETURNEND 2F005
eng "FUNCTION %s ended without RETURN"
+ ger "FUNCTION %s endete ohne RETURN"
ER_SP_BAD_CURSOR_QUERY 42000
eng "Cursor statement must be a SELECT"
+ ger "Cursor-Anweisung muss ein SELECT sein"
ER_SP_BAD_CURSOR_SELECT 42000
eng "Cursor SELECT must not have INTO"
+ ger "Cursor-SELECT darf kein INTO haben"
ER_SP_CURSOR_MISMATCH 42000
eng "Undefined CURSOR: %s"
+ ger "Undefinierter CURSOR: %s"
ER_SP_CURSOR_ALREADY_OPEN 24000
eng "Cursor is already open"
ER_SP_CURSOR_NOT_OPEN 24000
eng "Cursor is not open"
ER_SP_UNDECLARED_VAR 42000
eng "Undeclared variable: %s"
+ ger "Nicht deklarierte Variable: %s"
ER_SP_WRONG_NO_OF_FETCH_ARGS
eng "Incorrect number of FETCH variables"
+ ger "Falsche Anzahl von FETCH-Variablen"
ER_SP_FETCH_NO_DATA 02000
eng "No data to FETCH"
+ ger "Keine Daten mit FETCH abzuholen"
ER_SP_DUP_PARAM 42000
eng "Duplicate parameter: %s"
+ ger "Doppelter Parameter: %s"
ER_SP_DUP_VAR 42000
eng "Duplicate variable: %s"
+ ger "Doppelte Variable: %s"
ER_SP_DUP_COND 42000
eng "Duplicate condition: %s"
+ ger "Doppelte Bedingung: %s"
ER_SP_DUP_CURS 42000
eng "Duplicate cursor: %s"
+ ger "Doppelter Cursor: %s"
ER_SP_CANT_ALTER
eng "Failed to ALTER %s %s"
+ ger "ALTER %s %s fehlgeschlagen"
ER_SP_SUBSELECT_NYI 0A000
eng "Subselect value not supported"
ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 0A000
eng "%s is not allowed in stored function or trigger"
+ ger "%s ist in gespeicherten Funktionen und in Triggern nicht erlaubt"
ER_SP_VARCOND_AFTER_CURSHNDLR 42000
eng "Variable or condition declaration after cursor or handler declaration"
+ ger "Deklaration einer Variablen oder einer Bedingung nach der Deklaration eines Cursors oder eines Handlers"
ER_SP_CURSOR_AFTER_HANDLER 42000
eng "Cursor declaration after handler declaration"
+ ger "Deklaration eines Cursors nach der Deklaration eines Handlers"
ER_SP_CASE_NOT_FOUND 20000
eng "Case not found for CASE statement"
ER_FPARSER_TOO_BIG_FILE
eng "Configuration file '%-.64s' is too big"
ER_FPARSER_BAD_HEADER
eng "Malformed file type header in file '%-.64s'"
+ ger "Nicht wohlgeformter Dateityp-Header in Datei '%-.64s'"
ER_FPARSER_EOF_IN_COMMENT
eng "Unexpected end of file while parsing comment '%-.64s'"
+ ger "Unerwartetes Dateiende beim Parsen des Kommentars '%-.64s'"
ER_FPARSER_ERROR_IN_PARAMETER
eng "Error while parsing parameter '%-.64s' (line: '%-.64s')"
+ ger "Fehler beim Parsen des Parameters '%-.64s' (Zeile: '%-.64s')"
ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER
eng "Unexpected end of file while skipping unknown parameter '%-.64s'"
ER_VIEW_NO_EXPLAIN
eng "EXPLAIN/SHOW can not be issued; lacking privileges for underlying table"
ER_FRM_UNKNOWN_TYPE
eng "File '%-.64s' has unknown type '%-.64s' in its header"
+ ger "Datei '%-.64s' hat unbekannten Typ '%-.64s' im Header"
ER_WRONG_OBJECT
eng "'%-.64s.%-.64s' is not %s"
+ ger "'%-.64s.%-.64s' ist nicht %s"
ER_NONUPDATEABLE_COLUMN
eng "Column '%-.64s' is not updatable"
+ ger "Feld '%-.64s' ist nicht aktualisierbar"
ER_VIEW_SELECT_DERIVED
eng "View's SELECT contains a subquery in the FROM clause"
ER_VIEW_SELECT_CLAUSE
eng "View's SELECT contains a '%s' clause"
ER_VIEW_SELECT_VARIABLE
eng "View's SELECT contains a variable or parameter"
ER_VIEW_SELECT_TMPTABLE
eng "View's SELECT refers to a temporary table '%-.64s'"
ER_VIEW_WRONG_LIST
eng "View's SELECT and view's field list have different column counts"
+ ger "SELECT- und Feldliste der Views haben eine unterschiedliche Anzahl von Spalten"
ER_WARN_VIEW_MERGE
eng "View merge algorithm can't be used here for now (assumed undefined algorithm)"
+ ger "View-Merge-Algorithmus kann hier momentan nicht verwendet werden (undefinierter Algorithmus wird angenommen)"
ER_WARN_VIEW_WITHOUT_KEY
eng "View being updated does not have complete key of underlying table in it"
ER_VIEW_INVALID
eng "View '%-.64s.%-.64s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them"
ER_SP_NO_DROP_SP
eng "Can't drop or alter a %s from within another stored routine"
ER_SP_GOTO_IN_HNDLR
eng "GOTO is not allowed in a stored procedure handler"
+ ger "GOTO ist im Handler einer gespeicherten Prozedur nicht erlaubt"
ER_TRG_ALREADY_EXISTS
eng "Trigger already exists"
+ ger "Trigger existiert bereits"
ER_TRG_DOES_NOT_EXIST
eng "Trigger does not exist"
+ ger "Trigger existiert nicht"
ER_TRG_ON_VIEW_OR_TEMP_TABLE
eng "Trigger's '%-.64s' is view or temporary table"
ER_TRG_CANT_CHANGE_ROW
eng "Updating of %s row is not allowed in %strigger"
+ ger "Aktualisieren einer %s-Zeile ist in einem %-Trigger nicht erlaubt"
ER_TRG_NO_SUCH_ROW_IN_TRG
eng "There is no %s row in %s trigger"
+ ger "Es gibt keine %s-Zeile im %s-Trigger"
ER_NO_DEFAULT_FOR_FIELD
eng "Field '%-.64s' doesn't have a default value"
+ ger "Feld '%-.64s' hat keinen Vorgabewert"
ER_DIVISION_BY_ZERO 22012
eng "Division by 0"
+ ger "Division durch 0"
ER_TRUNCATED_WRONG_VALUE_FOR_FIELD
eng "Incorrect %-.32s value: '%-.128s' for column '%.64s' at row %ld"
ER_ILLEGAL_VALUE_FOR_TYPE 22007
eng "Illegal %s '%-.64s' value found during parsing"
ER_VIEW_NONUPD_CHECK
eng "CHECK OPTION on non-updatable view '%-.64s.%-.64s'"
+ ger "CHECK OPTION auf nicht-aktualisierbarem View '%-.64s.%-.64s'"
ER_VIEW_CHECK_FAILED
eng "CHECK OPTION failed '%-.64s.%-.64s'"
+ ger "CHECK OPTION fehlgeschlagen: '%-.64s.%-.64s'"
ER_PROCACCESS_DENIED_ERROR 42000
eng "%-.16s command denied to user '%-.32s'@'%-.64s' for routine '%-.64s'"
ER_RELAY_LOG_FAIL
eng "Failed purging old relay logs: %s"
+ ger "Bereinigen alter Relais-Logs fehlgeschlagen: %s"
ER_PASSWD_LENGTH
eng "Password hash should be a %d-digit hexadecimal number"
+ ger "Passwort-Hash sollte eine Hexdaezimalzahl mit %d Stellen sein"
ER_UNKNOWN_TARGET_BINLOG
eng "Target log not found in binlog index"
+ ger "Ziel-Log im Binlog-Index nicht gefunden"
ER_IO_ERR_LOG_INDEX_READ
eng "I/O error reading log index file"
+ ger "Fehler beim Lesen der Log-Index-Datei"
ER_BINLOG_PURGE_PROHIBITED
eng "Server configuration does not permit binlog purge"
+ ger "Server-Konfiguration erlaubt keine Binlog-Bereinigung"
ER_FSEEK_FAIL
eng "Failed on fseek()"
+ ger "fseek() fehlgeschlagen"
ER_BINLOG_PURGE_FATAL_ERR
eng "Fatal error during log purge"
+ ger "Schwerwiegender Fehler bei der Log-Bereinigung"
ER_LOG_IN_USE
eng "A purgeable log is in use, will not purge"
+ ger "Ein zu bereinigendes Log wird gerade benutzt, daher keine Bereinigung"
ER_LOG_PURGE_UNKNOWN_ERR
eng "Unknown error during log purge"
+ ger "Unbekannter Fehler bei Log-Bereinigung"
ER_RELAY_LOG_INIT
eng "Failed initializing relay log position: %s"
+ ger "Initialisierung der Relais-Log-Position fehlgeschlagen: %s"
ER_NO_BINARY_LOGGING
eng "You are not using binary logging"
ER_RESERVED_SYNTAX
eng "The '%-.64s' syntax is reserved for purposes internal to the MySQL server"
ER_WSAS_FAILED
eng "WSAStartup Failed"
+ ger "WSAStartup fehlgeschlagen"
ER_DIFF_GROUPS_PROC
eng "Can't handle procedures with differents groups yet"
+ ger "Kann Prozeduren mit unterschiedlichen Gruppen noch nicht verarbeiten"
ER_NO_GROUP_FOR_PROC
eng "Select must have a group with this procedure"
+ ger "SELECT muss bei dieser Prozedur ein GROUP BY haben"
ER_ORDER_WITH_PROC
eng "Can't use ORDER clause with this procedure"
+ ger "Kann bei dieser Prozedur keine ORDER-BY-Klausel verwenden"
ER_LOGGING_PROHIBIT_CHANGING_OF
eng "Binary logging and replication forbid changing the global server %s"
ER_NO_FILE_MAPPING
eng "Can't map file: %-.64s, errno: %d"
+ ger "Kann Datei nicht abbilden: %-.64s, Fehler: %d"
ER_WRONG_MAGIC
eng "Wrong magic in %-.64s"
+ ger "Falsche magische Zahlen in %-.64s"
ER_PS_MANY_PARAM
eng "Prepared statement contains too many placeholders"
ER_KEY_PART_0
eng "Key part '%-.64s' length cannot be 0"
ER_VIEW_CHECKSUM
eng "View text checksum failed"
ER_VIEW_MULTIUPDATE
eng "Can not modify more than one base table through a join view '%-.64s.%-.64s'"
ER_VIEW_NO_INSERT_FIELD_LIST
eng "Can not insert into join view '%-.64s.%-.64s' without fields list"
ER_VIEW_DELETE_MERGE_VIEW
eng "Can not delete from join view '%-.64s.%-.64s'"
ER_CANNOT_USER
eng "Operation %s failed for %.256s"
norwegian-ny "Operation %s failed for '%.256s'"
ER_XAER_NOTA XAE04
eng "XAER_NOTA: Unknown XID"
+ ger "XAER_NOTA: Unbekannte XID"
ER_XAER_INVAL XAE05
eng "XAER_INVAL: Invalid arguments (or unsupported command)"
ER_XAER_RMFAIL XAE07
eng "XAER_RMFAIL: The command cannot be executed when global transaction is in the %.64s state"
ER_XAER_OUTSIDE XAE09
eng "XAER_OUTSIDE: Some work is done outside global transaction"
ER_XAER_RMERR XAE03
eng "XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency"
ER_XA_RBROLLBACK XA100
eng "XA_RBROLLBACK: Transaction branch was rolled back"
ER_NONEXISTING_PROC_GRANT 42000
eng "There is no such grant defined for user '%-.32s' on host '%-.64s' on routine '%-.64s'"
ER_PROC_AUTO_GRANT_FAIL
eng "Failed to grant EXECUTE and ALTER ROUTINE privileges"
ER_PROC_AUTO_REVOKE_FAIL
eng "Failed to revoke all privileges to dropped routine"
ER_DATA_TOO_LONG 22001
eng "Data too long for column '%s' at row %ld"
ER_SP_BAD_SQLSTATE 42000
eng "Bad SQLSTATE: '%s'"
ER_STARTUP
eng "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s"
ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR
eng "Can't load value from file with fixed size rows to variable"
ER_CANT_CREATE_USER_WITH_GRANT 42000
eng "You are not allowed to create a user with GRANT"
ER_WRONG_VALUE_FOR_TYPE
eng "Incorrect %-.32s value: '%-.128s' for function %-.32s"
ER_TABLE_DEF_CHANGED
eng "Table definition has changed, please retry transaction"
ER_SP_DUP_HANDLER 42000
eng "Duplicate handler declared in the same block"
+ ger "Doppelter Handler im selben Block deklariert"
ER_SP_NOT_VAR_ARG 42000
eng "OUT or INOUT argument %d for routine %s is not a variable"
ER_SP_NO_RETSET 0A000
eng "Not allowed to return a result set from a %s"
ER_CANT_CREATE_GEOMETRY_OBJECT 22003
eng "Cannot get geometry object from data you send to the GEOMETRY field"
ER_FAILED_ROUTINE_BREAK_BINLOG
eng "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes"
ER_BINLOG_UNSAFE_ROUTINE
- eng "This routine has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_routine_creators variable)"
+ eng "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)"
ER_BINLOG_CREATE_ROUTINE_NEED_SUPER
- eng "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_routine_creators variable)"
+ eng "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)"
ER_EXEC_STMT_WITH_OPEN_CURSOR
eng "You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it."
ER_STMT_HAS_NO_OPEN_CURSOR
eng "The statement (%lu) has no open cursor."
ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG
eng "Explicit or implicit commit is not allowed in stored function or trigger."
+ ger "Explizites oder implizites Commit ist in gespeicherten Funktionen und in Triggern nicht erlaubt"
ER_NO_DEFAULT_FOR_VIEW_FIELD
eng "Field of view '%-.64s.%-.64s' underlying table doesn't have a default value"
+ ger "Ein Feld der dem View '%-.64s.%-.64s' zugrundeliegenden Tabelle hat keinen Vorgabewert"
ER_SP_NO_RECURSION
- eng "Recursive stored routines are not allowed."
+ eng "Recursive stored functions and triggers are not allowed."
+ ger "Rekursive gespeicherte Routinen und Triggers sind nicht erlaubt"
ER_TOO_BIG_SCALE 42000 S1009
eng "Too big scale %d specified for column '%-.64s'. Maximum is %d."
ER_TOO_BIG_PRECISION 42000 S1009
eng "Too big precision %d specified for column '%-.64s'. Maximum is %d."
ER_M_BIGGER_THAN_D 42000 S1009
eng "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.64s')."
ER_WRONG_LOCK_OF_SYSTEM_TABLE
eng "You can't combine write-locking of system '%-.64s.%-.64s' table with other tables"
ER_CONNECT_TO_FOREIGN_DATA_SOURCE
- eng "Unable to connect to foreign data source - database '%.64s'!"
+ eng "Unable to connect to foreign data source: %.64s"
+ ger "Kann nicht mit Fremddatenquelle verbinden: %.64s"
ER_QUERY_ON_FOREIGN_DATA_SOURCE
- eng "There was a problem processing the query on the foreign data source. Data source error: '%-.64s'"
+ eng "There was a problem processing the query on the foreign data source. Data source error: %-.64"
+ ger "Bei der Verarbeitung der Abfrage ist in der Fremddatenquelle ein Problem aufgetreten. Datenquellenfehlermeldung: %-.64s"
ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST
- eng "The foreign data source you are trying to reference does not exist. Data source error : '%-.64s'"
+ eng "The foreign data source you are trying to reference does not exist. Data source error: %-.64s"
+ ger "Die Fremddatenquelle, auf die Sie zugreifen wollen, existiert nicht. Datenquellenfehlermeldung: %-.64s"
ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE
eng "Can't create federated table. The data source connection string '%-.64s' is not in the correct format"
ER_FOREIGN_DATA_STRING_INVALID
eng "The data source connection string '%-.64s' is not in the correct format"
+ ger "Der Datenquellen-Verbindungsstring '%-.64s' hat kein korrektes Format"
ER_CANT_CREATE_FEDERATED_TABLE
- eng "Can't create federated table. Foreign data src error : '%-.64s'"
+ eng "Can't create federated table. Foreign data src error: %-.64s"
ER_TRG_IN_WRONG_SCHEMA
eng "Trigger in wrong schema"
+ ger "Trigger im falschen 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."
ER_TOO_LONG_BODY 42000 S1009
eng "Routine body for '%-.100s' is too long"
ER_WARN_CANT_DROP_DEFAULT_KEYCACHE
eng "Cannot drop default keycache"
ER_TOO_BIG_DISPLAYWIDTH 42000 S1009
eng "Display width out of range for column '%-.64s' (max = %d)"
ER_XAER_DUPID XAE08
eng "XAER_DUPID: The XID already exists"
+ ger "XAER_DUPID: Die XID existiert bereits"
ER_DATETIME_FUNCTION_OVERFLOW 22008
eng "Datetime function: %-.32s field overflow"
ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG
eng "Can't update table '%-.64s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger."
+ ger "Kann Tabelle '%-.64s' in gespeicherter Funktion oder Trigger nicht aktualisieren, weil sie bereits von der Anweisung verwendet wird, die diese gespeicherte Funktion oder den Trigger aufrief"
ER_VIEW_PREVENT_UPDATE
eng "The definition of table '%-.64s' prevents operation %.64s on table '%-.64s'."
+ ger "Die Definition der Tabelle '%-.64s' verhindert die Operation %.64s auf Tabelle '%-.64s'"
ER_PS_NO_RECURSION
eng "The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner"
ER_SP_CANT_SET_AUTOCOMMIT
eng "Not allowed to set autocommit from a stored function or trigger"
-ER_NO_VIEW_USER
- eng "View definer is not fully qualified"
+ ger "Es ist nicht erlaubt, innerhalb einer gespeicherten Funktion oder eines Triggers AUTOCOMMIT zu setzen"
+ER_MALFORMED_DEFINER
+ eng "Definer is not fully qualified"
ER_VIEW_FRM_NO_USER
- eng "View %-.64s.%-.64s has not definer information (old table format). Current user is used as definer. Please recreate view!"
+ eng "View '%-.64s'.'%-.64s' has no definer information (old table format). Current user is used as definer. Please recreate the view!"
+ ger "View '%-.64s'.'%-.64s' hat keine Definierer-Information (altes Tabellenformat). Der aktuelle Benutzer wird als Definierer verwendet. Bitte erstellen Sie den View neu"
ER_VIEW_OTHER_USER
- eng "You need the SUPER privilege for creation view with %-.64s@%-.64s definer"
+ eng "You need the SUPER privilege for creation view with '%-.64s'@'%-.64s' definer"
+ ger "Sie brauchen die SUPER-Berechtigung, um einen View mit dem Definierer '%-.64s'@'%-.64s' zu erzeugen"
ER_NO_SUCH_USER
- eng "There is not %-.64s@%-.64s registered"
+ eng "There is no '%-.64s'@'%-.64s' registered"
+ ger "'%-.64s'@'%-.64s' ist nicht registriert"
ER_FORBID_SCHEMA_CHANGE
eng "Changing schema from '%-.64s' to '%-.64s' is not allowed."
+ ger "Wechsel des Schemas von '%-.64s' auf '%-.64s' ist nicht erlaubt"
ER_ROW_IS_REFERENCED_2 23000
eng "Cannot delete or update a parent row: a foreign key constraint fails (%.192s)"
ER_NO_REFERENCED_ROW_2 23000
eng "Cannot add or update a child row: a foreign key constraint fails (%.192s)"
ER_SP_BAD_VAR_SHADOW 42000
eng "Variable '%-.64s' must be quoted with `...`, or renamed"
+ER_TRG_NO_DEFINER
+ eng "No definer attribute for trigger '%-.64s'.'%-.64s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger."
+ER_OLD_FILE_FORMAT
+ eng "'%-.64s' has an old format, you should re-create the '%s' object(s)"
+ER_SP_RECURSION_LIMIT
+ eng "Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %.64s"
ER_SP_PROC_TABLE_CORRUPT
eng "Failed to load routine %s. The table mysql.proc is missing, corrupt, or contains bad data (internal code %d)"
--- 1.15/sql/sql_trigger.h 2005-10-26 15:34:47 +02:00
+++ 1.16/sql/sql_trigger.h 2005-12-06 13:20:53 +01:00
@@ -55,6 +55,12 @@
*/
LEX_STRING sroutines_key;
+ /*
+ is_special_var_used specifies whether trigger body contains special
+ variables (NEW/OLD).
+ */
+ bool m_spec_var_used[TRG_EVENT_MAX][TRG_ACTION_MAX];
+
public:
/*
Field responsible for storing triggers definitions in file.
@@ -66,6 +72,8 @@
*/
List<ulonglong> definition_modes_list;
+ List<LEX_STRING> definers_list;
+
Table_triggers_list(TABLE *table_arg):
record1_field(0), table(table_arg)
{
@@ -73,7 +81,9 @@
}
~Table_triggers_list();
- bool create_trigger(THD *thd, TABLE_LIST *table);
+ bool create_trigger(THD *thd, TABLE_LIST *table,
+ LEX_STRING *definer_user,
+ LEX_STRING *definer_host);
bool drop_trigger(THD *thd, TABLE_LIST *table);
bool process_triggers(THD *thd, trg_event_type event,
trg_action_time_type time_type,
@@ -81,7 +91,8 @@
bool get_trigger_info(THD *thd, trg_event_type event,
trg_action_time_type time_type,
LEX_STRING *trigger_name, LEX_STRING *trigger_stmt,
- ulong *sql_mode);
+ ulong *sql_mode,
+ LEX_STRING *definer);
static bool check_n_load(THD *thd, const char *db, const char *table_name,
TABLE *table, bool names_only);
@@ -96,6 +107,11 @@
bool has_before_update_triggers()
{
return test(bodies[TRG_EVENT_UPDATE][TRG_ACTION_BEFORE]);
+ }
+
+ inline bool is_special_var_used(int event, int action_time) const
+ {
+ return m_spec_var_used[event][action_time];
}
void set_table(TABLE *new_table);
--- 1.93/mysql-test/r/sp-error.result 2005-11-23 00:12:33 +01:00
+++ 1.94/mysql-test/r/sp-error.result 2005-12-06 13:20:52 +01:00
@@ -124,7 +124,7 @@
declare x int;
set x = val+3;
end|
-ERROR 42000: No RETURN found in FUNCTION f
+ERROR 42000: No RETURN found in FUNCTION test.f
create function f(val int) returns int
begin
declare x int;
--- 1.162/mysql-test/t/sp.test 2005-10-26 15:34:47 +02:00
+++ 1.163/mysql-test/t/sp.test 2005-12-06 13:20:52 +01:00
@@ -1213,15 +1213,13 @@
end if;
end|
select f5(1)|
-# This should generate an error about insuficient number of tables locked
-# Now this crash server
---disable_parsing # until bug#11394 fix
---error 1100
+# Since currently recursive functions are disallowed ER_SP_NO_RECURSION
+# error will be returned, once we will allow them error about
+# insufficient number of locked tables will be returned instead.
+--error ER_SP_NO_RECURSION
select f5(2)|
-# But now it simply miserably fails because we are trying to use the same
-# lex on the next iteration :/ It should generate some error too...
+--error ER_SP_NO_RECURSION
select f5(3)|
---enable_parsing
# OTOH this should work
create function f6() returns int
@@ -1267,13 +1265,12 @@
# views and functions ?
create function f1() returns int
return (select sum(data) from t1) + (select sum(data) from v1)|
-# This queries will crash server because we can't use LEX in
-# reenterable fashion yet. Patch disabling recursion will heal this.
---disable_parsing
+--error ER_SP_NO_RECURSION
select f1()|
+--error ER_SP_NO_RECURSION
select * from v1|
+--error ER_SP_NO_RECURSION
select * from v2|
---enable_parsing
# Back to the normal cases
drop function f1|
create function f1() returns int
@@ -1291,9 +1288,7 @@
#
# Let us test how well prelocking works with explicit LOCK TABLES.
#
-# Nowdays we have to lock mysql.proc to be able to read SP definitions.
-# But Monty was going to fix this.
-lock tables t1 read, t1 as t11 read, mysql.proc read|
+lock tables t1 read, t1 as t11 read|
# These should work well
select f3()|
select id, f3() from t1 as t11|
@@ -1483,9 +1478,6 @@
# Fibonacci, for recursion test. (Yet Another Numerical series :)
#
-# This part of test is disabled until we implement support for
-# recursive stored procedures.
---disable_parsing
--disable_warnings
drop table if exists fib|
--enable_warnings
@@ -1514,6 +1506,9 @@
end if;
end|
+# Enable recursion
+set @@max_sp_recursion_depth= 20|
+
# Minimum test: recursion of 3 levels
insert into fib values (0), (1)|
@@ -1533,7 +1528,7 @@
select * from fib order by f asc|
drop table fib|
drop procedure fib|
---enable_parsing
+set @@max_sp_recursion_depth= 0|
#
# Comment & suid
@@ -1802,16 +1797,8 @@
drop procedure bug2260|
#
-# BUG#2267
+# BUG#2267 "Lost connect if stored procedure has SHOW FUNCTION STATUS"
#
-# NOTE: This test case will be fixed as soon as Monty
-# will allow to open mysql.proc table under LOCK TABLES
-# without mentioning in lock list.
-#
-# FIXME: Other solution would be to use preopened proc table
-# instead of opening it anew.
-#
---disable_parsing
--disable_warnings
drop procedure if exists bug2267_1|
--enable_warnings
@@ -1838,11 +1825,13 @@
--disable_warnings
drop procedure if exists bug2267_4|
+drop function if exists bug2267_4|
--enable_warnings
create procedure bug2267_4()
begin
- show create function fac;
+ show create function bug2267_4;
end|
+create function bug2267_4() returns int return 100|
--replace_column 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00'
call bug2267_1()|
@@ -1855,7 +1844,7 @@
drop procedure bug2267_2|
drop procedure bug2267_3|
drop procedure bug2267_4|
---enable_parsing
+drop function bug2267_4|
#
# BUG#2227
@@ -1875,23 +1864,16 @@
drop procedure bug2227|
#
-# BUG#2614
+# BUG#2614 "Stored procedure with INSERT ... SELECT that does not
+# contain any tables crashes server"
#
-# QQ The second insert doesn't work with temporary tables (it was an
-# QQ ordinary table before we changed the locking scheme). It results
-# QQ in an error: 1137: Can't reopen table: 't3'
-# QQ which is a known limit with temporary tables.
-# QQ For this reason we can't run this test any more (i.e., if we modify
-# QQ it, it's no longer a test case for the bug), but we keep it here
-# QQ anyway, for tracability.
---disable_parsing
--disable_warnings
drop procedure if exists bug2614|
--enable_warnings
create procedure bug2614()
begin
- drop temporary table if exists t3;
- create temporary table t3 (id int default '0' not null);
+ drop table if exists t3;
+ create table t3 (id int default '0' not null);
insert into t3 select 12;
insert into t3 select * from t3;
end|
@@ -1900,9 +1882,8 @@
call bug2614()|
--enable_warnings
call bug2614()|
-drop temporary table t3|
+drop table t3|
drop procedure bug2614|
---enable_parsing
#
# BUG#2674
@@ -4293,6 +4274,9 @@
# No warnings here
call bug12589_2()|
call bug12589_3()|
+drop procedure bug12589_1|
+drop procedure bug12589_2|
+drop procedure bug12589_3|
#
# BUG#7049: Stored procedure CALL errors are ignored
@@ -4490,6 +4474,478 @@
delimiter |;
+#
+# BUG#14210: "Simple query with > operator on large table gives server
+# crash"
+# Check that cursors work in case when HEAP tables are converted to
+# MyISAM
+#
+--disable_warnings
+drop procedure if exists bug14210|
+--enable_warnings
+set @@session.max_heap_table_size=16384|
+select @@session.max_heap_table_size|
+# To trigger the memory corruption the original table must be InnoDB.
+# No harm if it's not, so don't warn if the suite is run with --skip-innodb
+--disable_warnings
+create table t3 (a char(255)) engine=InnoDB|
+--enable_warnings
+create procedure bug14210_fill_table()
+begin
+ declare table_size, max_table_size int default 0;
+ select @@session.max_heap_table_size into max_table_size;
+ delete from t3;
+ insert into t3 (a) values (repeat('a', 255));
+ repeat
+ insert into t3 select a from t3;
+ select count(*)*255 from t3 into table_size;
+ until table_size > max_table_size*2 end repeat;
+end|
+call bug14210_fill_table()|
+drop procedure bug14210_fill_table|
+create table t4 like t3|
+
+create procedure bug14210()
+begin
+ declare a char(255);
+ declare done int default 0;
+ declare c cursor for select * from t3;
+ declare continue handler for sqlstate '02000' set done = 1;
+ open c;
+ repeat
+ fetch c into a;
+ if not done then
+ insert into t4 values (upper(a));
+ end if;
+ until done end repeat;
+ close c;
+end|
+call bug14210()|
+select count(*) from t4|
+
+drop table t3, t4|
+drop procedure bug14210|
+set @@session.max_heap_table_size=default|
+
+
+#
+# BUG#1473: Dumping of stored functions seems to cause corruption in
+# the function body
+#
+--disable_warnings
+drop function if exists bug14723|
+drop procedure if exists bug14723|
+--enable_warnings
+
+delimiter ;;|
+/*!50003 create function bug14723()
+ returns bigint(20)
+main_loop: begin
+ return 42;
+end */;;
+show create function bug14723;;
+select bug14723();;
+
+/*!50003 create procedure bug14723()
+main_loop: begin
+ select 42;
+end */;;
+show create procedure bug14723;;
+call bug14723();;
+
+delimiter |;;
+
+drop function bug14723|
+drop procedure bug14723|
+
+#
+# Bug#14845 "mysql_stmt_fetch returns MYSQL_NO_DATA when COUNT(*) is 0"
+# Check that when fetching from a cursor, COUNT(*) works properly.
+#
+create procedure bug14845()
+begin
+ declare a char(255);
+ declare done int default 0;
+ declare c cursor for select count(*) from t1 where 1 = 0;
+ declare continue handler for sqlstate '02000' set done = 1;
+ open c;
+ repeat
+ fetch c into a;
+ if not done then
+ select a;
+ end if;
+ until done end repeat;
+ close c;
+end|
+call bug14845()|
+drop procedure bug14845|
+
+#
+# BUG#13549 "Server crash with nested stored procedures".
+# Server should not crash when during execution of stored procedure
+# we have to parse trigger/function definition and this new trigger/
+# function has more local variables declared than invoking stored
+# procedure and last of these variables is used in argument of NOT
+# operator.
+#
+--disable_warnings
+drop procedure if exists bug13549_1|
+drop procedure if exists bug13549_2|
+--enable_warnings
+CREATE PROCEDURE `bug13549_2`()
+begin
+ call bug13549_1();
+end|
+CREATE PROCEDURE `bug13549_1`()
+begin
+ declare done int default 0;
+ set done= not done;
+end|
+CALL bug13549_2()|
+drop procedure bug13549_2|
+drop procedure bug13549_1|
+
+#
+# BUG#10100: function (and stored procedure?) recursivity problem
+#
+--disable_warnings
+drop function if exists bug10100f|
+drop procedure if exists bug10100p|
+drop procedure if exists bug10100t|
+drop procedure if exists bug10100pt|
+drop procedure if exists bug10100pv|
+drop procedure if exists bug10100pd|
+drop procedure if exists bug10100pc|
+--enable_warnings
+# routines with simple recursion
+create function bug10100f(prm int) returns int
+begin
+ if prm > 1 then
+ return prm * bug10100f(prm - 1);
+ end if;
+ return 1;
+end|
+create procedure bug10100p(prm int, inout res int)
+begin
+ set res = res * prm;
+ if prm > 1 then
+ call bug10100p(prm - 1, res);
+ end if;
+end|
+create procedure bug10100t(prm int)
+begin
+ declare res int;
+ set res = 1;
+ call bug10100p(prm, res);
+ select res;
+end|
+
+# a procedure which use tables and recursion
+create table t3 (a int)|
+insert into t3 values (0)|
+create view v1 as select a from t3;
+create procedure bug10100pt(level int, lim int)
+begin
+ if level < lim then
+ update t3 set a=level;
+ FLUSH TABLES;
+ call bug10100pt(level+1, lim);
+ else
+ select * from t3;
+ end if;
+end|
+# view & recursion
+create procedure bug10100pv(level int, lim int)
+begin
+ if level < lim then
+ update v1 set a=level;
+ FLUSH TABLES;
+ call bug10100pv(level+1, lim);
+ else
+ select * from v1;
+ end if;
+end|
+# dynamic sql & recursion
+prepare stmt2 from "select * from t3;";
+create procedure bug10100pd(level int, lim int)
+begin
+ if level < lim then
+ select level;
+ prepare stmt1 from "update t3 set a=a+2";
+ execute stmt1;
+ FLUSH TABLES;
+ execute stmt1;
+ FLUSH TABLES;
+ execute stmt1;
+ FLUSH TABLES;
+ deallocate prepare stmt1;
+ execute stmt2;
+ select * from t3;
+ call bug10100pd(level+1, lim);
+ else
+ execute stmt2;
+ end if;
+end|
+# cursor & recursion
+create procedure bug10100pc(level int, lim int)
+begin
+ declare lv int;
+ declare c cursor for select a from t3;
+ open c;
+ if level < lim then
+ select level;
+ fetch c into lv;
+ select lv;
+ update t3 set a=level+lv;
+ FLUSH TABLES;
+ call bug10100pc(level+1, lim);
+ else
+ select * from t3;
+ end if;
+ close c;
+end|
+
+set @@max_sp_recursion_depth=4|
+select @@max_sp_recursion_depth|
+-- error ER_SP_NO_RECURSION
+select bug10100f(3)|
+-- error ER_SP_NO_RECURSION
+select bug10100f(6)|
+call bug10100t(5)|
+call bug10100pt(1,5)|
+call bug10100pv(1,5)|
+update t3 set a=1|
+call bug10100pd(1,5)|
+select * from t3|
+update t3 set a=1|
+call bug10100pc(1,5)|
+select * from t3|
+set @@max_sp_recursion_depth=0|
+select @@max_sp_recursion_depth|
+-- error ER_SP_NO_RECURSION
+select bug10100f(5)|
+-- error ER_SP_RECURSION_LIMIT
+call bug10100t(5)|
+
+#end of the stack checking
+set @@max_sp_recursion_depth=255|
+set @var=1|
+#disable log because error about stack overrun contains numbers which
+#depend on a system
+-- disable_result_log
+-- error ER_STACK_OVERRUN_NEED_MORE
+call bug10100p(255, @var)|
+-- error ER_STACK_OVERRUN_NEED_MORE
+call bug10100pt(1,255)|
+-- error ER_STACK_OVERRUN_NEED_MORE
+call bug10100pv(1,255)|
+-- error ER_STACK_OVERRUN_NEED_MORE
+call bug10100pd(1,255)|
+-- error ER_STACK_OVERRUN_NEED_MORE
+call bug10100pc(1,255)|
+-- enable_result_log
+set @@max_sp_recursion_depth=0|
+
+deallocate prepare stmt2|
+
+drop function bug10100f|
+drop procedure bug10100p|
+drop procedure bug10100t|
+drop procedure bug10100pt|
+drop procedure bug10100pv|
+drop procedure bug10100pd|
+drop procedure bug10100pc|
+drop view v1|
+
+#
+# BUG#13729: Stored procedures: packet error after exception handled
+#
+--disable_warnings
+drop procedure if exists bug13729|
+drop table if exists t3|
+--enable_warnings
+
+create table t3 (s1 int, primary key (s1))|
+
+insert into t3 values (1),(2)|
+
+create procedure bug13729()
+begin
+ declare continue handler for sqlexception select 55;
+
+ update t3 set s1 = 1;
+end|
+
+call bug13729()|
+# Used to cause Packets out of order
+select * from t3|
+
+drop procedure bug13729|
+drop table t3|
+
+#
+# BUG#14643: Stored Procedure: Continuing after failed var. initialization
+# crashes server.
+#
+--disable_warnings
+drop procedure if exists bug14643_1|
+drop procedure if exists bug14643_2|
+--enable_warnings
+
+create procedure bug14643_1()
+begin
+ declare continue handler for sqlexception select 'boo' as 'Handler';
+
+ begin
+ declare v int default x;
+
+ if v = 1 then
+ select 1;
+ else
+ select 2;
+ end if;
+ end;
+end|
+
+create procedure bug14643_2()
+begin
+ declare continue handler for sqlexception select 'boo' as 'Handler';
+
+ case x
+ when 1 then
+ select 1;
+ else
+ select 2;
+ end case;
+end|
+
+call bug14643_1()|
+call bug14643_2()|
+
+drop procedure bug14643_1|
+drop procedure bug14643_2|
+
+#
+# BUG#14304: auto_increment field incorrect set in SP
+#
+--disable_warnings
+drop procedure if exists bug14304|
+drop table if exists t3, t4|
+--enable_warnings
+
+create table t3(a int primary key auto_increment)|
+create table t4(a int primary key auto_increment)|
+
+create procedure bug14304()
+begin
+ insert into t3 set a=null;
+ insert into t4 set a=null;
+ insert into t4 set a=null;
+ insert into t4 set a=null;
+ insert into t4 set a=null;
+ insert into t4 set a=null;
+ insert into t4 select null as a;
+
+ insert into t3 set a=null;
+ insert into t3 set a=null;
+
+ select * from t3;
+end|
+
+call bug14304()|
+
+drop procedure bug14304|
+drop table t3, t4|
+
+#
+# BUG#14376: MySQL crash on scoped variable (re)initialization
+#
+--disable_warnings
+drop procedure if exists bug14376|
+--enable_warnings
+
+create procedure bug14376()
+begin
+ declare x int default x;
+end|
+
+# Not the error we want, but that's what we got for now...
+--error ER_BAD_FIELD_ERROR
+call bug14376()|
+drop procedure bug14376|
+
+create procedure bug14376()
+begin
+ declare x int default 42;
+
+ begin
+ declare x int default x;
+
+ select x;
+ end;
+end|
+
+call bug14376()|
+
+drop procedure bug14376|
+
+create procedure bug14376(x int)
+begin
+ declare x int default x;
+
+ select x;
+end|
+
+call bug14376(4711)|
+
+drop procedure bug14376|
+
+#
+# Bug#5967 "Stored procedure declared variable used instead of column"
+# The bug should be fixed later.
+# Test precedence of names of parameters, variable declarations,
+# variable declarations in nested compound statements, table columns,
+# table columns in cursor declarations.
+# According to the standard, table columns take precedence over
+# variable declarations. In MySQL 5.0 it's vice versa.
+#
+
+drop procedure if exists p1|
+drop table if exists t1|
+create table t1 (a varchar(255))|
+insert into t1 (a) values ("a - table column")|
+create procedure p1(a varchar(255))
+begin
+ declare i varchar(255);
+ declare c cursor for select a from t1;
+ select a;
+ select a from t1 into i;
+ select i as 'Parameter takes precedence over table column'; open c;
+ fetch c into i;
+ close c;
+ select i as 'Parameter takes precedence over table column in cursors';
+ begin
+ declare a varchar(255) default 'a - local variable';
+ declare c1 cursor for select a from t1;
+ select a as 'A local variable takes precedence over parameter';
+ open c1;
+ fetch c1 into i;
+ close c1;
+ select i as 'A local variable takes precedence over parameter in cursors';
+ begin
+ declare a varchar(255) default 'a - local variable in a nested compound statement';
+ declare c2 cursor for select a from t1;
+ select a as 'A local variable in a nested compound statement takes precedence over a local variable in the outer statement';
+ select a from t1 into i;
+ select i as 'A local variable in a nested compound statement takes precedence over table column';
+ open c2;
+ fetch c2 into i;
+ close c2;
+ select i as 'A local variable in a nested compound statement takes precedence over table column in cursors';
+ end;
+ end;
+end|
+call p1("a - stored procedure parameter")|
#
# BUG#NNNN: New bug synopsis
--- 1.98/sql/sp.cc 2005-11-25 17:09:18 +01:00
+++ 1.99/sql/sp.cc 2005-12-06 13:20:52 +01:00
@@ -29,6 +29,11 @@
const char *returns, ulong returnslen,
const char *body, ulong bodylen,
st_sp_chistics *chistics);
+static int
+db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
+ ulong sql_mode, const char *params, const char *returns,
+ const char *body, st_sp_chistics &chistics,
+ const char *definer, longlong created, longlong modified);
/*
*
@@ -377,83 +382,80 @@
close_proc_table(thd, &open_tables_state_backup);
table= 0;
- {
- String defstr;
- LEX *oldlex= thd->lex;
- char olddb[128];
- bool dbchanged;
- enum enum_sql_command oldcmd= thd->lex->sql_command;
- ulong old_sql_mode= thd->variables.sql_mode;
- ha_rows select_limit= thd->variables.select_limit;
-
- thd->variables.sql_mode= sql_mode;
- thd->variables.select_limit= HA_POS_ERROR;
-
- defstr.set_charset(system_charset_info);
- if (!create_string(thd, &defstr,
- type,
- name,
- params, strlen(params),
- returns, strlen(returns),
- body, strlen(body),
- &chistics))
- {
- ret= SP_INTERNAL_ERROR;
- goto done;
- }
+ ret= db_load_routine(thd, type, name, sphp,
+ sql_mode, params, returns, body, chistics,
+ definer, created, modified);
+
+ done:
+ if (table)
+ close_proc_table(thd, &open_tables_state_backup);
+ DBUG_RETURN(ret);
+}
- dbchanged= FALSE;
- if ((ret= sp_use_new_db(thd, name->m_db.str, olddb, sizeof(olddb),
- 1, &dbchanged)))
- goto done;
- {
- /* This is something of a kludge. We need to initialize some fields
- * in thd->lex (the unit and master stuff), and the easiest way to
- * do it is, is to call mysql_init_query(), but this unfortunately
- * resets teh value_list where we keep the CALL parameters. So we
- * copy the list and then restore it. (... and found_semicolon too).
- */
- List<Item> tmpvals= thd->lex->value_list;
- char *tmpfsc= thd->lex->found_semicolon;
-
- lex_start(thd, (uchar*)defstr.c_ptr(), defstr.length());
- thd->lex->value_list= tmpvals;
- thd->lex->found_semicolon= tmpfsc;
- }
+static int
+db_load_routine(THD *thd, int type, sp_name *name, sp_head **sphp,
+ ulong sql_mode, const char *params, const char *returns,
+ const char *body, st_sp_chistics &chistics,
+ const char *definer, longlong created, longlong modified)
+{
+ LEX *oldlex= thd->lex, newlex;
+ sp_rcontext *save_spcont= thd->spcont;
+ String defstr;
+ char olddb[128];
+ bool dbchanged;
+ ulong old_sql_mode= thd->variables.sql_mode;
+ ha_rows select_limit= thd->variables.select_limit;
+ int ret= SP_INTERNAL_ERROR;
+
+ thd->variables.sql_mode= sql_mode;
+ thd->variables.select_limit= HA_POS_ERROR;
+
+ thd->lex= &newlex;
+ newlex.current_select= NULL;
+
+ defstr.set_charset(system_charset_info);
+ if (!create_string(thd, &defstr,
+ type,
+ name,
+ params, strlen(params),
+ returns, strlen(returns),
+ body, strlen(body),
+ &chistics))
+ goto end;
- if (yyparse(thd) || thd->is_fatal_error || thd->lex->sphead == NULL)
- {
- LEX *newlex= thd->lex;
- sp_head *sp= newlex->sphead;
+ dbchanged= FALSE;
+ if ((ret= sp_use_new_db(thd, name->m_db.str, olddb, sizeof(olddb),
+ 1, &dbchanged)))
+ goto end;
- if (dbchanged && (ret= mysql_change_db(thd, olddb, 1)))
- goto done;
- if (sp)
- {
- delete sp;
- newlex->sphead= NULL;
- }
- ret= SP_PARSE_ERROR;
- }
- else
- {
- if (dbchanged && (ret= mysql_change_db(thd, olddb, 1)))
- goto done;
- *sphp= thd->lex->sphead;
- (*sphp)->set_info((char *)definer, (uint)strlen(definer),
- created, modified, &chistics, sql_mode);
- (*sphp)->optimize();
- }
- thd->lex->sql_command= oldcmd;
- thd->variables.sql_mode= old_sql_mode;
- thd->variables.select_limit= select_limit;
- }
+ lex_start(thd, (uchar*)defstr.c_ptr(), defstr.length());
- done:
- if (table)
- close_proc_table(thd, &open_tables_state_backup);
- DBUG_RETURN(ret);
+ thd->spcont= 0;
+ if (yyparse(thd) || thd->is_fatal_error || newlex.sphead == NULL)
+ {
+ sp_head *sp= newlex.sphead;
+
+ if (dbchanged && (ret= mysql_change_db(thd, olddb, 1)))
+ goto end;
+ delete sp;
+ ret= SP_PARSE_ERROR;
+ }
+ else
+ {
+ if (dbchanged && (ret= mysql_change_db(thd, olddb, 1)))
+ goto end;
+ *sphp= newlex.sphead;
+ (*sphp)->set_definer((char*) definer, (uint) strlen(definer));
+ (*sphp)->set_info(created, modified, &chistics, sql_mode);
+ (*sphp)->optimize();
+ }
+end:
+ thd->spcont= save_spcont;
+ thd->variables.sql_mode= old_sql_mode;
+ thd->variables.select_limit= select_limit;
+ thd->lex= oldlex;
+ return ret;
}
@@ -551,12 +553,13 @@
store(sp->m_chistics->comment.str, sp->m_chistics->comment.length,
system_charset_info);
- if (!trust_routine_creators && mysql_bin_log.is_open())
+ if ((sp->m_type == TYPE_ENUM_FUNCTION) &&
+ !trust_function_creators && mysql_bin_log.is_open())
{
if (!sp->m_chistics->detistic)
{
/*
- Note that for a _function_ this test is not enough; one could use
+ Note that this test is not perfect; one could use
a non-deterministic read-only function in an update statement.
*/
enum enum_sp_data_access access=
@@ -898,45 +901,106 @@
******************************************************************************/
/*
- Obtain object representing stored procedure by its name from
+ Obtain object representing stored procedure/function by its name from
stored procedures cache and looking into mysql.proc if needed.
SYNOPSIS
- sp_find_procedure()
+ sp_find_routine()
thd - thread context
+ type - type of object (TYPE_ENUM_FUNCTION or TYPE_ENUM_PROCEDURE)
name - name of procedure
+ cp - hash to look routine in
cache_only - if true perform cache-only lookup
(Don't look in mysql.proc).
- TODO
- We should consider merging of sp_find_procedure() and
- sp_find_function() into one sp_find_routine() function
- (the same applies to other similarly paired functions).
-
RETURN VALUE
Non-0 pointer to sp_head object for the procedure, or
0 - in case of error.
*/
sp_head *
-sp_find_procedure(THD *thd, sp_name *name, bool cache_only)
+sp_find_routine(THD *thd, int type, sp_name *name, sp_cache **cp,
+ bool cache_only)
{
sp_head *sp;
- DBUG_ENTER("sp_find_procedure");
- DBUG_PRINT("enter", ("name: %.*s.%.*s",
- name->m_db.length, name->m_db.str,
- name->m_name.length, name->m_name.str));
-
- if (!(sp= sp_cache_lookup(&thd->sp_proc_cache, name)) && !cache_only)
+ ulong depth= (type == TYPE_ENUM_PROCEDURE ?
+ thd->variables.max_sp_recursion_depth :
+ 0);
+
+ DBUG_ENTER("sp_find_routine");
+ DBUG_PRINT("enter", ("name: %.*s.%.*s, type: %d, cache only %d",
+ name->m_db.length, name->m_db.str,
+ name->m_name.length, name->m_name.str,
+ type, cache_only));
+
+ if ((sp= sp_cache_lookup(cp, name)))
+ {
+ ulong level;
+ DBUG_PRINT("info", ("found: 0x%lx", (ulong)sp));
+ if (sp->m_first_free_instance)
+ {
+ DBUG_PRINT("info", ("first free: 0x%lx, level: %lu, flags %x",
+ (ulong)sp->m_first_free_instance,
+ sp->m_first_free_instance->m_recursion_level,
+ sp->m_first_free_instance->m_flags));
+ DBUG_ASSERT(!(sp->m_first_free_instance->m_flags & sp_head::IS_INVOKED));
+ if (sp->m_first_free_instance->m_recursion_level > depth)
+ {
+ sp->recursion_level_error();
+ DBUG_RETURN(0);
+ }
+ DBUG_RETURN(sp->m_first_free_instance);
+ }
+ level= sp->m_last_cached_sp->m_recursion_level + 1;
+ if (level > depth)
+ {
+ sp->recursion_level_error();
+ DBUG_RETURN(0);
+ }
+ {
+ sp_head *new_sp;
+ const char *returns= "";
+ char definer[HOSTNAME_LENGTH+USERNAME_LENGTH+2];
+ String retstr(64);
+ strxmov(definer, sp->m_definer_user.str, "@",
+ sp->m_definer_host.str, NullS);
+ if (type == TYPE_ENUM_FUNCTION)
+ {
+ sp_returns_type(thd, retstr, sp);
+ returns= retstr.ptr();
+ }
+ if (db_load_routine(thd, type, name, &new_sp,
+ sp->m_sql_mode, sp->m_params.str, returns,
+ sp->m_body.str, *sp->m_chistics, definer,
+ sp->m_created, sp->m_modified) == SP_OK)
+ {
+ sp->m_last_cached_sp->m_next_cached_sp= new_sp;
+ new_sp->m_recursion_level= level;
+ new_sp->m_first_instance= sp;
+ sp->m_last_cached_sp= sp->m_first_free_instance= new_sp;
+ DBUG_PRINT("info", ("added level: 0x%lx, level: %lu, flags %x",
+ (ulong)new_sp, new_sp->m_recursion_level,
+ new_sp->m_flags));
+ DBUG_RETURN(new_sp);
+ }
+ DBUG_RETURN(0);
+ }
+ }
+ if (!cache_only)
{
- if (db_find_routine(thd, TYPE_ENUM_PROCEDURE, name, &sp) == SP_OK)
- sp_cache_insert(&thd->sp_proc_cache, sp);
+ if (db_find_routine(thd, type, name, &sp) == SP_OK)
+ {
+ sp_cache_insert(cp, sp);
+ DBUG_PRINT("info", ("added new: 0x%lx, level: %lu, flags %x",
+ (ulong)sp, sp->m_recursion_level,
+ sp->m_flags));
+ }
}
-
DBUG_RETURN(sp);
}
+
int
sp_exists_routine(THD *thd, TABLE_LIST *tables, bool any, bool no_error)
{
@@ -954,8 +1018,10 @@
lex_name.str= thd->strmake(table->table_name, lex_name.length);
name= new sp_name(lex_db, lex_name);
name->init_qname(thd);
- if (sp_find_procedure(thd, name) != NULL ||
- sp_find_function(thd, name) != NULL)
+ if (sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name,
+ &thd->sp_proc_cache, FALSE) != NULL ||
+ sp_find_routine(thd, TYPE_ENUM_FUNCTION, name,
+ &thd->sp_func_cache, FALSE) != NULL)
{
if (any)
DBUG_RETURN(1);
@@ -1023,7 +1089,8 @@
DBUG_ENTER("sp_show_create_procedure");
DBUG_PRINT("enter", ("name: %.*s", name->m_name.length, name->m_name.str));
- if ((sp= sp_find_procedure(thd, name)))
+ if ((sp= sp_find_routine(thd, TYPE_ENUM_PROCEDURE, name,
+ &thd->sp_proc_cache, FALSE)))
{
int ret= sp->show_create_procedure(thd);
@@ -1049,42 +1116,6 @@
FUNCTION
******************************************************************************/
-/*
- Obtain object representing stored function by its name from
- stored functions cache and looking into mysql.proc if needed.
-
- SYNOPSIS
- sp_find_function()
- thd - thread context
- name - name of function
- cache_only - if true perform cache-only lookup
- (Don't look in mysql.proc).
-
- NOTE
- See TODO section for sp_find_procedure().
-
- RETURN VALUE
- Non-0 pointer to sp_head object for the function, or
- 0 - in case of error.
-*/
-
-sp_head *
-sp_find_function(THD *thd, sp_name *name, bool cache_only)
-{
- sp_head *sp;
- DBUG_ENTER("sp_find_function");
- DBUG_PRINT("enter", ("name: %.*s", name->m_name.length, name->m_name.str));
-
- if (!(sp= sp_cache_lookup(&thd->sp_func_cache, name)) &&
- !cache_only)
- {
- if (db_find_routine(thd, TYPE_ENUM_FUNCTION, name, &sp) == SP_OK)
- sp_cache_insert(&thd->sp_func_cache, sp);
- }
- DBUG_RETURN(sp);
-}
-
-
int
sp_create_function(THD *thd, sp_head *sp)
{
@@ -1132,7 +1163,8 @@
DBUG_ENTER("sp_show_create_function");
DBUG_PRINT("enter", ("name: %.*s", name->m_name.length, name->m_name.str));
- if ((sp= sp_find_function(thd, name)))
+ if ((sp= sp_find_routine(thd, TYPE_ENUM_FUNCTION, name,
+ &thd->sp_func_cache, FALSE)))
{
int ret= sp->show_create_function(thd);
@@ -1444,10 +1476,6 @@
&thd->sp_func_cache : &thd->sp_proc_cache),
&name)))
{
- LEX *oldlex= thd->lex;
- LEX *newlex= new st_lex;
- thd->lex= newlex;
- newlex->current_select= NULL;
name.m_name.str= strchr(name.m_qname.str, '.');
name.m_db.length= name.m_name.str - name.m_qname.str;
name.m_db.str= strmake_root(thd->mem_root, name.m_qname.str,
@@ -1495,8 +1523,6 @@
}
break;
}
- delete newlex;
- thd->lex= oldlex;
}
if (sp)
{
@@ -1636,30 +1662,30 @@
chistics->comment.length))
return FALSE;
- buf->append("CREATE ", 7);
+ buf->append(STRING_WITH_LEN("CREATE "));
if (type == TYPE_ENUM_FUNCTION)
- buf->append("FUNCTION ", 9);
+ buf->append(STRING_WITH_LEN("FUNCTION "));
else
- buf->append("PROCEDURE ", 10);
+ buf->append(STRING_WITH_LEN("PROCEDURE "));
append_identifier(thd, buf, name->m_name.str, name->m_name.length);
buf->append('(');
buf->append(params, paramslen);
buf->append(')');
if (type == TYPE_ENUM_FUNCTION)
{
- buf->append(" RETURNS ", 9);
+ buf->append(STRING_WITH_LEN(" RETURNS "));
buf->append(returns, returnslen);
}
buf->append('\n');
switch (chistics->daccess) {
case SP_NO_SQL:
- buf->append(" NO SQL\n");
+ buf->append(STRING_WITH_LEN(" NO SQL\n"));
break;
case SP_READS_SQL_DATA:
- buf->append(" READS SQL DATA\n");
+ buf->append(STRING_WITH_LEN(" READS SQL DATA\n"));
break;
case SP_MODIFIES_SQL_DATA:
- buf->append(" MODIFIES SQL DATA\n");
+ buf->append(STRING_WITH_LEN(" MODIFIES SQL DATA\n"));
break;
case SP_DEFAULT_ACCESS:
case SP_CONTAINS_SQL:
@@ -1667,12 +1693,12 @@
break;
}
if (chistics->detistic)
- buf->append(" DETERMINISTIC\n", 18);
+ buf->append(STRING_WITH_LEN(" DETERMINISTIC\n"));
if (chistics->suid == SP_IS_NOT_SUID)
- buf->append(" SQL SECURITY INVOKER\n", 25);
+ buf->append(STRING_WITH_LEN(" SQL SECURITY INVOKER\n"));
if (chistics->comment.length)
{
- buf->append(" COMMENT ");
+ buf->append(STRING_WITH_LEN(" COMMENT "));
append_unescaped(buf, chistics->comment.str, chistics->comment.length);
buf->append('\n');
}
--- 1.30/sql/sp.h 2005-10-26 15:34:47 +02:00
+++ 1.31/sql/sp.h 2005-12-06 13:20:52 +01:00
@@ -36,7 +36,8 @@
sp_drop_db_routines(THD *thd, char *db);
sp_head *
-sp_find_procedure(THD *thd, sp_name *name, bool cache_only = 0);
+sp_find_routine(THD *thd, int type, sp_name *name,
+ sp_cache **cp, bool cache_only);
int
sp_exists_routine(THD *thd, TABLE_LIST *procs, bool any, bool no_error);
@@ -56,9 +57,6 @@
int
sp_show_status_procedure(THD *thd, const char *wild);
-
-sp_head *
-sp_find_function(THD *thd, sp_name *name, bool cache_only = 0);
int
sp_create_function(THD *thd, sp_head *sp);
| Thread |
|---|
| • bk commit into 5.0 tree (pem:1.1980) | pem | 6 Dec |