~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/error.cc

  • Committer: Brian Aker
  • Date: 2011-01-12 06:45:23 UTC
  • mto: (2073.1.4 catalogs)
  • mto: This revision was merged to the branch mainline in revision 2080.
  • Revision ID: brian@tangent.org-20110112064523-rqhptaqbph22qmj1
Remove custom error.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 * Errors a drizzled can give you
23
23
 */
24
24
 
25
 
#include <config.h>
26
 
#include <drizzled/internal/my_sys.h>
27
 
#include <drizzled/definitions.h>
28
 
#include <drizzled/error.h>
29
 
#include <drizzled/gettext.h>
 
25
#include "config.h"
 
26
#include "drizzled/internal/my_sys.h"
 
27
#include "drizzled/definitions.h"
 
28
#include "drizzled/error.h"
 
29
#include "drizzled/gettext.h"
30
30
 
31
 
#include <drizzled/identifier.h>
 
31
#include "drizzled/identifier.h"
32
32
 
33
33
#include <boost/unordered_map.hpp>
34
34
#include <exception>
58
58
  return get_error_map().mapping_;
59
59
}
60
60
 
61
 
void add_error_message(drizzled::error_t error_code,
 
61
void add_error_message(uint32_t error_code,
62
62
                       const std::string &error_name,
63
63
                       const std::string &message)
64
64
{
65
65
  get_error_map().add(error_code, error_name, message);
66
66
}
67
67
 
68
 
const char * error_message(drizzled::error_t code)
 
68
const char * error_message(unsigned int code)
69
69
{
70
70
  try
71
71
  {
79
79
 
80
80
error_handler_func error_handler_hook= NULL;
81
81
 
82
 
namespace error {
83
 
 
84
 
void access(drizzled::identifier::User::const_reference user)
85
 
{
86
 
  std::string user_string;
87
 
  user.getSQLPath(user_string);
88
 
 
89
 
  my_error(ER_ACCESS_DENIED_ERROR, MYF(0), user_string.c_str(),
90
 
           user.hasPassword() ? ER(ER_YES) : ER(ER_NO));
91
 
92
 
 
93
 
void access(drizzled::identifier::User::const_reference user, drizzled::identifier::Schema::const_reference schema)
94
 
{
95
 
  std::string user_string;
96
 
  user.getSQLPath(user_string);
97
 
 
98
 
  std::string schema_string;
99
 
  schema.getSQLPath(schema_string);
100
 
 
101
 
  my_error(ER_DBACCESS_DENIED_ERROR, MYF(0), user_string.c_str(), schema_string.c_str());
102
 
103
 
 
104
 
void access(drizzled::identifier::User::const_reference user, drizzled::identifier::Table::const_reference table)
105
 
{
106
 
  std::string user_string;
107
 
  user.getSQLPath(user_string);
108
 
 
109
 
  std::string table_string;
110
 
  table.getSQLPath(table_string);
111
 
 
112
 
  my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), user_string.c_str(), table_string.c_str());
113
 
114
 
 
115
 
static error::level_t _verbosity= error::ERROR;
116
 
static std::string _verbosity_strint;
117
 
 
118
 
const std::string &verbose_string()
119
 
{
120
 
  switch (_verbosity)
121
 
  {
122
 
  case error::INSPECT:
123
 
    {
124
 
      static std::string _arg= "INSPECT";
125
 
      return _arg;
126
 
    }
127
 
  case error::INFO:
128
 
    {
129
 
      static std::string _arg= "INFO";
130
 
      return _arg;
131
 
    }
132
 
  case error::WARN:
133
 
    {
134
 
      static std::string _arg= "WARN";
135
 
      return _arg;
136
 
    }
137
 
  case error::ERROR:
138
 
    {
139
 
      static std::string _arg= "ERROR";
140
 
      return _arg;
141
 
    }
142
 
  }
143
 
 
144
 
  abort();
145
 
}
146
 
 
147
 
error::level_t &verbosity()
148
 
{
149
 
  return _verbosity;
150
 
}
151
 
 
152
 
void check_verbosity(const std::string &arg)
153
 
{
154
 
  if (not arg.compare("INSPECT"))
155
 
  {
156
 
    _verbosity= error::INSPECT;
157
 
  }
158
 
  else if (not arg.compare("INFO"))
159
 
  {
160
 
    _verbosity= error::INFO;
161
 
  }
162
 
  else if (not arg.compare("WARN"))
163
 
  {
164
 
    _verbosity= error::WARN;
165
 
  }
166
 
  else if (not arg.compare("ERROR"))
167
 
  {
168
 
    _verbosity= error::ERROR;
169
 
  }
170
 
}
171
 
 
172
 
} // namespace error
173
 
 
174
82
/*
175
83
  WARNING!
176
84
  my_error family functions have to be used according following rules:
190
98
       ...      variable list
191
99
*/
192
100
 
193
 
void my_error(const std::string &ref, error_t nr, myf MyFlags)
194
 
{
195
 
  my_error(nr, MyFlags, ref.c_str());
196
 
197
 
 
198
 
void my_error(error_t nr, drizzled::Identifier::const_reference ref, myf MyFlags)
 
101
void my_error(error_t nr, drizzled::Identifier::const_reference ref)
199
102
{
200
103
  std::string temp;
201
104
  ref.getSQLPath(temp);
202
 
  my_error(nr, MyFlags, temp.c_str());
 
105
  my_error(nr, MYF(0), temp.c_str());
203
106
204
107
 
205
108
void my_error(error_t nr)
238
141
      ...       variable list
239
142
*/
240
143
 
241
 
void my_printf_error(drizzled::error_t error, const char *format, myf MyFlags, ...)
 
144
void my_printf_error(uint32_t error, const char *format, myf MyFlags, ...)
242
145
{
243
146
  va_list args;
244
147
  char ebuff[ERRMSGSIZE+20];
247
150
  (void) vsnprintf (ebuff, sizeof(ebuff), format, args);
248
151
  va_end(args);
249
152
  (*error_handler_hook)(error, ebuff, MyFlags);
 
153
  return;
250
154
}
251
155
 
252
156
/*
259
163
      MyFlags   Flags
260
164
*/
261
165
 
262
 
void my_message(drizzled::error_t error, const char *str, register myf MyFlags)
 
166
void my_message(uint32_t error, const char *str, register myf MyFlags)
263
167
{
264
168
  (*error_handler_hook)(error, str, MyFlags);
265
169
}
267
171
 
268
172
// Insert the message for the error.  If the error already has an existing
269
173
// mapping, an error is logged, but the function continues.
270
 
void ErrorMap::add(drizzled::error_t error_num,
 
174
void ErrorMap::add(uint32_t error_num,
271
175
                   const std::string &error_name,
272
176
                   const std::string &message)
273
177
{
282
186
  }
283
187
}
284
188
 
285
 
const std::string &ErrorMap::find(drizzled::error_t error_num) const
 
189
const std::string &ErrorMap::find(uint32_t error_num) const
286
190
{
287
191
  ErrorMessageMap::const_iterator pos= mapping_.find(error_num);
288
192
  if (pos == mapping_.end())
296
200
// Constructor sets the default mappings.
297
201
ErrorMap::ErrorMap()
298
202
{
299
 
  ADD_ERROR_MESSAGE(EE_OK, N_("SUCCESS"));
300
 
  ADD_ERROR_MESSAGE(EE_ERROR_FIRST, N_("Error on first"));
301
203
  ADD_ERROR_MESSAGE(ER_NO, N_("NO"));
302
204
  ADD_ERROR_MESSAGE(ER_YES, N_("YES"));
303
205
  ADD_ERROR_MESSAGE(ER_CANT_CREATE_FILE, N_("Can't create file '%-.200s' (errno: %d)"));
338
240
  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"));
339
241
  ADD_ERROR_MESSAGE(ER_BAD_HOST_ERROR, N_("Can't get hostname for your address"));
340
242
  ADD_ERROR_MESSAGE(ER_HANDSHAKE_ERROR, N_("Bad handshake"));
341
 
 
342
 
  // Access error messages
343
 
  ADD_ERROR_MESSAGE(ER_DBACCESS_DENIED_ERROR, N_("Access denied for user '%s' to schema '%s'"));
344
 
  ADD_ERROR_MESSAGE(ER_TABLEACCESS_DENIED_ERROR, N_("Access denied for user '%s' to table '%s'"));
345
 
  ADD_ERROR_MESSAGE(ER_ACCESS_DENIED_ERROR, N_("Access denied for user '%s' (using password: %s)"));
346
 
 
 
243
  ADD_ERROR_MESSAGE(ER_DBACCESS_DENIED_ERROR, N_("Access denied for user '%-.48s'@'%-.64s' to schema '%-.192s'"));
 
244
  ADD_ERROR_MESSAGE(ER_ACCESS_DENIED_ERROR, N_("Access denied for user '%-.48s'@'%-.64s' (using password: %s)"));
347
245
  ADD_ERROR_MESSAGE(ER_NO_DB_ERROR, N_("No schema selected"));
348
246
  ADD_ERROR_MESSAGE(ER_UNKNOWN_COM_ERROR, N_("Unknown command"));
349
247
  ADD_ERROR_MESSAGE(ER_BAD_NULL_ERROR, N_("Column '%-.192s' cannot be null"));
363
261
  ADD_ERROR_MESSAGE(ER_DUP_ENTRY, N_("Duplicate entry '%-.192s' for key %d"));
364
262
  ADD_ERROR_MESSAGE(ER_WRONG_FIELD_SPEC, N_("Incorrect column specifier for column '%-.192s'"));
365
263
  ADD_ERROR_MESSAGE(ER_PARSE_ERROR, N_("%s near '%-.80s' at line %d"));
366
 
  ADD_ERROR_MESSAGE(ER_PARSE_ERROR_UNKNOWN, N_("Parsing error near '%s'"));
367
264
  ADD_ERROR_MESSAGE(ER_EMPTY_QUERY, N_("Query was empty"));
368
265
  ADD_ERROR_MESSAGE(ER_NONUNIQ_TABLE, N_("Not unique table/alias: '%-.192s'"));
369
266
  ADD_ERROR_MESSAGE(ER_INVALID_DEFAULT, N_("Invalid default value for '%-.192s'"));
419
316
  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"));
420
317
  ADD_ERROR_MESSAGE(ER_PLUGIN_NO_PATHS, N_("No paths allowed for plugin library"));
421
318
  ADD_ERROR_MESSAGE(ER_PLUGIN_EXISTS, N_("Plugin '%-.192s' already exists"));
422
 
  ADD_ERROR_MESSAGE(ER_CANT_OPEN_LIBRARY, N_("Can't open shared library '%-.192s' (errno: %d %s)"));
423
 
  ADD_ERROR_MESSAGE(ER_CANT_FIND_DL_ENTRY, N_("Can't find symbol '%-.128s' in library '%s'"));
 
319
  ADD_ERROR_MESSAGE(ER_CANT_OPEN_LIBRARY, N_("Can't open shared library '%-.192s' (errno: %d %-.128s)"));
 
320
  ADD_ERROR_MESSAGE(ER_CANT_FIND_DL_ENTRY, N_("Can't find symbol '%-.128s' in library '%-.128s'"));
424
321
  ADD_ERROR_MESSAGE(ER_UPDATE_INFO, N_("Rows matched: %ld  Changed: %ld  Warnings: %ld"));
425
322
  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"));
426
323
  ADD_ERROR_MESSAGE(ER_WRONG_VALUE_COUNT_ON_ROW, N_("Column count doesn't match value count at row %ld"));
427
324
  ADD_ERROR_MESSAGE(ER_CANT_REOPEN_TABLE, N_("Can't reopen table: '%-.192s'"));
428
325
  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"));
 
326
  ADD_ERROR_MESSAGE(ER_NO_SUCH_TABLE, N_("Table '%-.192s.%-.192s' doesn't exist"));
429
327
  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"));
430
328
  ADD_ERROR_MESSAGE(ER_NET_PACKET_TOO_LARGE, N_("Got a packet bigger than 'max_allowed_packet' bytes"));
431
329
  ADD_ERROR_MESSAGE(ER_NET_PACKETS_OUT_OF_ORDER, N_("Got packets out of order"));
568
466
  ADD_ERROR_MESSAGE(ER_WRONG_PARAMETERS_TO_NATIVE_FCT, N_("Incorrect parameters in the call to native function '%-.192s'"));
569
467
  ADD_ERROR_MESSAGE(ER_DUP_ENTRY_WITH_KEY_NAME, N_("Duplicate entry '%-.64s' for key '%-.192s'"));
570
468
  ADD_ERROR_MESSAGE(ER_LOAD_DATA_INVALID_COLUMN, N_("Invalid column reference (%-.64s) in LOAD DATA"));
571
 
 
 
469
  ADD_ERROR_MESSAGE(ER_INVALID_UNIX_TIMESTAMP_VALUE, N_("Received an invalid value '%s' for a UNIX timestamp."));
572
470
  ADD_ERROR_MESSAGE(ER_INVALID_DATETIME_VALUE, N_("Received an invalid datetime value '%s'."));
573
 
  ADD_ERROR_MESSAGE(ER_INVALID_DATE_VALUE, N_("Received an invalid DATE value '%s'."));
574
471
  ADD_ERROR_MESSAGE(ER_INVALID_NULL_ARGUMENT, N_("Received a NULL argument for function '%s'."));
575
 
  ADD_ERROR_MESSAGE(ER_INVALID_TIMESTAMP_VALUE, N_("Received an invalid timestamp value '%s'."));
576
 
  ADD_ERROR_MESSAGE(ER_INVALID_TIME_VALUE, N_("Received an invalid TIME value '%s'."));
577
 
  ADD_ERROR_MESSAGE(ER_INVALID_UNIX_TIMESTAMP_VALUE, N_("Received an invalid value '%s' for a UNIX timestamp."));
578
 
 
579
472
  ADD_ERROR_MESSAGE(ER_ARGUMENT_OUT_OF_RANGE, N_("Received an out-of-range argument '%s' for function '%s'."));
580
473
  ADD_ERROR_MESSAGE(ER_INVALID_ENUM_VALUE, N_("Received an invalid enum value '%s'."));
581
474
  ADD_ERROR_MESSAGE(ER_NO_PRIMARY_KEY_ON_REPLICATED_TABLE, N_("Tables which are replicated require a primary key."));
582
475
 
583
 
  ADD_ERROR_MESSAGE(ER_CORRUPT_SCHEMA_DEFINITION, N_("Corrupt or invalid schema definition for '%s' : %s"));
584
 
  ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION, N_("Corrupt or invalid table definition for '%s': %s"));
585
 
  ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_ENUM, N_("The number of enum that were required was too high for table '%s'"));
586
 
  ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_UNKNOWN, N_("Corrupt or invalid table definition for '%s'"));
 
476
  ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION, N_("Corrupt or invalid table definition for %s: %s"));
 
477
  ADD_ERROR_MESSAGE(ER_CORRUPT_SCHEMA_DEFINITION, N_("Corrupt or invalid schema definition for %s : %s"));
 
478
  ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_ENUM, N_("The number of enum that were required was too high for table %s"));
587
479
  ADD_ERROR_MESSAGE(ER_CORRUPT_TABLE_DEFINITION_UNKNOWN_COLLATION, N_("Collation '%s' for table %s is invalid/unknown"));
588
480
 
589
481
  ADD_ERROR_MESSAGE(ER_TABLE_DROP, N_("Cannot drop table '%s'"));
590
 
  ADD_ERROR_MESSAGE(ER_TABLE_DROP_ERROR_OCCURRED, N_("Error occurred while dropping table '%s'"));
591
 
  ADD_ERROR_MESSAGE(ER_TABLE_PERMISSION_DENIED, N_("Permission denied to create '%s'"));
592
 
  ADD_ERROR_MESSAGE(ER_TABLE_UNKNOWN, N_("Unknown table '%s'"));
593
482
 
594
 
  ADD_ERROR_MESSAGE(ER_SCHEMA_CANNOT_CREATE, N_("Cannot create schema '%s'"));
595
483
  ADD_ERROR_MESSAGE(ER_SCHEMA_DOES_NOT_EXIST, N_("Schema does not exist: %s"));
596
484
  ADD_ERROR_MESSAGE(ER_ALTER_SCHEMA, N_("Error altering schema: %s"));
597
485
  ADD_ERROR_MESSAGE(ER_DROP_SCHEMA, +N_("Error droppping Schema : %s"));
598
 
 
599
486
  ADD_ERROR_MESSAGE(ER_USE_SQL_BIG_RESULT, N_("Temporary table too large, rerun with SQL_BIG_RESULT."));
600
487
  ADD_ERROR_MESSAGE(ER_UNKNOWN_ENGINE_OPTION, N_("Unknown table engine option key/pair %s = %s."));
601
488
  ADD_ERROR_MESSAGE(ER_UNKNOWN_SCHEMA_OPTION, N_("Unknown schema engine option key/pair %s = %s."));
602
 
  ADD_ERROR_MESSAGE(ER_CARTESIAN_JOIN_ATTEMPTED, N_("Implicit cartesian join attempted."));
 
489
 
603
490
  ADD_ERROR_MESSAGE(ER_ADMIN_ACCESS, N_("Admin access not allowed from this username/IP address."));
604
491
 
605
492
  // User lock/barrier error messages
644
531
  ADD_ERROR_MESSAGE(ER_INVALID_BOOLEAN_VALUE, N_("Received an invalid BOOLEAN value '%s'."));
645
532
  ADD_ERROR_MESSAGE(ER_INVALID_CAST_TO_BOOLEAN, N_("Invalid cast to BOOLEAN: '%s'."));
646
533
 
647
 
  // Transactional DDL
648
 
  ADD_ERROR_MESSAGE(ER_TRANSACTIONAL_DDL_NOT_SUPPORTED, N_("Transactional DDL not supported"));
649
534
  // ASSERT Message
650
535
  ADD_ERROR_MESSAGE(ER_ASSERT, N_("Assertion '%s' failed."));
651
536
  ADD_ERROR_MESSAGE(ER_ASSERT_NULL, N_("Assertion '%s' failed, the result was NULL."));
666
551
  ADD_ERROR_MESSAGE(EE_DISK_FULL, find(ER_DISK_FULL));
667
552
  
668
553
  // Catalog related errors
 
554
  ADD_ERROR_MESSAGE(ER_WRONG_NAME_FOR_CATALOG, N_("Invalid catalog name."));
 
555
  ADD_ERROR_MESSAGE(ER_CORRUPT_CATALOG_DEFINITION, N_("Corrupt or invalid catalog definition for '%s' : '%s'."));
 
556
  ADD_ERROR_MESSAGE(ER_CATALOG_DOES_NOT_EXIST, N_("Catalog '%s' does not exist."));
669
557
  ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_CREATE, N_("Cannot create catalog '%s'."));
670
 
  ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_CREATE_PERMISSION, N_("Permission is denied to create '%s' catalog."));
671
558
  ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_DROP, N_("Cannot drop catalog '%s'."));
