Skip to content

Incompatibility with latest libsqlite 3.49.1 #343

Open
@steve-mavens

Description

@steve-mavens

I'm seeing an exception when running diskcache with libsqlite 3.49.1. I don't see the same exception with libsqlite 3.48.0.

lib\site-packages\diskcache\core.py:808: in set
    self._row_insert(db_key, raw, now, columns)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

self = <diskcache.core.Cache object at 0x0000022E9CCC7E20>
key = '77c445cc8460f4f934c43483991ba5c297eb27fa6efe00f01da92a3b85ae5642', raw = True, now = 1740589097.66946
columns = (None, None, 0, 1, None, 'ab0169c71b0f496aadd6f647d989a7e4')

    def _row_insert(self, key, raw, now, columns):
        sql = self._sql
        expire_time, tag, size, mode, filename, value = columns
>       sql(
            'INSERT INTO Cache('
            ' key, raw, store_time, expire_time, access_time,'
            ' access_count, tag, size, mode, filename, value'
            ') VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)',
            (
                key,
                raw,
                now,  # store_time
                expire_time,
                now,  # access_time
                0,  # access_count
                tag,
                size,
                mode,
                filename,
                value,
            ),
        )
E       sqlite3.OperationalError: no such column: "size" - should this be a string literal in single-quotes?

lib\site-packages\diskcache\core.py:857: OperationalError

So far I've only tested on Windows (specifically using conda to build the environment and switch the version of libsqlite), and the exception came from deep in one of my own code's tests. So if it's not obvious what's going on then I can try for a minimal reproducing case, but my suspicion is that anything that calls that line of code in diskcache will trigger it.

I don't know whether or not this is intentional and/or reasonable behaviour by libsqlite. They do say that all English words could become SQL keywords at any time, and so "to prevent your code from being broken by future enhancements, you should normally quote any identifier that is an English language word, even if you do not have to". But I doubt that anyone actually does that. Anyway 'size' isn't even on the current documented list (last modified in 2022): https://sqlite.org/lang_keywords.html and isn't mentioned in their release notes as a new keyword: https://sqlite.org/releaselog/3_49_1.html

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions