Commit 3de11a9a authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

Merge work:/home/bk/mysql-4.0 into hundin.mysql.fi:/my/bk/mysql-4.0

parents 0ac5d095 3c5f7494
...@@ -52,7 +52,7 @@ diff -r -c --exclude=*.info* glibc-2.2.4/nss/nsswitch.c glibc-2.2.4-new/nss/nssw ...@@ -52,7 +52,7 @@ diff -r -c --exclude=*.info* glibc-2.2.4/nss/nsswitch.c glibc-2.2.4-new/nss/nssw
while (isspace (line[0])) while (isspace (line[0]))
++line; ++line;
*************** ***************
*** 510,522 **** 522
if (name == line) if (name == line)
return result; return result;
...@@ -86,7 +86,7 @@ diff -r -c --exclude=*.info* glibc-2.2.4/nss/nsswitch.c glibc-2.2.4-new/nss/nssw ...@@ -86,7 +86,7 @@ diff -r -c --exclude=*.info* glibc-2.2.4/nss/nsswitch.c glibc-2.2.4-new/nss/nssw
if (new_service == NULL) if (new_service == NULL)
return result; return result;
! *((char *) __mempcpy (new_service->name, name, name_alloc_len)) = '\0'; ! *((char *) __mempcpy (new_service->name, name, name_alloc_len-1)) = '\0';
/* Set default actions. */ /* Set default actions. */
new_service->actions[2 + NSS_STATUS_TRYAGAIN] = NSS_ACTION_CONTINUE; new_service->actions[2 + NSS_STATUS_TRYAGAIN] = NSS_ACTION_CONTINUE;
......
...@@ -26723,6 +26723,12 @@ In the first statement, the @code{LIKE} value begins with a wildcard ...@@ -26723,6 +26723,12 @@ In the first statement, the @code{LIKE} value begins with a wildcard
character. In the second statement, the @code{LIKE} value is not a character. In the second statement, the @code{LIKE} value is not a
constant. constant.
MySQL 4.0 does another optimization on @code{LIKE}. If you are using
@code{... LIKE "%string%"} and @code{string} is longer than 3 characters
then MySQL will use the turbo-boyer-more algorithm to once initialize
the pattern for the string and then use this pattern to quickly search
after the given string.
@findex IS NULL, and indexes @findex IS NULL, and indexes
@cindex indexes, and @code{IS NULL} @cindex indexes, and @code{IS NULL}
Searching using @code{column_name IS NULL} will use indexes if column_name Searching using @code{column_name IS NULL} will use indexes if column_name
...@@ -49305,6 +49311,8 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}. ...@@ -49305,6 +49311,8 @@ Our TODO section contains what we plan to have in 4.0. @xref{TODO MySQL 4.0}.
@itemize @bullet @itemize @bullet
@item @item
Use turbo-boyer-more to speed up @code{LIKE "%keyword%"} searches.
@item
Fixed bug in @code{DROP DATABASE} with symlink. Fixed bug in @code{DROP DATABASE} with symlink.
@item @item
Fixed crash in @code{REPAIR ... USE_FRM}. Fixed crash in @code{REPAIR ... USE_FRM}.
...@@ -49789,6 +49797,8 @@ not yet 100% confident in this code. ...@@ -49789,6 +49797,8 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.51 @appendixsubsec Changes in release 3.23.51
@itemize @bullet @itemize @bullet
@item @item
Fixed bug in @code{CONCAT_WS()} that cut the result.
@item
Changed name of variables @code{Com_show_master_stat} to Changed name of variables @code{Com_show_master_stat} to
@code{Com_show_master_status} and @code{Com_show_slave_stat} to @code{Com_show_master_status} and @code{Com_show_slave_stat} to
@code{Com_show_slave_status}. @code{Com_show_slave_status}.
...@@ -24,7 +24,7 @@ EXTRA_DIST = INSTALL-SOURCE README \ ...@@ -24,7 +24,7 @@ EXTRA_DIST = INSTALL-SOURCE README \
SUBDIRS = include @docs_dirs@ @readline_dir@ \ SUBDIRS = include @docs_dirs@ @readline_dir@ \
@thread_dirs@ pstack @sql_client_dirs@ \ @thread_dirs@ pstack @sql_client_dirs@ \
@sql_server_dirs@ @libmysqld_dirs@ scripts man \ @sql_server_dirs@ @libmysqld_dirs@ scripts man \
tests BUILD \ tests BUILD os2 \
@bench_dirs@ support-files @fs_dirs@ @tools_dirs@ @bench_dirs@ support-files @fs_dirs@ @tools_dirs@
# Relink after clean # Relink after clean
......
...@@ -2364,7 +2364,7 @@ AC_OUTPUT(Makefile extra/Makefile mysys/Makefile isam/Makefile \ ...@@ -2364,7 +2364,7 @@ AC_OUTPUT(Makefile extra/Makefile mysys/Makefile isam/Makefile \
myisam/Makefile myisammrg/Makefile \ myisam/Makefile myisammrg/Makefile \
man/Makefile BUILD/Makefile readline/Makefile vio/Makefile \ man/Makefile BUILD/Makefile readline/Makefile vio/Makefile \
libmysql_r/Makefile libmysqld/Makefile libmysqld/examples/Makefile \ libmysql_r/Makefile libmysqld/Makefile libmysqld/examples/Makefile \
libmysql/Makefile client/Makefile \ libmysql/Makefile client/Makefile os2/Makefile \
pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile \ pstack/Makefile pstack/aout/Makefile sql/Makefile sql/share/Makefile \
merge/Makefile dbug/Makefile scripts/Makefile \ merge/Makefile dbug/Makefile scripts/Makefile \
include/Makefile sql-bench/Makefile tools/Makefile \ include/Makefile sql-bench/Makefile tools/Makefile \
......
number alpha new
1413006 idlfmv 1413006<---->idlfmv
1413065 smpsfz 1413065<---->smpsfz
1413127 sljrhx 1413127<---->sljrhx
1413304 qerfnd 1413304<---->qerfnd
new
1413006<---->idlfmv
number alpha new
1413006 idlfmv 1413006<->idlfmv
number alpha new
1413006 idlfmv 1413006-idlfmv-idlfmv-idlfmv-idlfmv-idlfmv-idlfmv-idlfmv
number alpha new
1413006 idlfmv 1413006<------------------>idlfmv
...@@ -15,4 +15,15 @@ test ...@@ -15,4 +15,15 @@ test
select * from t1 where a like "te_t"; select * from t1 where a like "te_t";
a a
test test
select * from t1 where a like "%a%";
a
a
abc
abcd
select * from t1 where a like "%abcd%";
a
abcd
select * from t1 where a like "%abc\d%";
a
abcd
drop table t1; drop table t1;
#
# Test of problem with CONCAT_WS() and long separators.
#
DROP TABLE IF EXISTS t1;
CREATE TABLE t1 ( number INT NOT NULL, alpha CHAR(6) NOT NULL );
INSERT INTO t1 VALUES (1413006,'idlfmv'),
(1413065,'smpsfz'),(1413127,'sljrhx'),(1413304,'qerfnd');
SELECT number, alpha, CONCAT_WS('<---->',number,alpha) AS new
FROM t1 GROUP BY number;
SELECT CONCAT_WS('<---->',number,alpha) AS new
FROM t1 GROUP BY new LIMIT 1;
SELECT number, alpha, CONCAT_WS('<->',number,alpha) AS new
FROM t1 GROUP BY new LIMIT 1;
SELECT number, alpha, CONCAT_WS('-',number,alpha,alpha,alpha,alpha,alpha,alpha,alpha) AS new
FROM t1 GROUP BY new LIMIT 1;
SELECT number, alpha, CONCAT_WS('<------------------>',number,alpha) AS new
FROM t1 GROUP BY new LIMIT 1;
drop table t1;
...@@ -9,4 +9,12 @@ select * from t1 where a like "abc%"; ...@@ -9,4 +9,12 @@ select * from t1 where a like "abc%";
select * from t1 where a like "ABC%"; select * from t1 where a like "ABC%";
select * from t1 where a like "test%"; select * from t1 where a like "test%";
select * from t1 where a like "te_t"; select * from t1 where a like "te_t";
#
# The following will test the boyer-more code
#
select * from t1 where a like "%a%";
select * from t1 where a like "%abcd%";
select * from t1 where a like "%abc\d%";
drop table t1; drop table t1;
...@@ -432,6 +432,7 @@ int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex, ...@@ -432,6 +432,7 @@ int my_pthread_cond_timedwait(pthread_cond_t *cond, pthread_mutex_t *mutex,
} }
#endif #endif
#ifdef HPUX #ifdef HPUX
int my_pthread_mutex_trylock(pthread_mutex_t *mutex) int my_pthread_mutex_trylock(pthread_mutex_t *mutex)
{ {
......
# Copyright (C) 2002 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
## Process this file with automake to create Makefile.in
EXTRA_DIST = BldLevel.cmd BldLevel.rc BldLevelInf.cmd ChangeLog.os2 \
MySQL-All.icc MySQL-Client.icc MySQL-Client.irs \
MySQL-Lib.icc MySQL-Opt.icc MySQL-ReadLine.icc \
MySQL-Source.icc MySQL-Sql.icc MySQL-Util.icc MySQL-Util.irs \
MySQL-binlog.icc MySQL-binlog.irs MySQL-sql.irs ReadMe.txt \
build-all.cmd build-all.log mysql-inf.wis mysql.base \
mysql.ih mysql.wis mysqlalt.wis readme.os2 rint.cmd rint.obj \
rint.s
# Don't update the files from bitkeeper
%::SCCS/s.%
...@@ -1228,23 +1228,23 @@ void Item_func_like::fix_length_and_dec() ...@@ -1228,23 +1228,23 @@ void Item_func_like::fix_length_and_dec()
// cmp_type=STRING_RESULT; // For quick select // cmp_type=STRING_RESULT; // For quick select
} }
longlong Item_func_like::val_int() longlong Item_func_like::val_int()
{ {
String *res,*res2; String* res = args[0]->val_str(&tmp_value1);
res=args[0]->val_str(&tmp_value1);
if (args[0]->null_value) if (args[0]->null_value)
{ {
null_value=1; null_value=1;
return 0; return 0;
} }
res2=args[1]->val_str(&tmp_value2); String* res2 = args[1]->val_str(&tmp_value2);
if (args[1]->null_value) if (args[1]->null_value)
{ {
null_value=1; null_value=1;
return 0; return 0;
} }
null_value=0; null_value=0;
if (canDoTurboBM)
return turboBM_matches(res->ptr(), res->length()) ? 1 : 0;
if (binary) if (binary)
return wild_compare(*res,*res2,escape) ? 0 : 1; return wild_compare(*res,*res2,escape) ? 0 : 1;
else else
...@@ -1268,6 +1268,51 @@ Item_func::optimize_type Item_func_like::select_optimize() const ...@@ -1268,6 +1268,51 @@ Item_func::optimize_type Item_func_like::select_optimize() const
return OPTIMIZE_NONE; return OPTIMIZE_NONE;
} }
bool Item_func_like::fix_fields(THD *thd,struct st_table_list *tlist)
{
if (Item_bool_func2::fix_fields(thd, tlist))
return 1;
/*
TODO--we could do it for non-const, but we'd have to
recompute the tables for each row--probably not worth it.
*/
if (args[1]->const_item() && !(specialflag & SPECIAL_NO_NEW_FUNC))
{
String* res2 = args[1]->val_str(&tmp_value2);
const size_t len = res2->length();
const char* first = res2->ptr();
const char* last = first + len - 1;
/*
len must be > 2 ('%pattern%')
heuristic: only do TurboBM for pattern_len > 2
*/
if (len > MIN_TURBOBM_PATTERN_LEN + 2 &&
*first == wild_many &&
*last == wild_many)
{
const char* tmp = first + 1;
for ( ; *tmp != wild_many && *tmp != wild_one && *tmp != escape; tmp++) ;
canDoTurboBM = tmp == last;
}
if (canDoTurboBM)
{
pattern = first + 1;
pattern_len = len - 2;
DBUG_PRINT("TurboBM", ("Initializing pattern: '%s'...", first));
int* suff = (int*)thd->alloc(sizeof(int[pattern_len + 1]));
bmGs = (int*)thd->alloc(sizeof(int[pattern_len + 1]));
bmBc = (int*)thd->alloc(sizeof(int[alphabet_size]));
turboBM_compute_good_suffix_shifts(suff);
turboBM_compute_bad_character_shifts();
DBUG_PRINT("turboBM",("done"));
}
}
return 0;
}
#ifdef USE_REGEX #ifdef USE_REGEX
bool bool
...@@ -1307,7 +1352,6 @@ Item_func_regex::fix_fields(THD *thd,TABLE_LIST *tables) ...@@ -1307,7 +1352,6 @@ Item_func_regex::fix_fields(THD *thd,TABLE_LIST *tables)
return 0; return 0;
} }
longlong Item_func_regex::val_int() longlong Item_func_regex::val_int()
{ {
char buff[MAX_FIELD_WIDTH]; char buff[MAX_FIELD_WIDTH];
...@@ -1364,3 +1408,215 @@ Item_func_regex::~Item_func_regex() ...@@ -1364,3 +1408,215 @@ Item_func_regex::~Item_func_regex()
} }
#endif /* USE_REGEX */ #endif /* USE_REGEX */
#ifdef LIKE_CMP_TOUPPER
#define likeconv(A) (uchar) toupper(A)
#else
#define likeconv(A) (uchar) my_sort_order[(uchar) (A)]
#endif
/**********************************************************************
turboBM_compute_suffixes()
Precomputation dependent only on pattern_len.
**********************************************************************/
void Item_func_like::turboBM_compute_suffixes(int* suff)
{
const int plm1 = pattern_len - 1;
int f = 0;
int g = plm1;
int* const splm1 = suff + plm1;
*splm1 = pattern_len;
if (binary)
{
int i;
for (i = pattern_len - 2; i >= 0; i--)
{
int tmp = *(splm1 + i - f);
if (g < i && tmp < i - g)
suff[i] = tmp;
else
{
if (i < g)
g = i; // g = min(i, g)
f = i;
while (g >= 0 && pattern[g] == pattern[g + plm1 - f])
g--;
suff[i] = f - g;
}
}
}
else
{
int i;
for (i = pattern_len - 2; 0 <= i; --i)
{
int tmp = *(splm1 + i - f);
if (g < i && tmp < i - g)
suff[i] = tmp;
else
{
if (i < g)
g = i; // g = min(i, g)
f = i;
while (g >= 0 && likeconv(pattern[g]) == likeconv(pattern[g + plm1 - f]))
g--;
suff[i] = f - g;
}
}
}
}
/**********************************************************************
turboBM_compute_good_suffix_shifts()
Precomputation dependent only on pattern_len.
**********************************************************************/
void Item_func_like::turboBM_compute_good_suffix_shifts(int* suff)
{
turboBM_compute_suffixes(suff);
int* end = bmGs + pattern_len;
int* k;
for (k = bmGs; k < end; k++)
*k = pattern_len;
int tmp;
int i;
int j = 0;
const int plm1 = pattern_len - 1;
for (i = plm1; i > -1; i--)
{
if (suff[i] == i + 1)
{
for (tmp = plm1 - i; j < tmp; j++)
{
int* tmp2 = bmGs + j;
if (*tmp2 == pattern_len)
*tmp2 = tmp;
}
}
}
int* tmp2;
for (tmp = plm1 - i; j < tmp; j++)
{
tmp2 = bmGs + j;
if (*tmp2 == pattern_len)
*tmp2 = tmp;
}
tmp2 = bmGs + plm1;
for (i = 0; i <= pattern_len - 2; i++)
*(tmp2 - suff[i]) = plm1 - i;
}
/**********************************************************************
turboBM_compute_bad_character_shifts()
Precomputation dependent on pattern_len.
**********************************************************************/
void Item_func_like::turboBM_compute_bad_character_shifts()
{
int* i;
int* end = bmBc + alphabet_size;
for (i = bmBc; i < end; i++)
*i = pattern_len;
int j;
const int plm1 = pattern_len - 1;
if (binary)
for (j = 0; j < plm1; j++)
bmBc[pattern[j]] = plm1 - j;
else
for (j = 0; j < plm1; j++)
bmBc[likeconv(pattern[j])] = plm1 - j;
}
/**********************************************************************
turboBM_matches()
Search for pattern in text, returns true/false for match/no match
**********************************************************************/
bool Item_func_like::turboBM_matches(const char* text, int text_len) const
{
register int bcShift;
register int turboShift;
int shift = pattern_len;
int j = 0;
int u = 0;
const int plm1 = pattern_len - 1;
const int tlmpl = text_len - pattern_len;
/* Searching */
if (binary)
{
while (j <= tlmpl)
{
register int i = plm1;
while (i >= 0 && pattern[i] == text[i + j])
{
i--;
if (i == plm1 - shift)
i -= u;
}
if (i < 0)
return true;
register const int v = plm1 - i;
turboShift = u - v;
bcShift = bmBc[text[i + j]] - plm1 + i;
shift = max(turboShift, bcShift);
shift = max(shift, bmGs[i]);
if (shift == bmGs[i])
u = min(pattern_len - shift, v);
else
{
if (turboShift < bcShift)
shift = max(shift, u + 1);
u = 0;
}
j += shift;
}
return false;
}
else
{
while (j <= tlmpl)
{
register int i = plm1;
while (i >= 0 && likeconv(pattern[i]) == likeconv(text[i + j]))
{
i--;
if (i == plm1 - shift)
i -= u;
}
if (i < 0)
return true;
register const int v = plm1 - i;
turboShift = u - v;
bcShift = bmBc[likeconv(text[i + j])] - plm1 + i;
shift = max(turboShift, bcShift);
shift = max(shift, bmGs[i]);
if (shift == bmGs[i])
u = min(pattern_len - shift, v);
else
{
if (turboShift < bcShift)
shift = max(shift, u + 1);
u = 0;
}
j += shift;
}
return false;
}
}
...@@ -478,15 +478,40 @@ public: ...@@ -478,15 +478,40 @@ public:
class Item_func_like :public Item_bool_func2 class Item_func_like :public Item_bool_func2
{ {
char escape; char escape;
public:
Item_func_like(Item *a,Item *b, char* escape_arg) :Item_bool_func2(a,b),escape(*escape_arg) // Turbo Boyer-Moore data
bool canDoTurboBM; // pattern is '%abcd%' case
const char* pattern;
int pattern_len;
// TurboBM buffers, *this is owner
int* bmGs; // good suffix shift table, size is pattern_len + 1
int* bmBc; // bad character shift table, size is alphabet_size
void turboBM_compute_suffixes(int* suff);
void turboBM_compute_good_suffix_shifts(int* suff);
void turboBM_compute_bad_character_shifts();
bool turboBM_matches(const char* text, int text_len) const;
enum { alphabet_size = 256 };
public:
Item_func_like::Item_func_like(Item *a,Item *b, char* escape_arg) :
Item_bool_func2(a,b),
escape(*escape_arg),
canDoTurboBM(false),
pattern(0),
pattern_len(0),
bmGs(0),
bmBc(0)
{} {}
longlong val_int(); longlong val_int();
enum Functype functype() const { return LIKE_FUNC; } enum Functype functype() const { return LIKE_FUNC; }
optimize_type select_optimize() const; optimize_type select_optimize() const;
cond_result eq_cmp_result() const { return COND_TRUE; } cond_result eq_cmp_result() const { return COND_TRUE; }
const char *func_name() const { return "like"; } const char *func_name() const { return "like"; }
void fix_length_and_dec(); void fix_length_and_dec();
bool fix_fields(THD *thd,struct st_table_list *tlist);
}; };
#ifdef USE_REGEX #ifdef USE_REGEX
......
...@@ -475,7 +475,7 @@ null: ...@@ -475,7 +475,7 @@ null:
void Item_func_concat_ws::fix_length_and_dec() void Item_func_concat_ws::fix_length_and_dec()
{ {
max_length=0; max_length=separator->max_length*(arg_count-1);
for (uint i=0 ; i < arg_count ; i++) for (uint i=0 ; i < arg_count ; i++)
max_length+=args[i]->max_length; max_length+=args[i]->max_length;
if (max_length > MAX_BLOB_WIDTH) if (max_length > MAX_BLOB_WIDTH)
......
...@@ -122,103 +122,103 @@ ...@@ -122,103 +122,103 @@
"Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est %d. Changez le type de quelques colonnes en BLOB", "Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est %d. Changez le type de quelques colonnes en BLOB",
"Débordement de la pile des tâches (Thread stack). Utilisées: %ld pour une pile de %ld. Essayez 'mysqld -O thread_stack=#' pour indiquer une plus grande valeur", "Débordement de la pile des tâches (Thread stack). Utilisées: %ld pour une pile de %ld. Essayez 'mysqld -O thread_stack=#' pour indiquer une plus grande valeur",
"Dépendance croisée dans une clause OUTER JOIN. Vérifiez la condition ON", "Dépendance croisée dans une clause OUTER JOIN. Vérifiez la condition ON",
"Column '%-.32s' is used with UNIQUE or INDEX but is not defined as NOT NULL", "La colonne '%-.32s' fait partie d'un index UNIQUE ou INDEX mais n'est pas définie comme NOT NULL"
"Can't load function '%-.64s'", "Imposible de charger la fonction '%-.64s'",
"Can't initialize function '%-.64s'; %-.80s", "Impossible d'initialiser la fonction '%-.64s'; %-.80s",
"No paths allowed for shared library", "Chemin interdit pour les bibliothèques partagées",
"Function '%-.64s' already exist", "La fonction '%-.64s' existe déjà",
"Can't open shared library '%-.64s' (errno: %d %s)", "Impossible d'ouvrir la bibliothèque partagée '%-.64s' (errno: %d %s)",
"Can't find function '%-.64s' in library'", "Impossible de trouver la fonction '%-.64s' dans la bibliothèque'",
"Function '%-.64s' is not defined", "La fonction '%-.64s' n'est pas définie",
"Host '%-.64s' is blocked because of many connection errors. Unblock with 'mysqladmin flush-hosts'", "L'hôte '%-.64s' est bloqué à cause d'un trop grand nombre d'erreur de connection. Débloquer le par 'mysqladmin flush-hosts'",
"Host '%-.64s' is not allowed to connect to this MySQL server", "Le hôte '%-.64s' n'est pas authorisé à se connecter à ce serveur MySQL",
"You are using MySQL as an anonymous users and anonymous users are not allowed to change passwords", "Vous utilisez un utilisateur anonyme et les utilisateurs anonymes ne sont pas autorisés à changer les mots de passe",
"You must have privileges to update tables in the mysql database to be able to change passwords for others", "Vous devez avoir le privilège update sur les tables de la base de donnée mysql pour pouvoir changer les mots de passe des autres",
"Can't find any matching row in the user table", "Impossible de trouver un enregistrement correspondant dans la table user",
"Rows matched: %ld Changed: %ld Warnings: %ld", "Enregistrements correspondants: %ld Modifiés: %ld Warnings: %ld",
"Can't create a new thread (errno %d). If you are not out of available memory you can consult the manual for any possible OS dependent bug", "Impossible de créer une nouvelle tâche (errno %d). S'il reste de la mémoire libre, consultez le manual pour trouver un éventuel bug dépendant de l'OS",
"Column count doesn't match value count at row %ld", "Column count doesn't match value count at row %ld",
"Can't reopen table: '%-.64s', "Impossible de réouvrir la table: '%-.64s',
"Invalid use of NULL value", "Utilisation incorrecte de la valeur NULL",
"Got error '%-.64s' from regexp", "Erreur '%-.64s' provenant de regexp",
"Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause", "Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY",
"There is no such grant defined for user '%-.32s' on host '%-.64s'", "Un tel droit n'est pas défini pour l'utilisateur '%-.32s' sur l'hôte '%-.64s'",
"%-.16s command denied to user: '%-.32s@%-.64s' for table '%-.64s'", "La commande '%-.16s' est interdite à l'utilisateur: '%-.32s@%-.64s' sur la table '%-.64s'",
"%-.16s command denied to user: '%-.32s@%-.64s' for column '%-.64s' in table '%-.64s'", "La commande '%-.16s' est interdite à l'utilisateur: '%-.32s@%-.64s' sur la colonne '%-.64s' de la table '%-.64s'",
"Illegal GRANT/REVOKE command. Please consult the manual which privleges can be used.", "Commande GRANT/REVOKE incorrecte. Consultez le manuel.",
"The host or user argument to GRANT is too long", "L'hôte ou l'utilisateur donné en argument à GRANT est trop long",
"Table '%-64s.%s' doesn't exist", "La table '%-64s.%s' n'existe pas",
"There is no such grant defined for user '%-.32s' on host '%-.64s' on table '%-.64s'", "Un tel droit n'est pas défini pour l'utilisateur '%-.32s' sur l'hôte '%-.64s' sur la table '%-.64s'",
"The used command is not allowed with this MySQL version", "Cette commande n'existe pas dans cette version de MySQL",
"Something is wrong in your syntax", "Erreur de syntaxe",
"Delayed insert thread couldn't get requested lock for table %-.64s", "La tâche 'delayed insert' n'a pas pu obtenir le verrou démandé sur la table %-.64s",
"Too many delayed threads in use", "Trop de tâche 'delayed' en cours",
"Aborted connection %ld to db: '%-.64s' user: '%-.64s' (%s)", "Connection %ld avortée vers la bd: '%-.64s' utilisateur: '%-.64s' (%s)",
"Got a packet bigger than 'max_allowed_packet'", "Paquet plus grand que 'max_allowed_packet' reçu",
"Got a read error from the connection pipe", "Erreur de lecture reçue du pipe de connection",
"Got an error from fcntl()", "Erreur reçue de fcntl() ",
"Got packets out of order", "Paquets reçus dans le désordre",
"Couldn't uncompress communication packet", "Impossible de décompresser le paquet reçu",
"Got an error reading communication packets" "Erreur de lecture des paquets reçus"
"Got timeout reading communication packets", "Timeout en lecture des paquets reçus",
"Got an error writing communication packets", "Erreur d'écriture des paquets envoyés",
"Got timeout writing communication packets", "Timeout d'écriture des paquets envoyés",
"Result string is longer than max_allowed_packet", "La chaîne résultat est plus grande que max_allowed_packet",
"The used table type doesn't support BLOB/TEXT columns", "Ce type de table ne supporte pas les colonnes BLOB/TEXT",
"The used table type doesn't support AUTO_INCREMENT columns", "Ce type de table ne supporte pas les colonnes AUTO_INCREMENT",
"INSERT DELAYED can't be used with table '%-.64s', because it is locked with LOCK TABLES", "INSERT DELAYED ne peut être utilisé avec la table '%-.64s', car elle est verrouée avec LOCK TABLES",
"Incorrect column name '%-.100s'", "Nom de colonne '%-.100s' incorrect",
"The used table handler can't index column '%-.64s'", "Le handler de la table ne peut indexé la colonne '%-.64s'",
"All tables in the MERGE table are not defined identically", "Toutes les tables de la table de type MERGE n'ont pas la même définition",
"Can't write, because of unique constraint, to table '%-.64s'", "Écriture impossible à cause d'un index UNIQUE sur la table '%-.64s'",
"BLOB column '%-.64s' used in key specification without a key length", "La colonne '%-.64s' de type BLOB est utilisée dans une définition d'index sans longueur d'index",
"All parts of a PRIMARY KEY must be NOT NULL; If you need NULL in a key, use UNIQUE instead", "Toutes les parties d'un index PRIMARY KEY doivent être NOT NULL; Si vous avez besoin d'un NULL dans l'index, utilisez un index UNIQUE",
"Result consisted of more than one row", "Le résultat contient plus d'un enregistrement",
"This table type requires a primary key", "Ce type de table nécessite une clé primaire (PRIMARY KEY)",
"This version of MySQL is not compiled with RAID support", "Cette version de MySQL n'est pas compilée avec le support RAID",
"You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column", "Vous êtes en mode 'safe update' et vous essayez de faire un UPDATE sans clause WHERE utilisant un index",
"Key '%-.64s' doesn't exist in table '%-.64s'", "L'index '%-.64s' n'existe pas sur la table '%-.64s'",
"Can't open table", "Impossible d'ouvrir la table",
"The handler for the table doesn't support check/repair", "Ce type de table ne supporte pas les check/repair",
"You are not allowed to execute this command in a transaction", "Vous n'êtes pas autorisé à exécute cette commande dans une transaction",
"Got error %d during COMMIT", "Erreur %d lors du COMMIT",
"Got error %d during ROLLBACK", "Erreur %d lors du ROLLBACK",
"Got error %d during FLUSH_LOGS", "Erreur %d lors du FLUSH_LOGS",
"Got error %d during CHECKPOINT", "Erreur %d lors du CHECKPOINT",
"Aborted connection %ld to db: '%-.64s' user: '%-.32s' host: `%-.64s' (%-.64s)", "Connection %ld avortée vers la bd: '%-.64s' utilisateur: '%-.32s' hôte: `%-.64s' (%-.64s)",
"The handler for the table does not support binary table dump", "Ce type de table ne supporte pas les copies binaires",
"Binlog closed while trying to FLUSH MASTER", "Le 'binlog' a été fermé pendant l'exécution du FLUSH MASTER",
"Failed rebuilding the index of dumped table '%-.64s'", "La reconstruction de l'index de la table copiée '%-.64s' a échoué",
"Error from master: '%-.64s'", "Erreur reçue du maître: '%-.64s'",
"Net error reading from master", "Erreur de lecture réseau reçue du maître",
"Net error writing to master", "Erreur d'écriture réseau reçue du maître",
"Can't find FULLTEXT index matching the column list", "Impossible de trouver un index FULLTEXT correspondant à cette liste de colonnes",
"Can't execute the given command because you have active locked tables or an active transaction", "Impossible d'exécuter la commande car vous avez des tables verrouillées ou une transaction active",
"Unknown system variable '%-.64s'", "Variable système '%-.64' inconnue",
"Table '%-.64s' is marked as crashed and should be repaired", "La table '%-.64s' est marquée 'crashed' et devrait être réparée",
"Table '%-.64s' is marked as crashed and last (automatic?) repair failed", "La table '%-.64s' est marquée 'crashed' et le dernier 'repair' a échoué",
"Warning: Some non-transactional changed tables couldn't be rolled back", "Attention: certaines tables ne supportant pas les transactions ont été changées et elles ne pourront pas être restituées",
"Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage. Increase this mysqld variable and try again', "Cette transaction à commandes multiples nécessite plus de 'max_binlog_cache_size' octets de stockage, augmentez cette variable de mysqld et réessayez',
"This operation cannot be performed with a running slave, run SLAVE STOP first", "Cette opération ne peut être réalisée avec un esclave actif, faites SLAVE STOP d'abord",
"This operation requires a running slave, configure slave and do SLAVE START", "Cette opération nécessite un esclave actif, configurez les esclaves et faites SLAVE START",
"The server is not configured as slave, fix in config file or with CHANGE MASTER TO", "Le server n'est pas configuré comme un esclave, changez le fichier de configuration ou utilisez CHANGE MASTER TO",
"Could not initialize master info structure, check permisions on master.info", "Impossible d'initialiser les structures d'information de maître, vérifiez les permissions sur master.info",
"Could not create slave thread, check system resources", "Impossible de créer une tâche esclave, vérifiez les ressources système",
"User %-.64s has already more than 'max_user_connections' active connections", "L'utilisateur %-.64s possède déjà plus de 'max_user_connections' connections actives",
"You may only use constant expressions with SET", "Seules les expressions constantes sont autorisées avec SET",
"Lock wait timeout exceeded", "Timeout sur l'obtention du verrou",
"The total number of locks exceeds the lock table size", "Le nombre total de verrou dépasse la taille de la table des verrous",
"Update locks cannot be acquired during a READ UNCOMMITTED transaction", "Un verrou en update ne peut être acquit pendant une transaction READ UNCOMMITTED",
"DROP DATABASE not allowed while thread is holding global read lock", "DROP DATABASE n'est pas autorisée pendant qu'une tâche possède un verrou global en lecture",
"CREATE DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE n'est pas autorisée pendant qu'une tâche possède un verrou global en lecture",
"Wrong arguments to %s", "Mauvais arguments à %s",
"%-.32s@%-.64s is not allowed to create new users", "%-.32s@%-.64s n'est pas autorisé à créer de nouveaux utilisateurs",
"Incorrect table definition; All MERGE tables must be in the same database", "Définition de table incorrecte : toutes les tables MERGE doivent être dans la même base de donnée",
"Deadlock found when trying to get lock; Try restarting transaction", "Deadlock découvert en essayant d'obtenir les verrous : essayez de redémarrer la transaction",
"The used table type doesn't support FULLTEXT indexes", "Le type de table utilisé ne supporte pas les index FULLTEXT",
"Cannot add foreign key constraint", "Impossible d'ajouter des contraintes d'index externe",
"Cannot add a child row: a foreign key constraint fails", "Impossible d'ajouter un enregistrement fils : une constrainte externe l'empèche",
"Cannot delete a parent row: a foreign key constraint fails", "Impossible de supprimer un enregistrement père : une constrainte externe l'empèche",
"Error connecting to master: %-.128s", "Error connecting to master: %-.128s",
"Error running query on master: %-.128s", "Error running query on master: %-.128s",
"Error when executing command %s: %-.128s", "Error when executing command %s: %-.128s",
......
...@@ -209,16 +209,16 @@ ...@@ -209,16 +209,16 @@
"E' scaduto il timeout per l'attesa del lock", "E' scaduto il timeout per l'attesa del lock",
"Il numero totale di lock e' maggiore della grandezza della tabella di lock", "Il numero totale di lock e' maggiore della grandezza della tabella di lock",
"I lock di aggiornamento non possono essere acquisiti durante una transazione 'READ UNCOMMITTED'", "I lock di aggiornamento non possono essere acquisiti durante una transazione 'READ UNCOMMITTED'",
"DROP DATABASE not allowed while thread is holding global read lock", "DROP DATABASE non e' permesso mentre il thread ha un lock globale di lettura",
"CREATE DATABASE not allowed while thread is holding global read lock", "CREATE DATABASE non e' permesso mentre il thread ha un lock globale di lettura",
"Wrong arguments to %s", "Argomenti errati a %s",
"%-.32s@%-.64s is not allowed to create new users", "A %-.32s@%-.64s non e' permesso creare nuovi utenti",
"Incorrect table definition; All MERGE tables must be in the same database", "Definizione della tabella errata; tutte le tabelle di tipo MERGE devono essere nello stesso database",
"Deadlock found when trying to get lock; Try restarting transaction", "Trovato deadlock durante il lock; Provare a far ripartire la transazione",
"The used table type doesn't support FULLTEXT indexes", "La tabella usata non supporta gli indici FULLTEXT",
"Cannot add foreign key constraint", "Impossibile aggiungere il vincolo di integrita' referenziale (foreign key constraint)",
"Cannot add a child row: a foreign key constraint fails", "Impossibile aggiungere la riga: un vincolo d'integrita' referenziale non e' soddisfatto",
"Cannot delete a parent row: a foreign key constraint fails", "Impossibile cancellare la riga: un vincolo d'integrita' referenziale non e' soddisfatto",
"Error connecting to master: %-.128s", "Error connecting to master: %-.128s",
"Error running query on master: %-.128s", "Error running query on master: %-.128s",
"Error when executing command %s: %-.128s", "Error when executing command %s: %-.128s",
......
...@@ -122,6 +122,13 @@ bfill((A)->null_flags,(A)->null_bytes,255);\ ...@@ -122,6 +122,13 @@ bfill((A)->null_flags,(A)->null_bytes,255);\
#define TE_INFO_LENGTH 3 #define TE_INFO_LENGTH 3
#define MTYP_NOEMPTY_BIT 128 #define MTYP_NOEMPTY_BIT 128
/*
* Minimum length pattern before Turbo Boyer-Moore is used
* for SELECT "text" LIKE "%pattern%", excluding the two
* wildcards in class Item_func_like.
*/
#define MIN_TURBOBM_PATTERN_LEN 3
/* Include prototypes for unireg */ /* Include prototypes for unireg */
#include "mysqld_error.h" #include "mysqld_error.h"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment