Drizzled Public API Documentation

error.cc
00001 /* -*- mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
00002  *  vim:expandtab:shiftwidth=2:tabstop=2:smarttab:
00003  *
00004  *  Copyright (C) 2000 MySQL AB
00005  *  Copyright (C) 2008 Sun Microsystems, Inc.
00006  *
00007  *  This program is free software; you can redistribute it and/or modify
00008  *  it under the terms of the GNU General Public License as published by
00009  *  the Free Software Foundation; version 2 of the License.
00010  *
00011  *  This program is distributed in the hope that it will be useful,
00012  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00013  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014  *  GNU General Public License for more details.
00015  *
00016  *  You should have received a copy of the GNU General Public License
00017  *  along with this program; if not, write to the Free Software
00018  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
00019  */
00020 
00021 /*
00022  * Errors a drizzled can give you
00023  */
00024 
00025 #include <config.h>
00026 #include <drizzled/internal/my_sys.h>
00027 #include <drizzled/definitions.h>
00028 #include <drizzled/error.h>
00029 #include <drizzled/gettext.h>
00030 #include <drizzled/identifier.h>
00031 #include <drizzled/util/find_ptr.h>
00032 
00033 #include <boost/unordered_map.hpp>
00034 
00035 namespace drizzled {
00036 namespace {
00037 
00038 ErrorMap& get_error_map()
00039 {
00040   static ErrorMap errors;
00041   return errors;
00042 }
00043 
00044 } // anonymous namespace
00045 
00046 const ErrorMap::ErrorMessageMap& ErrorMap::get_error_message_map()
00047 {
00048   return get_error_map().mapping_;
00049 }
00050 
00051 void add_error_message(error_t error_code,
00052                        const std::string &error_name,
00053                        const std::string &message)
00054 {
00055   get_error_map().add(error_code, error_name, message);
00056 }
00057 
00058 const char* error_message(error_t code)
00059 {
00060   const std::string* ptr = get_error_map().find(code);
00061   return ptr ? ptr->c_str() : get_error_map().find(ER_UNKNOWN_ERROR)->c_str();
00062 }
00063 
00064 error_handler_func error_handler_hook= NULL;
00065 
00066 namespace error {
00067 
00068 void access(const drizzled::identifier::User& user)
00069 {
00070   my_error(ER_ACCESS_DENIED_ERROR, MYF(0), user.getSQLPath().c_str(), ER(user.hasPassword() ? ER_YES : ER_NO));
00071 } 
00072 
00073 void access(const drizzled::identifier::User& user, const drizzled::identifier::Schema& schema)
00074 {
00075   my_error(ER_DBACCESS_DENIED_ERROR, MYF(0), user.getSQLPath().c_str(), schema.getSQLPath().c_str());
00076 } 
00077 
00078 void access(const drizzled::identifier::User& user, const drizzled::identifier::Table& table)
00079 {
00080   my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), user.getSQLPath().c_str(), table.getSQLPath().c_str());
00081 } 
00082 
00083 static error::priority_t _verbosity= error::ERROR;
00084 static std::string _verbosity_strint;
00085 
00086 const std::string &verbose_string()
00087 {
00088   switch (_verbosity)
00089   {
00090   case error::ALERT:
00091     {
00092       static std::string _arg= "ALERT";
00093       return _arg;
00094     }
00095   case error::EMERG:
00096     {
00097       static std::string _arg= "EMERG";
00098       return _arg;
00099     }
00100   case error::CRITICAL:
00101     {
00102       static std::string _arg= "CRITICAL";
00103       return _arg;
00104     }
00105   case error::INSPECT:
00106     {
00107       static std::string _arg= "INSPECT";
00108       return _arg;
00109     }
00110   case error::INFO:
00111     {
00112       static std::string _arg= "INFO";
00113       return _arg;
00114     }
00115   case error::WARN:
00116     {
00117       static std::string _arg= "WARN";
00118       return _arg;
00119     }
00120   case error::ERROR:
00121     break;
00122   }
00123 
00124   static std::string _arg= "ERROR";
00125   return _arg;
00126 }
00127 
00128 error::priority_t &verbosity()
00129 {
00130   return _verbosity;
00131 }
00132 
00133 void check_verbosity(const std::string &arg)
00134 {
00135   if (not arg.compare("INSPECT"))
00136   {
00137     _verbosity= error::INSPECT;
00138   }
00139   else if (not arg.compare("INFO"))
00140   {
00141     _verbosity= error::INFO;
00142   }
00143   else if (not arg.compare("WARN"))
00144   {
00145     _verbosity= error::WARN;
00146   }
00147   else if (not arg.compare("EMERG"))
00148   {
00149     _verbosity= error::EMERG;
00150   }
00151   else if (not arg.compare("CRITICAL"))
00152   {
00153     _verbosity= error::CRITICAL;
00154   }
00155   else if (not arg.compare("ALERT"))
00156   {
00157     _verbosity= error::ALERT;
00158   }
00159 
00160   _verbosity= error::ERROR;
00161 }
00162 
00163 } // namespace error
00164 
00165 /*
00166   WARNING!
00167   my_error family functions have to be used according following rules:
00168   - if message have not parameters use my_message(ER_CODE, ER(ER_CODE), MYF(N))
00169   - if message registered use my_error(ER_CODE, MYF(N), ...).
00170   - With some special text of errror message use:
00171   my_printf_error(ER_CODE, format, MYF(N), ...)
00172 */
00173 
00174 /*
00175    Error message to user
00176 
00177    SYNOPSIS
00178      my_error()
00179        nr Errno
00180        MyFlags  Flags
00181        ...  variable list
00182 */
00183 
00184 void my_error(const std::string &ref, error_t nr, myf MyFlags)
00185 {
00186   my_error(nr, MyFlags, ref.c_str());
00187 } 
00188 
00189 void my_error(error_t nr, const drizzled::Identifier& id, myf MyFlags)
00190 {
00191   my_error(nr, MyFlags, id.getSQLPath().c_str());
00192 } 
00193 
00194 void my_error(error_t nr)
00195 {
00196   my_error(nr, MYF(0));
00197 }
00198 
00199 void my_error(error_t nr, myf MyFlags, ...)
00200 {
00201   va_list args;
00202   char ebuff[ERRMSGSIZE + 20];
00203 
00204   if (const std::string* format= get_error_map().find(nr))
00205   { 
00206     va_start(args,MyFlags);
00207     (void) vsnprintf (ebuff, sizeof(ebuff), _(format->c_str()), args);
00208     va_end(args);
00209   }
00210   else
00211     (void) snprintf (ebuff, sizeof(ebuff), _("Unknown error %d"), nr);
00212   (*error_handler_hook)(nr, ebuff, MyFlags);
00213 }
00214 
00215 /*
00216   Error as printf
00217 
00218          SYNOPSIS
00219     my_printf_error()
00220       error Errno
00221       format  Format string
00222       MyFlags Flags
00223       ... variable list
00224 */
00225 
00226 void my_printf_error(drizzled::error_t error, const char *format, myf MyFlags, ...)
00227 {
00228   va_list args;
00229   char ebuff[ERRMSGSIZE+20];
00230 
00231   va_start(args,MyFlags);
00232   (void) vsnprintf (ebuff, sizeof(ebuff), format, args);
00233   va_end(args);
00234   (*error_handler_hook)(error, ebuff, MyFlags);
00235 }
00236 
00237 /*
00238   Give message using error_handler_hook
00239 
00240   SYNOPSIS
00241     my_message()
00242       error Errno
00243       str Error message
00244       MyFlags Flags
00245 */
00246 
00247 void my_message(drizzled::error_t error, const char *str, myf MyFlags)
00248 {
00249   (*error_handler_hook)(error, str, MyFlags);
00250 }
00251 
00252 
00253 // Insert the message for the error.  If the error already has an existing
00254 // mapping, an error is logged, but the function continues.
00255 void ErrorMap::add(drizzled::error_t error_num,
00256                    const std::string &error_name,
00257                    const std::string &message)
00258 {
00259   if (not mapping_.count(error_num))
00260   {
00261     // Log the error.
00262     mapping_[error_num]= ErrorMap::value_type(error_name, message);
00263   }
00264   else
00265   {
00266     mapping_.insert(ErrorMessageMap::value_type(error_num, ErrorMap::value_type(error_name, message)));
00267   }
00268 }
00269 
00270 const std::string* ErrorMap::find(drizzled::error_t error_num) const
00271 {
00272   const ErrorMessageMap::mapped_type* pos= find_ptr(mapping_, error_num);
00273   return pos ? &pos->second : NULL;
00274 }
00275 
00276 #define ADD_ERROR_MESSAGE(code, msg) add(code, STRINGIFY_ARG(code), msg)
00277 // Constructor sets the default mappings.
00278 ErrorMap::ErrorMap()
00279 {
00280   ADD_ERROR_MESSAGE(EE_OK, N_("SUCCESS"));
00281   ADD_ERROR_MESSAGE(EE_ERROR_FIRST, N_("Error on first"));
00282   ADD_ERROR_MESSAGE(ER_NO, N_("NO"));
00283   ADD_ERROR_MESSAGE(ER_YES, N_("YES"));
00284   ADD_ERROR_MESSAGE(ER_CANT_CREATE_FILE, N_("Can't create file '%-.200s' (errno: %d)"));
00285   ADD_ERROR_MESSAGE(ER_CANT_CREATE_TABLE, N_("Can't create table '%-.200s' (errno: %d)"));
00286   ADD_ERROR_MESSAGE(ER_CANT_CREATE_DB, N_("Can't create schema '%-.192s' (errno: %d)"));
00287   ADD_ERROR_MESSAGE(ER_DB_CREATE_EXISTS, N_("Can't create schema '%-.192s'; schema exists"));
00288   ADD_ERROR_MESSAGE(ER_DB_DROP_EXISTS, N_("Can't drop schema '%-.192s'; schema doesn't exist"));
00289   ADD_ERROR_MESSAGE(ER_CANT_DELETE_FILE, N_("Error on delete of '%-.192s' (errno: %d)"));
00290   ADD_ERROR_MESSAGE(ER_CANT_GET_STAT, N_("Can't get status of '%-.200s' (errno: %d)"));
00291   ADD_ERROR_MESSAGE(ER_CANT_LOCK, N_("Can't lock file (errno: %d)"));
00292   ADD_ERROR_MESSAGE(ER_CANT_OPEN_FILE, N_("Can't open file: '%-.200s' (errno: %d)"));
00293   ADD_ERROR_MESSAGE(ER_FILE_NOT_FOUND, N_("Can't find file: '%-.200s' (errno: %d)"));
00294   ADD_ERROR_MESSAGE(ER_CANT_READ_DIR, N_("Can't read dir of '%-.192s' (errno: %d)"));
00295   ADD_ERROR_MESSAGE(ER_CHECKREAD, N_("Record has changed since last read in table '%-.192s'"));
00296   ADD_ERROR_MESSAGE(ER_DISK_FULL, N_("Disk full (%s); waiting for someone to free some space..."));
00297   ADD_ERROR_MESSAGE(ER_DUP_KEY, N_("Can't write; duplicate key in table '%-.192s'"));
00298   ADD_ERROR_MESSAGE(ER_ERROR_ON_CLOSE, N_("Error on close of '%-.192s' (errno: %d)"));
00299   ADD_ERROR_MESSAGE(ER_ERROR_ON_READ, N_("Error reading file '%-.200s' (errno: %d)"));
00300   ADD_ERROR_MESSAGE(ER_ERROR_ON_RENAME, N_("Error on rename of '%-.150s' to '%-.150s' (errno: %d)"));
00301   ADD_ERROR_MESSAGE(ER_ERROR_ON_WRITE, N_("Error writing file '%-.200s' (errno: %d)"));
00302   ADD_ERROR_MESSAGE(ER_FILE_USED, N_("'%-.192s' is locked against change"));
00303   ADD_ERROR_MESSAGE(ER_FILSORT_ABORT, N_("Sort aborted"));
00304   ADD_ERROR_MESSAGE(ER_GET_ERRNO, N_("Got error %d from storage engine"));
00305   ADD_ERROR_MESSAGE(ER_ILLEGAL_HA, N_("Table storage engine for '%-.192s' doesn't have this option"));
00306   ADD_ERROR_MESSAGE(ER_KEY_NOT_FOUND, N_("Can't find record in '%-.192s'"));
00307   ADD_ERROR_MESSAGE(ER_NOT_FORM_FILE, N_("Incorrect information in file: '%-.200s'"));
00308   ADD_ERROR_MESSAGE(ER_NOT_KEYFILE, N_("Incorrect key file for table '%-.200s'; try to repair it"));
00309   ADD_ERROR_MESSAGE(ER_OLD_KEYFILE, N_("Old key file for table '%-.192s'; repair it!"));
00310   ADD_ERROR_MESSAGE(ER_OPEN_AS_READONLY, N_("Table '%-.192s' is read only"));
00311   ADD_ERROR_MESSAGE(ER_OUTOFMEMORY, N_("Out of memory; restart server and try again (needed %lu bytes)"));
00312   ADD_ERROR_MESSAGE(ER_OUT_OF_SORTMEMORY, N_("Out of sort memory; increase server sort buffer size"));
00313   ADD_ERROR_MESSAGE(ER_OUT_OF_GLOBAL_SORTMEMORY, N_("Global sort memory constraint hit; increase sort-heap-threshold"));
00314   ADD_ERROR_MESSAGE(ER_OUT_OF_GLOBAL_JOINMEMORY, N_("Global join memory constraint hit; increase join-heap-threshold"));
00315   ADD_ERROR_MESSAGE(ER_OUT_OF_GLOBAL_READRNDMEMORY, N_("Global read_rnd memory constraint hit; increase read-rnd-heap-threshold"));
00316   ADD_ERROR_MESSAGE(ER_OUT_OF_GLOBAL_READMEMORY, N_("Global read memory constraint hit; increase read-buffer-threshold"));
00317   ADD_ERROR_MESSAGE(ER_UNEXPECTED_EOF, N_("Unexpected EOF found when reading file '%-.192s' (errno: %d)"));
00318   ADD_ERROR_MESSAGE(ER_CON_COUNT_ERROR, N_("Too many connections"));
00319   ADD_ERROR_MESSAGE(ER_OUT_OF_RESOURCES, N_("Out of memory; check if drizzled or some other process uses all available memory; if not, you may have to use 'ulimit' to allow drizzled to use more memory or you can add more swap space"));
00320   ADD_ERROR_MESSAGE(ER_BAD_HOST_ERROR, N_("Can't get hostname for your address"));
00321   ADD_ERROR_MESSAGE(ER_HANDSHAKE_ERROR, N_("Bad handshake"));
00322 
00323   // Access error messages
00324   ADD_ERROR_MESSAGE(ER_DBACCESS_DENIED_ERROR, N_("Access denied for user '%s' to schema '%s'"));
00325   ADD_ERROR_MESSAGE(ER_TABLEACCESS_DENIED_ERROR, N_("Access denied for user '%s' to table '%s'"));
00326   ADD_ERROR_MESSAGE(ER_ACCESS_DENIED_ERROR, N_("Access denied for user '%s' (using password: %s)"));
00327 
00328   ADD_ERROR_MESSAGE(ER_NO_DB_ERROR, N_("No schema selected"));
00329   ADD_ERROR_MESSAGE(ER_UNKNOWN_COM_ERROR, N_("Unknown command"));
00330   ADD_ERROR_MESSAGE(ER_BAD_NULL_ERROR, N_("Column '%-.192s' cannot be null"));
00331   ADD_ERROR_MESSAGE(ER_BAD_DB_ERROR, N_("Unknown schema '%-.192s'"));
00332   ADD_ERROR_MESSAGE(ER_TABLE_EXISTS_ERROR, N_("Table '%-.192s' already exists"));
00333   ADD_ERROR_MESSAGE(ER_BAD_TABLE_ERROR, N_("Unknown table '%-.100s'"));
00334   ADD_ERROR_MESSAGE(ER_NON_UNIQ_ERROR, N_("Column '%-.192s' in %-.192s is ambiguous"));
00335   ADD_ERROR_MESSAGE(ER_SERVER_SHUTDOWN, N_("Server shutdown in progress"));
00336   ADD_ERROR_MESSAGE(ER_BAD_FIELD_ERROR, N_("Unknown column '%-.192s' in '%-.192s'"));
00337   ADD_ERROR_MESSAGE(ER_WRONG_FIELD_WITH_GROUP, N_("'%-.192s' isn't in GROUP BY"));
00338   ADD_ERROR_MESSAGE(ER_WRONG_GROUP_FIELD, N_("Can't group on '%-.192s'"));
00339   ADD_ERROR_MESSAGE(ER_WRONG_SUM_SELECT, N_("Statement has sum functions and columns in same statement"));
00340   ADD_ERROR_MESSAGE(ER_WRONG_VALUE_COUNT, N_("Column count doesn't match value count"));
00341   ADD_ERROR_MESSAGE(ER_TOO_LONG_IDENT, N_("Identifier name '%-.100s' is too long"));
00342   ADD_ERROR_MESSAGE(ER_DUP_FIELDNAME, N_("Duplicate column name '%-.192s'"));
00343   ADD_ERROR_MESSAGE(ER_DUP_KEYNAME, N_("Duplicate key name '%-.192s'"));
00344   ADD_ERROR_MESSAGE(ER_DUP_ENTRY, N_("Duplicate entry '%-.192s' for key %d"));
00345   ADD_ERROR_MESSAGE(ER_WRONG_FIELD_SPEC, N_("Incorrect column specifier for column '%-.192s'"));
00346   ADD_ERROR_MESSAGE(ER_PARSE_ERROR, N_("%s near '%-.80s' at line %d"));
00347   ADD_ERROR_MESSAGE(ER_PARSE_ERROR_UNKNOWN, N_("Parsing error near '%s'"));
00348   ADD_ERROR_MESSAGE(ER_EMPTY_QUERY, N_("Query was empty"));
00349   ADD_ERROR_MESSAGE(ER_NONUNIQ_TABLE, N_("Not unique table/alias: '%-.192s'"));
00350   ADD_ERROR_MESSAGE(ER_INVALID_DEFAULT, N_("Invalid default value for '%-.192s'"));
00351   ADD_ERROR_MESSAGE(ER_MULTIPLE_PRI_KEY, N_("Multiple primary key defined"));
00352   ADD_ERROR_MESSAGE(ER_TOO_MANY_KEYS, N_("Too many keys specified; max %d keys allowed"));
00353   ADD_ERROR_MESSAGE(ER_TOO_MANY_KEY_PARTS, N_("Too many key parts specified; max %d parts allowed"));
00354   ADD_ERROR_MESSAGE(ER_TOO_LONG_KEY, N_("Specified key was too long; max key length is %d bytes"));
00355   ADD_ERROR_MESSAGE(ER_KEY_COLUMN_DOES_NOT_EXITS, N_("Key column '%-.192s' doesn't exist in table"));
00356   ADD_ERROR_MESSAGE(ER_BLOB_USED_AS_KEY, N_("BLOB column '%-.192s' can't be used in key specification with the used table type"));
00357   ADD_ERROR_MESSAGE(ER_TOO_BIG_FIELDLENGTH, N_("Column length too big for column '%-.192s' (max = %d); use BLOB or TEXT instead"));
00358   ADD_ERROR_MESSAGE(ER_WRONG_AUTO_KEY, N_("Incorrect table definition; there can be only one auto column and it must be defined as a key"));
00359   ADD_ERROR_MESSAGE(ER_NORMAL_SHUTDOWN, N_("%s: Normal shutdown\n"));
00360   ADD_ERROR_MESSAGE(ER_GOT_SIGNAL, N_("%s: Got signal %d. Aborting!\n"));
00361   ADD_ERROR_MESSAGE(ER_SHUTDOWN_COMPLETE, N_("%s: Shutdown complete\n"));
00362   ADD_ERROR_MESSAGE(ER_FORCING_CLOSE, N_("%s: Forcing close of thread %" PRIu64 " user: '%-.48s'\n"));
00363   ADD_ERROR_MESSAGE(ER_IPSOCK_ERROR, N_("Can't create IP socket"));
00364   ADD_ERROR_MESSAGE(ER_NO_SUCH_INDEX, N_("Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table"));
00365   ADD_ERROR_MESSAGE(ER_WRONG_FIELD_TERMINATORS, N_("Field separator argument '%-.32s' with length '%d' is not what is expected; check the manual"));
00366   ADD_ERROR_MESSAGE(ER_BLOBS_AND_NO_TERMINATED, N_("You can't use fixed rowlength with BLOBs; please use 'fields terminated by'"));
00367   ADD_ERROR_MESSAGE(ER_TEXTFILE_NOT_READABLE, N_("The file '%-.128s' must be in the schema directory or be readable by all"));
00368   ADD_ERROR_MESSAGE(ER_FILE_EXISTS_ERROR, N_("File '%-.200s' already exists"));
00369   ADD_ERROR_MESSAGE(ER_LOAD_INFO, N_("Records: %ld  Deleted: %ld  Skipped: %ld  Warnings: %ld"));
00370   ADD_ERROR_MESSAGE(ER_WRONG_SUB_KEY, N_("Incorrect prefix 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 prefix keys"));
00371   ADD_ERROR_MESSAGE(ER_CANT_REMOVE_ALL_FIELDS, N_("You can't delete all columns with ALTER TABLE; use DROP TABLE instead"));
00372   ADD_ERROR_MESSAGE(ER_CANT_DROP_FIELD_OR_KEY, N_("Can't DROP '%-.192s'; check that column/key exists"));
00373   ADD_ERROR_MESSAGE(ER_INSERT_INFO, N_("Records: %ld  Duplicates: %ld  Warnings: %ld"));
00374   ADD_ERROR_MESSAGE(ER_UPDATE_TABLE_USED, N_("You can't specify target table '%-.192s' for update in FROM clause"));
00375 
00376   // KILL session errors
00377   ADD_ERROR_MESSAGE(ER_NO_SUCH_THREAD, N_("Unknown session id: %lu"));
00378   ADD_ERROR_MESSAGE(ER_KILL_DENIED_ERROR, N_("You are not the owner of session %lu"));
00379   ADD_ERROR_MESSAGE(ER_KILL_DENY_SELF_ERROR, N_("You cannot kill the session you are connected from."));
00380 
00381 
00382   ADD_ERROR_MESSAGE(ER_NO_TABLES_USED, N_("No tables used"));
00383   ADD_ERROR_MESSAGE(ER_BLOB_CANT_HAVE_DEFAULT, N_("BLOB/TEXT column '%-.192s' can't have a default value"));
00384   ADD_ERROR_MESSAGE(ER_WRONG_DB_NAME, N_("Incorrect schema name '%-.100s'"));
00385   ADD_ERROR_MESSAGE(ER_WRONG_TABLE_NAME, N_("Incorrect table name '%-.100s'"));
00386   ADD_ERROR_MESSAGE(ER_TOO_BIG_SELECT, N_("The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay"));
00387   ADD_ERROR_MESSAGE(ER_UNKNOWN_ERROR, N_("Unknown error"));
00388   ADD_ERROR_MESSAGE(ER_UNKNOWN_PROCEDURE, N_("Unknown procedure '%-.192s'"));
00389   ADD_ERROR_MESSAGE(ER_WRONG_PARAMCOUNT_TO_PROCEDURE, N_("Incorrect parameter count to procedure '%-.192s'"));
00390   ADD_ERROR_MESSAGE(ER_UNKNOWN_TABLE, N_("Unknown table '%-.192s' in %-.32s"));
00391   ADD_ERROR_MESSAGE(ER_FIELD_SPECIFIED_TWICE, N_("Column '%-.192s' specified twice"));
00392   ADD_ERROR_MESSAGE(ER_INVALID_GROUP_FUNC_USE, N_("Invalid use of group function"));
00393   ADD_ERROR_MESSAGE(ER_UNSUPPORTED_EXTENSION, N_("Table '%-.192s' uses an extension that doesn't exist in this Drizzle version"));
00394   ADD_ERROR_MESSAGE(ER_TABLE_MUST_HAVE_COLUMNS, N_("A table must have at least 1 column"));
00395   ADD_ERROR_MESSAGE(ER_RECORD_FILE_FULL, N_("The table '%-.192s' is full"));
00396   ADD_ERROR_MESSAGE(ER_TOO_MANY_TABLES, N_("Too many tables; Drizzle can only use %d tables in a join"));
00397   ADD_ERROR_MESSAGE(ER_TOO_MANY_FIELDS, N_("Too many columns"));
00398   ADD_ERROR_MESSAGE(ER_TOO_BIG_ROWSIZE, N_("Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. You have to change some columns to TEXT or BLOBs"));
00399   ADD_ERROR_MESSAGE(ER_WRONG_OUTER_JOIN, N_("Cross dependency found in OUTER JOIN; examine your ON conditions"));
00400   ADD_ERROR_MESSAGE(ER_NULL_COLUMN_IN_INDEX, N_("Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler"));
00401   ADD_ERROR_MESSAGE(ER_PLUGIN_NO_PATHS, N_("No paths allowed for plugin library"));
00402   ADD_ERROR_MESSAGE(ER_PLUGIN_EXISTS, N_("Plugin '%-.192s' already exists"));
00403   ADD_ERROR_MESSAGE(ER_CANT_OPEN_LIBRARY, N_("Can't open shared library '%-.192s' (errno: %d %s)"));
00404   ADD_ERROR_MESSAGE(ER_CANT_FIND_DL_ENTRY, N_("Can't find symbol '%-.128s' in library '%s'"));
00405   ADD_ERROR_MESSAGE(ER_UPDATE_INFO, N_("Rows matched: %ld  Changed: %ld  Warnings: %ld"));
00406   ADD_ERROR_MESSAGE(ER_CANT_CREATE_THREAD, N_("Can't create a new thread (errno %d); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug"));
00407   ADD_ERROR_MESSAGE(ER_WRONG_VALUE_COUNT_ON_ROW, N_("Column count doesn't match value count at row %ld"));
00408   ADD_ERROR_MESSAGE(ER_CANT_REOPEN_TABLE, N_("Can't reopen table: '%-.192s'"));
00409   ADD_ERROR_MESSAGE(ER_MIX_OF_GROUP_FUNC_AND_FIELDS, N_("Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause"));
00410   ADD_ERROR_MESSAGE(ER_SYNTAX_ERROR, N_("You have an error in your SQL syntax; check the manual that corresponds to your Drizzle server version for the right syntax to use"));
00411   ADD_ERROR_MESSAGE(ER_NET_PACKET_TOO_LARGE, N_("Got a packet bigger than 'max_allowed_packet' bytes"));
00412   ADD_ERROR_MESSAGE(ER_NET_PACKETS_OUT_OF_ORDER, N_("Got packets out of order"));
00413   ADD_ERROR_MESSAGE(ER_TABLE_CANT_HANDLE_BLOB, N_("The used table type doesn't support BLOB/TEXT columns"));
00414   ADD_ERROR_MESSAGE(ER_TABLE_CANT_HANDLE_AUTO_INCREMENT, N_("The used table type doesn't support AUTO_INCREMENT columns"));
00415   ADD_ERROR_MESSAGE(ER_WRONG_COLUMN_NAME, N_("Incorrect column name '%-.100s'"));
00416   ADD_ERROR_MESSAGE(ER_WRONG_KEY_COLUMN, N_("The used storage engine can't index column '%-.192s'"));
00417   ADD_ERROR_MESSAGE(ER_WRONG_MRG_TABLE, N_("Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist"));
00418   ADD_ERROR_MESSAGE(ER_DUP_UNIQUE, N_("Can't write, because of unique constraint, to table '%-.192s'"));
00419   ADD_ERROR_MESSAGE(ER_BLOB_KEY_WITHOUT_LENGTH, N_("BLOB/TEXT column '%-.192s' used in key specification without a key length"));
00420   ADD_ERROR_MESSAGE(ER_PRIMARY_CANT_HAVE_NULL, N_("All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead"));
00421   ADD_ERROR_MESSAGE(ER_TOO_MANY_ROWS, N_("Result consisted of more than one row"));
00422   ADD_ERROR_MESSAGE(ER_REQUIRES_PRIMARY_KEY, N_("This table type requires a primary key"));
00423   ADD_ERROR_MESSAGE(ER_KEY_DOES_NOT_EXITS, N_("Key '%-.192s' doesn't exist in table '%-.192s'"));
00424   ADD_ERROR_MESSAGE(ER_CHECK_NO_SUCH_TABLE, N_("Can't open table"));
00425   ADD_ERROR_MESSAGE(ER_CHECK_NOT_IMPLEMENTED, N_("The storage engine for the table doesn't support %s"));
00426   ADD_ERROR_MESSAGE(ER_ERROR_DURING_COMMIT, N_("Got error %d during COMMIT"));
00427   ADD_ERROR_MESSAGE(ER_ERROR_DURING_ROLLBACK, N_("Got error %d during ROLLBACK"));
00428   // This is a very incorrect place to use the PRIi64 macro as the
00429   // program that looks over the source for the N_() macros does not
00430   // (obviously) do macro expansion, so the string is entirely wrong for
00431   // what it is trying to output for every language except english.
00432   ADD_ERROR_MESSAGE(ER_NEW_ABORTING_CONNECTION, N_("Aborted connection %"PRIi64" to db: '%-.192s' user: '%-.48s' host: '%-.64s' (%-.64s)"));
00433   ADD_ERROR_MESSAGE(ER_LOCK_OR_ACTIVE_TRANSACTION, N_("Can't execute the given command because you have active locked tables or an active transaction"));
00434   ADD_ERROR_MESSAGE(ER_UNKNOWN_SYSTEM_VARIABLE, N_("Unknown system variable '%-.64s'"));
00435   ADD_ERROR_MESSAGE(ER_CRASHED_ON_USAGE, N_("Table '%-.192s' is marked as crashed and should be repaired"));
00436   ADD_ERROR_MESSAGE(ER_CRASHED_ON_REPAIR, N_("Table '%-.192s' is marked as crashed and last (automatic?) repair failed"));
00437   ADD_ERROR_MESSAGE(ER_WARNING_NOT_COMPLETE_ROLLBACK, N_("Some non-transactional changed tables couldn't be rolled back"));
00438   ADD_ERROR_MESSAGE(ER_SET_CONSTANTS_ONLY, N_("You may only use constant expressions with SET"));
00439   ADD_ERROR_MESSAGE(ER_LOCK_WAIT_TIMEOUT, N_("Lock wait timeout exceeded; try restarting transaction"));
00440   ADD_ERROR_MESSAGE(ER_LOCK_TABLE_FULL, N_("The total number of locks exceeds the lock table size"));
00441   ADD_ERROR_MESSAGE(ER_READ_ONLY_TRANSACTION, N_("Update locks cannot be acquired during a READ UNCOMMITTED transaction"));
00442   ADD_ERROR_MESSAGE(ER_DROP_DB_WITH_READ_LOCK, N_("DROP DATABASE not allowed while thread is holding global read lock"));
00443   ADD_ERROR_MESSAGE(ER_WRONG_ARGUMENTS, N_("Incorrect arguments to %s"));
00444   ADD_ERROR_MESSAGE(ER_LOCK_DEADLOCK, N_("Deadlock found when trying to get lock; try restarting transaction"));
00445   ADD_ERROR_MESSAGE(ER_TABLE_CANT_HANDLE_FT, N_("The used table type doesn't support FULLTEXT indexes"));
00446   ADD_ERROR_MESSAGE(ER_CANNOT_ADD_FOREIGN, N_("Cannot add foreign key constraint"));
00447   ADD_ERROR_MESSAGE(ER_NO_REFERENCED_ROW, N_("Cannot add or update a child row: a foreign key constraint fails"));
00448   ADD_ERROR_MESSAGE(ER_ROW_IS_REFERENCED, N_("Cannot delete or update a parent row: a foreign key constraint fails"));
00449   ADD_ERROR_MESSAGE(ER_WRONG_USAGE, N_("Incorrect usage of %s and %s"));
00450   ADD_ERROR_MESSAGE(ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT, N_("The used SELECT statements have a different number of columns"));
00451   ADD_ERROR_MESSAGE(ER_CANT_UPDATE_WITH_READLOCK, N_("Can't execute the query because you have a conflicting read lock"));
00452   ADD_ERROR_MESSAGE(ER_LOCAL_VARIABLE, N_("Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL"));
00453   ADD_ERROR_MESSAGE(ER_GLOBAL_VARIABLE, N_("Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL"));
00454   ADD_ERROR_MESSAGE(ER_NO_DEFAULT, N_("Variable '%-.64s' doesn't have a default value"));
00455   ADD_ERROR_MESSAGE(ER_WRONG_VALUE_FOR_VAR, N_("Variable '%-.64s' can't be set to the value of '%-.200s'"));
00456   ADD_ERROR_MESSAGE(ER_WRONG_TYPE_FOR_VAR, N_("Incorrect argument type to variable '%-.64s'"));
00457   ADD_ERROR_MESSAGE(ER_VAR_CANT_BE_READ, N_("Variable '%-.64s' can only be set, not read"));
00458   ADD_ERROR_MESSAGE(ER_CANT_USE_OPTION_HERE, N_("Incorrect usage/placement of '%s'"));
00459   ADD_ERROR_MESSAGE(ER_NOT_SUPPORTED_YET, N_("This version of Drizzle doesn't yet support '%s'"));
00460   ADD_ERROR_MESSAGE(ER_INCORRECT_GLOBAL_LOCAL_VAR, N_("Variable '%-.192s' is a %s variable"));
00461   ADD_ERROR_MESSAGE(ER_WRONG_FK_DEF, N_("Incorrect foreign key definition for '%-.192s': %s"));
00462   ADD_ERROR_MESSAGE(ER_KEY_REF_DO_NOT_MATCH_TABLE_REF, N_("Key reference and table reference don't match"));
00463   ADD_ERROR_MESSAGE(ER_OPERAND_COLUMNS, N_("Operand should contain %d column(s)"));
00464   ADD_ERROR_MESSAGE(ER_SUBQUERY_NO_1_ROW, N_("Subquery returns more than 1 row"));
00465   ADD_ERROR_MESSAGE(ER_AUTO_CONVERT, N_("Converting column '%s' from %s to %s"));
00466   ADD_ERROR_MESSAGE(ER_ILLEGAL_REFERENCE, N_("Reference '%-.64s' not supported (%s)"));
00467   ADD_ERROR_MESSAGE(ER_DERIVED_MUST_HAVE_ALIAS, N_("Every derived table must have its own alias"));
00468   ADD_ERROR_MESSAGE(ER_SELECT_REDUCED, N_("Select %u was reduced during optimization"));
00469   ADD_ERROR_MESSAGE(ER_TABLENAME_NOT_ALLOWED_HERE, N_("Table '%-.192s' from one of the SELECTs cannot be used in %-.32s"));
00470   ADD_ERROR_MESSAGE(ER_SPATIAL_CANT_HAVE_NULL, N_("All parts of a SPATIAL index must be NOT NULL"));
00471   ADD_ERROR_MESSAGE(ER_COLLATION_CHARSET_MISMATCH, N_("COLLATION '%s' is not valid for CHARACTER SET '%s'"));
00472   ADD_ERROR_MESSAGE(ER_TOO_BIG_FOR_UNCOMPRESS, N_("Uncompressed data size too large; the maximum size is %d (based on max_allowed_packet). The length of uncompressed data may also be corrupted."));
00473   ADD_ERROR_MESSAGE(ER_ZLIB_Z_MEM_ERROR, N_("ZLIB: Not enough memory"));
00474   ADD_ERROR_MESSAGE(ER_ZLIB_Z_BUF_ERROR, N_("ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)"));
00475   ADD_ERROR_MESSAGE(ER_ZLIB_Z_DATA_ERROR, N_("ZLIB: Input data corrupted"));
00476   ADD_ERROR_MESSAGE(ER_CUT_VALUE_GROUP_CONCAT, N_("%d line(s) were cut by GROUP_CONCAT()"));
00477   ADD_ERROR_MESSAGE(ER_WARN_TOO_FEW_RECORDS, N_("Row %ld doesn't contain data for all columns"));
00478   ADD_ERROR_MESSAGE(ER_WARN_TOO_MANY_RECORDS, N_("Row %ld was truncated; it contained more data than there were input columns"));
00479   ADD_ERROR_MESSAGE(ER_WARN_NULL_TO_NOTNULL, N_("Column set to default value; NULL supplied to NOT NULL column '%s' at row %ld"));
00480   ADD_ERROR_MESSAGE(ER_WARN_DATA_OUT_OF_RANGE, N_("Out of range value for column '%s' at row %ld"));
00481   ADD_ERROR_MESSAGE(ER_WARN_DATA_TRUNCATED, N_("Data truncated for column '%s' at row %ld"));
00482   ADD_ERROR_MESSAGE(ER_CANT_AGGREGATE_2COLLATIONS, N_("Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'"));
00483   ADD_ERROR_MESSAGE(ER_CANT_AGGREGATE_3COLLATIONS, N_("Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'"));
00484   ADD_ERROR_MESSAGE(ER_CANT_AGGREGATE_NCOLLATIONS, N_("Illegal mix of collations for operation '%s'"));
00485   ADD_ERROR_MESSAGE(ER_VARIABLE_IS_NOT_STRUCT, N_("Variable '%-.64s' is not a variable component (can't be used as XXXX.variable_name)"));
00486   ADD_ERROR_MESSAGE(ER_UNKNOWN_COLLATION, N_("Unknown collation: '%-.64s'"));
00487   ADD_ERROR_MESSAGE(ER_WARN_FIELD_RESOLVED, N_("Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d"));
00488   ADD_ERROR_MESSAGE(ER_WRONG_NAME_FOR_INDEX, N_("Incorrect index name '%-.100s'"));
00489   ADD_ERROR_MESSAGE(ER_WRONG_NAME_FOR_CATALOG, N_("Incorrect catalog name '%-.100s'"));
00490   ADD_ERROR_MESSAGE(ER_BAD_FT_COLUMN, N_("Column '%-.192s' cannot be part of FULLTEXT index"));
00491   ADD_ERROR_MESSAGE(ER_UNKNOWN_STORAGE_ENGINE, N_("Unknown table engine '%s'"));
00492   ADD_ERROR_MESSAGE(ER_NON_UPDATABLE_TABLE, N_("The target table %-.100s of the %s is not updatable"));
00493   ADD_ERROR_MESSAGE(ER_FEATURE_DISABLED, N_("The '%s' feature is disabled; you need Drizzle built with '%s' to have it working"));
00494   ADD_ERROR_MESSAGE(ER_OPTION_PREVENTS_STATEMENT, N_("The Drizzle server is running with the %s option so it cannot execute this statement"));
00495   ADD_ERROR_MESSAGE(ER_DUPLICATED_VALUE_IN_TYPE, N_("Column '%-.100s' has duplicated value '%-.64s' in %s"));
00496   ADD_ERROR_MESSAGE(ER_TRUNCATED_WRONG_VALUE, N_("Truncated incorrect %-.32s value: '%-.128s'"));
00497   ADD_ERROR_MESSAGE(ER_TOO_MUCH_AUTO_TIMESTAMP_COLS, N_("Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause"));
00498   ADD_ERROR_MESSAGE(ER_INVALID_ON_UPDATE, N_("Invalid ON UPDATE clause for '%-.192s' column"));
00499   ADD_ERROR_MESSAGE(ER_GET_ERRMSG, N_("Got error %d '%-.100s' from %s"));
00500   ADD_ERROR_MESSAGE(ER_GET_TEMPORARY_ERRMSG, N_("Got temporary error %d '%-.100s' from %s"));
00501   ADD_ERROR_MESSAGE(ER_UNKNOWN_TIME_ZONE, N_("Unknown or incorrect time zone: '%-.64s'"));
00502   ADD_ERROR_MESSAGE(ER_INVALID_CHARACTER_STRING, N_("Invalid %s character string: '%.64s'"));
00503   ADD_ERROR_MESSAGE(ER_WARN_ALLOWED_PACKET_OVERFLOWED, N_("Result of %s() was larger than max_allowed_packet (%ld) - truncated"));
00504   ADD_ERROR_MESSAGE(ER_SP_DOES_NOT_EXIST, N_("%s %s does not exist"));
00505   ADD_ERROR_MESSAGE(ER_QUERY_INTERRUPTED, N_("Query execution was interrupted"));
00506   ADD_ERROR_MESSAGE(ER_VIEW_INVALID, N_("View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them"));
00507   ADD_ERROR_MESSAGE(ER_NO_DEFAULT_FOR_FIELD, N_("Field '%-.192s' doesn't have a default value"));
00508   ADD_ERROR_MESSAGE(ER_DIVISION_BY_ZERO, N_("Division by 0"));
00509   ADD_ERROR_MESSAGE(ER_TRUNCATED_WRONG_VALUE_FOR_FIELD, N_("Incorrect %-.32s value: '%-.128s' for column '%.192s' at row %u"));
00510   ADD_ERROR_MESSAGE(ER_ILLEGAL_VALUE_FOR_TYPE, N_("Illegal %s '%-.192s' value found during parsing"));
00511   ADD_ERROR_MESSAGE(ER_KEY_PART_0, N_("Key part '%-.192s' length cannot be 0"));
00512   ADD_ERROR_MESSAGE(ER_XAER_RMFAIL, N_("XAER_RMFAIL: The command cannot be executed when global transaction is in the  %.64s state"));
00513   ADD_ERROR_MESSAGE(ER_DATA_TOO_LONG, N_("Data too long for column '%s' at row %ld"));
00514   ADD_ERROR_MESSAGE(ER_STARTUP, N_("%s: ready for connections.\nVersion: '%s' %s\n"));
00515   ADD_ERROR_MESSAGE(ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR, N_("Can't load value from file with fixed size rows to variable"));
00516   ADD_ERROR_MESSAGE(ER_WRONG_VALUE_FOR_TYPE, N_("Incorrect %-.32s value: '%-.128s' for function %-.32s"));
00517   ADD_ERROR_MESSAGE(ER_TABLE_DEF_CHANGED, N_("Table definition has changed, please retry transaction"));
00518   ADD_ERROR_MESSAGE(ER_SP_NO_RETSET, N_("Not allowed to return a result set from a %s"));
00519   ADD_ERROR_MESSAGE(ER_CANT_CREATE_GEOMETRY_OBJECT, N_("Cannot get geometry object from data you send to the GEOMETRY field"));
00520   ADD_ERROR_MESSAGE(ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG, N_("Explicit or implicit commit is not allowed in stored function or trigger."));
00521   ADD_ERROR_MESSAGE(ER_TOO_BIG_SCALE, N_("Too big scale %d specified for column '%-.192s'. Maximum is %d."));
00522   ADD_ERROR_MESSAGE(ER_TOO_BIG_PRECISION, N_("Too big precision %d specified for column '%-.192s'. Maximum is %d."));
00523   ADD_ERROR_MESSAGE(ER_M_BIGGER_THAN_D, N_("For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s')."));
00524   ADD_ERROR_MESSAGE(ER_TRG_IN_WRONG_SCHEMA, N_("Trigger in wrong schema"));
00525   ADD_ERROR_MESSAGE(ER_STACK_OVERRUN_NEED_MORE, N_("Thread stack overrun:  %ld bytes used of a %ld byte stack, and %ld bytes needed.  Use 'drizzled -O thread_stack=#' to specify a bigger stack."));
00526   ADD_ERROR_MESSAGE(ER_TOO_BIG_DISPLAYWIDTH, N_("Display width out of range for column '%-.192s' (max = %d)"));
00527   ADD_ERROR_MESSAGE(ER_DATETIME_FUNCTION_OVERFLOW, N_("Datetime function: %-.32s field overflow"));
00528   ADD_ERROR_MESSAGE(ER_ROW_IS_REFERENCED_2, N_("Cannot delete or update a parent row: a foreign key constraint fails (%.192s)"));
00529   ADD_ERROR_MESSAGE(ER_NO_REFERENCED_ROW_2, N_("Cannot add or update a child row: a foreign key constraint fails (%.192s)"));
00530   ADD_ERROR_MESSAGE(ER_SP_FETCH_NO_DATA, N_("No data - zero rows fetched, selected, or processed"));
00531   ADD_ERROR_MESSAGE(ER_TABLE_NEEDS_UPGRADE, N_("Table upgrade required. Please do \"REPAIR TABLE `%-.32s`\" to fix it!"));
00532   ADD_ERROR_MESSAGE(ER_NON_GROUPING_FIELD_USED, N_("non-grouping field '%-.192s' is used in %-.64s clause"));
00533   ADD_ERROR_MESSAGE(ER_TABLE_CANT_HANDLE_SPKEYS, N_("The used table type doesn't support SPATIAL indexes"));
00534   ADD_ERROR_MESSAGE(ER_REMOVED_SPACES, N_("Leading spaces are removed from name '%s'"));
00535   ADD_ERROR_MESSAGE(ER_AUTOINC_READ_FAILED, N_("Failed to read auto-increment value from storage engine"));
00536   ADD_ERROR_MESSAGE(ER_WRONG_STRING_LENGTH, N_("String '%-.70s' is too long for %s (should be no longer than %d)"));
00537   ADD_ERROR_MESSAGE(ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT, N_("Too high level of nesting for select"));
00538   ADD_ERROR_MESSAGE(ER_NAME_BECOMES_EMPTY, N_("Name '%-.64s' has become ''"));
00539   ADD_ERROR_MESSAGE(ER_AMBIGUOUS_FIELD_TERM, N_("First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY"));
00540   ADD_ERROR_MESSAGE(ER_ILLEGAL_HA_CREATE_OPTION, N_("Table storage engine '%-.64s' does not support the create option '%.64s'"));
00541   ADD_ERROR_MESSAGE(ER_INVALID_OPTION_VALUE, N_("Error setting %-.32s. Given value %-.128s %-.128s"));
00542   ADD_ERROR_MESSAGE(ER_WRONG_VALUE, N_("Incorrect %-.32s value: '%-.128s'"));
00543   ADD_ERROR_MESSAGE(ER_NO_PARTITION_FOR_GIVEN_VALUE, N_("Table has no partition for value %-.64s"));
00544   ADD_ERROR_MESSAGE(ER_BINLOG_ROW_LOGGING_FAILED, N_("Writing one row to the row-based binary log failed"));
00545   ADD_ERROR_MESSAGE(ER_DROP_INDEX_FK, N_("Cannot drop index '%-.192s': needed in a foreign key constraint"));
00546   ADD_ERROR_MESSAGE(ER_FOREIGN_DUPLICATE_KEY, N_("Upholding foreign key constraints for table '%.192s', entry '%-.192s', key %d would lead to a duplicate entry"));
00547   ADD_ERROR_MESSAGE(ER_CANT_CHANGE_TX_ISOLATION, N_("Transaction isolation level can't be changed while a transaction is in progress"));
00548   ADD_ERROR_MESSAGE(ER_WRONG_PARAMCOUNT_TO_FUNCTION, N_("Incorrect parameter count in the call to native function '%-.192s'"));
00549   ADD_ERROR_MESSAGE(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, N_("Incorrect parameters in the call to native function '%-.192s'"));
00550   ADD_ERROR_MESSAGE(ER_DUP_ENTRY_WITH_KEY_NAME, N_("Duplicate entry '%-.64s' for key '%-.192s'"));
00551   ADD_ERROR_MESSAGE(ER_LOAD_DATA_INVALID_COLUMN, N_("Invalid column reference (%-.64s) in LOAD DATA"));
00552 
00553   ADD_ERROR_MESSAGE(ER_INVALID_DATETIME_VALUE, N_("Received an invalid datetime value '%s'."));
00554   ADD_ERROR_MESSAGE(ER_INVALID_DATE_VALUE, N_("Received an invalid DATE value '%s'."));
00555   ADD_ERROR_MESSAGE(ER_INVALID_NULL_ARGUMENT, N_("Received a NULL argument for function '%s'."));
00556   ADD_ERROR_MESSAGE(ER_INVALID_TIMESTAMP_VALUE, N_("Received an invalid timestamp value '%s'."));
00557   ADD_ERROR_MESSAGE(ER_INVALID_TIME_VALUE, N_("Received an invalid TIME value '%s'."));
00558   ADD_ERROR_MESSAGE(ER_INVALID_UNIX_TIMESTAMP_VALUE, N_("Received an invalid value '%s' for a UNIX timestamp."));
00559 
00560   ADD_ERROR_MESSAGE(ER_ARGUMENT_OUT_OF_RANGE, N_("Received an out-of-range argument '%s' for function '%s'."));
00561   ADD_ERROR_MESSAGE(ER_INVALID_ENUM_VALUE, N_("Received an invalid enum value '%s'."));
00562   ADD_ERROR_MESSAGE(ER_NO_PRIMARY_KEY_ON_REPLICATED_TABLE, N_("Tables which are replicated require a primary key."));
00563 
00564   ADD_ERROR_MESSAGE(ER_CORRUPT_SCHEMA_DEFINITION, N_("Corrupt or invalid schema definition for '%s' : %s"));
00565   ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION, N_("Corrupt or invalid table definition for '%s': %s"));
00566   ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_ENUM, N_("The number of enum that were required was too high for table '%s'"));
00567   ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_UNKNOWN, N_("Corrupt or invalid table definition for '%s'"));
00568   ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_UNKNOWN_COLLATION, N_("Collation '%s' for table %s is invalid/unknown"));
00569 
00570   ADD_ERROR_MESSAGE(ER_TABLE_DROP, N_("Cannot drop table '%s'"));
00571   ADD_ERROR_MESSAGE(ER_TABLE_DROP_ERROR_OCCURRED, N_("Error occurred while dropping table '%s'"));
00572   ADD_ERROR_MESSAGE(ER_TABLE_PERMISSION_DENIED, N_("Permission denied to create '%s'"));
00573   ADD_ERROR_MESSAGE(ER_TABLE_UNKNOWN, N_("Unknown table '%s'"));
00574 
00575   ADD_ERROR_MESSAGE(ER_SCHEMA_CANNOT_CREATE, N_("Cannot create schema '%s'"));
00576   ADD_ERROR_MESSAGE(ER_SCHEMA_DOES_NOT_EXIST, N_("Schema does not exist: %s"));
00577   ADD_ERROR_MESSAGE(ER_ALTER_SCHEMA, N_("Error altering schema: %s"));
00578   ADD_ERROR_MESSAGE(ER_DROP_SCHEMA, +N_("Error droppping Schema : %s"));
00579 
00580   ADD_ERROR_MESSAGE(ER_USE_SQL_BIG_RESULT, N_("Temporary table too large, rerun with SQL_BIG_RESULT."));
00581   ADD_ERROR_MESSAGE(ER_UNKNOWN_ENGINE_OPTION, N_("Unknown table engine option key/pair %s = %s."));
00582   ADD_ERROR_MESSAGE(ER_UNKNOWN_SCHEMA_OPTION, N_("Unknown schema engine option key/pair %s = %s."));
00583   ADD_ERROR_MESSAGE(ER_CARTESIAN_JOIN_ATTEMPTED, N_("Implicit cartesian join attempted."));
00584   ADD_ERROR_MESSAGE(ER_ADMIN_ACCESS, N_("Admin access not allowed from this username/IP address."));
00585 
00586   // User lock/barrier error messages
00587   ADD_ERROR_MESSAGE(ER_USER_LOCKS_CANT_WAIT_ON_OWN_BARRIER, N_("wait() can not be called on session owning user defined barrier."));
00588   ADD_ERROR_MESSAGE(ER_USER_LOCKS_UNKNOWN_BARRIER, N_("Unknown user defined barrier requested."));
00589   ADD_ERROR_MESSAGE(ER_USER_LOCKS_NOT_OWNER_OF_BARRIER, N_("Session does not own user defined barrier."));
00590   ADD_ERROR_MESSAGE(ER_USER_LOCKS_CANT_WAIT_ON_OWN_LOCK, N_("Session can not wait on a user defined lock owned by the session."));
00591   ADD_ERROR_MESSAGE(ER_USER_LOCKS_NOT_OWNER_OF_LOCK, N_("Session does not own user defined lock."));
00592 
00593   ADD_ERROR_MESSAGE(ER_USER_LOCKS_INVALID_NAME_BARRIER, N_("Invalid name for user defined barrier."));
00594   ADD_ERROR_MESSAGE(ER_USER_LOCKS_INVALID_NAME_LOCK, N_("Invalid name for user defined lock."));
00595 
00596   ADD_ERROR_MESSAGE(ER_INVALID_ALTER_TABLE_FOR_NOT_NULL, N_("Either a DEFAULt value or NULL NULL description is required for a new column if table is not empty"));
00597 
00598   // Cast errors
00599   ADD_ERROR_MESSAGE(ER_INVALID_CAST_TO_UNSIGNED, N_("Cast to unsigned converted negative integer to it's positive complement: %s"));
00600   ADD_ERROR_MESSAGE(ER_INVALID_CAST_TO_SIGNED, N_("Invalid cast to signed integer: %s"));
00601 
00602   ADD_ERROR_MESSAGE(ER_SQL_KEYWORD, N_("Identifier '%.*s' is a SQL keyword."));
00603 
00604 
00605   ADD_ERROR_MESSAGE(EE_CANTUNLOCK, N_("Can't unlock file (Errcode: %d)"));
00606   ADD_ERROR_MESSAGE(EE_CANT_CHSIZE, N_("Can't change size of file (Errcode: %d)"));
00607   ADD_ERROR_MESSAGE(EE_CANT_OPEN_STREAM, N_("Can't open stream from handle (Errcode: %d)"));
00608   ADD_ERROR_MESSAGE(EE_LINK_WARNING, N_("Warning: '%s' had %d links"));
00609   ADD_ERROR_MESSAGE(EE_OPEN_WARNING, N_("Warning: %d files and %d streams is left open\n"));
00610   ADD_ERROR_MESSAGE(EE_CANT_MKDIR, N_("Can't create directory '%s' (Errcode: %d)"));
00611   ADD_ERROR_MESSAGE(EE_UNKNOWN_CHARSET, N_("Character set '%s' is not a compiled character set and is not specified in the %s file"));
00612   ADD_ERROR_MESSAGE(EE_OUT_OF_FILERESOURCES, N_("Out of resources when opening file '%s' (Errcode: %d)"));
00613   ADD_ERROR_MESSAGE(EE_CANT_READLINK, N_("Can't read value for symlink '%s' (Error %d)"));
00614   ADD_ERROR_MESSAGE(EE_CANT_SYMLINK, N_("Can't create symlink '%s' pointing at '%s' (Error %d)"));
00615   ADD_ERROR_MESSAGE(EE_REALPATH, N_("Error on realpath() on '%s' (Error %d)"));
00616   ADD_ERROR_MESSAGE(EE_SYNC, N_("Can't sync file '%s' to disk (Errcode: %d)"));
00617   ADD_ERROR_MESSAGE(EE_UNKNOWN_COLLATION, N_("Collation '%s' is not a compiled collation and is not specified in the %s file"));
00618   ADD_ERROR_MESSAGE(EE_FILE_NOT_CLOSED, N_("File '%s' (fileno: %d) was not closed"));
00619 
00620   // For UUID type
00621   ADD_ERROR_MESSAGE(ER_INVALID_UUID_VALUE, N_("Received an invalid UUID value"));
00622   ADD_ERROR_MESSAGE(ER_INVALID_UUID_TIME, N_("The UUID was not created with a valid time"));
00623 
00624   // For IPV6 type
00625   ADD_ERROR_MESSAGE(ER_INVALID_IPV6_VALUE, N_("Received an invalid IPV6 value"));
00626 
00627   // For BOOL type
00628   ADD_ERROR_MESSAGE(ER_INVALID_BOOLEAN_VALUE, N_("Received an invalid BOOLEAN value '%s'."));
00629   ADD_ERROR_MESSAGE(ER_INVALID_CAST_TO_BOOLEAN, N_("Invalid cast to BOOLEAN: '%s'."));
00630 
00631   // Transactional DDL
00632   ADD_ERROR_MESSAGE(ER_TRANSACTIONAL_DDL_NOT_SUPPORTED, N_("Transactional DDL not supported"));
00633   // ASSERT Message
00634   ADD_ERROR_MESSAGE(ER_ASSERT, N_("Assertion '%s' failed."));
00635   ADD_ERROR_MESSAGE(ER_ASSERT_NULL, N_("Assertion '%s' failed, the result was NULL."));
00636 
00637   // Some old error values use the same strings as some new error values.
00638   ADD_ERROR_MESSAGE(EE_FILENOTFOUND, *find(ER_FILE_NOT_FOUND));
00639   ADD_ERROR_MESSAGE(EE_CANTCREATEFILE, *find(ER_CANT_CREATE_FILE));
00640   ADD_ERROR_MESSAGE(EE_READ, *find(ER_ERROR_ON_READ));
00641   ADD_ERROR_MESSAGE(EE_WRITE, *find(ER_ERROR_ON_WRITE));
00642   ADD_ERROR_MESSAGE(EE_BADCLOSE, *find(ER_ERROR_ON_CLOSE));
00643   ADD_ERROR_MESSAGE(EE_OUTOFMEMORY, *find(ER_OUTOFMEMORY));
00644   ADD_ERROR_MESSAGE(EE_DELETE, *find(ER_CANT_DELETE_FILE));
00645   ADD_ERROR_MESSAGE(EE_LINK, *find(ER_ERROR_ON_RENAME));
00646   ADD_ERROR_MESSAGE(EE_EOFERR, *find(ER_UNEXPECTED_EOF));
00647   ADD_ERROR_MESSAGE(EE_CANTLOCK, *find(ER_CANT_LOCK));
00648   ADD_ERROR_MESSAGE(EE_DIR, *find(ER_CANT_READ_DIR));
00649   ADD_ERROR_MESSAGE(EE_STAT, *find(ER_CANT_GET_STAT));
00650   ADD_ERROR_MESSAGE(EE_DISK_FULL, *find(ER_DISK_FULL));
00651   
00652   // Catalog related errors
00653   ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_CREATE, N_("Cannot create catalog '%s'."));
00654   ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_CREATE_PERMISSION, N_("Permission is denied to create '%s' catalog."));
00655   ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_DROP, N_("Cannot drop catalog '%s'."));
00656   ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_DROP_PERMISSION, N_("Permission is denied to drop '%s' catalog."));
00657   ADD_ERROR_MESSAGE(ER_CATALOG_DOES_NOT_EXIST, N_("Catalog '%s' does not exist."));
00658   ADD_ERROR_MESSAGE(ER_CATALOG_NO_DROP_LOCAL, N_("You cannot drop the 'local' catalog."));
00659   ADD_ERROR_MESSAGE(ER_CATALOG_NO_LOCK, N_("Could not gain lock on '%s'."));
00660   ADD_ERROR_MESSAGE(ER_CORRUPT_CATALOG_DEFINITION, N_("Corrupt or invalid catalog definition for '%s' : '%s'."));
00661   ADD_ERROR_MESSAGE(ER_WRONG_NAME_FOR_CATALOG, N_("Invalid catalog name."));
00662   ADD_ERROR_MESSAGE(ER_USE_DATA_DICTIONARY, N_("Engine status is now stored in the data_dictionary tables, please use these instead."));
00663   ADD_ERROR_MESSAGE(ER_TRANSACTION_ALREADY_STARTED, N_("There is already a transaction in progress"));
00664   ADD_ERROR_MESSAGE(ER_NO_LOCK_HELD, N_("No lock is held by this connection."));
00665   
00666   // Errors in scripts, such as JavaScript
00667   ADD_ERROR_MESSAGE(ER_SCRIPT, N_("Script error: %s"));
00668 }
00669 
00670 } /* namespace drizzled */