Библиотека QT для работы со схемой базы данных.
1.0.1
|
Класс для работы со схемой базы данных. Подробнее...
#include <qdataschema.h>
Сигналы | |
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) |
Проверка существования таблицы на сервере БД. Подробнее... | |
QDataSchemaDriver * | driver () |
Возвращает текущий драйвер базы данных. | |
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 QDataSchemaDriver * | createDriver (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|
Последовательность работы с объектом:
Класс 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 |
||
) |
Создает и инициализирует новый объект.
Перекрестные ссылки createDriver() и isDriverAvailable().
|
protected |
Проверяет результат выполнения запроса.
Если была ошибка, она выводится на стандартный вывод.
Используется в databaseExport() и execList().
|
static |
Возвращает список доступных драйверов.
Используется в drivers() и QDataSchema().
|
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) пароль администратора сервера базы данных |
Перекрестные ссылки db(), driver() и execList().
bool QDataSchema::databaseDrop | ( | const QString & | dbadmuser, |
const QString & | dbadmpass | ||
) |
Удаляет базу данных с сервера.
Удаляется база данных с ранее установленным именем. Для удаления базы данных необходимо знать имя и пароль администратора сервера базы данных.
dbadmuser | (in) имя администратора сервера базы данных |
dbadmpass | (in) пароль администратора сервера базы данных |
Перекрестные ссылки db(), driver() и execList().
|
virtual |
Выгружает информацию из базы данных.
filename | (in) имя файла обмена |
Перекрестные ссылки checkSqlError(), dataDictionary(), db(), ddCount(), ddCountSub(), ddIndex(), ddIndexSub(), ddRecName(), ddRecord(), ddRecSection() и verifyStructure().
|
virtual |
Загружает информацию в базу данных.
filename | (in) имя файла обмена |
updateStruct | (in) true - надо обновлять структуру, если она отличается от существующей, false - возвращать код ошибки |
Перекрестные ссылки dataDictionary(), execList(), setDataDictionary(), updateStructure() и verifyStructure().
QStringList QDataSchema::dataDictionary | ( | ) |
Возвращает словарь описания данных.
Используется в databaseExport() и databaseImport().
QSqlDatabase * QDataSchema::db | ( | ) |
Используется в close(), databaseCreate(), databaseDrop(), databaseExport(), execList(), open(), setNameSpace(), table(), tableExists(), updateStructure() и verifyStructure().
|
protected |
Количество записей выбранного вида в словаре.
etype | (in) тип элемента словаря в виде "[T/D]" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Перекрестные ссылки ddRecType().
Используется в databaseExport(), ddIndex() и verifyStructure().
|
protected |
Количество подчиненных записей выбранного вида в словаре.
idx | (in) индекс главного элемента словаря, полученный вызовом функции ddIndex() |
etype | (in) тип элемента словаря в виде "[T/D]" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Перекрестные ссылки ddRecType().
Используется в databaseExport(), ddIndexSub() и verifyStructure().
|
protected |
Возвращает индекс элемента словаря.
etype | (in) тип элемента словаря в виде "[T/D]" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Перекрестные ссылки ddRecType().
Используется в databaseExport(), ddIndex() и verifyStructure().
|
protected |
Возвращает индекс элемента словаря.
etype | (in) тип элемента словаря в виде "[T/D]" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Перекрестные ссылки ddCount(), ddIndex(), ddRecName() и ddRecord().
|
protected |
Возвращает индекс подчиненного элемента словаря.
idx | (in) индекс главного элемента словаря, полученный вызовом функции ddIndex() |
etype | (in) тип подчиненного элемента словаря в виде "[F/I]" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Перекрестные ссылки ddRecType().
Используется в databaseExport(), ddIndexSub() и verifyStructure().
|
protected |
Возвращает индекс подчиненного элемента словаря.
idx | (in) индекс главного элемента словаря, полученный вызовом функции ddIndex() |
etype | (in) тип подчиненного элемента словаря в виде "[F/I]" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Перекрестные ссылки ddCountSub(), ddIndexSub(), ddRecName() и ddRecord().
|
protected |
Возвращает имя записи элемента словаря.
rec | (in) запись (строка) словаря |
Перекрестные ссылки ddRecSection().
Используется в databaseExport(), ddIndex(), ddIndexSub(), fieldTypeSql() и verifyStructure().
|
protected |
Возвращает запись словаря по индексу.
idx | (in) индекс записи словаря" |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
Используется в databaseExport(), ddIndex(), ddIndexSub() и verifyStructure().
|
protected |
Возвращает секцию записи элемента словаря.
rec | (in) запись (строка) словаря |
secnum | (in) номер секции, начиная с 0. Секции разделены символом "|" |
Используется в databaseExport(), ddRecName(), ddRecType(), fieldTypeSql() и verifyStructure().
|
protected |
Возвращает тип записи элемента словаря.
rec | (in) запись (строка) словаря |
Перекрестные ссылки ddRecSection().
Используется в ddCount(), ddCountSub(), ddIndex(), ddIndexSub() и verifyLogRecord().
|
static |
Возвращает список доступных драйверов.
Перекрестные ссылки createDriver().
Используется в isDriverAvailable().
int QDataSchema::execList | ( | const QStringList & | queryList, |
bool | inTransaction = false |
||
) |
Выполняет список последовательных запросов.
Перекрестные ссылки checkSqlError() и db().
Используется в createSystables(), databaseCreate(), databaseDrop(), databaseImport(), open() и updateStructure().
|
protected |
Возвращает описание записи поля словаря для активного сервера БД.
Перекрестные ссылки ddRecName(), ddRecSection() и driver().
Используется в createSystables() и verifyStructure().
|
static |
Проверка доступности драйвера по имени.
Перекрестные ссылки drivers().
Используется в QDataSchema().
|
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) - Порт соединения сервера базы данныхю. |
bool QDataSchema::open | ( | ) |
Открывает и инициализирует соединение с сервером базы данных.
Перекрестные ссылки db(), driver() и execList().
Используется в open().
void QDataSchema::setDataDictionary | ( | const QStringList & | dd_new | ) |
Устанавливает словарь описания данных.
Используется в 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) - Иям таблицы для проверки. |
Перекрестные ссылки db().
Используется в createSystables(), table() и verifyStructure().
int QDataSchema::updateStructure | ( | ) |
Обновляет структуру таблиц на сервере.
Обновление выполняется на основе информации, подготовленной при вызове verifyStructure(). Обновление структуры производится в транзакции ( если сервер базы данных поддерживает работу с транзакциями ).
Перекрестные ссылки createSystables(), db() и execList().
Используется в databaseImport().
QStringList QDataSchema::updateStructureQuery | ( | ) |
Возвращает список запросов для обновления БД.
Список запросов формируется при выполнении verifyStructure().
QStringList QDataSchema::verifyLog | ( | ) |
Возвращает список изменений в БД.
Список различий формируется при выполнении verifyStructure().
|
protected |
Регистрирует запись изменений в БД.
Вызывается при формировании списка различий при выполнении verifyStructure(). генерирует сигнал verifyMessage().
op | (in) операция: "+" - добавление, "-" - удаление "&" - изменение |
value | (in) новое значение измененяемого элемента словаря |
oldvalue | (in) старое значение измененяемого элемента словаря. Пустое для операций добавления и удаления. |
Перекрестные ссылки ddRecType().
Используется в verifyStructure().
int QDataSchema::verifyStructure | ( | ) |
Проверяет структуру текущей БД на соответствие описанной в метаданных.
Подготавливает информацию для последующего обновления.
Перекрестные ссылки db(), ddCount(), ddCountSub(), ddIndex(), ddIndexSub(), ddRecName(), ddRecord(), ddRecSection(), driver(), fieldTypeSql(), joinLists(), nameSpace(), tableExists() и verifyLogRecord().
Используется в databaseExport() и databaseImport().