Tag - SQLite3
Entries feed
2012, Wednesday April 25
By A.Bouchez on 2012, Wednesday April 25, 06:27 - mORMot Framework
In a discussion with Henrick
Hellström, in Embarcadero forums, I wrote some high-level information about
mORMot.
It was clear to me that our little mORMot is now far away from
a simple Client-Server solution.
The Henrick point was that with Real Thin Client (RTC), you are able
to write any Client-Server solution, even a RESTful / JSON based one.
He is of course right, but it made clear to me all the work done in
mORMot since its beginning.
From a Client-Server ORM, it is now a complete SOA framework, ready to serve
Domain-Driven-Design solutions.
Continue reading...
2012, Friday April 20
By A.Bouchez on 2012, Friday April 20, 23:05 - mORMot Framework
Our latest mORMot feature is interface-based service
implementation.
How does it compare with the reference of SOA implementation (at least in
the Windows world) - aka WCF?
"Comparaison n'est pas raison", as we use to say in France.
But we will also speak about Event Sourcing, and why it is now on our
official road
map.
Comparing our implementation with WCF is the opportunity to make our framework
always better.
Continue reading...
2012, Tuesday February 14
By A.Bouchez on 2012, Tuesday February 14, 21:39 - mORMot Framework
Here is the definition of "cache", as stated by Wikipedia:
In computer engineering, a cache is a component that transparently
stores data so that future requests for that data can be served faster. The
data that is stored within a cache might be values that have been computed
earlier or duplicates of original values that are stored elsewhere. If
requested data is contained in the cache (cache hit), this request can be
served by simply reading the cache, which is comparatively faster. Otherwise
(cache miss), the data has to be recomputed or fetched from its original
storage location, which is comparatively slower. Hence, the greater the number
of requests that can be served from the cache, the faster the overall system
performance becomes.
To be cost efficient and to enable an efficient use of data, caches are
relatively small. Nevertheless, caches have proven themselves in many areas of
computing because access patterns in typical computer applications have
locality of reference. References exhibit temporal locality if data is
requested again that has been recently requested already. References exhibit
spatial locality if data is requested that is physically stored close to data
that has been requested already.
In our ORM framework, since performance was one goal since the beginning,
cache has been implemented at four levels:
- Statement cache for reuse of SQL prepared statements, and bound parameters
on the fly - note that this cache is available not only for the
SQlite3 database engine, but also for any external engine;
- Global JSON result cache at the database level, which is flushed globally
on any
INSERT / UPDATE;
- Tuned record cache at the CRUD/RESTful level for specified tables or
records on the server side;
- Tuned record cache at the CRUD/RESTful level for specified tables or
records on the client side.
Continue reading...
2012, Sunday January 29
By A.Bouchez on 2012, Sunday January 29, 14:30 - mORMot Framework
For our native connection to any DB, we developed a set of
classes and several units.
We implemented at first
OleDB, then native Oracle
direct access and SQlite3 static
engine.
Now, Microsoft is officially deprecating OleDB, and urge
all developers to switch to the open and cross-platform ODBC
API for native connection.
Continue reading...
2012, Tuesday January 17
By A.Bouchez on 2012, Tuesday January 17, 23:02 - Open Source libraries
The Open Source SynDBExplorer tool
has been enhanced these days.
Main new features are:
- Execution of the current selected text (if any) instead of the whole memo
content;
- "Exec & Export" new button, for direct export to file.
I really like the selection execution feature - this speed up SQL
process a lot, and allow to switch from one statement to another.
And the new exporting features are opening new possibilities.
Continue reading...
2011, Tuesday December 6
By A.Bouchez on 2011, Tuesday December 6, 22:08 - mORMot Framework
In mORMot, all the methods available to handle many-to-many
relationship (ManySelect, DestGetJoined...) are used to
retrieve the relations between tables from the pivot table point of view. This
saves bandwidth, and can be used in most simple cases, but it is not the only
way to perform requests on many-to-many relationships. And you may have several
TSQLRecordMany instances in the same main record - in this case,
those methods won't help you.
It is very common, in the SQL world, to create a JOINed request at the main
"Source" table level, and combine records from two or more tables in a
database. It creates a set that can be saved as a table or used as is. A JOIN
is a means for combining fields from two or more tables by using values common
to each. Writing such JOINed statements is not so easy by hand, especially
because you'll have to work with several tables, and have to specify the exact
fields to be retrieved; if you have several pivot tables, it may start to be a
nightmare.
Let's see how our ORM will handle it.
Continue reading...
2011, Sunday November 27
By A.Bouchez on 2011, Sunday November 27, 07:21 - mORMot Framework
In order to implement some RESTful Services, a
callback has to be defined on the server side.
The prototype of these method has been modified, to supply an additional
aSession: cardinal parameter: this is a CODE BREAK change and you
shall refresh ALL your server-side code to match the new signature.
Continue reading...
2011, Tuesday November 8
By A.Bouchez on 2011, Tuesday November 8, 21:51 - Pascal Programing
The currency type is the standard Delphi type to be used when
storing and handling monetary values. It will avoid any rounding problems, with
4 decimals precision. It is able to safely store numbers in the range
-922337203685477.5808 .. 922337203685477.5807. Should be enough for your pocket
change.
As stated by the official Delphi documentation:
Currency is a fixed-point data type that minimizes rounding errors in
monetary calculations. On the Win32 platform, it is stored as a scaled 64-bit
integer with the four least significant digits implicitly representing decimal
places. When mixed with other real types in assignments and expressions,
Currency values are automatically divided or multiplied by 10000.
In fact, this type matches the corresponding OLE and
.Net implementation of currency, and the one used by
most database providers (when it comes to money, a dedicated type is worth the
cost in a "rich man's world"). It is still implemented the same in the
Win64 platform (since XE 2). The Int64 binary
representation of the currency type (i.e. value*10000
as accessible via PInt64(aCurrencyValue)^) is a safe and fast
implementation pattern.
In our framework, we tried to avoid any unnecessary conversion to float
values when dealing with currency values. Some dedicated functions
have been implemented for fast and secure access to currency
published properties via RTTI, especially when converting values to or from
JSON text. Using the Int64 binary representation can be not only
faster, but also safer: you will avoid any rounding problem which may be
introduced by the conversion to a float type. Rounding issues are a nightmare
to track - it sounds safe to have a framework handling natively a
currency type from the ground up.
Continue reading...
2011, Sunday September 25
By A.Bouchez on 2011, Sunday September 25, 21:46 - mORMot Framework
Our Client-Server ORM framework is now available in revision 1.15.

