On Nov 25, 2009, at 12:26 AM, Vasu Nori wrote:

> this bug doesn't appear in 3.6.20.
> I didn't find a specific bug fix that actually addressed this bug  
> between
> 3.6.16 and 3.6.20.
> must be a side-effect fix from some other fix.. anyone knows HOW it  
> got
> fixed in the code? would be good to know.

Suggest running [valgrind] on your program. You never know. Whenever  
things
make no sense, run valgrind...

Dan.


> On Wed, Nov 18, 2009 at 10:31 PM, Vasu Nori <vn...@google.com> wrote:
>
>> try using a user-defined collation function I included in the post.  
>> here it
>> is again.
>>
>> static int  twocaseCollatingFunc(void *NotUsed, int n1, const void  
>> *v1, int
>> n2, const void *v2) {
>>  if (n1 < 2 || n2 < 2) {
>>    printf ("lengths are smaller than 2: n1 = %d, n2 = %d\n", n1, n2);
>>    return 0;
>>  }
>>  char c1 = ((char *)v1)[1];
>>  char c2 = ((char *)v2)[1];
>>  int rslt;
>>  if (c1 < c2)
>>    rslt = -1;
>>  else if (c1 > c2)
>>    rslt = 1;
>>  else rslt = 0;
>>  return rslt;
>> }
>>
>>
>> add this code to src/main.c.
>> in the same file, don't forget to add createCollation() line for  
>> "TWOCASE"
>> - just like the line for "NOCASE".
>>
>> I tried it on 3.6.2 (works) and 3.6.16 (fails).
>>
>> thanks for looking into this.
>>
>> On Wed, Nov 18, 2009 at 9:31 PM, Dan Kennedy  
>> <danielk1...@gmail.com>wrote:
>>
>>>
>>>
>>>
>>> On Nov 19, 2009, at 6:40 AM, Vasu Nori wrote:
>>>
>>>> I am noticing a behavior change in processing of  "collate" from
>>>> 3.6.2 to
>>>> versions 3.6.16 & beyond.
>>>> it *could* make sense but I find some inconsistencies.. let me
>>>> explain.
>>>>
>>>> 1. create a simple collation function which compares two input
>>>> strings based
>>>> on just the second char (code is at the end of this email)
>>>> 2. call this function "twocase"
>>>> 3. create a table and populate with this sample data
>>>>
>>>> sqlite>create table foo(i text);
>>>> sqlite>insert into foo values("a2");
>>>> sqlite>insert into foo values("b1");
>>>> sqlite>insert into foo values("c5");
>>>> sqlite>insert into foo values("d4");
>>>> sqlite>insert into foo values("e3");
>>>>
>>>> 4.  select from the table using orderby and collate
>>>>
>>>> sqlite> select * from foo order by i collate twocase;
>>>>
>>>> b1
>>>>
>>>> a2
>>>> e3
>>>> d4
>>>> c5
>>>>
>>>> 5. notice that the above are sorted on the 2nd char
>>>> 6. create a view on the above table and select from the view with
>>>> order by
>>>> and collate
>>>>
>>>> sqlite>create view foo_view as select i from foo;
>>>> sqlite>select * from foo_view;
>>>> sqlite>select * from foo_view order by i collate twocase;
>>>> a2
>>>> b1
>>>> c5
>>>> d4
>>>> e3
>>>
>>> Could not reproduce this with 3.6.20 or 3.6.18 (see below). Do you
>>> have a C program you can post that demonstrates the problem?
>>>
>>> Dan.
>>>
>>>
>>>
>>> ~/sqlite/tipbld$ ./sqlite3
>>> SQLite version 3.6.20
>>> Enter ".help" for instructions
>>> Enter SQL statements terminated with a ";"
>>> sqlite> CREATE TABLE foo(i text);
>>> sqlite> INSERT INTO foo VALUES('a');
>>> sqlite> INSERT INTO foo VALUES('B');
>>> sqlite> INSERT INTO foo VALUES('c');
>>> sqlite> CREATE VIEW foo_view AS SELECT i FROM foo;
>>> sqlite> SELECT i FROM foo ORDER BY i COLLATE nocase;
>>> a
>>> B
>>> c
>>> sqlite> SELECT i FROM foo_view ORDER BY i COLLATE nocase;
>>> a
>>> B
>>> c
>>> sqlite> SELECT i FROM foo ORDER BY i;
>>> B
>>> a
>>> c
>>> sqlite> SELECT i FROM foo_view ORDER BY i;
>>> B
>>> a
>>> c
>>> sqlite>
>>>
>>>
>>>
>>> _______________________________________________
>>> sqlite-users mailing list
>>> sqlite-users@sqlite.org
>>> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>>>
>>
>>
> _______________________________________________
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to