Re: wrong number of arguments to function rank()
Dan Kennedy <[email protected]>
| Newsgroups | gmane.comp.db.sqlite.general |
|---|---|
| Message-ID | <[email protected]> |
On 6/2/63 19:00, Andrea Spacca wrote:
> Hello,
>
> I experienced seeing no results for search in matrix-syanpse backed by
> sqlite3 storage. Tracking down the their source code I identified the
> query:
> https://github.com/matrix-org/synapse/blob/v1.9.1/synapse/storage/data_stores/main/search.py#L424
>
> I then run the query directly on a copy of the database getting the
> error in the subject. I run an integrity check on the fts and no error
> was reported.
>
> To be sure I started from a new database, create the virtual table and
> inserted data to run the query on. Same result:
> sqlite> CREATE VIRTUAL TABLE event_search_test USING fts4 ( event_id,
> room_id, sender, key, value );
> sqlite> INSERT INTO event_search_test
> VALUES('test','test','','test','a matching string');
> sqlite> SELECT * FROM event_search_test WHERE value MATCH "string";
> test|test||test|a matching string
> sqlite> SELECT quote(matchinfo(event_search_test)) as rank, room_id,
> event_id, value FROM event_search_test WHERE value MATCH "string";
> X'0100000005000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000001000000'|test|test|a
> matching string
> sqlite> SELECT rank(matchinfo(event_search_test)) as rank, room_id,
> event_id, value FROM event_search_test WHERE value MATCH "string";
> Error: wrong number of arguments to function rank()
Looks like there should be one argument after the "matchinfo" for each
column in the table. So:
SELECT rank(matchinfo(event_search_test), 1.0, 1.0) AS rank, room_id...
Dan.
>
>
>
> I'm running sqlite3 3.27.2 on a Debian 10 machine.
> I looked at
> https://github.com/sqlite/sqlite/blob/version-3.27.2/src/test_func.c#L828
> and I can see that the error is somehow related to the mismatching
> between the second unsinged 32bit integer in the matchinfo returned
> blob and the nVal in the rankfunc param (please, correct me if I'm
> wrong).
>
> I don't know exactly which nVal value rankfunc receives, I can see
> that upon sqlite3_create_function call for the function it takes -1 as
> variable number of arguments.
>
> I see that the nCol in my query is 5, so I expect nVal to have
> something like the value of the number of column in the fst table plus
> the hidden one: in this case the value would match, but this is
> clearly not the case in my test.
>
> Similar test failed as well:
> sqlite> CREATE VIRTUAL TABLE another_test USING fts4 (a_field,
> another_field);
> sqlite> INSERT INTO another_test VALUES('test', 'test');
> sqlite> SELECT * FROM another_test WHERE a_field MATCH "test";
> test|test
> sqlite> SELECT quote(matchinfo(another_test)) as rank, a_field FROM
> another_test WHERE a_field MATCH "test";
> X'0100000002000000010000000100000001000000000000000000000000000000'|test
> sqlite> SELECT rank(matchinfo(another_test)) as rank, a_field FROM
> another_test WHERE a_field MATCH "test";
> Error: wrong number of arguments to function rank()
>
>
> I cannot find any bug related to this problem, so I guess is somehow
> related to my env.
>
> Thanks,
> Andrea Spacca
>
>
> _______________________________________________
> sqlite-users mailing list
> [email protected]
> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users