From 8d4a21655edac2dfe52e1cecc77a79f9690579dc Mon Sep 17 00:00:00 2001 From: roman Date: Fri, 17 Jan 2014 23:49:16 +0000 Subject: [PATCH] Author:Roman Date:2014-01-17T23:49:16.000000Z git-svn-id: https://svn.eiffel.com/eiffel-org/trunk@1245 abb3cda0-5349-4a8f-a601-0c33ac3a8c38 --- .../solutions/database-access/abel/index.wiki | 37 ++++++++++++++++++- .../tutorial/accessing-existing-database.wiki | 2 + 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/documentation/current/solutions/database-access/abel/index.wiki b/documentation/current/solutions/database-access/abel/index.wiki index 30025d22..4bb47df0 100644 --- a/documentation/current/solutions/database-access/abel/index.wiki +++ b/documentation/current/solutions/database-access/abel/index.wiki @@ -1,5 +1,40 @@ [[Property:title|ABEL]] [[Property:weight|0]] [[Property:uuid|585002f7-4f2c-e575-f3a2-0a339f349980]] -A library for object persistence. +== Overview == + +ABEL is intended as an easy-to-use persistence library. It provides a high-level interface for storing and retrieving objects, selection criteria when querying objects, lazy loading of results, and transactions. ABEL can work with different storage backends such as MySQL or CouchDB transparently. + +== Features == + +* Store and retrieve objects +* Filter retrieved objects based on criteria +* Transaction support +* Read only and read-write access +* Lazy loading of query results +* Support for different backends +* Support for access to relational databases created by EiffelStore. + +== When to use it? == + +ABEL can be used whenever an application needs some basic persistency without the developer having to think about the data format or object-relational mapping. It may also be used to read and write table records for an existing database, provided that there is a set of classes matching the database tables. + +It is not a good idea to use ABEL in a high-performance setting. Due to its high level of abstraction there are a lot of internal data conversions to enable automatic object-relational mapping. + +== Current limitations == + +* The CouchDB backend has some severe limitations. +* The garbage collector currently only works for single-user systems and is rather primitive, as it needs to load the whole database into memory. +* The ESCHER plugin, which handles class schema evolution, has never been properly tested. Use at your own risk. + +== Future work == + +* Support for caching for performance reasons. +* Lazy retrieval of referenced objects in an object graph. This requires support in the compiler however. +* Some handy features for the backend that deals with existing databases: +** Allow to provide a custom class name to table name mapping. +** A way to automatically resolve 1:N or M:N relations. +** Support automatic creation of classes from tables, or tables from classes. +* Support other databases like Oracle or Microsoft SQL. + diff --git a/documentation/current/solutions/database-access/abel/tutorial/accessing-existing-database.wiki b/documentation/current/solutions/database-access/abel/tutorial/accessing-existing-database.wiki index eb6d14c6..adad29dc 100644 --- a/documentation/current/solutions/database-access/abel/tutorial/accessing-existing-database.wiki +++ b/documentation/current/solutions/database-access/abel/tutorial/accessing-existing-database.wiki @@ -87,6 +87,7 @@ end Because we're using an existing MySQL database, we need to choose the PS_MYSQL_RELATIONAL_REPOSITORY_FACTORY for initialization. + class TUTORIAL @@ -115,6 +116,7 @@ feature {NONE} -- Initialization end end + That's it. You're now ready to read and write table records using the repository.