Russian Qt Forum
Ноябрь 24, 2024, 09:32 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QsT SQL Tools 0.5.x release  (Прочитано 4621 раз)
GraninAS
Гость
« : Февраль 08, 2011, 04:59 »

Уважаемые друзья!

Приближается к концу работа над 0.5-й версией моей ORM-библиотеки, QsT SQL Tools. Многие помнят, как я пиарил прошлые версии в этой теме. Позвольте, я расскажу, что изменилось. После релиза 0.4-й версии я работаю в нескольких направлениях:
- внутренняя реорганизация библиотеки;
- улучшение интеграции QST и подсистемы Qt's Interview;
- упрощение интерфейсов, приведение их к логичному виду;
- другая интеграция с интерфейсной частью Qt;
- отладка и рефакторинг;
- обновление текущей документации и перевод ее на английский язык;
- небольшие доработки в поддержке SQL.

На данный момент последней версией является QST 0.5.9 pre-alpha. Из этого статуса я ее выпущу, когда буду уверен, что больше не будет никаких существенных изменений, влияющих на совместимость между подверсиями.

Так же я выложил проект-пример, QTelecom - биллинговую программу, которую мы пишем с напарником для своей организации. Прошу заметить, программа находится в самом начале, выкладывается исключительно для демонстрации, кое-что там урезано, многое не сделано, и демонстрирует она не все аспекты QST. По мере необходимости проект-пример буду обновлять.



Итак, что добавилось и в каком оно состоянии?

* Динамические фильтры, alpha.
Описание. Фильтры задаются в коде, декларативно, привязываются к пустым QWidget'ам на форме и создаются в run-time. Возможны вертикальные и горизонтальные фильтры. Поддерживаемые типы данных: текст (через QLineEdit), выпадающий список (через QComboBox+класс-хэндлер), дата (через QDateEdit). Для текстового поля возможен как поиск подстроки, так и поиск всего введенного слова. Фильтры могут включаться и выключаться индивидуально с помощью QCheckBox. Между виджетами фильтров передача фокуса настроена так, чтобы было удобно. Фильтры можно скрывать и отображать, привязав соответствующие кнопки.
Что в этом хорошего? Не нужно руками дизайнить и располагать на форме элементы фильтров, настраивать реакцию на их изменение. Все будет сделано автоматически и в едином стиле.
Чего еще не хватает? Не хватает поддержки разных типов, как-то: дата и время, число, дробное число, булевый тип и т.д. Еще планируется сделать выпадающий список, из которого можно было бы выбрать оператор сравнения. Так же в планах много чего еще, поэтому aplha.
Примеры.
Горизонтальные фильтры
Вертикальные фильтры

* Функциональный автокомплитер, beta
Описание. Является надстройкой над QCompleter. Позволяет выполнять автозавершение в нескольких режимах: трех стандартных без обращения к БД (PopupCompletion, UnfilteredPopupCompletion, InlineCompletion) и три расширенных, с обращением к БД: PrefixDBQueryingCompletion, InfixDBQueryingCompletion, PostfixDBQueryingCompletion. Позволяет установить минимальное количество символов для автокомплита, таймаут срабатывания, имя поля в SQL-запросе, которое будет использовано для автокомплита. Поддерживается QComboBox и QLineEdit. Есть сигналы и слоты для привязки к другим объектам.
Что в этом хорошего? Много чего, QstCompleter расширяет возможности стандартного QCompleter и даже упрощает его использование.
Чего еще не хватает? Нужна поддержка разных типов, возможно, какие-то другие улучшения.

* Настройка представлений (QTableView, QTreeView, QListView), beta.
Описание. Одна из отличительных черт QST - это интеграция с подсистемой Interview. Задавая описатели для запросов SQL, можно было указать отображаемость, заголовок и ширину колонки. В версии 0.5 эти параметры теперь можно изменять с помощью вызова функций в run-time.
Что в этом хорошего? Открываются такие возможности, как сохранение параметров каждого пользователя, автонастройка представлений из файла настроек, убирается рутиная работа.
Чего еще не хватает? При изменении ширины столбца у таблицы, новая ширина пока не сохраняется. Если перезагрузить класс-хэндлер, вернется прежняя ширина. Это будет исправлено в ближайших версиях.

* Раздельная сортировка данных внутри представлений, beta
Описание. В QST к одному классу-хэндлеру и одной модели можно привязать сколько угодно разных представлений. При этом для каждого из них можно разрешить или запретить сортировку, не влияющую на другие представления. Данные полей так же извлекаются раздельно.

* Заменяемые компоновщики SQL-запросов, beta
Описание. Для разных диалектов SQL можно задать свой компоновщик и использовать его для генерации SQL-запросов. По умолчанию в версии QST 0.5 генерируется диалект PostgreSQL.
Примечание. Поддержка самого SQL-языка пока на низком уровне. В данной версии я делал упор на расширение, а не углубление применимости библиотеки. Наработки кое-какие есть, и в следующих версиях QST будут значительные изменения в генерации запросов.



Пожалуй, это главные изменения в библиотеке, если не считать масштабных рефакторингов и многих новых функций внутри старых классов. Буду рад любому отзыву.
« Последнее редактирование: Март 29, 2011, 05:11 от GraninAS » Записан
GraninAS
Гость
« Ответ #1 : Март 01, 2011, 13:52 »

Добрый день всем, кто читает этот топик!

Я выпустил QST 0.5.9.1 alpha. Это значит, что теперь я буду работать над багами и документацией - вплоть до релизной версии.

