UNIVERS  15.3
UNIVERS base processing software API
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
DbTable Class Reference

#include <DbTable.H>

Inheritance diagram for DbTable:
DbHandle DbLockTable

Public Member Functions

 DbTable (const DbTTDesc &dbtt, DbIndex quant=DB_QUANT, DbIndex start_volume=DB_START_VOLUME)
 
 DbTable (DbTable &dbt)
 
virtual ~DbTable ()
 
const DbTTDesctable_format () const
 
virtual DbIndex lines_count () const
 
virtual DbIndex lines_range (DbIndex line1, DbIndex line2, DbIndex *line=NULL) const
 
virtual void get_value (const char *column, DbIndex line, void *ptr)
 
virtual void get_values (const char *column, DbIndex start_line, DbIndex lines_cnt, void *ptr)
 
virtual Logic check_empty_value (const char *column, DbIndex line)
 
virtual UnitId get_unit (const char *column) const
 
virtual const DmnDescAr & get_domains ()
 
virtual DbDomainDesc get_domain (const char *column) const
 
virtual Compar compare_lines (const char *column, DbIndex line1, DbIndex line2)
 
const char * tt_name () const
 
Logic is_modified () const
 
Logic is_modifiable () const
 
virtual void clean ()
 
virtual void set_value (const char *column, DbIndex line, const void *ptr)
 
virtual void set_values (const char *column, DbIndex start_line, DbIndex lines_cnt, const void *ptr)
 
virtual void set_empty_value (const char *column, DbIndex line)
 
virtual void set_unit (const char *column, UnitId unid)
 
virtual void insert_line (DbIndex line, DbIndex lines_cnt=1, Logic bInit=TRUE)
 
virtual void remove_lines (DbIndex line1, DbIndex line2)
 
virtual void exchange_lines (DbIndex line1, DbIndex line2)
 
virtual void merge (DbTable &src)
 
virtual void copy_lines (DbIndex iWhere, DbTable &src, DbIndex iFrom, DbIndex nLines)
 
virtual void modify ()
 
virtual void not_modified ()
 
virtual void set_modifiability (Logic bFlag)
 
void read_leader (int fd, ByteOrder &eBO, DbIndex &nLineCnt, unsigned &nDmnsCnt)
 
void append_table (int fd, ByteOrder eBO, DbIndex nLineCnt)
 
void read (int fd)
 
void write_leader (int fd, ByteOrder eBO, DbIndex nLineCnt)
 
void record_table (int fd, ByteOrder eBO, DbIndex iStartLine, DbIndex nLineCnt)
 
void write (int fd)
 
void set_preread_size (size_t nSize)
 
size_t get_preread_size () const
 
void write_changed ()
 
void load_all_lines ()
 
MutexId * mutex () const
 

Protected Member Functions

virtual void read_lines (DbIndex line1, DbIndex line2)
 
virtual void write_lines (DbIndex line1, DbIndex line2)
 
virtual void read_line_seq (DbIndex line1, DbIndex line2)
 
virtual void write_line_seq (DbIndex line1, DbIndex line2)
 
virtual void load_lines (DbIndex line1, DbIndex line2)
 
virtual void change_lines (DbIndex line1, DbIndex line2)
 
unsigned n2i (const char *column) const
 
virtual unsigned valid_n2i (const char *column) const
 
void * i2ptr (unsigned dmn_i, DbIndex line) const
 
size_t i2size (unsigned dmn_i) const
 

Protected Attributes

DbTTDesc fmt
 
DbBufStorage dtable
 
DbFileDomainAttrdmn_attrs
 
unsigned nFileDmnsCnt
 

Detailed Description

Класс по работе с таблицей ЛБД на нижнем уровне. Обеспечивает отображение файла таблицы ЛБД в память.

Номер строки в таблице БД отсчитывается от 0 и должен быть положительным. Допускается использовать last из DynAr.H для доступа к последней строке таблицы.

Для массивов из N символов (типы CHAR_1, CHAR_EBCDIC) используются специальные правила доступа. При записи в таблицу по set_value() копируются до N символов включительно пока не встретится признак конца строки '\0'. В таблице БД всегда хранится N символов (концевой '\0' может не уместиться). При чтении из таблицы по get_value() приемный буфер должен иметь на один байт больше длины строки, так как признак конца строки формируется автоматически. То есть, для гарантии под приемный буфер должно быть выделено N+1 байтов памяти. Массивы остальных типов копируется байт в байт.

Constructor & Destructor Documentation

DbTable::DbTable ( const DbTTDesc dbtt,
DbIndex  quant = DB_QUANT,
DbIndex  start_volume = DB_START_VOLUME 
)

Создать пустую таблицу указанной структуры в памяти.

DbTable::DbTable ( DbTable dbt)

