On 13/06/12 08:09, Anssi Kääriäinen wrote: > Accidentally clicked send... So, what I am asking is: Is there support > for ORM refactoring, and the "small step at time" way of doing it? If > the ORM refactorings are to be done, it will be hard to get reviews. > In practice I would need to commit patches without full reviews. > > For more technical questions: Is changing the API of utils.tree > acceptable? What about removing old undocumented features ("anything > containing add_to_query() will shortcut qs.add_q() - not tested, not > documented"). qs.order_by("tablename.columname") - tested, but not > documented. Syntax predates 1.0). What about the more radical changes, > like using .clone() instead of .deepcopy() in query.clone() (ticket > #16759). > > I know I have taken too much stuff under work already... However, the > ORM is what I really like to hack, and would like to concentrate on > that for some time. To do so I will need to feel confident that there > is support for getting the patches committed.
I think this is a very necessary piece of work. The problem with that layer of code is that it is very difficult to really grok and therefore to review patches. It would take almost as much effort to do a review of a substantial patch as the patch itself. You have to really understand what Query is doing, and it is a huge class, that takes hours to even vaguely get the hang of and get in your head. I would like to be able to help, and if I dropped everything else I might otherwise do on Django, that should be possible. I think with two pairs of eyes on these changes, and with a good test suite, we should be reasonably safe, but getting more review than that would be hard. I would say that any undocumented APIs are fair game for changing, which covers all of the Query class and SQLCompiler classes, AFAIK. For user-facing features, we should be much more slow to break them, especially if they are tested. qs.order_by("tablename.columnname") is pretty strange though, I would be happy with getting rid of that, assuming there is an alternative. I do actually have another proposal, that has been a growing draft email on my computer for a few weeks: that we rewrite our backend using SQLAlchemy Core (not the ORM). I've used SQLAlchemy a bit, and I'm very confident we could use it profitably. While the ORM works significantly differently to ours, the lower layer (Core - the SQL Expression Language) can indeed build queries that can do all the joins etc that we would need - it's a full wrapper around SQL. Some of the complexity in our code comes from not having this wrapper. SQLAlchemy is a really excellent library, and I fear that long term if we don't switch to it, we will just produce an ad-hoc, informally specified, buggy, slow implementation of half of SQLAlchemy. However, that is a longer term aim (Django 2.0 really, for various reasons), and I'm confident this refactoring would help either way. Nonetheless, I'll try to post that proposal soon. There is one strategy for implementing it that might allow it to be started soon, and developed alongside existing functionality without breaking anything. (That depends on when we think 'Django 2.0' will happen). If you've got a particular interest in the ORM, you might be interested in that proposal. I completely agree regarding how to handle NoSQL as well. Regards, Luke -- "Outside of a dog, a book is a man's best friend... inside of a dog, it's too dark to read." Luke Plant || http://lukeplant.me.uk/ -- You received this message because you are subscribed to the Google Groups "Django developers" group. To post to this group, send email to django-developers@googlegroups.com. To unsubscribe from this group, send email to django-developers+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-developers?hl=en.