Библиотека QT для работы со схемой базы данных.  1.0.1
Сигналы | Открытые члены | Открытые статические члены | Защищенные члены | Полный список членов класса
Класс QDataSchema

Класс для работы со схемой базы данных. Подробнее...

#include <qdataschema.h>

Граф наследования:QDataSchema:

Сигналы

void verifyMessage (QString op, QString value, QString oldvalue)
 

Открытые члены

 QDataSchema (const QString ctype, const char *objname=0, QObject *owner=0)
 Создает и инициализирует новый объект. Подробнее...
 
 ~QDataSchema ()
 Закрывает соединение и освобождает ресурсы объекта.
 
QString objectName () const
 
void setObjectName (const QString &newname)
 
bool open (const QString &dbname, const QString &dbuser="", const QString &dbpass="", const QString &dbhost="localhost", int dbport=0)
 Открывает и инициализирует соединение с сервером базы данных. Подробнее...
 
bool open ()
 Открывает и инициализирует соединение с сервером базы данных. Подробнее...
 
void close ()
 Закрывает соединение с сервером базоы данных.
 
QSqlDatabase * db ()
 
bool databaseCreate (const QString &dbadmuser, const QString &dbadmpass)
 Создает новую базу данных. Подробнее...
 
bool databaseDrop (const QString &dbadmuser, const QString &dbadmpass)
 Удаляет базу данных с сервера. Подробнее...
 
int execList (const QStringList &query, bool inTransaction=false)
 Выполняет список последовательных запросов. Подробнее...
 
QDS_SQLTable * table (const QString &name=QString::null)
 Создает объект QSqlCursor для таблицы базы данных. Подробнее...
 
QString tableName (const QString &name)
 
QString tableNameStripPrefix (const QString &name)
 
QString nameSpace () const
 Возвращает пространство имен таблиц базы данных.
 
void setNameSpace (const QString &namesp)
 Устанавливает пространство имен таблиц базы данных. Подробнее...
 
bool tableExists (const QString &name)
 Проверка существования таблицы на сервере БД. Подробнее...
 
QDataSchemaDriverdriver ()
 Возвращает текущий драйвер базы данных.
 
void setDataDictionary (const QStringList &dd_new)
 Устанавливает словарь описания данных. Подробнее...
 
QStringList dataDictionary ()
 Возвращает словарь описания данных. Подробнее...
 
QStringList updateStructureQuery ()
 Возвращает список запросов для обновления БД. Подробнее...
 
QStringList verifyLog ()
 Возвращает список изменений в БД. Подробнее...
 
int verifyStructure ()
 Проверяет структуру текущей БД на соответствие описанной в метаданных. Подробнее...
 
int updateStructure ()
 Обновляет структуру таблиц на сервере. Подробнее...
 
virtual int databaseExport (const QString &filename)
 Выгружает информацию из базы данных. Подробнее...
 
virtual int databaseImport (const QString &filename, bool updateStruct=false)
 Загружает информацию в базу данных. Подробнее...
 

Открытые статические члены

static QStringList drivers ()
 Возвращает список доступных драйверов. Подробнее...
 
static bool isDriverAvailable (const QString &name)
 Проверка доступности драйвера по имени. Подробнее...
 
static QDataSchemaDrivercreateDriver (const QString ctype)
 Возвращает список доступных драйверов. Подробнее...
 

Защищенные члены

void verifyLogRecord (QString op, QString value, QString oldvalue="")
 Регистрирует запись изменений в БД. Подробнее...
 
QString ddRecord (int idx, bool d_sql=false)
 Возвращает запись словаря по индексу. Подробнее...
 
int ddCount (const QString &etype, bool d_sql=false)
 Количество записей выбранного вида в словаре. Подробнее...
 
int ddIndex (const QString &etype, int num, bool d_sql=false)
 Возвращает индекс элемента словаря. Подробнее...
 
int ddIndex (const QString &etype, const QString &name, bool d_sql=false)
 Возвращает индекс элемента словаря. Подробнее...
 
int ddCountSub (int idx, const QString &etype, bool d_sql=false)
 Количество подчиненных записей выбранного вида в словаре. Подробнее...
 
int ddIndexSub (int idx, const QString &etype, int num, bool d_sql=false)
 Возвращает индекс подчиненного элемента словаря. Подробнее...
 
int ddIndexSub (int idx, const QString &etype, const QString &name, bool d_sql=false)
 Возвращает индекс подчиненного элемента словаря. Подробнее...
 