672
 
  ADD_ERROR_MESSAGE(ER_CATALOG_CANNOT_DROP_PERMISSION, N_("Permission is denied to drop '%s' catalog."));
673
 
  ADD_ERROR_MESSAGE(ER_CATALOG_DOES_NOT_EXIST, N_("Catalog '%s' does not exist."));
674
 
  ADD_ERROR_MESSAGE(ER_CATALOG_NO_DROP_LOCAL, N_("You cannot drop the 'local' catalog."));
675
559
  ADD_ERROR_MESSAGE(ER_CATALOG_NO_LOCK, N_("Could not gain lock on '%s'."));
676
 
  ADD_ERROR_MESSAGE(ER_CORRUPT_CATALOG_DEFINITION, N_("Corrupt or invalid catalog definition for '%s' : '%s'."));
677
 
  ADD_ERROR_MESSAGE(ER_WRONG_NAME_FOR_CATALOG, N_("Invalid catalog name."));
678
 
  ADD_ERROR_MESSAGE(ER_USE_DATA_DICTIONARY, N_("Engine status is now stored in the data_dictionary tables, please use these instead."));
679
 
  ADD_ERROR_MESSAGE(ER_TRANSACTION_ALREADY_STARTED, N_("There is already a transaction in progress"));
 
560
  ADD_ERROR_MESSAGE(ER_CATALOG_NO_DROP_LOCAL, N_("You can not drop the 'local' catalog."));
 
561
 
680
562
 
681
563
}
682
564