This is a major upgrade of the framework:
- It is now called mORMot -
so please update your T-Shirts or coffee cups

- It is able to use any
Database engine back-end - in fact, it is SQLite3 powered, not
SQLite3 limited;
- In particular,
direct OleDB and native
Oracle have been implemented;
- It makes use of the genuine SQlite3 Virtual
Table mechanism everywhere to allow mixed access to any database
engine;
- New
TModTime / TCreateTime kind of fields;
- Enhanced stability, speed and multi-thread
implementation;
- Methods and functions have been enhanced, according to user feedback
(thanks you all for your interest and forum posts!);
- Extended
documentation (more than 700 pdf pages), with new diagrams and a lot
of new content;
- New associated tools, like LogViewer or SynDBExplorer;
- The SQLite3 core can
now be used without our ORM - it has been updated to the latest 3.7.8
version;
- Open Source (under GPL/LGPL/MPL license), running from Delphi 6 up to
XE2.
Continue reading...
By A.Bouchez on 2011, Sunday September 25, 13:59 - SQLite3 Framework

In case you were redirected from the previous "Synopse SQLite3
framework" category link, here is the new thread to be used instead:
http://blog.synopse.info/category/Open-Source-Projects/mORMot-Framework
Since revision 1.15 of the framework, it is able to connect to any database
engine (therefore is not limited to
SQLite3), and is now called mORMot.
2011, Wednesday August 10
By A.Bouchez on 2011, Wednesday August 10, 20:52 - mORMot Framework
The framework
documentation was just updated.
The general organization of the SAD document (which is the one to be read in
all cases) has been refreshed, and is now separated in smaller chapters.
The new official name has been changed into "Synopse SQLite3/mORMot
framework"...
Continue reading...
2011, Monday August 8
By A.Bouchez on 2011, Monday August 8, 06:41 - mORMot Framework
Everybody is buzzing about FireMonkey...

