Closed barbieri closed 1 year ago
I will have a closer look after we deal with #7 :)
@honzasp, it's now ready to be reviewed. For the API docs, I used sphinx autodoc, so it will get the function/class docstrings.
The test suite only runs on python 3.11 since I used its code, some stuff it check is not available in older version. You can see changes to their code by downloading and diff cpython-3.11.3/Lib/test/test_sqlite3
Do we have some performance numbers for this client with Turso?
I didn't run any benchmarks, but I don't see why it would matter, unless you see some clear optimization to be employed. The synchronous characteristics will already add lots of latency
I definitely see many applications where latency matters. If it turns out that code that switches from sqlite3 to Turso becomes 1000x slower, we will have hard time selling this to people :)
I definitely see many applications where latency matters. If it turns out that code that switches from sqlite3 to Turso becomes 1000x slower, we will have hard time selling this to people :)
they exist, we can run some benchmarks, but comparing it to sqlite3 makes no sense... you'd have to use an ORM and compare the same code against mysql/postgresql... but then your have not just different transport, you have different engines.
however, as I said: what's the action on it?
{"type": XX, "value": YY}
into a more complex solution (see more below)? (likely not that big)I understand sqlite is mostly typeless, but you could easily return the sqlite3_column_type()
in the columns (close by decltype
) and keep each value to an encoding based strictly on that, like numbers come as string to keep precisions, strings comes as unicode and blobs are base64. Alternatively you could go with always blobs (sqlite3_column_bytes()
+ sqlite3_column_blob()
) and let clients decode. Python, for instance, whenever you require a converter, it will always do that https://github.com/python/cpython/blob/main/Modules/_sqlite/cursor.c#L357-L374
Or you could mix both, using sqlite3_column_type()
unless explicitly told by the client they want the results interpreted in another type, so you could pass a map/dict with column name (using AS "name"
could help) and desired type (ie: return as blobs, as strings...) using the conversion table https://www.sqlite.org/c3ref/column_blob.html
This would save lots of bandwidth sending results and working with them.
@honzasp squashed all the fixups, the PR is ready to be merged. Thanks for your help 🙏
This PR should wait on #7 as most of the commits will be reviewed there.