QString ddRecSection (const QString &rec, int secnum)
 Возвращает секцию записи элемента словаря. Подробнее...
 
QString ddRecType (const QString &rec)
 Возвращает тип записи элемента словаря. Подробнее...
 
QString ddRecName (const QString &rec)
 Возвращает имя записи элемента словаря. Подробнее...
 
void joinLists (QStringList &list, const QStringList &add)
 Добавляет один список строк к другому. Подробнее...
 
QStringList splitQString (const QString &div, const QString &str)
 
QString lowerQString (const QString &str)
 
QString trimmedQString (const QString &str)
 
int checkSqlError (QSqlQuery &query)
 Проверяет результат выполнения запроса. Подробнее...
 
QString fieldTypeSql (const QString &tdef)
 Возвращает описание записи поля словаря для активного сервера БД. Подробнее...
 
virtual int createSystables ()
 Создание системных таблиц. Подробнее...
 

Подробное описание

Класс для работы со схемой базы данных.

Используется для поддержки синхронной структуры данных приложения и сервера базы данных. Структура данных приложения описывается в серверо-независимом контексте. В зависимости от конкретного сервера базы данных выбирается способ обновления структуры в том случае, если структура информации в приложении изменилась ( например, обновлена версия приложения ) и нам требуется обновить структуру базы данных, сохранив ранее введенную информацию.

в дополнение в таблицам, описанным в приложении, QDataSchema создает дополнительную таблицу словаря данных с именем dictionaryTableName() ( по умолчанию "dd" ) в которой хранится служебная информация о текущей структуре базы данных для максимально корректного обновления структуры.

Словарь создается автоматически со следующими параметрами:

  T=dd|Data dictionary|S
  F=id|Line number|I|0|0|
  F=value|Data value|C|250|0|

Последовательность работы с объектом:

QString dbname = "qds",
dbuser = "",
dbpasswd = "",
dbserver = "localhost";
int dbport = 0;
QStringList dd;
qds = new QDataSchema( QDataSchema::CT_INTERNAL );
// Application data schema description
dd<<"D=QDS|Description|UTF-8|UID";
dd<<"T=T1|Description|U";
dd<<"F=F1|Description|I|0|0|PSN";
dd<<"F=F2|Description|D|0|0|";
dd<<"F=F3|Description|C|200|0|";
dd<<"F=F3|Description|S|200|0|";
dd<<"F=F4|Description|N|10|2|";
dd<<"F=F5|Description|I|0|0|";
dd<<"F=F2|Description|L|0|0|";
dd<<"I=I1|Description|F2,F3|";
dd<<"T=T2|Description|U";
dd<<"F=F1|Description|I|0|0|PSN";
dd<<"F=F2|Description|C|10|0|";
qds->setDataDictionary( dd );
if ( qds->init( dbname,dbuser,dbpasswd,dbserver,dbport ) )
{
if ( !qds->verifyStructure() ){
// need to update
printf("verify log:\n%s\n", ( const char * ) qds->verifyLog().join("\n") );
printf("update structure query:\n%s\n", ( const char * ) qds->updateStructureQuery().join("\n") );
}
} else printf("ERROR INIT DATABASE\n");

Класс QDataSchema нацелен на автоматическую поддержку актуальной структуры таблиц базы данных на SQL сервере при изменении в структуре базы данных приложения, использующего QDataSchema. QDataSchema использует описание структуры таблиц.

Существуют два описания структуры таблиц: 1) Структура таблиц на сервере базы данных 2) структура таблиц, загруженная приложением при инициализации класса.

Метод verifyStructure() проверяет соответствие этих двух структур и в случае расхождения составляет 3 списка различий:

На основе этих 3-х списков производится модификация структуры таблиц на сервере БД, в результате которой структуры синхронизируются.

структура таблиц представляет список строк следующего формата:

* # Commentaries in (UTF-8)
* # --- Data dictionary
* # Name|Description|Charset|UID
* D=DATASCHEMA|Description of the data schema|UTF-8|XXXCCCWWW
* # --- Table
* # Name | Descr | Type[A/S/U]| DBName|Flags
* T=TableName|Table description|A|DBTable|
* # --- Fields
* # Name| Description|Type [D/C/N/I]|Length|Precision|
* F=CURDATE|Current date|D|8|0|
* #--- Indexes
* # Name| Description |Unique [0/1]|Index fields|DBName
* I=IDD|Index of ID|0|ID,DATE,DESCR(UPPER)|IDD
* # END
* 

