sorry, im not keen on the magical approach....at least something that is cross-referencing reflected database metadata like indexes and stuff with in-application behaviors (we *never* rely upon anything reflected..reflection to me is like a luxury feature). the most id ever consider, even though i dont like this idea either, is to do is some kind of "comparison_function" argument on Column which tries to shove its way into order by's and comparison operations.
i think folks should be aware of what kind of casing rules they want to apply to their orderings, comparisons, etc., and its also a little hairy between databases (like on MySQL, you actually need to express COLLATE directives on table creates/selects to deal with these things). On Feb 13, 8:43 am, "Troy" <[EMAIL PROTECTED]> wrote: > A common use of functional indexes for Postgres and Oracle is to apply > a "upper" or "lower" to a character column for case insensitive > searching and ordering. For example, with the following people table: > > id name > -- ---------------- > 1 adam > 2 Troy > > select name from people where people='troy' # returns 0 records > > select name from people order by people asc # returns Troy,adam > > So what usually happens to fix this is a query like: > > select name from people where upper(people)='TROY' # returns Troy > > But this can kill performance, as your not using an index. No > problem, add a functional index: > > CREATE INDEX upper_name_idx ON people ((upper(name))); > > Ok, great. The reason for my verbosity is I would like to see (at > least as an option) that if a upper or lower functional index exists > on a char field then to automagically invoke the function on the where > clause or order by. I would be interested to know how others writing > applications using SA targeting multiple databases are dealing with > Oracle and Postgres returning different data and different ordered > results than MySQL and MS-SQL depending on the case of the data in the > column. From what I've concluded, there are 3 options: > > 1) In the domain logic, lower or upper the data before it gets to the > database: > a) Ugly single case for users > b) Still breaks oracle and postgres for where/like without a > function clause > > 2) Manually apply func.upper/lower to conditions/order-by's to > specified columns: > a) Not confirmed, but MySQL probably would not use an index > b) Hard for developers to remember which columns have a functional > index > > 3) SA Automagically applies func.upper/lower to char columns with a > upper/lower function: > a) Makes life easy > > What do you think Mike? And where is the best place to do the > automagic, in the dialect or the compiler? > > Troy > > On Feb 12, 3:28 pm, "Michael Bayer" <[EMAIL PROTECTED]> wrote: > > > by "function index", we're talking expressions stuck into Index() ? > > shouldnt be too hard to implement, if you submit a patch that does it > > similarly to how column level defaults are done. kind of a 5-liner id > > think. > > > On Feb 12, 5:24 pm, "Troy" <[EMAIL PROTECTED]> wrote: > > > > Is there a time frame, or an intention, for supporting function > > > indexes? I would like to help out if there is no one on this. I've > > > spent a few hours pouring over the sqlalchemy code and have a few > > > ideas and questions if anyone is interested. > > > > Thanks, > > > > Troy --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---