Hi Martin,

I haven't been able to pick up pace my email until this morning. Sorry about that.

As it turns out, the error was on my side (surprise). The code seemed to be working fine: early tests showed data being churned as expected, so I started cleaning it up and factoring up the code. To make the story short, I accidentally deleted the line that was incrementing the index keeping in sync with the array enumerator. Result: I was always storing element zero in the database. No wonder I had 4000+ entries looking exactly the same! The first version of the code was working fine, so I assumed that LIKE and GLOB were there culprits after I started noticing weird results.

Oh!... just a quick message for the row-scan non-believers out there: SQLite flies, even under this scenario. I'm getting wonderful performance numbers by keeping everything within SQLite-land. The code is simple and I let SQLite do all the magic. What else can I ask for? :-)

Thanks everybody for your help and comments.

Regards,

-- Tito

On 27/03/2006, at 3:40, Martin Jenkins wrote:

Tito,

I knocked up a quick test with python and apsw and it worked as intended. My data isn't exactly the same as yours in that I don't have the variety in the keys, but you're not having problems with those. My test database contains your data with/without embedded carriage returns - as expected, it makes no difference.

In the following, zip(..) is a quick hack to get all the results from the query. The spurious '[', ']' and other brackets surrounding the results are a result of the way that apsw returns data (as lists of python tuples).

Apologies for the extreme width of the following lines. :(

zip(csr.execute("select * from t"))

[
(('file000000005809', '(0,NSFileTypeRegular,0,22537,0,staff, 234881026,294022,2004-12-16 10:11:00 -0800,tciuro,384,2006-03-26 08:01:55 -0800,502,20)'),), (('file01010000581a', '(1,NSFileTypeRegular,1,22554,0,staff, 234881026,294022,2004-12-16 10:11:03 -0800,tciuro,384,2006-03-26 08:04:55 -0800,502,20)'),), (('file02020000582b', '(2,NSFileTypeRegular,2,22571,0,staff, 234881026,294022,2004-12-16 10:11:06 -0800,tciuro,384,2006-03-26 08:07:55 -0800,502,20)'),),
...
(('file00000000595d', '(\n 0,\n NSFileTypeRegular,\n 0,\n 22877,\n 0,\n staff,\n 234881026,\n 294022,\n 2004-12-16 10:11:00 -0800,\n tciuro,\n 384,\n 2006-03-26 08:01:55 -0800,\n 502,\n 20\n)'),), (('file01010000596e', '(\n 1,\n NSFileTypeRegular,\n 1,\n 22894,\n 0,\n staff,\n 234881026,\n 294022,\n 2004-12-16 10:11:03 -0800,\n tciuro,\n 384,\n 2006-03-26 08:04:55 -0800,\n 502,\n 20\n)'),), (('file02020000597f', '(\n 2,\n NSFileTypeRegular,\n 2,\n 22911,\n 0,\n staff,\n 234881026,\n 294022,\n 2004-12-16 10:11:06 -0800, \n tciuro,\n 384,\n 2006-03-26 08:07:55 -0800,\n 502,\n 20\n)'),),
...
]

zip(csr.execute("SELECT * FROM t WHERE CMValues GLOB '*2004-12-16 10:11:45 -0800*'"))

[
(('file151500005908', '(15,NSFileTypeRegular,15,22792,0,staff, 234881026,294022,2004-12-16 10:11:45 -0800,tciuro,384,2006-03-26 08:46:55 -0800,502,20)'),), (('file151500005a5c', '(\n 15,\n NSFileTypeRegular,\n 15,\n 23132,\n 0,\n staff,\n 234881026,\n 294022,\n 2004-12-16 10:11:45 -0800,\n tciuro,\n 384,\n 2006-03-26 08:46:55 -0800,\n 502,\n 20\n)'),)
]

zip(csr.execute("SELECT * FROM t WHERE CMValues LIKE '%2004-12-16 10:11:45 -0800%'"))

[
(('file151500005908', '(15,NSFileTypeRegular,15,22792,0,staff, 234881026,294022,2004-12-16 10:11:45 -0800,tciuro,384,2006-03-26 08:46:55 -0800,502,20)'),), (('file151500005a5c', '(\n 15,\n NSFileTypeRegular,\n 15,\n 23132,\n 0,\n staff,\n 234881026,\n 294022,\n 2004-12-16 10:11:45 -0800,\n tciuro,\n 384,\n 2006-03-26 08:46:55 -0800,\n 502,\n 20\n)'),)
]

Could you try reducing your search strings and see if there's a point at which they start working?

HTH,

Martin Jenkins
XQP Ltd
Ascot, UK

----- Original Message ----- From: "Tito Ciuro" <[EMAIL PROTECTED]>
To: "Forum SQLite" <sqlite-users@sqlite.org>
Sent: Sunday, March 26, 2006 6:50 PM
Subject: [sqlite] LIKE and GLOB bug with numbers?


Hello,

I've populated a datafile with 40.176 records which contain file attributes and file paths. I have two columns, CMKey and CMValues. The column CMKey contains the path to the file and the column CMValues contains the attribute values. For example:

CMKey: Application Support/AbiSuite/AbiWord.Profile

CMValues:
(
    0,
    NSFileTypeRegular,
    1,
    21508,
    0,
    staff,
    234881026,
    294022,
    2004-12-16 10:11:35 -0800,
    tciuro,
    384,
    2006-03-26 08:35:55 -0800,
    502,
    20
)

Both columns are of type TEXT.

This is what I've found:

1) SELECT * FROM FinderFiles WHERE CMKey GLOB '*AbiWord.Profile*' returns 1 match. This is correct.

2) SELECT * FROM FinderFiles WHERE CMKey LIKE '%ABIWORD.Profile%' returns 1 match. This is correct.

3) SELECT * FROM FinderFiles WHERE CMValues GLOB '*2004-12-16 10:11:35 -0800*' returns 40.176 matches. This is not correct. There is no way I created these 40.176 file at the *very same* time. Just to be sure, I looked at one random file (of the 40.176) and I've obtained the following creation date attribute:

NSFileCreationDate = 2004-02-21 06:12:43 -0800;

The same problem occurs if I perform the query:

SELECT * FROM FinderFiles WHERE CMValues LIKE '%2004-12-16 0:11:35 -0800%'

This problem seems to occur when trying to match something with numbers:

- If I look for NSFilePosixPermissions 448 (which I know exists) I get zero matches
- If I look for strings, such as in step #1 or #2, it works fine.

Something is wrong, I just can't figure out why...

Any ideas? Is this a bug?

Thanks,

-- Tito



Reply via email to