Hey, On mar, 2013-05-28 at 13:55 +0100, Martyn Russell wrote: > On 22/05/13 16:45, Eugene Seo wrote: > > Dear all, > > Hello Eugene, > > > I have a question of tracker sparql query order with multi langauges. > > Currently tracker supports Sparql 1.0 and sorts the result in unicode > > order, as I know. > > Yes it does. > > > Is it possible to sort other language prior to English? > > Usually sorting by different languages is done by the locale > settings/environment. Sorting by language per query isn't currently > possible because we build collations based on the language being used. > If you change language, we rebuild those collations in the database. > > > In SQLite, specific chacracters can be sorted in front with following > > syntax, > > ORDER BY (CASE WHEN str between '0' and '9' THEN 1 WHEN str between 'a' > > and 'z' THEN 2 ELSE 3 END) > > This is pretty cool and I didn't know about this I have to say.
I'm wondering though, doesn't this kill ordering between items of the same group? If everything from A to Z is 2, the ordering would be arbitrary there AFAICS. > > > I wonder there is similar syntax of SPARQL query like CASE WHEN THEN of > > SQLITE. > > Well, the SPARQL in Tracker is interpreted, some of it (like ORDER BY) > is used directly for the SQL used in SQLite. I haven't actually tried > the example you suggest above, have you? I am curious to know if you > tested this yet? :) > > > If there is any way to sort other langague first than English, please > > share with me. > > What's interesting here is, that we use libicu or libunistring for the > collation/sorting. Whether this works or not depends on a few things: > > 1. We need to fix our parser to allow the CASE/WHEN/END system. A quick > test here shows we don't allow that right now. > > 2. I don't actually know how SQLite would treat such a query on a > collated column, we would need to figure this part out. > > If those two steps work, Tracker should support it. As precisely we have the collator taking care of sorting, I think something like this should be implemented there, using CASE/THEN/END or sqlite functions sound like ways to impersonate it. An easy way to do this is to assign fixed weights to char ranges and add/subtract to the collation return value before returning. Knowing which locales might benefit of that could be more tricky... or maybe we should just add a gsetting. Carlos > > -- > > Can I ask how you're using tracker to understand why you need to sort > for different languages by query? > > Thanks, > > -- > Regards, > Martyn > > Founder and CEO of Lanedo GmbH. > _______________________________________________ > tracker-list mailing list > tracker-list@gnome.org > https://mail.gnome.org/mailman/listinfo/tracker-list _______________________________________________ tracker-list mailing list tracker-list@gnome.org https://mail.gnome.org/mailman/listinfo/tracker-list