]>
git.ipfire.org Git - thirdparty/psycopg.git/log
Daniele Varrazzo [Mon, 4 May 2020 16:09:26 +0000 (04:09 +1200)]
More consistent names for numeric adaptation functions
Daniele Varrazzo [Thu, 23 Apr 2020 05:02:41 +0000 (17:02 +1200)]
Skip flake check of the .eggs dir
Daniele Varrazzo [Thu, 23 Apr 2020 04:29:35 +0000 (16:29 +1200)]
Don't import Python API function from the main cpython package
Importing from there seems deprecated.
[skip ci]
Daniele Varrazzo [Thu, 23 Apr 2020 04:28:32 +0000 (16:28 +1200)]
Fixed import of optimized Transformer
Import it if the C module is used, not just if it's available.
Daniele Varrazzo [Wed, 22 Apr 2020 16:55:11 +0000 (04:55 +1200)]
Avoid creating an intermadiate tuple
We are now around 18x the basic Python performance
[skip ci] Certain type conversion are stubbed out, so tests won't pass.
Daniele Varrazzo [Wed, 22 Apr 2020 16:36:37 +0000 (04:36 +1200)]
An ounce faster by using an array of loaders instead of a list
Daniele Varrazzo [Wed, 22 Apr 2020 15:50:22 +0000 (03:50 +1200)]
Added some C decoders stubs
The speedup compared to the pure Python implementation is now 16x.
Daniele Varrazzo [Sun, 19 Apr 2020 10:02:42 +0000 (22:02 +1200)]
Playing around using a static definition for PQresult.
Daniele Varrazzo [Sun, 19 Apr 2020 08:28:59 +0000 (20:28 +1200)]
Added basic cython implementation of the Transform object
Just an about straight conversion from Python
Daniele Varrazzo [Sun, 19 Apr 2020 00:00:05 +0000 (12:00 +1200)]
pq objects defined as proto rather than stub
Daniele Varrazzo [Sat, 18 Apr 2020 06:22:54 +0000 (18:22 +1200)]
Added result to transformer, fetching data from there
Daniele Varrazzo [Fri, 17 Apr 2020 08:42:38 +0000 (20:42 +1200)]
Some ctypes tweaking to create better C
Daniele Varrazzo [Thu, 16 Apr 2020 14:18:15 +0000 (02:18 +1200)]
Small fixes to the ctypes module
Daniele Varrazzo [Thu, 16 Apr 2020 14:04:23 +0000 (02:04 +1200)]
Added conforming psycopg3.pq implementation in cython
Daniele Varrazzo [Thu, 16 Apr 2020 14:18:36 +0000 (02:18 +1200)]
Pq fixtures in their own module, report the implementation being tested.
Daniele Varrazzo [Thu, 16 Apr 2020 14:17:52 +0000 (02:17 +1200)]
added __impl__ constant to ctypes pq module
Daniele Varrazzo [Tue, 14 Apr 2020 11:11:36 +0000 (23:11 +1200)]
Minor optimizations to data fetching in the cursor
Shaved a few percents here and there out of profile indications.
Daniele Varrazzo [Tue, 14 Apr 2020 07:03:02 +0000 (19:03 +1200)]
Added async implementation for executemany, fetchmany, fetchall
Daniele Varrazzo [Tue, 14 Apr 2020 06:48:12 +0000 (18:48 +1200)]
Dropped tempenv fixture
The pytest monkeypatch fixture does it
Daniele Varrazzo [Tue, 14 Apr 2020 06:37:13 +0000 (18:37 +1200)]
Fixed connect parameters
Raise an error with no params, accept keywords only.
Daniele Varrazzo [Tue, 14 Apr 2020 05:40:53 +0000 (17:40 +1200)]
connection and cursor's close() made async
Dropped close() on __del__ for cursor: it is of no utility. The
important thing is that PGresult frees its memory and that happens at
PGresult's own __del__.
Daniele Varrazzo [Tue, 14 Apr 2020 05:34:02 +0000 (17:34 +1200)]
Define connection.close as asynchronous
Daniele Varrazzo [Mon, 13 Apr 2020 08:51:05 +0000 (20:51 +1200)]
Fixed dispatcher -> dispchar typo
Daniele Varrazzo [Sun, 12 Apr 2020 13:52:30 +0000 (01:52 +1200)]
Added stub for the pq package
Needed as the dynamic import of the modle confuses mypy
Daniele Varrazzo [Sun, 12 Apr 2020 08:44:43 +0000 (20:44 +1200)]
Added helper object to convert Python query into a Postgres query
The object helps keeping some state between preparing and executing,
useful in executemany so preparation can happen only once.
Daniele Varrazzo [Sat, 11 Apr 2020 15:55:32 +0000 (03:55 +1200)]
Added first implementation of executemany based on prepared queries
There's a lot of repetition here
Daniele Varrazzo [Sat, 11 Apr 2020 15:54:59 +0000 (03:54 +1200)]
Added async query prepare functions in pq wrapper
Daniele Varrazzo [Sat, 11 Apr 2020 15:41:11 +0000 (03:41 +1200)]
exec generator split in send and receive
It was actually not needed: I thought erroneously that sending prepared
statements only needed the send bit. However the change is ok and could
also clean up the types around these generator adding a generic PQGen[]
type (with different return values).
Daniele Varrazzo [Sat, 11 Apr 2020 13:00:56 +0000 (01:00 +1200)]
cursor.conn renamed to connection
Daniele Varrazzo [Sat, 11 Apr 2020 12:55:10 +0000 (00:55 +1200)]
libpq protocol generators moved to their own module
Daniele Varrazzo [Sat, 11 Apr 2020 11:38:18 +0000 (23:38 +1200)]
Added cursor.status property and exposing ExecStatus on the cursor
Daniele Varrazzo [Sat, 11 Apr 2020 11:36:16 +0000 (23:36 +1200)]
Added connection.status property
Exposing ConnStatus and TransactionStatus on the connection object.
Daniele Varrazzo [Sat, 11 Apr 2020 09:12:43 +0000 (21:12 +1200)]
Added .close() and .closed on connection and cursor
Daniele Varrazzo [Sat, 11 Apr 2020 09:01:46 +0000 (21:01 +1200)]
Added connection status check on send_query
Daniele Varrazzo [Sat, 11 Apr 2020 08:33:37 +0000 (20:33 +1200)]
Added test to verify pq.error_message() is sane on null args
Daniele Varrazzo [Sat, 11 Apr 2020 08:23:28 +0000 (20:23 +1200)]
Ensure a valid connection with escaping functions
Daniele Varrazzo [Sat, 11 Apr 2020 08:13:58 +0000 (20:13 +1200)]
Guard for null connections in exec functions
Daniele Varrazzo [Sat, 11 Apr 2020 08:01:10 +0000 (20:01 +1200)]
Added test for idempotent PGresult.clear()
Daniele Varrazzo [Sat, 11 Apr 2020 07:58:39 +0000 (19:58 +1200)]
reset and poll fail too if the connection is gone
Daniele Varrazzo [Sat, 11 Apr 2020 07:48:48 +0000 (19:48 +1200)]
More care with functions returning null in PGconn methods
ctypes stub changed: by default the function returning bytes can return
NULL. The ones which never do it are few, so these are the ones which
get special-cased.
Daniele Varrazzo [Sat, 11 Apr 2020 06:03:26 +0000 (18:03 +1200)]
More care in None return values from libpq result functions
Daniele Varrazzo [Sat, 11 Apr 2020 04:54:47 +0000 (16:54 +1200)]
Added barebone implementation of dbapi 2.0
Several methods not tested yet, fetch method not added yet to async
cursor.
Daniele Varrazzo [Sat, 11 Apr 2020 02:20:15 +0000 (14:20 +1200)]
Fixed some shenanigan around connection params
The libpq function return None for an invalid connection: take that into
account in the function signature and usage.
Dropped asymmetry between sync and async connection for the encoding
setter: use for both a set_client_encoding() function. This way it's
easy to keep the getter on the base class.
Daniele Varrazzo [Thu, 9 Apr 2020 07:12:52 +0000 (19:12 +1200)]
The big rename: adapters -> dumpers, typecasters -> loaders.
Daniele Varrazzo [Thu, 9 Apr 2020 00:41:56 +0000 (12:41 +1200)]
Fixed composite info query to work for pg <= 10
creating a row() on the fly caused the error "record type has not been
registered"
Daniele Varrazzo [Wed, 8 Apr 2020 15:52:15 +0000 (03:52 +1200)]
Added tuple text adaptation
It cannot return a record oid, Postgres is not happy to parse it, so
return it as text.
Daniele Varrazzo [Wed, 8 Apr 2020 15:48:11 +0000 (03:48 +1200)]
Fixed formats in query with repeated arguments
Fixed test that wasn't checking the format.
Daniele Varrazzo [Wed, 8 Apr 2020 10:10:45 +0000 (22:10 +1200)]
Added composite.fetch_info_async
Daniele Varrazzo [Wed, 8 Apr 2020 10:10:12 +0000 (22:10 +1200)]
fetchone() made async on async cursor
Daniele Varrazzo [Wed, 8 Apr 2020 09:59:47 +0000 (21:59 +1200)]
register_array() renamed to array.register()
Daniele Varrazzo [Wed, 8 Apr 2020 09:55:37 +0000 (21:55 +1200)]
Fixed registration scope of composite array adapters
Daniele Varrazzo [Wed, 8 Apr 2020 09:00:16 +0000 (21:00 +1200)]
Added typecasting of composite types
Daniele Varrazzo [Wed, 8 Apr 2020 06:15:36 +0000 (18:15 +1200)]
Added cast from varchar, bpchar, name
Note that bpchar (i.e. the output format for "char" - with quotes) and
name are always decoded, even if the db is SQL_ASCII, because these
types are mostly used in system catalogs and there should be no such
crap as unencded data there.
Daniele Varrazzo [Tue, 7 Apr 2020 14:30:33 +0000 (02:30 +1200)]
Added tests for all numeric types arrays
Daniele Varrazzo [Tue, 7 Apr 2020 12:39:37 +0000 (00:39 +1200)]
Dropped ArrayCaster, expose register_array function instead
The function only associates array_oid -> base_oid. Looking up the right
typecaster happens at cast time: this way composite adapters (record,
list) can use the caster register in the right context.
All the types for which there is an adapter gets an array caster now.
Daniele Varrazzo [Tue, 7 Apr 2020 11:18:59 +0000 (23:18 +1200)]
Really use the context to transform components types
It works for arrays and records, except for text arrays because the
decorator registers the TypeCaster directly, not the oid. This must
change, we need a different decorator/registration.
Daniele Varrazzo [Tue, 7 Apr 2020 10:24:09 +0000 (22:24 +1200)]
The Transformer is an adaptation context
Dropped cursor from Adapter, TypeCaster, Transformer. Added adapters and
casters map on Trasformer.
Solves a problem of customization in composite types: if a type is
customized now composite types containing that type use the same
customization. Also fixed a circular reference between transformer and
cursor.
Daniele Varrazzo [Tue, 7 Apr 2020 09:26:49 +0000 (21:26 +1200)]
Work around mypy error of Format not exposed by psycopg3.adapt
Daniele Varrazzo [Tue, 7 Apr 2020 09:23:42 +0000 (21:23 +1200)]
Added binary cast of record type
Daniele Varrazzo [Tue, 7 Apr 2020 08:51:52 +0000 (20:51 +1200)]
Added Transformer.cast_sequence() in place of cast_row()
The function is more generic and the Transformer doesn't have to wrap a
PGresult anymore.
Daniele Varrazzo [Tue, 7 Apr 2020 06:44:04 +0000 (18:44 +1200)]
Added text cast of records
Daniele Varrazzo [Tue, 7 Apr 2020 06:43:00 +0000 (18:43 +1200)]
Dropped accepting None as Transformer.cast() input
More efficient if we only accept non-null results.
Daniele Varrazzo [Tue, 7 Apr 2020 03:26:28 +0000 (15:26 +1200)]
Less global objects in types.array module
Daniele Varrazzo [Sun, 5 Apr 2020 05:37:05 +0000 (17:37 +1200)]
Added xfailing tests to remember what is left to implement
Daniele Varrazzo [Sun, 5 Apr 2020 04:44:31 +0000 (16:44 +1200)]
Cleanup of the array adapter algorithm
Daniele Varrazzo [Sun, 5 Apr 2020 02:07:04 +0000 (14:07 +1200)]
Check that arrays contain consistent objects.
Daniele Varrazzo [Sun, 5 Apr 2020 01:20:21 +0000 (13:20 +1200)]
Dropped spurious comment
Daniele Varrazzo [Sun, 5 Apr 2020 01:10:44 +0000 (13:10 +1200)]
Added adaptation of binary arrays
Added binary array adaptation for test types and some numeric types.
Daniele Varrazzo [Sat, 4 Apr 2020 15:27:12 +0000 (03:27 +1200)]
Consistent name of 'format' parameter
Also really use function caches in Transformer
Daniele Varrazzo [Sat, 4 Apr 2020 15:14:08 +0000 (03:14 +1200)]
Consistent 'src' name for the first argument of the adapters
'cls' is messy when it comes to class methods.
Daniele Varrazzo [Sat, 4 Apr 2020 14:12:10 +0000 (02:12 +1200)]
Added cast of binary arrays
Daniele Varrazzo [Sat, 4 Apr 2020 09:19:21 +0000 (22:19 +1300)]
Fixed typing typo
Daniele Varrazzo [Fri, 3 Apr 2020 14:23:33 +0000 (03:23 +1300)]
Adaptation context transferred to the adapters objects
Daniele Varrazzo [Fri, 3 Apr 2020 13:04:35 +0000 (02:04 +1300)]
Use classmethod instead of staticmethod to play better with inheritance
Daniele Varrazzo [Fri, 3 Apr 2020 12:53:35 +0000 (01:53 +1300)]
Added array tests for sql_ascii db and bytea
Daniele Varrazzo [Fri, 3 Apr 2020 11:58:34 +0000 (00:58 +1300)]
Fixed TypeCasterType and AdapterType types
The previous signature meant an instance of Adapter/TypeCaster or a function,
but we meant a class actually. The error costed some cursing and some
casting to the right type (in mypy sense, not in psyco sense)
Daniele Varrazzo [Fri, 3 Apr 2020 11:57:21 +0000 (00:57 +1300)]
Added wrapper for escape_bytea with no connection
Changed unescape_bytea to be a normal method. The pgconn is now
optional.
Daniele Varrazzo [Fri, 3 Apr 2020 11:19:46 +0000 (00:19 +1300)]
Typecaster renamed to TypeCaster
Because I have ArrayCaster, will have RangeCaster etc.
Daniele Varrazzo [Fri, 3 Apr 2020 11:17:31 +0000 (00:17 +1300)]
Added basic array adaptation infrastructure
Daniele Varrazzo [Fri, 3 Apr 2020 11:09:16 +0000 (00:09 +1300)]
Fixed names of wrapper functions
Daniele Varrazzo [Fri, 3 Apr 2020 00:27:59 +0000 (13:27 +1300)]
Added object to map oid and data types
Daniele Varrazzo [Thu, 2 Apr 2020 23:32:58 +0000 (12:32 +1300)]
Added array delimiter to the data types info
Daniele Varrazzo [Thu, 2 Apr 2020 15:09:51 +0000 (04:09 +1300)]
Cleanup of the encodings table and lookup
Daniele Varrazzo [Thu, 2 Apr 2020 14:57:09 +0000 (03:57 +1300)]
Handle sql_ascii encoding as binary
Daniele Varrazzo [Thu, 2 Apr 2020 13:59:35 +0000 (02:59 +1300)]
Added pq.Escaping object and bytea adaptation
Daniele Varrazzo [Thu, 2 Apr 2020 12:26:57 +0000 (01:26 +1300)]
Added connection.encoding
Daniele Varrazzo [Thu, 2 Apr 2020 09:19:47 +0000 (22:19 +1300)]
Added bytes adaptation
Daniele Varrazzo [Thu, 2 Apr 2020 05:55:10 +0000 (18:55 +1300)]
Added binary typecasting of int, float, bool.
Daniele Varrazzo [Thu, 2 Apr 2020 05:04:33 +0000 (18:04 +1300)]
'pgresult' is part of the Cursor interface
The same way 'pgconn' is a public property of the Connection.
Daniele Varrazzo [Thu, 2 Apr 2020 04:44:44 +0000 (17:44 +1300)]
Modules import to register builtin types moved to types package
Daniele Varrazzo [Thu, 2 Apr 2020 02:29:52 +0000 (15:29 +1300)]
exceptions module renamed to errors
To be part of the public interface, for compatibility with psycopg2
Daniele Varrazzo [Thu, 2 Apr 2020 01:58:46 +0000 (14:58 +1300)]
Module adaptation renamed to adapt
I figure out this is part of the external interface. Let's give it a
nice name.
Daniele Varrazzo [Thu, 2 Apr 2020 01:35:55 +0000 (14:35 +1300)]
Added text types conversion for numeric types and bools
Plenty of tests, too.
Daniele Varrazzo [Wed, 1 Apr 2020 13:25:58 +0000 (02:25 +1300)]
Added tests about adapters/casters selection, some fixes
- Added Transformer.cast() function;
- Can return binary results even with no input parameters;
- libpq functions accept sequences rather than lists.
Daniele Varrazzo [Wed, 1 Apr 2020 11:59:01 +0000 (00:59 +1300)]
Include None in AdaptContext
Using Union[None...] instead of Optional[... is a choice. None has a
meaning, it means global, not optional.
Daniele Varrazzo [Tue, 31 Mar 2020 16:43:04 +0000 (05:43 +1300)]
Definition with a wrong default changed into declaration
Daniele Varrazzo [Tue, 31 Mar 2020 08:28:09 +0000 (21:28 +1300)]
Added mypy tests on travis
Daniele Varrazzo [Tue, 31 Mar 2020 06:07:39 +0000 (19:07 +1300)]
Added install instruction to readme
Daniele Varrazzo [Tue, 31 Mar 2020 05:56:11 +0000 (18:56 +1300)]
Use == instead of is to check the Wait states
Now they are integers so is, while it works, is an implementation
detail.
Daniele Varrazzo [Tue, 31 Mar 2020 05:45:08 +0000 (18:45 +1300)]
Use the selectors module instead of select
Choose a better way to wait for readyness than select if available.
Also fixed an error in both sync and async waiting: don't discard the
result of send().