Hi,

(Apologies for asking so many questions here - I really appreciate the
help).

I have been using joined table inheritance without any problems for a
while with a very simple hierarchy: a base class/table called
Measurement and various subclasses that contain a typed "value" column
(FloatMeasurement, IntegerMeasurement, etc).  In particular, I have
been doing a query on the base type (which has additional fields like
"date") and all is sweet - I receive the correct subclass as expected.

Recently I added a new subclass that had a composite column - the
"value" is a ratio of two integers and the custom datatype is a
subclass of tuple.  This works fine when used directly - I can load
and save instances of RatioMeasurement with no problems.

However, if I query the base class and the query should return a
RatioMeasurement I now get an error.  What appears to be happening is
that the default ColumnLoader is failing at line 65 of strategies.py
(version 0.4.6) because the row for the initial query (made on the
base class) doesn't contain the columns required for the composite
column (since they are in the subclass table).

Adding ".with_polymorphic('*')" to the query makes no difference.  Nor
does adding "polymorphic_fetch='deferred'" to the base class mapping.

Does the above make sense?  What am I doing wrong this time?!

Thanks,
Andrew

PS The trace is:
[...]
  File "/usr/lib64/python2.5/site-packages/sqlalchemy/orm/query.py",
line 907, in first
    ret = list(self[0:1])
  File "/usr/lib64/python2.5/site-packages/sqlalchemy/orm/query.py",
line 986, in iterate_instances
    rows = [process[0](context, row) for row in fetch]
  File "/usr/lib64/python2.5/site-packages/sqlalchemy/orm/query.py",
line 1551, in main
    extension=context.extension,
only_load_props=context.only_load_props,
refresh_instance=context.refresh_instance
  File "/usr/lib64/python2.5/site-packages/sqlalchemy/orm/mapper.py",
line 1368, in _instance
    return mapper._instance(context, row, result=result,
polymorphic_from=self)
  File "/usr/lib64/python2.5/site-packages/sqlalchemy/orm/mapper.py",
line 1444, in _instance
    self.populate_instance(context, instance, row,
only_load_props=only_load_props, instancekey=identitykey, isnew=isnew)
  File "/usr/lib64/python2.5/site-packages/sqlalchemy/orm/mapper.py",
line 1484, in populate_instance
    (newpop, existingpop, post_proc) =
selectcontext.exec_with_path(self, prop.key,
prop.create_row_processor, selectcontext, self, row)
TypeError; 'NoneType' object is not iterable

As far as I can tell, the None is the result of the "break" at line 65
of strategies.py which is returned up the call stack until the
unpacking of the result.  I'm not completely sure about this, but the
"break" is the last thing I see executing with a debugger.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to