Создать копию указанной таблицы в памяти.

virtual DbTable::~DbTable ( )
virtual

Освободить память из-под таблицы и разрушить объект.

Member Function Documentation

void DbTable::append_table ( int  fd,
ByteOrder  eBO,
DbIndex  nLineCnt 
)

Прочитать собственно строки таблицы ЛБД из файла в количестве nLineCnt штук с приведением из формата eBO. Может работать с каналом.

virtual void DbTable::change_lines ( DbIndex  line1,
DbIndex  line2 
)
protectedvirtual

Загрузить строки [line1..line2] из файла, выделив для них место. Пометить строчки как изменившиеся. last support.

virtual Logic DbTable::check_empty_value ( const char *  column,
DbIndex  line 
)
virtual

Проверить, является ли указанная ячейка пустой

virtual void DbTable::clean ( )
virtual

Очистить таблицу в памяти (формат остается, содержимое пропадает).

virtual Compar DbTable::compare_lines ( const char *  column,
DbIndex  line1,
DbIndex  line2 
)
virtual

Сравнить значения в ячейках указанного домена.

virtual void DbTable::copy_lines ( DbIndex  iWhere,
DbTable src,
DbIndex  iFrom,
DbIndex  nLines 
)
virtual

Добавить указанные строки таблицы в указанное место этой. Запрещено использование last в качестве индекса.

virtual void DbTable::exchange_lines ( DbIndex  line1,
DbIndex  line2 
)
virtual

Обменять местами две строки таблицы

virtual DbDomainDesc DbTable::get_domain ( const char *  column) const
virtual

Вернуть структуру-описатель указанного домена.

virtual const DmnDescAr& DbTable::get_domains ( )
virtual

Вернуть ссылку на массив описателей доменов.

size_t DbTable::get_preread_size ( ) const

Получить информацию о размере буфера предчтения в байтах.

virtual UnitId DbTable::get_unit ( const char *  column) const
virtual

Получить значение физической величины столбца

virtual void DbTable::get_value ( const char *  column,
DbIndex  line,
void *  ptr 
)
virtual

Получить доступ к указанному столбцу-строке таблицы

virtual void DbTable::get_values ( const char *  column,
DbIndex  start_line,
DbIndex  lines_cnt,
void *  ptr 
)
virtual

Групповая операция по чтению колонки значений из указанного столбца. Значения считываются начиная с указанной строки в указанном количестве.

void* DbTable::i2ptr ( unsigned  dmn_i,
DbIndex  line 
) const
inlineprotected

Получить адрес ячейки, указанной индексами столбца и строки. Строка может оказаться незагруженной в память!

size_t DbTable::i2size ( unsigned  dmn_i) const
inlineprotected

Получить размер ячейки, указанной индексом домена.

virtual void DbTable::insert_line ( DbIndex  line,
DbIndex  lines_cnt = 1,
Logic  bInit = TRUE 
)
virtual

Вставить в таблицу строку (строки) перед указанной line. Если указана строка last, то после последней. Если аргумент bInit TRUE, то требуется инициализация строк.

Reimplemented in DbHandle.

Logic DbTable::is_modifiable ( ) const

Вернуть TRUE если таблица может быть модифицирована в памяти и FALSE в противном случае.

Logic DbTable::is_modified ( ) const

Вернуть TRUE если таблица была модифицирована и FALSE в противном случае.

virtual DbIndex DbTable::lines_count ( ) const
virtual

Вернуть количество строк в таблице.

virtual DbIndex DbTable::lines_range ( DbIndex  line1,
DbIndex  line2,
DbIndex *  line = NULL 
) const
virtual

Вернуть количество строк в диапазоне, убрать last и вернуть в line[] пару упорядоченных по возрастанию индексов строк - первой и последней.

void DbTable::load_all_lines ( )

Загрузить в память все строки файла таблицы.

virtual void DbTable::load_lines ( DbIndex  line1,
DbIndex  line2 
)
protectedvirtual

Загрузить строки [line1..line2] из файла, выделив для них место. Однажды загруженные строчки не трогаются. last support.

virtual void DbTable::merge ( DbTable src)
virtual

Добавить строки указанной таблицы в конец этой.

virtual void DbTable::modify ( )
virtual

Выполнение операции приведет к тому, что таблица будет считаться изменившейся. Этот метод вызывается во всех модифицирующих операциях.

MutexId* DbTable::mutex ( ) const

Mutex to use in MT applications

unsigned DbTable::n2i ( const char *  column) const
protected

Получить индекс домена по имени. Возможно, фактическая таблица БД может и не содержать столбца с таким индексом в силу того, что она создана по старому описателю.

virtual void DbTable::not_modified ( )
virtual