Конструктор(ы)

QDataSchema::QDataSchema ( const QString  ct,
const char *  objname = 0,
QObject *  owner = 0 
)

Создает и инициализирует новый объект.

  • ct (in) Тип соединения с сервером данных.
  • objname (in) Имя объекта. Используется как имя соединения QSqldataBase.

Перекрестные ссылки createDriver() и isDriverAvailable().

Методы

int QDataSchema::checkSqlError ( QSqlQuery &  query)
protected

Проверяет результат выполнения запроса.

Если была ошибка, она выводится на стандартный вывод.

  • query (in) запрос, выполненный ранее.
    Возвращает
    0 - без ошибок, 1 - есть ошибка.

Используется в databaseExport() и execList().

QDataSchemaDriver * QDataSchema::createDriver ( const QString  ctype)
static

Возвращает список доступных драйверов.

Возвращает
Список драйверов

Используется в drivers() и QDataSchema().

int QDataSchema::createSystables ( )
protectedvirtual

Создание системных таблиц.

Создает таблицу словаря со структурой

* dd_name (id int, value char(250))
*

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

Перекрестные ссылки driver(), execList(), fieldTypeSql() и tableExists().

Используется в updateStructure().

bool QDataSchema::databaseCreate ( const QString &  dbadmuser,
const QString &  dbadmpass 
)

Создает новую базу данных.

Создается новая база данных с ранее установленным именем. Для создания новой базы данных необходимо знать имя и пароль администратора сервера базы данных.

Аргументы
dbadmuser(in) имя администратора сервера базы данных
dbadmpass(in) пароль администратора сервера базы данных
Возвращает
true - если операция выполнена успешно, false - не успешно.

Перекрестные ссылки db(), driver() и execList().

bool QDataSchema::databaseDrop ( const QString &  dbadmuser,
const QString &  dbadmpass 
)

Удаляет базу данных с сервера.

Удаляется база данных с ранее установленным именем. Для удаления базы данных необходимо знать имя и пароль администратора сервера базы данных.

Аргументы
dbadmuser(in) имя администратора сервера базы данных
dbadmpass(in) пароль администратора сервера базы данных
Возвращает
true - если операция выполнена успешно, false - не успешно.

Перекрестные ссылки db(), driver() и execList().

int QDataSchema::databaseExport ( const QString &  filename)
virtual

Выгружает информацию из базы данных.

Аргументы
filename(in) имя файла обмена

Перекрестные ссылки checkSqlError(), dataDictionary(), db(), ddCount(), ddCountSub(), ddIndex(), ddIndexSub(), ddRecName(), ddRecord(), ddRecSection() и verifyStructure().

int QDataSchema::databaseImport ( const QString &  filename,
bool  updateStruct = false 
)
virtual

Загружает информацию в базу данных.

Аргументы
filename(in) имя файла обмена
updateStruct(in) true - надо обновлять структуру, если она отличается от существующей, false - возвращать код ошибки

Перекрестные ссылки dataDictionary(), execList(), setDataDictionary(), updateStructure() и verifyStructure().

QStringList QDataSchema::dataDictionary ( )

Возвращает словарь описания данных.

Возвращает
Список описания структуры данных.

Используется в databaseExport() и databaseImport().

QSqlDatabase * QDataSchema::db ( )
Возвращает
Указатель на объект работы с сервером SQL.

Используется в close(), databaseCreate(), databaseDrop(), databaseExport(), execList(), open(), setNameSpace(), table(), tableExists(), updateStructure() и verifyStructure().

int QDataSchema::ddCount ( const QString &  etype,
bool  d_sql = false 
)
protected

Количество записей выбранного вида в словаре.

Аргументы
etype(in) тип элемента словаря в виде "[T/D]"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
количество записей выбранного типа в словаре.

Перекрестные ссылки ddRecType().

Используется в databaseExport(), ddIndex() и verifyStructure().

int QDataSchema::ddCountSub ( int  idx,
const QString &  etype,
bool  d_sql = false 
)
protected

Количество подчиненных записей выбранного вида в словаре.

Аргументы
idx(in) индекс главного элемента словаря, полученный вызовом функции ddIndex()
etype(in) тип элемента словаря в виде "[T/D]"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
Количество подчиненных записей выбранного вида в словаре..

Перекрестные ссылки ddRecType().

