#include <qdataschema.h>
Открытые типы | |
enum | ConnectionType { CT_INTERNAL, CT_MYSQL, CT_POSTGRESQL } |
Сигналы | |
void | verifyMessage (QString op, QString value, QString oldvalue) |
Открытые члены | |
QDataSchema (ConnectionType ctype, const char *objname=0) | |
Создает и инициализирует новый объект. | |
~QDataSchema () | |
Закрывает соединение и освобождает ресурсы объекта. | |
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) |
Выполняет список последовательных запросов. | |
QSqlCursor * | 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) |
Проверка доступности драйвера по имени. | |
Защищенные члены | |
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) |
Добавляет один список строк к другому. | |
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 *qds; 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=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 * ) adb.verifyLog().join("\n") ); printf("update structure query:\n%s\n", ( const char * ) adb.updateStructureQuery().join("\n") ); qds->updateStructure(); } } else printf("ERROR INIT DATABASE\n");
Класс QDataSchema нацелен на автоматическую поддержку актуальной структуры таблиц базы данных на SQL сервере при изменении в структуре базы данных приложения, использующего QDataSchema. QDataSchema использует описание структуры таблиц.
Существуют два описания структуры таблиц: 1) Структура таблиц на сервере базы данных 2) структура таблиц, загруженная приложением при инициализации класса.
Метод verifyStructure() проверяет соответствие этих двух структур и в случае расхождения составляет 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 | ( | ConnectionType | ct, | |
const char * | objname = 0 | |||
) |
Создает и инициализирует новый объект.
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 | ( | ) |
Открывает и инициализирует соединение с сервером базы данных.
bool QDataSchema::databaseCreate | ( | const QString & | dbadmuser, | |
const QString & | dbadmpass | |||
) |
Создает новую базу данных.
Создается новая база данных с ранее установленным именем. Для создания новой базы данных необходимо знать имя и пароль администратора сервера базы данных.
dbadmuser | (in) имя администратора сервера базы данных | |
dbadmpass | (in) пароль администратора сервера базы данных |
bool QDataSchema::databaseDrop | ( | const QString & | dbadmuser, | |
const QString & | dbadmpass | |||
) |
Удаляет базу данных с сервера.
Удаляется база данных с ранее установленным именем. Для удаления базы данных необходимо знать имя и пароль администратора сервера базы данных.
dbadmuser | (in) имя администратора сервера базы данных | |
dbadmpass | (in) пароль администратора сервера базы данных |
int QDataSchema::execList | ( | const QStringList & | queryList, | |
bool | inTransaction = false | |||
) |
Выполняет список последовательных запросов.
QSqlCursor * QDataSchema::table | ( | const QString & | name = QString::null |
) |
Создает объект QSqlCursor для таблицы базы данных.
Возвращаемый объект может быть использован для просмотра и редактирования таблицы в текущей базе данных.
name | (in) - имя таблицы в базе данных |
void QDataSchema::setNameSpace | ( | const QString & | namesp | ) |
Устанавливает пространство имен таблиц базы данных.
Операция выполняется только над закрытой базой данных.
bool QDataSchema::tableExists | ( | const QString & | name | ) |
Проверка существования таблицы на сервере БД.
name | (in) - Иям таблицы для проверки. |
QStringList QDataSchema::drivers | ( | ) | [static] |
Возвращает список доступных драйверов.
bool QDataSchema::isDriverAvailable | ( | const QString & | name | ) | [static] |
Проверка доступности драйвера по имени.
void QDataSchema::setDataDictionary | ( | const QStringList & | dd_new | ) |
Устанавливает словарь описания данных.
QStringList QDataSchema::dataDictionary | ( | ) |
Возвращает словарь описания данных.
QStringList QDataSchema::updateStructureQuery | ( | ) |
Возвращает список запросов для обновления БД.
Список запросов формируется при выполнении verifyStructure().
QStringList QDataSchema::verifyLog | ( | ) |
Возвращает список изменений в БД.
Список различий формируется при выполнении verifyStructure().
int QDataSchema::verifyStructure | ( | ) |
Проверяет структуру текущей БД на соответствие описанной в метаданных.
Подготавливает информацию для последующего обновления.
int QDataSchema::updateStructure | ( | ) |
Обновляет структуру таблиц на сервере.
Обновление выполняется на основе информации, подготовленной при вызове verifyStructure(). Обновление структуры производится в транзакции ( если сервер базы данных поддерживает работу с транзакциями ).
int QDataSchema::databaseExport | ( | const QString & | filename | ) | [virtual] |
Выгружает информацию из базы данных.
filename | (in) имя файла обмена |
int QDataSchema::databaseImport | ( | const QString & | filename, | |
bool | updateStruct = false | |||
) | [virtual] |
Загружает информацию в базу данных.
filename | (in) имя файла обмена | |
updateStruct | (in) true - надо обновлять структуру, если она отличается от существующей, false - возвращать код ошибки |
void QDataSchema::verifyLogRecord | ( | QString | op, | |
QString | value, | |||
QString | oldvalue = "" | |||
) | [protected] |
Регистрирует запись изменений в БД.
Вызывается при формировании списка различий при выполнении verifyStructure(). генерирует сигнал verifyMessage().
op | (in) операция: "+" - добавление, "-" - удаление "&" - изменение | |
value | (in) новое значение измененяемого элемента словаря | |
oldvalue | (in) старое значение измененяемого элемента словаря. Пустое для операций добавления и удаления. |
QString QDataSchema::ddRecord | ( | int | idx, | |
bool | d_sql = false | |||
) | [protected] |
Возвращает запись словаря по индексу.
idx | (in) индекс записи словаря" | |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
int QDataSchema::ddCount | ( | const QString & | etype, | |
bool | d_sql = false | |||
) | [protected] |
Количество записей выбранного вида в словаре.
etype | (in) тип элемента словаря в виде "[T/D]" | |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
int QDataSchema::ddIndex | ( | const QString & | etype, | |
int | num, | |||
bool | d_sql = false | |||
) | [protected] |
Возвращает индекс элемента словаря.
etype | (in) тип элемента словаря в виде "[T/D]" | |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
int QDataSchema::ddIndex | ( | const QString & | etype, | |
const QString & | name, | |||
bool | d_sql = false | |||
) | [protected] |
Возвращает индекс элемента словаря.
etype | (in) тип элемента словаря в виде "[T/D]" | |
s_sql | (in) используемый словарь false - пользовательский словарь (по умолчанию) true - словарь, хранимый в базе данных |
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 - словарь, хранимый в базе данных |
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 - словарь, хранимый в базе данных |
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 - словарь, хранимый в базе данных |
QString QDataSchema::ddRecSection | ( | const QString & | rec, | |
int | secnum | |||
) | [protected] |
Возвращает секцию записи элемента словаря.
rec | (in) запись (строка) словаря | |
secnum | (in) номер секции, начиная с 0. Секции разделены символом "|" |
QString QDataSchema::ddRecType | ( | const QString & | rec | ) | [protected] |
Возвращает тип записи элемента словаря.
rec | (in) запись (строка) словаря |
QString QDataSchema::ddRecName | ( | const QString & | rec | ) | [protected] |
Возвращает имя записи элемента словаря.
rec | (in) запись (строка) словаря |
void QDataSchema::joinLists | ( | QStringList & | list, | |
const QStringList & | add | |||
) | [protected] |
Добавляет один список строк к другому.
list | (in) список, в который добавляются строки | |
add | (in) список для добавления |
int QDataSchema::checkSqlError | ( | QSqlQuery & | query | ) | [protected] |
Проверяет результат выполнения запроса.
Если была ошибка, она выводится на стандартный вывод.
QString QDataSchema::fieldTypeSql | ( | const QString & | tdef | ) | [protected] |
Возвращает описание записи поля словаря для активного сервера БД.
int QDataSchema::createSystables | ( | ) | [protected, virtual] |
Создание системных таблиц.
Создает таблицу словаря со структурой
* dd_name (id int, value char(250)) *
для хранения дополнительной информации о типах полей и индексов.