Выполнение операции приведет к тому, что таблица будет считаться не изменившейся несмотря на предыдущие операции с ней.

void DbTable::read ( int  fd)

Прочитать в память содержимое указанного файла (в конец имеющегося содержимого). Может работать с каналом.

void DbTable::read_leader ( int  fd,
ByteOrder &  eBO,
DbIndex &  nLineCnt,
unsigned &  nDmnsCnt 
)

Прочитать преамбулу файла таблицы ЛБД (заголовок + атрибуты доменов). Диагностировать возможные проблемы. Скорректировать число доменов и размер записи до совпадающего с файлом БД. Возвратить число строк в таблице, число доменов в файле (может отличаться от ftm.dmns->count()!) и формат хранения. Может работать с каналом.

virtual void DbTable::read_line_seq ( DbIndex  line1,
DbIndex  line2 
)
protectedvirtual

Безусловно прочитать из файла на диске указанные строки [line1..line2]. Гарантируется, что в памяти строки идут последовательно.

Reimplemented in DbHandle.

virtual void DbTable::read_lines ( DbIndex  line1,
DbIndex  line2 
)
protectedvirtual

Безусловно прочитать из файла на диске указанные строки [line1..line2]. Можно задавать произвольный диапазон строк.

void DbTable::record_table ( int  fd,
ByteOrder  eBO,
DbIndex  iStartLine,
DbIndex  nLineCnt 
)

Записать указанное количество строк начиная с указанной в файл таблицы ЛБД. Данные приводятся к формату eBO. Может работать с каналом.

virtual void DbTable::remove_lines ( DbIndex  line1,
DbIndex  line2 
)
virtual

Удалить из таблицы указанный диапазон строк [line1..line2]

Reimplemented in DbHandle.

virtual void DbTable::set_empty_value ( const char *  column,
DbIndex  line 
)
virtual

Сделать ячейку пустой.

virtual void DbTable::set_modifiability ( Logic  bFlag)
virtual

Установить признак модифицируемости таблицы. Если установить FALSE, то любая операция изменения содержимого таблицы завершится с ошибкой. По умолчанию флаг TRUE.

void DbTable::set_preread_size ( size_t  nSize)

Установить размер буфера предчтения в байтах при произвольном доступе к файлу.

virtual void DbTable::set_unit ( const char *  column,
UnitId  unid 
)
virtual

Изменить значение физической величины столбца на указанное

virtual void DbTable::set_value ( const char *  column,
DbIndex  line,
const void *  ptr 
)
virtual

Записать значение указанного столбца-строки таблицы

virtual void DbTable::set_values ( const char *  column,
DbIndex  start_line,
DbIndex  lines_cnt,
const void *  ptr 
)
virtual

Групповая операция по записи колонки значений в указанный столбец. Значения записываются начиная с указанной строки в указанном количестве.

const DbTTDesc & DbTable::table_format ( ) const
inline

Вернуть ссылку на описание таблицы.

const char* DbTable::tt_name ( ) const

Получить имя типа таблицы.

virtual unsigned DbTable::valid_n2i ( const char *  column) const
protectedvirtual

Получить индекс домена по имени и проверить его на соответствие формату конкретной таблицы БД - кидает ERROR__DB_DMN_NOT_FOUND

Reimplemented in DbHandle.

void DbTable::write ( int  fd)

Записать в указанный файл содержимое таблицы. Может работать с каналом.

void DbTable::write_changed ( )

Записать в файл содержимое изменившихся строк.

void DbTable::write_leader ( int  fd,
ByteOrder  eBO,
DbIndex  nLineCnt 
)

Записать преамбулу файла таблицы ЛБД (заголовок + атрибуты доменов). Диагностировать возможные проблемы. В заголовке записывается указанное количество трасс, что позволяет записывать в файл произвольное их число. Задается также формат хранения в файле. Может работать с каналом.

virtual void DbTable::write_line_seq ( DbIndex  line1,
DbIndex  line2 
)
protectedvirtual

Безусловно сохранить в файл на диске указанные строки [line1..line2]. Гарантируется, что в памяти строки идут последовательно.

Reimplemented in DbHandle.

virtual void DbTable::write_lines ( DbIndex  line1,
DbIndex  line2 
)
protectedvirtual

Безусловно сохранить в файл на диске указанные строки [line1..line2]. Можно задавать произвольный диапазон строк.

Member Data Documentation

DbFileDomainAttr* DbTable::dmn_attrs
protected

Массив атрибутов столбцов.

DbBufStorage DbTable::dtable
protected

Буфер хранения данных таблицы.

DbTTDesc DbTable::fmt
protected

Формат таблицы.

unsigned DbTable::nFileDmnsCnt
protected

Количество доменов в файле (возможно, отличается от fmt.dmns->count())


The documentation for this class was generated from the following file: