<?php include("top.php"); ?> <table width="100%" cellspacing=0 cellpadding=0> <tr> <td width=50> <td> <td align="left" valign="top"> <table width="100%" cellspacing=1 cellpadding=1> <tr> <td bgcolor="white"> <img src="images/logo.jpg" align="left"><b class="title">Doctrine - PHP Data Persistence and ORM Tool</b> <hr> </td> </tr> <tr> <td> <ul> <b class='title'>GENERAL FEATURES</b> <ul> <li \> Fully object-oriented following best practices and design patterns <li \>Multiple databases <li \>Database connection pooling with connection-record -registry <li \>Runtime configuration (no XML needed!) <li \>Very modular structure (only uses the needed features) <li \>The runtime components can be compiled into a single file <li \>Leveled configuration (attributes can be set at global, connection and table levels) </ul> <br \> <b class='title'>DATABASE ABSTRACTION</b> <ul> <li \>A DSN (data source name) or array format for specifying database servers <li \>Datatype abstraction and on demand datatype conversion <li \>supports PDO <li \>Database query profiling <li \>Query caching <li \>Sequence / autoincrement emulation <li \>Replace emulation <li \>RDBMS management methods (creating, dropping, altering) <li \>SQL function call abstraction <li \>SQL expression abstraction <li \>Pattern matching abstraction <li \>Portable error codes <li \>Nested transactions <li \>Transaction isolation abstraction <li \>Transaction savepoint abstraction <li \>Index/Unique Key/Primary Key support <li \>Ability to read the information schema <li \>Reverse engineering schemas from an existing database <li \>LIMIT / OFFSET emulation </ul> <br \> <b class='title'>OBJECT RELATIONAL MAPPING</b> <ul> <b class='title'>General features</b> <li \>Validators <li \>Transactional errorStack for easy retrieval of all errors <li \>EventListeners <li \>UnitOfWork pattern (easy saving of all pending objects) <li \>Uses ActiveRecord pattern <li \>State-wise records and transactions <li \>Importing existing database schemas to Doctrine ActiveRecord objects <li \>Exporting Doctrine ActiveRecords to database (= automatic table creation) <br \><br \> <b class='title'>Mapping</b> <li \>Composite, Natural, Autoincremented and Sequential identifiers <li \>PHP Array / Object data types for columns (automatic serialization/unserialization) <li \>Gzip datatype for all databases <li \>Emulated enum datatype for all databases <li \>Datatype abstraction <li \>Column aggregation inheritance <li \>One-class-one-table inheritance as well as One-table <li \>One-to-many, many-to-one, one-to-one and many-to-many relations <li \>Self-referencing relations even for association table relations <li \>Relation aliases <br \><br \> <b class='title'>Object population</b> <li \>DQL (Doctrine Query Language), an EJB 3 spec compliant OQL <li \><b>The limit-subquery-algorithm</b> <li \>OO-style query API for both DQL and raw SQL <li \>Object population from database views <li \>Object population through raw SQL <br \><br \> <b class='title'>Transactions and locking</b> <li \>Pessimistic offline locking <li \>Savepoints, transaction isolation levels and nested transactions <li \>Transactional query optimization (gathering of DELETE statements) </ul> </ul> </td> </tr> </tr> </table>