On Apr 2, 2014, at 1:26 PM, Donald Steele <[email protected]> wrote:

> What I’m talking about that is part of Xcode is the SQLite framework not 
> APIs. The access to SQLite is done with the Obj C APIs as defined by SQLite. 
> I am a fairly new developer and may be having some problems keeping up with 
> folks with more time. So if I’m using incorrect terms that is my excuse.
> 
> If was more experienced the documentation on SQLite’s web site would make 
> more sense and I would not be here asking dumb questions.

Ok, so I’ll try to give you a hand…

First off, there are no Obj-C APIs for SQLite built into iOS. It sounds like 
you are calling the C APIs. Also, SQLite is not bundled into iOS as a Framework 
(which suggests Obj-C APIs), but as a library. The differences may be subtle, 
but calling them the wrong things is confusing to those who understand the 
differences.

I think we’ve established that you’d like to use a natural sort algorithm to 
order your results. We have told you the function you need to use to register 
this (sqlite3_create_collation), and given you some pointers to where you might 
find such a function, in plain C. You might also be able to do compares with 
NSString using the NSNumericSearch option. But in any event, you’ll have to 
write and register a collation function. We’ve also shown examples of how you 
would invoke the collation from your SQL.

There are two holes that I see:

        (1) Nobody has written a collocation function for you.
        (2) I have a hint that you’re a little confused at the parameters that 
should be passed to sqlite3_create_collation, perhaps.

The documentation of the collation callback could be improved, I believe. 
Exactly what the parameters are isn’t well documented that I can see. I believe 
they are: (1) the application data pointer, (2) the length of string “a" (in 
bytes or characters?), (3) the pointer to string “a”, (4) the length of string 
“b”, (5) the pointer to string “b”. Again, those parameters aren’t clearly 
specified in the SQLite docs, and I haven’t gone looking for example code, or 
the sources, but I assume those are the answers. One question that remains for 
me is whether the string parameters (3 and 5) would be null-terminated if 
they’re UTF-8, for instance.

Given a collation callback, then:

        int naturalStringCompare(void* appdata, int lenA, const void* strA, int 
lenB, const void* strB)
        {
                /* logic to compare strA and strB here... */
                return result;
        }

you would register this using:

        sqlite3_create_collation(sqlite3, “naturalSortOrder”, SQLITE_UTF8, nil, 
naturalStringCompare);

Do you have explicit questions about that?
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to