Author: aadamchik
Date: Sun Sep  9 17:06:40 2012
New Revision: 1382538

URL: http://svn.apache.org/viewvc?rev=1382538&view=rev
Log:
docs

expressions

Added:
    cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/appendix-c.xml
Modified:
    cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/expressions.xml
    cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/index.xml

Added: cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/appendix-c.xml
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/appendix-c.xml?rev=1382538&view=auto
==============================================================================
--- cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/appendix-c.xml 
(added)
+++ cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/appendix-c.xml Sun 
Sep  9 17:06:40 2012
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<appendix xmlns="http://docbook.org/ns/docbook"; 
xmlns:xlink="http://www.w3.org/1999/xlink";
+    version="5.0" xml:id="expressions-bnf">
+    <title>Expressions BNF</title>
+    <para/>
+
+    
+</appendix>

Modified: 
cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/expressions.xml
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/expressions.xml?rev=1382538&r1=1382537&r2=1382538&view=diff
==============================================================================
--- cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/expressions.xml 
(original)
+++ cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/expressions.xml 
Sun Sep  9 17:06:40 2012
@@ -4,12 +4,92 @@
        <title>Expressions</title>
        <section xml:id="expressions-overview">
                <title>Expressions Overview</title>
+               <para>Cayenne provides a simple yet powerful object-based 
expression language. The most common
+                       usese of expressions are to build qualifiers and 
orderings of queries that are later
+                       converted to SQL by Cayenne and to evaluate in-memory 
against specific objects (to
+                       access certain values in the object graph or to perform 
in-memory object filtering and
+                       sorting). Cayenne provides API to build expressions in 
the code and a parser to create
+                       expressions from strings.</para>
        </section>
        <section xml:id="path-expressions">
                <title>Path Expressions</title>
+               <para>Before discussing how to build expressions, it is 
important to understand one group of
+                       expressions widely used in Cayenne - path expressions. 
There are two types of path
+                       expressions - object and database, used for navigating 
graphs of connected objects or
+                       joined DB tables respectively. Object paths are much 
more commonly used, as after all
+                       Cayenne is supposed to provide a degree of isolation of 
the object model from the
+                       database. However database paths are helpful in certain 
situations. General structure of
+                       path expressions is the following:<programlisting> 
[db:]segment[+][.segment[+]...]</programlisting><itemizedlist>
+                               <listitem>
+                                       <para>"db:" is an optional prefix 
indicating that the following path is a DB
+                                               path. Otherwise it is an object 
path.</para>
+                               </listitem>
+                               <listitem>
+                                       <para>"segment" is a name of a property 
(relationship or attribute in Cayenne
+                                               terms) in the path. Path must 
have at least one segment; segments are
+                                               separated by dot (".").</para>
+                               </listitem>
+                               <listitem>
+                                       <para>"+" An "OUTER JOIN" path 
component. Currently "+" only has effect when
+                                               translated to SQL as OUTER 
JOIN. When evaluating expressions in memory, it
+                                               is ignored.</para>
+                               </listitem>
+                       </itemizedlist></para>
+               <para>An object path expression represents a chain of property 
names rooted in a certain
+                       (unspecified during expression creation) object and 
"navigating" to its related value.
+                       E.g. a path expression "artist.name" might be a 
property path starting from a Painting
+                       object, pointing to the related Artist object, and then 
to its name attribute. A few
+                       more examples:</para>
+               <para>
+                       <itemizedlist>
+                               <listitem>
+                                       <para>"name" - can be used to navigate 
(read) the "name" property of a Person
+                                               (or any other type of object 
that has a "name" property).</para>
+                               </listitem>
+                               <listitem>
+                                       <para>"artist.exhibits.closingDate" - 
can be used to navigate to a closing date
+                                               of any of the exhibits of a 
Painting's Artist object.</para>
+                               </listitem>
+                               <listitem>
+                                       <para>"artist.exhibits+.closingDate" - 
same as the previous example, but when
+                                               translated into SQL, an OUTER 
JOIN will be used for "exhibits".</para>
+                               </listitem>
+                       </itemizedlist>
+               </para>
+               <para>Similarly a database path expression is a dot-separated 
path through DB table joins
+                       and columns. In Cayenne joins are mapped as 
DbRelationships with some symbolic names
+                       (the closest concept to DbRelationship name in the DB 
world is a named foreign key
+                       constraint. But DbRelationship names are usually chosen 
arbitrarily, without regard to
+                       constraints naming or even constraints presence). A 
database path therefore might look
+                       like this -  
"db:dbrelationshipX.dbrelationshipY.COLUMN_Z". More specific 
examples:<itemizedlist>
+                               <listitem>
+                                       <para>"db:NAME" - can be used to 
navigate to the value of "NAME" column of some
+                                               unspecified table.</para>
+                               </listitem>
+                               <listitem>
+                                       
<para>"db:artist.artistExhibits.exhibit.CLOSING_DATE" - can be used to match a
+                                               closing date of any of the 
exhibits of a related artist record.</para>
+                               </listitem>
+                       </itemizedlist></para>
+               <para>Cayenne supports "aliases" in path Expressions. E.g. the 
same expression can be
+                       written using explicit path or an alias:<itemizedlist>
+                               <listitem>
+                                       <para>"artist.exhibits.closingDate" - 
full path</para>
+                               </listitem>
+                               <listitem>
+                                       <para>"e.closingDate" - alias "e" is 
used for "artist.exhibits".</para>
+                               </listitem>
+                       </itemizedlist>SelectQuery using the second form of the 
path expression must be made
+                       aware of the alias via <emphasis role="italic"
+                               >"SelectQuery.aliasPathSplits(..)"</emphasis>, 
otherwise an Exception will be
+                       thrown. The main use of aliases is to allow users to 
control how SQL joins are generated
+                       if the same path is encountered more than once in any 
given Expression. Each alias for
+                       any given path would result in a separate join. Without 
aliases, a single join will be
+                       used for a group of matching paths.</para>
        </section>
        <section xml:id="expressions-from-strings">
                <title>Creating Expressions from Strings</title>
+               <para>For a full grammar check Appendix C.</para>
        </section>
        <section xml:id="expressions-with-expressionfactory">
                <title>Creating Expressions with ExpressionFactory</title>

Modified: cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/index.xml
URL: 
http://svn.apache.org/viewvc/cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/index.xml?rev=1382538&r1=1382537&r2=1382538&view=diff
==============================================================================
--- cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/index.xml 
(original)
+++ cayenne/main/trunk/docs/docbook/cayenne-guide/src/docbkx/index.xml Sun Sep  
9 17:06:40 2012
@@ -27,4 +27,5 @@
        <xi:include href="part3.xml"/>
        <xi:include href="appendix-a.xml"/>
        <xi:include href="appendix-b.xml"/>
+       <xi:include href="appendix-c.xml"/>
 </book>


Reply via email to