/*****************************************************************************

Copyright (c) 1996, 2012, Oracle and/or its affiliates. All Rights Reserved.

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; version 2 of the License.

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.,
51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA

*****************************************************************************/

/**************************************************//**
@file include/db0err.h
Global error codes for the database

Created 5/24/1996 Heikki Tuuri
*******************************************************/

#ifndef db0err_h
#define db0err_h


enum dberr_t {
	DB_SUCCESS_LOCKED_REC = 9,	/*!< like DB_SUCCESS, but a new
					explicit record lock was created */
	DB_SUCCESS = 10,

	/* The following are error codes */
	DB_ERROR,
	DB_INTERRUPTED,
	DB_OUT_OF_MEMORY,
	DB_OUT_OF_FILE_SPACE,
	DB_LOCK_WAIT,
	DB_DEADLOCK,
	DB_ROLLBACK,
	DB_DUPLICATE_KEY,
	DB_QUE_THR_SUSPENDED,
	DB_MISSING_HISTORY,		/*!< required history data has been
					deleted due to lack of space in
					rollback segment */
	DB_CLUSTER_NOT_FOUND = 30,
	DB_TABLE_NOT_FOUND,
	DB_MUST_GET_MORE_FILE_SPACE,	/*!< the database has to be stopped
					and restarted with more file space */
	DB_TABLE_IS_BEING_USED,
	DB_TOO_BIG_RECORD,		/*!< a record in an index would not fit
					on a compressed page, or it would
					become bigger than 1/2 free space in
					an uncompressed page frame */
	DB_LOCK_WAIT_TIMEOUT,		/*!< lock wait lasted too long */
	DB_NO_REFERENCED_ROW,		/*!< referenced key value not found
					for a foreign key in an insert or
					update of a row */
	DB_ROW_IS_REFERENCED,		/*!< cannot delete or update a row
					because it contains a key value
					which is referenced */
	DB_CANNOT_ADD_CONSTRAINT,	/*!< adding a foreign key constraint
					to a table failed */
	DB_CORRUPTION,			/*!< data structure corruption noticed */
	DB_CANNOT_DROP_CONSTRAINT,	/*!< dropping a foreign key constraint
					from a table failed */
	DB_NO_SAVEPOINT,		/*!< no savepoint exists with the given
					name */
	DB_TABLESPACE_EXISTS,		/*!< we cannot create a new single-table
					tablespace because a file of the same
					name already exists */
	DB_TABLESPACE_DELETED,		/*!< tablespace was deleted or is
					being dropped right now */
	DB_TABLESPACE_NOT_FOUND,	/*<! Attempt to delete a tablespace
					instance that was not found in the
					tablespace hash table */
	DB_LOCK_TABLE_FULL,		/*!< lock structs have exhausted the
					buffer pool (for big transactions,
					InnoDB stores the lock structs in the
					buffer pool) */
	DB_FOREIGN_DUPLICATE_KEY,	/*!< foreign key constraints
					activated by the operation would
					lead to a duplicate key in some
					table */
	DB_TOO_MANY_CONCURRENT_TRXS,	/*!< when InnoDB runs out of the
					preconfigured undo slots, this can
					only happen when there are too many
					concurrent transactions */
	DB_UNSUPPORTED,			/*!< when InnoDB sees any artefact or
					a feature that it can't recoginize or
					work with e.g., FT indexes created by
					a later version of the engine. */

	DB_INVALID_NULL,		/*!< a NOT NULL column was found to
					be NULL during table rebuild */

	DB_STATS_DO_NOT_EXIST,		/*!< an operation that requires the
					persistent storage, used for recording
					table and index statistics, was
					requested but this storage does not
					exist itself or the stats for a given
					table do not exist */
	DB_FOREIGN_EXCEED_MAX_CASCADE,	/*!< Foreign key constraint related
					cascading delete/update exceeds
					maximum allowed depth */
	DB_CHILD_NO_INDEX,		/*!< the child (foreign) table does
					not have an index that contains the
					foreign keys as its prefix columns */
	DB_PARENT_NO_INDEX,		/*!< the parent table does not
					have an index that contains the
					foreign keys as its prefix columns */
	DB_TOO_BIG_INDEX_COL,		/*!< index column size exceeds
					maximum limit */
	DB_INDEX_CORRUPT,		/*!< we have corrupted index */
	DB_UNDO_RECORD_TOO_BIG,		/*!< the undo log record is too big */
	DB_READ_ONLY,			/*!< Update operation attempted in
					a read-only transaction */
	DB_FTS_INVALID_DOCID,		/* FTS Doc ID cannot be zero */
	DB_TABLE_IN_FK_CHECK,		/* table is being used in foreign
					key check */
	DB_ONLINE_LOG_TOO_BIG,		/*!< Modification log grew too big
					during online index creation */

	DB_IO_ERROR,			/*!< Generic IO error */
	DB_IDENTIFIER_TOO_LONG,		/*!< Identifier name too long */
	DB_FTS_EXCEED_RESULT_CACHE_LIMIT,	/*!< FTS query memory
					exceeds result cache limit */

	/* The following are partial failure codes */
	DB_FAIL = 1000,
	DB_OVERFLOW,
	DB_UNDERFLOW,
	DB_STRONG_FAIL,
	DB_ZIP_OVERFLOW,
	DB_RECORD_NOT_FOUND = 1500,
	DB_END_OF_INDEX,
	DB_DICT_CHANGED,		/*!< Some part of table dictionary has
					changed. Such as index dropped or
					foreign key dropped */

	DB_SEARCH_ABORTED_BY_USER= 1533,

        /* The following are API only error codes. */
	DB_DATA_MISMATCH = 2000,	/*!< Column update or read failed
					because the types mismatch */

	DB_SCHEMA_NOT_LOCKED,		/*!< If an API function expects the
					schema to be locked in exclusive mode
					and if it's not then that API function
					will return this error code */

	DB_NOT_FOUND			/*!< Generic error code for "Not found"
					type of errors */
};

#endif