Главные изменения:
* Новая древовидная модель.
* Обновлена русская и английская документация.
* Добавлена возможность выполнять пользовательские запросы.
* Проведен рефакторинг нескольких классов. Это частично повлияло на совместимость подверсий.
* Исправлены некотоыре баги.

Я переписал древовидную модель QstTreeQueryModel. Она умеет извлекать данные, строить дерево. Дерево настраивается следующими функциями:

Код:
virtual Common::TreeItem::ItemDataMap _columnTitles(const QSqlRecord &record) const;
virtual Common::TreeItem::ItemDataMap _itemDataMap(const QSqlRecord &record) const;
virtual Qt::ItemFlags _itemFlags(const QSqlRecord &record) const;

С помощью _itemDataMap(), например, можно сделать иконки для каждой строчки, зависящие от значения какого-то поля.

Чтобы корректно отобразить дерево, модели требуются три поля: id, parent_id, level.

Здесь level - это целое число, показывающее, на каком уровне дерева находится узел. Данные могут быть не сортированы.
« Последнее редактирование: Март 01, 2011, 13:58 от GraninAS » Записан
GraninAS
Гость
« Ответ #2 : Март 11, 2011, 08:27 »

Сообщаю, что выложил обновленную версию QTelecom. Теперь там можно увидеть несколько новых функций, пришедших с QST 0.5.9.3 (alpha).

Древовидная модель теперь поддерживает динамическую подгрузку данных по раскрытию элемента (tree model lazy load on item expand). Кроме того, для нее не важно, какое значение у внешнего ключа на родительскую запись означает корневой элемент. Значение может быть NULL, пустой строкой или любым другим значением, лишь бы поле с уровнем элемента в дереве было минимальным.

Кроме того, была улучшена работа и семантика QstCompleter. Пользоваться им стало безопаснее и удобнее.

Мне, если честно, не терпится вплотную перейти к разработке версии 0.6. Для неё я уже создал систему, основанную на шаблоне "Builder" по построению сложных древовидных SQL-запросов, в которых могли бы использоваться любые допустимые конструкции. Для нового генератора запросов, я улучшил... ммм... язык DFD (Declarative Fields Descriptor), который используется для описания запросов с помощью полей. Он приобрел дополнительную силу. Впрочем, мне уже давно видна его ограниченность, и на основе новой системы генерации запросов, возможно, удастся сделать язык, близкий по семантике к самому SQL. Ну то есть, что-то вроде этого: select("fio").from("person").where("age = ", 50). И у этого подхода в рамках языка С++ есть очень много ограничений, с которыми справиться, бывает, совсем не просто.
Записан
ntmodule
Гость
« Ответ #3 : Март 20, 2011, 15:38 »

Не удается восстановить backup базы данных к примеру QTelecom.
Можно подробнее этот момент пояснить?
Записан
GraninAS
Гость
« Ответ #4 : Март 21, 2011, 08:01 »

Да, конечно.

1. Для работы требуется PostgreSQL 9.0.
2. В pgAdmin нужно создать БД QTelecom.
3а. Из контекстного меню БД QTelecom выбрать "Восстановить..." и в окошке указать путь к compress.backup. Если всё хорошо, БД восстановится, но так почему-то не происходит. pgAdmin косячит название БД и пути, из-за чего команда не выполняется.
3б. Поэтому (для Windows) проще создать cmd-файл со следующим содержимым:

C:/Progra~1/PostgreSQL/9.0/bin\pg_restore.exe --host localhost --port
5432 --username postgres --dbname QTelecom --verbose
D:\Qt\Projects\QTelecomBackup\compress.backup

Конечно, нужно исправить пути, а так же указать пользователя, порт и хост СУБД PostgreSQL.
« Последнее редактирование: Март 21, 2011, 08:05 от GraninAS » Записан
GraninAS
Гость
« Ответ #5 : Март 25, 2011, 05:46 »

Приветствую читателей этого топика!

Моя библиотека достигла переломного момента. Тому есть несколько причин:

* Ее приняли в программу Qt Ambassador, и скоро она появится в списке проектов этой программы. А ко мне уже отправлены футболка, наклейки и смартфон Nokia C7. Жду с нетерпением! Улыбающийся Лишь бы "Почта России" не запорола доставку, и чтобы не приехали кирпичи вместо посылки.
* Выпущена QST 0.5.9.4 beta, это первая beta версии 0.5.

Это не только исправление кое-каких ошибок, но и:
- Генерация секций JOIN. Этого очень недоставало во многих случаях.
- Генерация диалекта SQLite, находится в отладочной стадии.
- Дополнительные подсистемы-примеры: "SQLite Example" и "Query Generation Example". Первый показывает самые базовые основы QST (в том числе и lazy loading), второй демонстрирует механизм генерации запросов. Оба примера будут дорабатываться.
- Документация на классы подсистемы QST полностью написана и переведена на английский язык.
Записан
GraninAS
Гость
« Ответ #6 : Март 29, 2011, 05:11 »

Здравствуйте снова!

В трех словах: выпущена release-версия.

QST 0.5.9.5 release

Спасибо тем, кто проявил активный интерес к библиотеке!
Спасибо и тем, кто просто читал эту тему!
Спасибо всем остальным за то, что они есть. Улыбающийся

Я верю, что библиотека обязательно кому-нибудь пригодится. И чтобы вероятность этого была еще выше, не будем останавливаться на достигнутом, а начнем работу над следующей версией!

Как полагается, приветствую отзывы, помощь, предложения, замечания, критику. Вместе мы сила. Улыбающийся
« Последнее редактирование: Март 30, 2011, 06:41 от GraninAS » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.052 секунд. Запросов: 21.