Ah, I forgot about the findDBXXX methods.
Thanks,
Derek
On Thu, Dec 4, 2008 at 5:05 PM, David Pollak
<[EMAIL PROTECTED]>wrote:
>
>
> On Thu, Dec 4, 2008 at 2:41 PM, Derek Chen-Becker <[EMAIL PROTECTED]>wrote:
>
>> OK, I see them now. I'm writing up a little section on sharding and these
>> methods feel like they're not quite what I would want to use. Specifically,
>> they're using different criteria for insert and retrieval, which makes it
>> seem like things would get lost. In the example posting I referenced
>> earlier, you use the first character of the email address for insert but
>> then the primary key for retrieval. It seems like you would want to use the
>> email address for retrieval as well. Is there some magic going on in the
>> code that I'm missing? If not, then perhaps we need to morph this into a
>> trait on the field and use a MetaMapper def that points to that field as the
>> connection arbiter. Maybe something like:
>>
>> trait ShardSelector[T, O <: Mapper[O]] extends MappedField[T,O] {
>> def selectConnection : PartialFunction[T,ConnectionIdentifier]
>>
>> def connection = selectConnection(this.is)
>> }
>>
>> And in Mapper:
>>
>> val shardField : Can[ShardSelector] = Empty
>>
>> Along with some appropriate hooks into the current code.
>>
>> Then you could do
>>
>> class MyUser extends Mapper[MyUser] {
>> object name extends MappedString(this) with ShardSelector {
>> def selectConnection = {
>> case n if n.charAt(0) < 'n' => dbAtoMConn
>> case _ => dbNtoZConn
>> }
>> }
>>
>> override val shardField = Full(name)
>> }
>>
>> Thoughts?
>
>
> All of the MetaMapper's findXXXX methods have corresponding findDBxxx
> methods which accept a ConnectionIdentifier parameter.
>
> class MyUser extends Mapper[MyUser] {
> object name extends MappedString(this)
> override def dbCalculateConnectionIdentifier = {
> case me => me.name.is match {
> case n if n.charAt(0) < 'n' => dbAtoMConn
> case _ => dbNtoZConn
> }
> }
>
> Is how the shard should be selected.
>
>
>>
>>
>> Derek
>>
>>
>> On Thu, Dec 4, 2008 at 4:17 PM, David Pollak <
>> [EMAIL PROTECTED]> wrote:
>>
>>>
>>>
>>> On Thu, Dec 4, 2008 at 2:05 PM, Derek Chen-Becker <[EMAIL PROTECTED]
>>> > wrote:
>>>
>>>> OK, one last question for today before I start hacking at the text: You
>>>> mention some methods here for multiple databases with a single entity:
>>>
>>>
>>> On KeyedMetaMapper, override:
>>> def dbSelectDBConnectionForFind: PartialFunction[Type,
>>> ConnectionIdentifier] = Map.empty
>>>
>>> The ConnectionIdentifier defines which RDBMS to perform the query on.
>>>
>>> Also, on Mapper:
>>> def dbCalculateConnectionIdentifier: PartialFunction[A,
>>> ConnectionIdentifier] = Map.empty
>>>
>>>
>>>
>>>
>>>>
>>>>
>>>> http://groups.google.com/group/liftweb/msg/76c965c189a85103?pli=1
>>>>
>>>> But looking in the code I can't find those methods. Are they essentially
>>>> gone now? You also mentioned something better than sharding but I haven't
>>>> seen anything on the list (maybe I missed it).
>>>>
>>>> Thanks,
>>>>
>>>> Derek
>>>>
>>>>
>>>> On Thu, Dec 4, 2008 at 4:01 PM, Derek Chen-Becker <
>>>> [EMAIL PROTECTED]> wrote:
>>>>
>>>>> Cool. I guess I'm editing my chapter this afternoon now :)
>>>>>
>>>>>
>>>>> On Thu, Dec 4, 2008 at 3:40 PM, David Pollak <
>>>>> [EMAIL PROTECTED]> wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> On Thu, Dec 4, 2008 at 7:33 AM, Derek Chen-Becker <
>>>>>> [EMAIL PROTECTED]> wrote:
>>>>>>
>>>>>>> I'm mostly done with the rough draft of our Record/Mapper chapter and
>>>>>>> I wanted to clarify a few points to make sure that my reading of the
>>>>>>> docs
>>>>>>> and code is accurate:
>>>>>>>
>>>>>>> 1. ByRef appears to me to essentially be an old-style join (using
>>>>>>> the where clause instead of join syntax). Is that accurate? Are
>>>>>>> there other
>>>>>>> use cases?
>>>>>>>
>>>>>>>
>>>>>> This allows you to compare two columns in the same row. Because
>>>>>> mapper does not allow for explicit joins or queries against more than one
>>>>>> table at once (with the exception of the In construct), there's no "old
>>>>>> style join" stuff.
>>>>>>
>>>>>> I've also changed the Join() QueryParam to PreCache... which is more
>>>>>> descriptive of what it does.
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> 1.
>>>>>>> 2. It looks like the only way to get distinct results would be to
>>>>>>> use the findAllByPreparedStatement or findAllByInsecureSql methods.
>>>>>>> Is there
>>>>>>> some other way to do this that I'm missing?
>>>>>>>
>>>>>>> Or perhaps the Distrinct() QueryParam I just added. :-)
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> 1.
>>>>>>> 2. The toForm method in Mapper has an overload that takes a
>>>>>>> redoSnippet. What is the use case for this?
>>>>>>>
>>>>>>> So you can keep the current state around over the course of multiple
>>>>>> form submissions when the validation fails.
>>>>>>
>>>>>>>
>>>>>>> 1. Will it be supported in Record or has that functionality been
>>>>>>> folded into something else?
>>>>>>>
>>>>>>> I hope it will make it into Record/Field.
>>>>>>
>>>>>>>
>>>>>>> 1.
>>>>>>> 2. It appears that the functionality of the buildSet... methods
>>>>>>> in MappedField has effectievly been replaced by the setFromAny in
>>>>>>> Field. Is
>>>>>>> this the case, or will those buildSet functions show back up in some
>>>>>>> subclass of field (it seems like there was a lot of overlap there)
>>>>>>>
>>>>>>> buildSet is JDBC specific and radically improves performance in
>>>>>> converting a JDBC column to something that can be put into a field.
>>>>>>
>>>>>>>
>>>>>>> 1.
>>>>>>> 2. Am I reading correctly that Record no longer retains the
>>>>>>> orginal value of a field when it's changed, but rather just flags
>>>>>>> the field
>>>>>>> as dirty? (there are no is/was methods on Field)
>>>>>>>
>>>>>>> Probably... but there will be is/was on Field. It's a very helpful
>>>>>> construct.
>>>>>>
>>>>>>>
>>>>>>> 1.
>>>>>>>
>>>>>>> These last two make sense to me since it seems like duplicated effort
>>>>>>> for #4 and not much of a use case on #5 that I can think of. Any info or
>>>>>>> comments would be appreciated!
>>>>>>
>>>>>>
>>>>>> Sure... wait a few minutes for my Distinct() checkin to make it to
>>>>>> GitHub
>>>>>>
>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> Thanks,
>>>>>>>
>>>>>>> Derek
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>
>>>>>>
>>>>>> --
>>>>>> Lift, the simply functional web framework http://liftweb.net
>>>>>> Collaborative Task Management http://much4.us
>>>>>> Follow me: http://twitter.com/dpp
>>>>>> Git some: http://github.com/dpp
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> Lift, the simply functional web framework http://liftweb.net
>>> Collaborative Task Management http://much4.us
>>> Follow me: http://twitter.com/dpp
>>> Git some: http://github.com/dpp
>>>
>>>
>>>
>>
>>
>>
>
>
> --
> Lift, the simply functional web framework http://liftweb.net
> Collaborative Task Management http://much4.us
> 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
-~----------~----~----~----~------~----~------~--~---