diff --git a/manual/new/docs/en/technology/architecture.txt b/manual/new/docs/en/technology/architecture.txt index 8d8848b7f..8f8eceab9 100644 --- a/manual/new/docs/en/technology/architecture.txt +++ b/manual/new/docs/en/technology/architecture.txt @@ -4,9 +4,39 @@ Doctrine is divided into 3 main packages: * Doctrine * Doctrine_Manager * Doctrine_Connection + * Doctrine_Compiler + * Doctrine_Exception + * Doctrine_Formatter + * Doctrine_Object + * Doctrine_Null + * Doctrine_Event + * Doctrine_Overloadable + * Doctrine_Configurable + * Doctrine_EventListener + * Doctrine DBAL - * Doctrine_Expression + * Doctrine_Expression_Driver * Doctrine_Export * Doctrine_Import * Doctrine_Sequence + * Doctrine_Transaction + * Doctrine_DataDict + +Doctrine DBAL is also divided into driver packages. + * Doctrine ORM + * Doctrine_Record + * Doctrine_Table + * Doctrine_Relation + * Doctrine_Expression + * Doctrine_Query + * Doctrine_RawSql + * Doctrine_Collection + * Doctrine_Tokenizer + +There are also plugins for Doctrine: + +* Doctrine_Validator +* Doctrine_Hook +* Doctrine_View +* Doctrine_Tree + Doctrine_Node diff --git a/manual/new/docs/en/technology/internal-optimizations.txt b/manual/new/docs/en/technology/internal-optimizations.txt index 259ee9116..8b1378917 100644 --- a/manual/new/docs/en/technology/internal-optimizations.txt +++ b/manual/new/docs/en/technology/internal-optimizations.txt @@ -1,59 +1 @@ -+++ DELETE - -/** - * lets presume $users contains a collection of users - * each having 0-1 email and 0-* phonenumbers - */ -$users->delete(); -/** - * On connection drivers other than mysql doctrine would now perform three queries - * regardless of how many users, emails and phonenumbers there are - * - * the queries would look something like: - * DELETE FROM entity WHERE entity.id IN (1,2,3, ... ,15) - * DELETE FROM phonenumber WHERE phonenumber.id IN (4,6,7,8) - * DELETE FROM email WHERE email.id IN (1,2, ... ,10) - * - * On mysql doctrine is EVEN SMARTER! Now it would perform only one query! - * the query would look like: - * DELETE entity, email, phonenumber FROM entity - * LEFT JOIN phonenumber ON entity.id = phonenumber.entity_id, email - * WHERE (entity.email_id = email.id) && (entity.id IN(4, 5, 6, 7, 8, 9, 10, 11)) && (entity.type = 0) - */ - - - -+++ INSERT - - -// lets presume $users contains a collection of new users -// each having 0-1 email and 0-* phonenumbers -$users->save(); -/** - * now doctrine would perform prepared queries in the following order: - * - * first the emails since every user needs to get the primary key of their newly created email - * INSERT INTO email (address) VALUES (:address) - * INSERT INTO email (address) VALUES (:address) - * INSERT INTO email (address) VALUES (:address) - * - * then the users - * INSERT INTO entity (name,email_id) VALUES (:name,:email_id) - * INSERT INTO entity (name,email_id) VALUES (:name,:email_id) - * INSERT INTO entity (name,email_id) VALUES (:name,:email_id) - * - * and at last the phonenumbers since they need the primary keys of the newly created users - * INSERT INTO phonenumber (phonenumber,entity_id) VALUES (:phonenumber,:entity_id) - * INSERT INTO phonenumber (phonenumber,entity_id) VALUES (:phonenumber,:entity_id) - * INSERT INTO phonenumber (phonenumber,entity_id) VALUES (:phonenumber,:entity_id) - * INSERT INTO phonenumber (phonenumber,entity_id) VALUES (:phonenumber,:entity_id) - * INSERT INTO phonenumber (phonenumber,entity_id) VALUES (:phonenumber,:entity_id) - * - * These operations are considerably fast, since many databases perform multiple - * prepared queries very rapidly - */ - - - -+++ UPDATE