In the first "filter" line... do you just want to filter out the LimitOrders
that do not have the same tradeType foreign key reference as the FK of the
parameter that you pass in?
Can you post the model opens (the LimitOrder and the other stuff) as well as
the logic?
For example,
LimitOrderMetaObj.find(By(LimitOrderMetaObj.id,remainingOrders(i).id)).map(_.status.set("OPEN"))
openOr 0L
I'm not sure why you're doing a map and an openOr 0L... you're not returning
an expression.
Also, I'm not sure why you are loading an instance out of the RDBMS in order
to to set the status to "OPEN" and then just discard the instance. Does the
set method on the status open have some side effect that you've coded?
If you want to load a bunch of records, update fields on those records, and
save the records, I'd like to suggest the following code:
class Dog extends LongKeyedMapper[Dog] with IdPK {
def getSingleton = Dog
object name extends MappedPoliteString(this, 128)
object weight extends MappedInt(this)
}
object Dog extends Dog with LongKeyedMetaMapper[Dog]
class MyStuff extends LongKeyedMapper[MyStuff] with IdPK {
def getSingleton = MyStuff
object info extends MappedString(this, 128)
object count extends MappedInt(this)
object dog extends MappedLongForeignKey(this, Dog)
}
object MyStuff extends MyStuff with LongKeyedMetaMapper[MyStuff] {
def mutate(in: MyStuff) {
for {
// find all the items where info = 'NEW' and dog != the value of in's
dog field
item <- MyStuff.findAll(By(MyStuff.info, "NEW"), NotBy(MyStuff.dog,
in.dog))
// increment the count field, update the info field and save
} item.count(item.count + 1).info("Not so NEW").save
}
}
On Wed, Jul 22, 2009 at 4:05 PM, Hannes <[email protected]> wrote:
>
> 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
> >
> > >
>
>
> >
>
--
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
-~----------~----~----~----~------~----~------~--~---