Wiki source code of WebObjects and Squeryl

Version 108.1 by Ravi Mendis on 2010/11/10 05:43

Hide last authors
Ravi Mendis 81.1 1 = Squeryl ~= //SQL-like// DSL for Scala =
Ravi Mendis 54.1 2
Ravi Mendis 107.1 3 Advantages of Squeryl over EOF:
Ravi Mendis 54.1 4
5 * Concurrent
6 ** Spawns multiple database connections
7 ** Issues database transactions concurrently
8 * Scala Actor compatible
9 ** Immutable object model/graph
Ravi Mendis 81.1 10 * Strongly-typed
Ravi Mendis 54.1 11 ** Better suited for database/business "logic".
12 E.g: Exploits the compiler and IDE to catch exceptions at compile time rather than at run-time.
Ravi Mendis 85.1 13 * Uses Scala (functional) collection classes
Ravi Mendis 54.1 14
15 = Migrating EOF -> Squeryl =
16
Ravi Mendis 103.1 17 In contrast to EOF Squeryl maintains its ORM information programmatically - in the classes itself and collectively in a [[schema>>http://squeryl.org/schema-definition.html]]. In keeping with the strongly-typed philosophy of Scala, Squeryl has no dynamic component like EOF (i.e an EO model file).
Ravi Mendis 54.1 18
Ravi Mendis 85.1 19 EOF has the ability to generate classes in Java (and in Objective-C prior to WebObjects 4.5) as enforcing type has become customary in enterprise environments. We may exploit this feature of EOF to generate a Squeryl schema.
Ravi Mendis 54.1 20
21 === Preparing your EO model ===
22
Ravi Mendis 85.1 23 * Make sure **all** EO entities have a class name (including abstract many-To-many "join" tables). There's no support for entities marked as ##EOGenericRecord##.
Ravi Mendis 91.1 24 * Mark the abstract many-To-Many join entities as ##Abstract##.
Ravi Mendis 99.1 25 * (Temporary) Ensure all the model entities are in the same package. i.e the package is exclusive to the model.
Ravi Mendis 54.1 26
27 === Generating the Squeryl Schema ===
28
29 1. Create a .eogen file for your EO model as normal. Only set the ##File Names## extension to "scala".
30 1. Use the Squeryl EO Templates:
31
32 *
33 ** Entity.eotemplate [[template>>WOL:Squeryl _Entity.eotemplate]]
34 ** Entity.eotemplate [[template>>WOL:Squeryl Entity.eotemplate]]
35
36 {{note title="Note"}}
37
38 Any custom business "logic" will have to be manually re-written in Scala
39
40 {{/note}}
Ravi Mendis 99.1 41
42 == Differences Between a Squeryl Schema and EOF Classes ==
43
Ravi Mendis 103.1 44 * Optional attributes (i.e those that ##allowsNull##) are typed as ##OptionT##
Ravi Mendis 105.1 45 * Relationships that are not mandatory (i.e optional relationships) are also typed as ##OptionT##
46 * ToMany relationships are represented as a Squeryl iterable (collection class) as opposed to a ##NSArray##.