/*

Copyright (c) 2002-2005, Yauheni Akhotnikau
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

- Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.

- Redistributions in binary form must reproduce the above copyright notice, this
list of conditions and the following disclaimer in the documentation and/or
other materials provided with the distribution.

- The name of the author may not be used to endorse or promote products derived
from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
OF SUCH DAMAGE.

*/

/*
	ObjESSty-1
*/
#if !defined( _OESS_1__DB__STORAGE__ERRNO_HPP_ )
#define _OESS_1__DB__STORAGE__ERRNO_HPP_

#include <oess_1/defs/h/errno_range.hpp>

namespace oess_1 {

namespace db {

namespace storage {

namespace err {

const int	c_range_min = oess_1::impl::c_errno__db__storage__min;
const int	c_range_max = c_range_min + 1000;

// Хранилище уже открыто.
const int	c_storage_open = c_range_min + 1;

// Транзакция хранилища не начата.
const int	c_trans_not_started = c_range_min + 2;

// Транзакция хранилища начата.
const int	c_trans_started = c_range_min + 3;

// Неверный номер страницы.
const int	c_invalid_page_index = c_range_min + 4;

// Возможное нарушение целостности хранилища.
const int	c_storage_damage_possible = c_range_min + 5;

// Хранилище открыто в режиме read-only.
const int	c_read_only_mode = c_range_min + 6;

// Хранилище не открыто.
const int	c_storage_not_open = c_range_min + 7;

// Индекс потока уже открыт.
const int	c_stream_index_open = c_range_min + 8;

// Индекс потока не открыт.
const int	c_stream_index_not_open = c_range_min + 9;

// Не допустимый номер элемента индекса первого уровня.
const int	c_invalid_ind1_item_ordinal = c_range_min + 10;

// Не ожиданная ошибка.
const int	c_unexpected = c_range_min + 11;

// Попытка использовать результат поиска в индексе,
// равный NULL.
const int	c_null_index_search_result = c_range_min + 12;

// Поток уже открыт.
const int	c_stream_open = c_range_min + 13;

// Поток не открыт.
const int	c_stream_not_open = c_range_min + 14;

// Попытка прочитать из потока сущность большего размера,
// чем размер сущности в потоке.
const int	c_entity_too_large = c_range_min + 15;

// Поток полностью заполнен.
const int	c_stream_full = c_range_min + 16;

// Не допустимое значение заголовка блока.
const int	c_invalid_block_header = c_range_min + 17;

//! Поток не описан в оглавлении хранилища.
const int	c_stream_is_not_in_directory = c_range_min + 18;

// Этот поток не принадлежит данному хранилищу.
const int	c_unknown_stream = c_range_min + 19;

// Страница не найдена в кэше.
const int	c_page_not_in_cache = c_range_min + 20;

//! Страница уже находится в кэше.
const int	c_page_already_in_cache = c_range_min + 21;

//! Кэш не проинициализирован.
const int	c_cache_not_initialized = c_range_min + 22;

//! Ошибка в списках изменений основного файла в транзакции.
const int	c_trx_invalid_lists = c_range_min + 23;

//! Не правильно задан размер одного блока для поиска
//! несовпадений в новом и исходном значениях страницы.
const int	c_trx_invalid_mismatch_block_size = c_range_min + 24;

//! Trace-stream для хранилища уже открыт.
const int	c_trace_stream_open = c_range_min + 25;

//! Не найдено ни одного trace-файла для хранилища.
const int	c_trace_file_not_found = c_range_min + 26;

//! Найдены trace-файлы, хотя их быть не должно.
const int	c_trace_file_found = c_range_min + 27;

//! Trace-stream для хранилища не открыт.
const int	c_trace_stream_not_open = c_range_min + 28;

//! Trace-stream для хранилища открыт в режиме read-only и не
//! может быть изменен.
const int	c_read_only_trace_stream = c_range_min + 29;

//! БД не может быть восстановлена, т.к. она не была полностью
//! создана.
/*!
	Например, был создан пустой trace-файл и пустой основной файл,
	а затем произошел сбой.
*/
const int	c_partially_created_db = c_range_min + 30;

//! БД не может быть восстановлена из-за недостатка информации
//! в trace-stream.
/*!
	Возможно, недоступны (удалены) trace-файлы с актуальной
	информацией.
*/
const int	c_insufficent_trace_info = c_range_min + 31;

//! Недопустимое количество самостоятельных фрагментов на странице.
/*!
	При фиксации транзакции в trace-файл записывается не вся
	измененная страница, а только ее измененные фрагменты. Размер
	одного фрагмента фиксирован. На странице должно быть целое
	количество фрагментов.

	Процедура восстановления БД по trace-файлам расчитана на то,
	что количество фрагментов на странице будет лежать в некотором
	диапазоне. Для версии 1.4.0 от 1 до 8. Данная ошибка возникает,
	если количество фрагментов на странице не попадает в нужный
	диапазон.
*/
const int	c_invalid_page_block_count = c_range_min + 32;

//! Ошибка архивирования образа транзакции.
const int	c_trx_zlib_failure = c_range_min + 33;

//! Неизвестный режим компрессии данных в образе транзакции.
const int	c_trx_unknown_compression_mode = c_range_min + 34;

//! Ошибка поиска trace-файлов для БД.
const int	c_trx_file_search_failed = c_range_min + 35;

//! В области больше нет сегментов со свободными блоками.
const int	c_no_more_free_segments = c_range_min + 36;

//! Недопустимый номер сегмента.
/*!
	Количество сегментов в хранилище расчитывается исходя из
	размера страницы и количества блоков на странице. При этом в
	хранилище могут быть только полные сегменты одинакового размера.

	Данная ошибка порождается, когда встречается номер сегмента
	превосходящий максимальное количество сегментов в хранилище.
*/
const int	c_invalid_segment_ordinal = c_range_min + 37;

//! Сегмент уже помечен как сегмент, в котором нет свободных блоков.
const int	c_segment_already_full = c_range_min + 38;

//! Сегмент уже отмечен как сегмент, в котором есть свободные блоки.
const int	c_segment_already_free = c_range_min + 39;

//! Блок не отмечен как занятый в заголовке сегмента.
const int	c_block_not_allocated = c_range_min + 40;

//! Недопустимый номер элемента цепочки.
/*!
	Например, номер элемента больше общего количества элементов
	в файле хранилища. Или этот элемент располагается на странице
	какого-либо заголовка (общего или заголовка сегмента).
*/
const int	c_invalid_chain_link_ordinal = c_range_min + 41;

//! Заданы не корректные размеры страницы и блока на странице.
const int	c_invalid_sizes = c_range_min + 42;

//! Недопустимый номер области.
/*!
	Количество областей в хранилище расчитывается исходя из
	размера страницы и количества блоков на странице.
	Данная ошибка порождается, когда встречается номер области
	превосходящий максимальное количество областей в хранилище.
*/
const int	c_invalid_area_ordinal = c_range_min + 43;

//! Область уже помеченa как область без свободных блоков.
const int	c_area_already_full = c_range_min + 44;

//! Область уже отмеченa как область со свободными блоками.
const int	c_area_already_free = c_range_min + 45;

//! В хранилище больше нет областей со свободными блоками.
//! Хранилище полностью заполнено.
const int	c_no_more_free_areas = c_range_min + 47;

//! Имя для потока в хранилище потоков не уникально.
/*!
	Если эта ошибка возникает при создании нового потока, то это означает,
	что в хранилище уже есть поток с таким именем.
*/
const int	c_stream_name_not_unique = c_range_min + 48;

//! Неизвестный режим компрессии trace-stream.
const int	c_invalid_trace_compression_mode = c_range_min + 49;

//! Неизвестный режим сохранения восстановочной информации.
/*!
	\since v.1.4.0

	Может так же порождаться в случае, когда для текущего trace-mode БД
	пытаются применить средства, не совместимые с текущим режимом. Например,
	попытаться использовать committer, который расчитан только на
	режим trace_last, в режиме trace_all.
*/
const int	c_invalid_trace_mode = c_range_min + 50;

//! Trace-stream достиг своего максимального размера и не может более
//! расширяться.
const int	c_trace_stream_full = c_range_min + 51;

/*!
	\since v.1.4.0
	\brief Для указанного хранилища нет актуального snapshot-файла.
*/
const int	c_no_actual_snapshot = c_range_min + 52;

/*!
	\since v.1.4.0
	\brief Ошибка переименования файлов.

	Возникает когда при обращении к низкоуровневым системным функциям
	переименования файлов возвращается признак неудачного выполнения
	операции.
*/
const int	c_unable_to_rename_file = c_range_min + 53;

/*!
	\since v.1.4.0
	\brief Количество страниц в БД отличается от ожидаемого.

	Возникает при попытке использования snapshot-а для восстановления БД
	когда оказывается, что в snapshot-е содержится больше страниц, чем должно
	быть в самой БД. Возможно, БД была пересоздана, но snapshot-ы для нее
	не были удалены.
*/
const int	c_db_page_count_mismatch = c_range_min + 54;

/*!
	\since v.1.4.0
	\brief Нет trace-файлов, которые можно было бы
		использовать для построения очередного snapshot-а.

	Данная ошибка генерируется при попытке формирования очередного snapshot-а
	когда оказывается, что после создания последнего snapshot-а был сформирован
	только один trace-файл. Поскольку текущий активный trace-файл в
	snapshot не помещается, то сформировать новый snapshot в этом случае
	не возможно. Так же эта ошибка может возникнуть, когда для БД существует
	всего один trace-файл (т.е. после создания БД еще не происходил переход
	к следующему trace-файлу), а snapshot-ов нет вообще.
*/
const int	c_no_traces_for_snapshot = c_range_min + 55;

} /* namespace err */

} /* namespace storage */

} /* namespace db */

} /* namespace oess_1 */

#endif