Our little mORMot will like FireMonkey!
Here is why...
Continue reading...
2011, Sunday August 7
By A.Bouchez on 2011, Sunday August 7, 09:46 - mORMot Framework
Our downloadable documentation
has been enhanced, and contains now a description about the main feature of
the near-to-come 1.15 version, i.e. "database agnosticism".
The core database of our mORMot / SQLite3 framework uses the
SQLite3 library, which is a Free, Secure, Zero-Configuration,
Server-less, Single Stable Cross-Platform Database File database engine.
As stated below, you can use any other database access layer, if you wish. A
fast in-memory engine is included, and can be used instead or together with the
SQLite3 engine. Since revision 1.15 of the framework you may be able
to access any remote database, and use one or more OleDB (or
Oracle) connections to store your precious ORM objects. The
SQlite3 will be used as the main SQL engine, able to JOIN all those
tables, thanks to its Virtual Table unique feature.
Continue reading...
2011, Monday July 25
By A.Bouchez on 2011, Monday July 25, 22:19 - mORMot Framework
Our ORM RESTful Framework is about to access any available database
engine.
It will probably change its name (since it won't use only SQlite3
as database), to become mORMot - could be an acronym for
"Manage Object Relational Mapping Over Tables", or whatever you may think
of...

We'll still rely on SQLite3 on the server, but a dedicated
mechanism will allow to access via OleDB any remote database, and mix
those tables content with the native ORM tables of the framework. A flexible
Virtual Tables and column mapping will allow any possible architecture: either
a new project in pure ORM, either a project relying on an existing database
with its own table layout.
Continue reading...
2011, Friday July 22
By A.Bouchez on 2011, Friday July 22, 17:14 - Open Source libraries
For our ORM framework, we implemented an efficient SQLite3 wrapper,
joining statically (i.e. without any external dll) the SQLite3 engine to the
executable. SQLite3 is in fact used as the DB kernel of the framework. For
instance, thanks to its unique virtual table
mechanism, even tables in other databases (like Oracle or MSSQL) are
available as if
they were SQLite3 tables.
We just made this wrapper independent from our ORM, in a new dedicated unit,
named
SynSQLite3.pas.
It was an easy task to let this unit be called from our SynDB
database abstract classes.
Continue reading...
2011, Saturday July 2
By A.Bouchez on 2011, Saturday July 2, 11:32 - mORMot Framework
There is a well known syndrome around, against ORM.
Do you remember The
Vietnam of Computer Science article?
It is worth reading... and commenting.
Sounds a bit outdated by now. Tempus fugit!
Continue reading...
2011, Wednesday June 29
By A.Bouchez on 2011, Wednesday June 29, 06:10 - SQLite3 Framework
Our ORM framework has been released as version 1.14.
It's mainly a bug-fix release:
- Integrated SQLite3 engine updated to latest version 3.7.7.1;
- Fix several issues about JSON generation layout;
- Enhanced automated User Interface generation for object on-screen
edition;
- SynPdf unit now handles Bézier curves from TCanvas, and
some CMYK functions; also enhanced PDF/A-1compatibility;
- Some speed enhancements, and new functions for the
SynOleDB unit.
Continue reading...
2011, Thursday June 16
By A.Bouchez on 2011, Thursday June 16, 21:55 - Pascal Programing
After a
question on StackOverflow, I wanted to comment about the speed of generated
code by diverse Delphi compiler versions.
Since performance matters when we write general purpose libraries like ours,
we have some feedback to propose:
Continue reading...
2011, Sunday June 5
By A.Bouchez on 2011, Sunday June 5, 17:45 - SQLite3 Framework
This is a major step for the framework.
Among a lot of new features and bug fixes:
Open Source project, for Delphi 6 up to XE, licensed under a MPL/LGPL/GPL
tri-license.
Continue reading...
2011, Thursday June 2
By A.Bouchez on 2011, Thursday June 2, 16:42 - SQLite3 Framework
The SQLite3 engine defines some standard SQL functions, like
abs() min() max() or upper().
A complete list is available at http://www.sqlite.org/lang_corefunc.html
One of the greatest SQLite3 feature is the ability to define custom
SQL functions in high-level language. In fact, its C API allows to implement
new functions which may be called within a SQL query. In other database engine,
such functions are usually named UDF (for User Defined Functions).
Our framework allows you to add easily such custom functions, directly from
Delphi classes.
Continue reading...