I kind of found the problem. So far, it has nothing to do with save or 
anything like that. The problem is that this line:

val newOrders = LimitOrderMetaObj.findAll(By(LimitOrderMetaObj.status, 
"NEW")).toList.filter(o2 => o2.tradeType.name != o1.tradeType.name)

does not compare the "name" of the tradetype (TradeType has an own 
"name" field) in the filter method, instead "name" returns "tradetype" 
(is this the object name?). The thing is, because its a foreign key 
reference and as you told me, it needs to be accessed via

o.tradeType.obj.map(_.name.is) openOr ""

But now, when I want to compare two of those TradeType.name field (which 
are normal strings) I don't really know how to do it. I tried something 
like that, but it doesn't work:

val newOrders = LimitOrderMetaObj.findAll(By(LimitOrderMetaObj.status, 
"NEW")).toList.filter(o2 => {o2.tradeType.obj.map(_.name.is) openOr ""} 
!= {o1.tradeType.obj.map(_.name.is) openOr "")


thanks.

> Howdy,
>
> You can save some memory by using findMap:
>
> def joinOrders(o1: LimitOrder): Unit = {
>    /* select all orders where status=NEW and where that.tradeType !=
> order1.tradeType */
>    val newOrders = 
> LimitOrderMetaObj.findMap(By(LimitOrderMetaObj.status, "NEW")){o2 => 
> Full(o2).filter(o2.tradeType.name <http://o2.tradetype.name/> != 
> o1.tradeType.name <http://o1.tradetype.name/>)}
>  
> findMap applies the filtering operation as each row is pulled from the 
> RDBMS... so you'll have fewer objects in memory.
>
> In terms of the remaining logic... I'm a little lost in your code... 
> can you describe the logic?  What gets updated under which conditions? 
>
>
> On Wed, Jul 22, 2009 at 5:35 AM, Hannes <[email protected] 
> <mailto:[email protected]>> wrote:
>
>
>     Hi Lifters,
>
>     It seems like I'm having problems to modify items that are already in
>     the database. What I do is, first find the item, then set a new
>     value to
>     it and then save it. So far so good, or?
>
>     Because its a expensive filter process to find those items to
>     modify, I
>     made a local copy of the sub-list that contains the most interesting
>     items. This sub-list is processed further on and when I finally know
>     which items to modify, I look those ones up in the database again and
>     set the values. I hope it makes sence...
>
>     thanks
>
>     Here's the code:
>
>     def joinOrders(o1: LimitOrder): Unit = {
>        /* select all orders where status=NEW and where that.tradeType !=
>     order1.tradeType */
>        val newOrders =
>     LimitOrderMetaObj.findAll(By(LimitOrderMetaObj.status,
>     "NEW")).toList.filter(o2 => o2.tradeType.name
>     <http://o2.tradeType.name> != o1.tradeType.name
>     <http://o1.tradeType.name>)
>
>        def decideByTradeType: List[LimitOrder] = {
>            /* keep all orders where that.marketPoint <= order1.marketPoint
>             * sort the list from lowest to highest marketPoint */
>            if (o1.tradeType.name <http://o1.tradeType.name> == "BUY")
>                newOrders.filter(o2 => o2.marketPoint.is
>     <http://o2.marketPoint.is> <=
>     o1.marketPoint.is <http://o1.marketPoint.is>).sort((s, t) =>
>     s.marketPoint.is <http://s.marketPoint.is> < t.marketPoint.is
>     <http://t.marketPoint.is>)
>            /* keep all orders where that.marketPoint >= order1.marketPoint
>             * sort the list from highest to lowest marketPoint */
>            else //because there are only two different types! Its the same
>     as: if (o1.tradeType.name <http://o1.tradeType.name> == "SELL")
>                newOrders.filter(o2 => o2.marketPoint.is
>     <http://o2.marketPoint.is> >=
>     o1.marketPoint.is <http://o1.marketPoint.is>).sort((s, t) =>
>     s.marketPoint.is <http://s.marketPoint.is> > t.marketPoint.is
>     <http://t.marketPoint.is>)
>        }
>
>        var i = 0
>        var done = false
>        val remainingOrders = decideByTradeType
>        while (i < remainingOrders.length && !done) {
>            if (remainingOrders(i).lots == o1.lots) {
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     remainingOrders(i).id)).map(_.status.set("OPEN")) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     remainingOrders(i).id)).map(_.save) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     o1.id <http://o1.id>)).map(_.status.set("OPEN")) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     o1.id <http://o1.id>)).map(_.save) openOr 0L
>                done = true
>            }
>            if (remainingOrders(i).lots.is <http://lots.is> <
>     o1.lots.is <http://o1.lots.is>) {
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     remainingOrders(i).id)).map(_.status.set("OPEN")) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     remainingOrders(i).id)).map(_.save) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     o1.id <http://o1.id>)).map(_.lots.set(o1.lots.is
>     <http://o1.lots.is> - remainingOrders(i).lots.is
>     <http://lots.is>)) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     o1.id <http://o1.id>)).map(_.save) openOr 0L
>            }
>            if (remainingOrders(i).lots.is <http://lots.is> >
>     o1.lots.is <http://o1.lots.is>) {
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     o1.id <http://o1.id>)).map(_.status.set("OPEN")) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     o1.id <http://o1.id>)).map(_.save) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     remainingOrders(i).id)).map(_.lots.set(remainingOrders(i).lots.is
>     <http://lots.is> -
>     o1.lots.is <http://o1.lots.is>)) openOr 0L
>                LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,
>     remainingOrders(i).id)).map(_.save) openOr 0L
>                done = true
>            }
>            i = i + 1
>        }
>      }
>
>
>
>
>
> -- 
> Lift, the simply functional web framework http://liftweb.net
> Beginning Scala http://www.apress.com/book/view/1430219890
> Follow me: http://twitter.com/dpp
> Git some: http://github.com/dpp
>
> >


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Lift" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/liftweb?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to