Используется в databaseExport(), ddIndexSub() и verifyStructure().

int QDataSchema::ddIndex ( const QString &  etype,
int  num,
bool  d_sql = false 
)
protected

Возвращает индекс элемента словаря.

Аргументы
etype(in) тип элемента словаря в виде "[T/D]"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
Индекс строки элемента с словаре.

Перекрестные ссылки ddRecType().

Используется в databaseExport(), ddIndex() и verifyStructure().

int QDataSchema::ddIndex ( const QString &  etype,
const QString &  name,
bool  d_sql = false 
)
protected

Возвращает индекс элемента словаря.

Аргументы
etype(in) тип элемента словаря в виде "[T/D]"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
Индекс строки элемента с словаре.

Перекрестные ссылки ddCount(), ddIndex(), ddRecName() и ddRecord().

int QDataSchema::ddIndexSub ( int  idx,
const QString &  etype,
int  num,
bool  d_sql = false 
)
protected

Возвращает индекс подчиненного элемента словаря.

Аргументы
idx(in) индекс главного элемента словаря, полученный вызовом функции ddIndex()
etype(in) тип подчиненного элемента словаря в виде "[F/I]"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
Индекс строки подчиненного элемента с словаре.

Перекрестные ссылки ddRecType().

Используется в databaseExport(), ddIndexSub() и verifyStructure().

int QDataSchema::ddIndexSub ( int  idx,
const QString &  etype,
const QString &  name,
bool  d_sql = false 
)
protected

Возвращает индекс подчиненного элемента словаря.

Аргументы
idx(in) индекс главного элемента словаря, полученный вызовом функции ddIndex()
etype(in) тип подчиненного элемента словаря в виде "[F/I]"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
Индекс строки подчиненного элемента с словаре.

Перекрестные ссылки ddCountSub(), ddIndexSub(), ddRecName() и ddRecord().

QString QDataSchema::ddRecName ( const QString &  rec)
protected

Возвращает имя записи элемента словаря.

Аргументы
rec(in) запись (строка) словаря
Возвращает
Имя записи элемента словаря.

Перекрестные ссылки ddRecSection().

Используется в databaseExport(), ddIndex(), ddIndexSub(), fieldTypeSql() и verifyStructure().

QString QDataSchema::ddRecord ( int  idx,
bool  d_sql = false 
)
protected

Возвращает запись словаря по индексу.

