It doesn't differ from reference fields. it is about automation distributed 
transaction. 
Table 'person' hasn't Field('alias_name' ) at db level, it's fake Field 
with reverse reference declaration ( 'storedin alias_opt.alias_name' ) that 
defines table.field that would be really involved in CRUD-process of table 
'person'

On Wednesday, December 7, 2016 at 5:29:28 AM UTC+3, Dave S wrote:
>
>
> On Tuesday, December 6, 2016 at 3:41:38 PM UTC-8, Richard wrote:
>>
>> UP, never get any answer...
>>
>
> How would this differ from reference fields?
>
> /dps
>  
>
>>
>> On Sat, Jan 23, 2016 at 4:08 PM, Val K <valq...@gmail.com> wrote:
>>
>>> Hi guys!
>>> I have an idea to improve DAL in scope of work with normalized DB.
>>> As known It's a common practice to avoid NULL value by creating separate 
>>> (option) table(s) to store non required fields.  
>>> So, it would be great to have a field type like "storedin 
>>> table_name.field_name" 
>>> For example:
>>>
>>> db.define_table('alias_opt', Field('name'),  Field('alias_name', 'reference 
>>> person'))
>>> db.define_table('person', Field('name'),  Field('alias_name', 'storedin 
>>> alias_opt.alias_name'))
>>>
>>> #INSERT:
>>> db.person.insert(name='Alex',  alias_name='Macedonian') 
>>> # means:
>>>    id=db.person.insert(name='Alex')
>>>    db.alias_opt.insert(id=id, alias_name='Macedonian')  
>>>
>>> #UPDATE:
>>> db(db.person.id==id).update(... , alias_name=None)
>>> # means:
>>>   # update person
>>>   ...
>>>   # update option  table
>>>   update_opt_args = filter_storedin_fields(update_args) 
>>>   opt_rec =  db.alias_opt(id)
>>>   opt_rec.update(update_opt_args)
>>>   if not any(opt_rec.values()): # -  all fields of option table record 
>>> is None
>>>          del  db.alias_opt(id)  
>>>     else:
>>>          db.alias_opt.update_or_insert(id==id,   **update_opt_args)    
>>>
>>> #DELETE:
>>> del db.person(id)  also means   del db.alias_opt(id),  like ondelete=
>>> 'CASCADE'
>>>
>>> #SELECT:
>>> rows = db(db.person).select()
>>> # means:
>>>  rows = db(db.person).select( left=[ db.alias_opt.on( db.alias_opt.id == 
>>> db.person.id ) ] )
>>> but only "storedin" fields should be selected from  db.alis_opt 
>>> and they should be accessed by row.alias_name (not only by row.
>>> joined_table.field_name )
>>>
>>> Considering, that table person could be a VIEW (i.e. JOIN is already 
>>> performed at DB level),  there is no need to make join at web2py level,
>>> it could be fixed by passing an option arg like is_view=True to 
>>> define_table() 
>>> I know, that behavior of insert/update/delete could be easy realized by 
>>> custom class based on Table 
>>> with a little hacking Field-class to intercept field type to fix it to 
>>> web2py type ( considering  person.alias_name.type == 
>>> alias_opt.alias_name.type ).
>>> But it's hard for me to change select() behavior, because there is only 
>>> common_filter, but  there isn't  common_join/common_left with providing of 
>>> maping (aliasing) joined table  fields  to  'storedin' fields. 
>>>
>>> In fact, I dream of common_join depends on discriminator field, that 
>>> will switch tables to be joined depend on discriminator value specified in 
>>> the query (something like db.object.type_id==type_id),
>>> if descriminator is not specified or couldn't be resolved at web2py 
>>> level, it performs left join all tables (from a list containing possible 
>>> common_join tables)
>>>
>>> P.S. May be I try to reinvent the wheel, so feel free to shoot me!
>>>
>>> -- 
>>> Resources:
>>> - http://web2py.com
>>> - http://web2py.com/book (Documentation)
>>> - http://github.com/web2py/web2py (Source code)
>>> - https://code.google.com/p/web2py/issues/list (Report Issues)
>>> --- 
>>> You received this message because you are subscribed to the Google 
>>> Groups "web2py-users" group.
>>> To unsubscribe from this group and stop receiving emails from it, send 
>>> an email to web2py+un...@googlegroups.com.
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>>
>>

-- 
Resources:
- http://web2py.com
- http://web2py.com/book (Documentation)
- http://github.com/web2py/web2py (Source code)
- https://code.google.com/p/web2py/issues/list (Report Issues)
--- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to web2py+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to