Reply
Thread Tools
benlau's Avatar
Posts: 135 | Thanked: 375 times | Joined on Mar 2010 @ Hong Kong
#1
Hi all!

I would like to introduce my new OSS project for Qt and mobile. It is DQuest , a C++ ORM (Object-relational mapping) for Qt framework. It aims to provide a rapid development environment for application with database access. The database model declaration is very simple , just like other C++/Qt class. It is designed for mobile environment but also useful for desktop and embedded application that do not demand for maximized performance for database.

It is getting more number of application use Sqlite for their data storage. However, writing data model in SQL is complicated . Usually it need to write two set of interface : One for C/C++ and other for Sql. The work load is duplicated, and debug is troublesome.

With DQuest, you can declare a database model using C++ directly. Read / write access can be made through the C++ interface. You won't need to wbrite any SQL to gain the benefit of using Sqlite in your application.

To declare your database model, you need to:

* Create a class that inherits DQModel
* Added a DQ_MODEL macro to the class declaration
* Design your database field by using DQField template type
* Register your model with DQ_DECLARE_MODEL macro function.

Example:
Code:
#include <dqmodel.h>

/// User account database
class User : public DQModel {
    DQ_MODEL
public:
    DQField<QString> userId;
    DQField<QDateTime> creationDate;
    DQField<qreal> karma;
};

/// Declare the model and the field clause
DQ_DECLARE_MODEL(User,
                 "user", // the table name.
                 DQ_FIELD(userId , DQNotNull | DQUnique), 
                 DQ_FIELD(creationDate , DQDefault("CURRENT_TIMESTAMP") ), 
                 DQ_FIELD(karma) 
                 );
The declaration is equivalent to make this SQL table for SQLITE

Code:
CREATE TABLE user  (
       id INTEGER PRIMARY KEY AUTOINCREMENT,
       userId TEXT NOT NULL UNIQUE,
       creationDate DATETIME DEFAULT CURRENT_TIMESTAMP ,
       karma DOUBLE
);
Remarks: QObject is rarely used in DQuest , and DQModel is not QObject-based.

Features
  • Database model declaration and registration is simple.
    • Declare model in C++/Qt way (p.s QObject is not used)
    • Support model inheritance
    • Foreign key - auto load entry
  • Supported operations : create table , drop table , select , delete , insert , query the existence of table , create index ...
  • Support Sqlite - usable on mobile platform
  • Open source (New BSD license)

Pending features

Multiple database access
  • The software design support to access multiple database , but it is not tested.
Multi-threading
  • The software design support multi-threading , but it is not tested.

Limitations
  • DQuest is still in alpha stage. Use at your own risk.
  • Not all SQL statement and options are implemented , most of them can be added upon on user request. Please join the mailing list.
  • Not implemented operations : create trigger
  • Not supported operations : join select
Licensing

DQuest source code is licensed under BSD license. You may use it for open source and closed source application , you just need to obey the requirement of BSD (e.g distribute the license agreement). Moreover, if you can inform us that your application is using DQuest. It can encourage developer to further develop the software.



Links:


Motivation:

When I develop the 0.1 version of PenPen Sketchbook , the prototype of drawing interface only spend me few hours , and a working code is completed within two night. However, when I make the sqlite code , it a much longer time to develolop in compare with the drawing function. 60% of time spent on database code totally. I think it is non-sense for such a tiny project. Therefore , that inspired me to develop a C++ ORM for Qt and sqlite.
__________________
Qt Ambassador | Nokia Certified Qt Specialist
PenPen SketchBook |
FrontView - 0.2 is released! | DQuest
Status: Now working on GTD software

Last edited by benlau; 2011-04-05 at 04:48.
 

The Following 6 Users Say Thank You to benlau For This Useful Post:
benlau's Avatar
Posts: 135 | Thanked: 375 times | Joined on Mar 2010 @ Hong Kong
#2
hi all!

The 0.2 version is just out!

The changes:

Code:
Release 0.2
===========

Feature enhancements:
 * Supported to create index
 * Supported to query for more complex rules
 * New utility class to create data model initial field

Critial Changes:
 * The usage of DQWhere class is changed to adapt a faster way of usage. It is incompatible with 0.1.

Detailed Changes:

 DQWhere
 * Deprecated &,| operator overloading and removed from code. It is replaced by && and ||
 * Changed the definition of constructor. The left operand pass to constructor is restricted to data model field only. It is not compatible with old code
 * Improved the operator overloading mechanism. It become a more powerful class
 * Supported to query by compare the value on different field. The following query become possible:
  - select * from table where field1 = field2
 * New supported operators: &&,||,+,-,*,/,%,equal,notEqual,between,in,notIn,like,glob,is,isNot.
 

 DQ_DECLARE_MODEL
 * Supported private field

 DQIndex
 * A new class for sqlite indexing
 
 DQField<T>
 * Supported bool and QStringList as the template type T
 * Added operator T() casting. It can be casted to T automatically.
  
 DQBaseField::get() / DQModelMetaInfo::value() - Added a new argument "convert"
 * It is true if the QVariant return should be converted to a type which is suitable for saving. It is designed for type like QStringList which is not supported by SQLite backend by default.

 DQConnection
 * Change this connection to be the default connection
 * operator == / !- compare is two connection share the same database

 DQSharedQuery
 * Added new function select()  - Construct a new query object with only the fields assigned in result 
 * Added new function orderBy() - Construct a new query object with required sorting order
 * Added new function setConnection() - Set the database connection

 DQStream
 * A new class, it provides a stream interface for reading and writing data model field

 DQListWriter 
 * A new class, it is a utility class to create the content for DQList object with predefined field 
 
 DQSharedList
 * Added new function save() - Save all the contained item to database
Project page:
http://code.google.com/p/d-quest/
__________________
Qt Ambassador | Nokia Certified Qt Specialist
PenPen SketchBook |
FrontView - 0.2 is released! | DQuest
Status: Now working on GTD software
 

The Following User Says Thank You to benlau For This Useful Post:
OVK's Avatar
Posts: 559 | Thanked: 1,017 times | Joined on May 2008 @ Finland
#3
Would it be possible to use this to edit the calendar database of the N900?

I have one spesific use case in mind: changing the appointment status from "public" to "private".
 
Posts: 102 | Thanked: 23 times | Joined on Apr 2010
#4
Could you make android pulse (RSS aggregation with a new look) like software in QT for N900
 
Reply


 
Forum Jump


All times are GMT. The time now is 22:16.