-
Quince is a C++ library.
-
It is not a framework, i.e. it does not ask you to restructure your
application. Just make calls into the library when you need to.
-
It is not a language, except perhaps in the EDSL
sense. There is no special compiler. Your source code does not go through
any extra preprocessing stage.
-
Quince is written in C++11, and has been tested using:
-
Microsoft Visual Studio 2013 Express, Update 2 on Microsoft Windows
7 Home Premium SP1
-
g++ 4.7.3 on Ubuntu 12.04.4 LTS
-
Clang 3.3 on Ubuntu 12.04.4.LTS
-
Quince must be used in combination with a backend library, which is
tailored to a particular type of DBMS.
-
Backend libraries are currently available for PostgreSQL 9.3 and Sqlite3.
-
An application can be connected to multiple databases at once.
-
An application can be connected to databases of both DBMS types at
once.
-
An application can access the same database (or multiple databases)
concurrently from multiple threads.
-
Quince (in combination with the backend libraries) is currently able
to map the following C++ types into database columns:
-
bool
,
-
8-, 16-, 32- and 64-bit signed and unsigned integers,
-
single- and double-precision floating-point numbers,
-
std::string
,
-
std::vector<uint8_t>
(i.e. a blob),
-
boost::posix_time::ptime
,
-
boost::optional<
T
>
, where T
is any type that quince can map.
-
std::tuple<
T0
,
T1
...>
,
where T0
, T1
... are any types that quince can map.
-
user-defined classes (including structs), whose members are of
any types that quince can map.
-
In many cases, a user-defined class may be mapped with no change, or
minimal changes, to its definition.
-
Before quince can connect to a database, the database must have been
created by other means. Then quince is able to create tables (and,
on PostgreSQL, schemas) as needed.
-
The database's character encoding is determined when the database is
created. Quince then “passes it through” to application
code; i.e. the mapping of
std::string
to database columns does not add any transformation of characters.
-
Quince manages connections to the database. Application code never
mentions connections.
-
Quince allows a user to select from among the DBMS's possible modes
of transaction isolation, on a per-database basis. That determines
what isolation guarantees the DBMS will provide. Quince then “passes
them though” to application code; i.e. a quince
transaction
class provides the same
isolation guarantees as its SQL counterpart.
-
Quince, and the two current backend libraries, are distributed under
the Boost Software License 1.0.
-
These libraries are available for download as C++ source code at no
cost, but those who find them useful are encouraged to click
this link.