Аргументы
idx(in) индекс записи словаря"
s_sql(in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных
Возвращает
запись словаря.

Используется в databaseExport(), ddIndex(), ddIndexSub() и verifyStructure().

QString QDataSchema::ddRecSection ( const QString &  rec,
int  secnum 
)
protected

Возвращает секцию записи элемента словаря.

Аргументы
rec(in) запись (строка) словаря
secnum(in) номер секции, начиная с 0. Секции разделены символом "|"
Возвращает
Строка секции без начальных и конейных пробелов.

Используется в databaseExport(), ddRecName(), ddRecType(), fieldTypeSql() и verifyStructure().

QString QDataSchema::ddRecType ( const QString &  rec)
protected

Возвращает тип записи элемента словаря.

Аргументы
rec(in) запись (строка) словаря
Возвращает
Тип записи элемента словаря в виде [D/T/F/I/#].

Перекрестные ссылки ddRecSection().

Используется в ddCount(), ddCountSub(), ddIndex(), ddIndexSub() и verifyLogRecord().

QStringList QDataSchema::drivers ( )
static

Возвращает список доступных драйверов.

Возвращает
Список драйверов

Перекрестные ссылки createDriver().

Используется в isDriverAvailable().

int QDataSchema::execList ( const QStringList &  queryList,
bool  inTransaction = false 
)

Выполняет список последовательных запросов.

  • queryList (in) список строк запросов
  • inTransaction (in) выполнять в транзакции. Если true - выполняет список запросов в транзакции с автоматическим откатом в случае ошибки.
    Возвращает
    0 - выполнено без ошибок, >0 - код ошибки Sql.

Перекрестные ссылки checkSqlError() и db().

Используется в createSystables(), databaseCreate(), databaseDrop(), databaseImport(), open() и updateStructure().

QString QDataSchema::fieldTypeSql ( const QString &  tdef)
protected

Возвращает описание записи поля словаря для активного сервера БД.

  • tdef (in) Строка описание поля в терминах QDataSchema.
    Возвращает
    Описание типа поля в терминах активного сервера данных.

Перекрестные ссылки ddRecName(), ddRecSection() и driver().

Используется в createSystables() и verifyStructure().

bool QDataSchema::isDriverAvailable ( const QString &  name)
static

Проверка доступности драйвера по имени.

  • name (in) имя драйвера
    Возвращает
    true - драйвер доступен, false - не доступен.

Перекрестные ссылки drivers().

Используется в QDataSchema().

void QDataSchema::joinLists ( QStringList &  list,
const QStringList &  add 
)
protected

Добавляет один список строк к другому.

Аргументы
list(in) список, в который добавляются строки
add(in) список для добавления

Используется в verifyStructure().

bool QDataSchema::open ( const QString &  dbname,
const QString &  dbuser = "",
const QString &  dbpass = "",
const QString &  dbhost = "localhost",
int  dbport = 0 
)

Открывает и инициализирует соединение с сервером базы данных.

Аргументы
dbname(in) - Имя базы данных.
dbuser(in) - Имя пользователя сервера базы данныхю
dbpass(in) - Пароль пользователя сервера базы данныхю.
dbhost(in) - Адрес хоста сервера базы данныхю.
dbport(in) - Порт соединения сервера базы данныхю.
Возвращает
true если нет ошибок или false в случае возникновения ошибки.

Перекрестные ссылки db(), driver() и open().

bool QDataSchema::open ( )

Открывает и инициализирует соединение с сервером базы данных.

Возвращает
true если нет ошибок или false в случае возникновения ошибки.

Перекрестные ссылки db(), driver() и execList().

Используется в open().

void QDataSchema::setDataDictionary ( const QStringList &  dd_new)

Устанавливает словарь описания данных.

  • dd_new (in) Список описания структуры данных.

Используется в databaseImport().

void QDataSchema::setNameSpace ( const QString &  namesp)

Устанавливает пространство имен таблиц базы данных.

Операция выполняется только над закрытой базой данных.

Перекрестные ссылки db().

QDS_SQLTable * QDataSchema::table ( const QString &  name = QString::null)

Создает объект QSqlCursor для таблицы базы данных.

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

Аргументы
name(in) - имя таблицы в базе данных
Возвращает
вновь созданный объект.

Перекрестные ссылки db() и tableExists().

bool QDataSchema::tableExists ( const QString &  name)

Проверка существования таблицы на сервере БД.

Аргументы
name(in) - Иям таблицы для проверки.
Возвращает
true если таблица существует, false - не существует.

Перекрестные ссылки db().

Используется в createSystables(), table() и verifyStructure().

int QDataSchema::updateStructure ( )

Обновляет структуру таблиц на сервере.

Обновление выполняется на основе информации, подготовленной при вызове verifyStructure(). Обновление структуры производится в транзакции ( если сервер базы данных поддерживает работу с транзакциями ).

Возвращает
0 - нет ошибок, иначе - код ощибки.

Перекрестные ссылки createSystables(), db() и execList().

Используется в databaseImport().

QStringList QDataSchema::updateStructureQuery ( )

Возвращает список запросов для обновления БД.

Список запросов формируется при выполнении verifyStructure().

QStringList QDataSchema::verifyLog ( )

Возвращает список изменений в БД.

Список различий формируется при выполнении verifyStructure().

Возвращает
Список различий.
void QDataSchema::verifyLogRecord ( QString  op,
QString  value,
QString  oldvalue = "" 
)
protected

Регистрирует запись изменений в БД.

Вызывается при формировании списка различий при выполнении verifyStructure(). генерирует сигнал verifyMessage().

Аргументы
op(in) операция: "+" - добавление, "-" - удаление "&" - изменение
value(in) новое значение измененяемого элемента словаря
oldvalue(in) старое значение измененяемого элемента словаря. Пустое для операций добавления и удаления.

Перекрестные ссылки ddRecType().

Используется в verifyStructure().

int QDataSchema::verifyStructure ( )

Проверяет структуру текущей БД на соответствие описанной в метаданных.

Подготавливает информацию для последующего обновления.

Возвращает
0 - обновление не требуется, 1 - обновление требуется.

Перекрестные ссылки db(), ddCount(), ddCountSub(), ddIndex(), ddIndexSub(), ddRecName(), ddRecord(), ddRecSection(), driver(), fieldTypeSql(), joinLists(), nameSpace(), tableExists() и verifyLogRecord().

Используется в databaseExport() и databaseImport().


Объявления и описания членов классов находятся в файлах: