Класс QDataSchema

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

#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 ()
 Закрывает соединение и освобождает ресурсы объекта.
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 ()
 
Возвращает:
Указатель на объект работы с сервером SQL.

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)
 Проверка существования таблицы на сервере БД.
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)
 Проверка доступности драйвера по имени.

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

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 *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 списка различий:

На основе этих 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) - Порт соединения сервера базы данныхю.
Возвращает:
true если нет ошибок или false в случае возникновения ошибки.

bool QDataSchema::open (  ) 

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

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

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

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

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

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

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

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

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

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

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) - Иям таблицы для проверки.
Возвращает:
true если таблица существует, false - не существует.

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 (  ) 

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

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

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

int QDataSchema::updateStructure (  ) 

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

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

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

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) запись (строка) словаря
Возвращает:
Тип записи элемента словаря в виде [D/T/F/I/#].

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))
 *

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


Объявления и описания членов классов находятся в файлах:
Документация по Библиотека QT для работы со схемой базы данных.. Последние изменения: Sun Aug 26 05:37:08 2007. Создано системой  doxygen 1.5.1