Gadfly (database)

It supports a subset of the standard RDBMS Structured Query Language (SQL).

It supports a log-based recovery protocol which allows committed operations of a database to be recovered even if the database was not shut down[clarification needed] in a proper manner (i.e., in the event of a CPU or software crash, [but not in the event of a disk crash]).

It also supports a TCP/IP Client/Server mode where remote clients can access a Gadfly database over a TCP/IP network (such as the Internet) subject to configurable security mechanisms.

Gadfly allows Python programs to store, retrieve and query tabular data without having to rely on any external database engine or package.

It provides an in-memory relational database style engine for Python programs, complete with a notion of a "committed, recoverable transaction" and "aborts".

This has the effect of clobbering any existing Gadfly database called "mydatabase" in the directory "mydirectory".

[Actually, if autocheckpoint is disabled, updates are only stored to table files on checkpoint—see the documentation on the recovery mechanism.]

At this point Gadfly supports quite a lot of the SQL semantics requested in the ODBC 2.0 specification.

Expressions include column names, constants, and standard arithmetic operations over them.

Thus the above should run much faster than the equivalent: Dynamic attributes can appear in other statements containing expressions (such as SELECTs, UPDATEs and DELETEs too).

Some relatively complex queries from the test suite run 2 to 3 times faster after they have been parsed and bound, even without the kjbuckets builtin.

Thus the fastest way to perform the three inserts given earlier is: It would be even faster if the cursor had previously executed the stat with different data (since then no parsing or binding would occur).

The database.py module is a simple wrapper that provides a standard DBAPI interface to the system.

Because it lacks true concurrency control and file-system based indexing it is not appropriate for very large multiprocess transaction-based systems.