P
Danny Milosavljevic <dannym@scratchpost.org> writes:
> Hi Tatiana,
>
> On Sun, 8 Jul 2018 21:48:32 +0200
> Tatiana Sholokhova <tanja201396@gmail.com> wrote:
>
>> Do you have ideas on how to
>> implement tuple comparison and other routines in SQL and guile in a
>> convenient and flexible way?
>
> sqlite3 supports row values, so the comparison can be
> written like this:
>
> select * from foo where (a,b,c) = (2,'foo',3);
>
> It even supports NULLs for wildcards, though it's a little more complicated:
>
> select * from foo where coalesce((a,b,c) = (2,NULL,3), 1) = 1;
>
> The sqlite C interface doesn't support parameter bindings for the entire
> row, though, so you'd have to specify 3 values.
>
> This works:
>
> (sqlite-exec db "select * from foo where (a,b,c) = (" 2 "," "foo" "," 3 ");")
>
> but this doesn't work, unfortunately:
>
> (sqlite-exec db "select * from foo where (a,b,c) = " '(2 "foo" 3) ";")
>
> See also https://www.sqlite.org/rowvalue.html
With the '<' operator, it doesn't give the results we are looking for, I
think.
For example:
select (0,1) < (1,0); -- returns 1
select (0,0) < (0,1); -- returns 1
This is working as expected. Actually this:
(a,b)<(c,d) is a shortcut for a<c or (a=c and b<d).
In both cases, we'd want it to return 0.
How do we use it? Why this is the expected result?
I think we should use:
select (0 < 1) and (1 < 0); -- returns 0
select (0 < 0) and (0 < 1); -- returns 0
Could you please clarify which numbers are the placeholders for which quantities?
instead, for the pagination borders code.