Daniele Varrazzo
73db6bee01
Keep the connection in blocking mode unless it is not async.
...
Dropped set/unset nonblocking mode for copy and lobject operations:
lobjects don't work in nonblocking mode so they will hardly be supported
in green/async branches. Support for copy is still feasible, but it
will be done in other code paths (called by poll).
2010-05-09 20:37:48 +01:00
Daniele Varrazzo
e29424a230
Dropped large object support when psycopg is in green mode.
...
Async mode and large object are not compatible, albeit I haven't found
an authoritative source yet.
2010-05-09 20:34:02 +01:00
Daniele Varrazzo
2596cf7125
Simplified psyco_wait() function interface.
2010-04-25 23:08:08 +01:00
Daniele Varrazzo
8efa1fa6af
Dropped compiling warning.
2010-04-25 23:08:08 +01:00
Daniele Varrazzo
dab098c1cb
Cleaned up documentation for connection status constants.
...
Dropped reference to unused/internal states.
2010-04-23 13:28:49 +01:00
Daniele Varrazzo
cb40342afa
poll implementation for async, sync and green connection unified.
2010-04-23 13:28:49 +01:00
Daniele Varrazzo
0da4befe78
Added function to advance the state after flush attempt.
2010-04-23 13:28:38 +01:00
Daniele Varrazzo
f3b3483df3
Added a function to advance the state after a read attempt.
...
Dropped calls to PQisBusy/PQconsumeInput in the connection code.
2010-04-23 13:24:36 +01:00
Daniele Varrazzo
e82d2be64b
More lenient test timeout for a slow (or busy) machine.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
1edbd16577
Dropped curs_get_last_result function.
...
The result is read from a pqpath function and put on the async_cursor by
a function that also checks for is presence and dismiss it after its
usage.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
a66de9808f
Added 'pq_get_last_result()' function.
...
The function reads the last result after an asynchronous query.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
5be0fc52ca
Reusable parts of the green polling refactored out.
...
The functions _conn_poll_connecting() and _conn_poll_query() will be
usable by the async connections too.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
df959c20be
Making sync and async connection setup somewhat more consistent.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
d915cb12a8
Functions to poll in ready state moved on the connection.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
9f5d835de6
Functions conn_poll_* renamed to conn_poll_connect_*.
...
These functions are used only during async connections, not for polling
afterwards.
2010-04-23 13:24:35 +01:00
Daniele Varrazzo
d2d1160260
Documentation about coroutines support reviewed.
2010-04-23 13:20:56 +01:00
Daniele Varrazzo
7af0bf0b54
Set the async_status to ASYNC_DONE after a query with wait callback.
...
Failing in doing that broke notifications reception.
The responsibility for changing the async_status has been moved to the
poll function: this is consistent with how the async branch is
implemented.
With this commit all the test suite passes in "green" mode.
2010-04-21 16:20:16 +01:00
Daniele Varrazzo
d71520db9a
Read the server version only after connection established.
2010-04-21 15:31:07 +01:00
Daniele Varrazzo
8fed0aa57d
Forbid COPY-related methods in green mode.
...
With the current implementation, at best they would silently block. They
actually hang everything.
Implementation posponed after some refactoring of the polling system,
because it will be probably possible to provide an implementation for
'poll()' during COPY which is good for both async and green modes.
2010-04-21 15:21:33 +01:00
Daniele Varrazzo
c1f0d4d46c
Read notifications when polling an idle sync connection.
2010-04-21 15:21:33 +01:00
Daniele Varrazzo
4bb0c3bdf6
Use the wait callback in the connection setup queries.
2010-04-21 15:21:33 +01:00
Daniele Varrazzo
0ec73a18b4
'pq_execute_command_locked()' calls the wait callback if set.
...
The function is called without holding the GIL. Because it is necessary
to execute the Python callback if set, we need to re-acquire the GIL and
tnen release it again. In order to correctly bookkeep the thread state,
the pointer of the _save variable is passed to the function.
2010-04-21 15:21:33 +01:00
Daniele Varrazzo
7a06c0455b
Try to restore the connection state after a wait callback error.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
a54932ee9c
Added documentation for the green features.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
127f92f9db
Changed 'psyco_wait()' to only take the connection.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
0dd5d3f1d9
Correctly flush async queries in 'green' mode.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
8ba0f00d21
Added 'get_wait_callback()' function.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
a7c41a0388
'pq_execute()' uses the user wait callback if provided.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
55270cab9f
'poll()' can raise a Python exception in case of error.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
442b3b2f6c
Added 'psyco_exec_green()' to replace 'PQexec' using the user-provided block function.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
6dd6bee217
Added async read support to 'connection.poll()'.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
1108172e4c
The test suite can be run against the green path.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
1607f89bb1
Avoid the locks dance when reading the connection socket number.
...
It is a fast and non critical operation, so the lock is not required.
Furthermore, called from the wait callback creates a deadlock.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
389ad08965
Use the wait callback during connection if set.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
04d66a6c82
Added poll implementation for sync connection with external wait.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
1446f046e9
Added wait callback and functions to deal with it.
2010-04-21 15:21:32 +01:00
Daniele Varrazzo
02a28ff028
Notifications are automatically read after each query.
...
Added tests for basic notifications process.
2010-04-21 15:09:14 +01:00
Daniele Varrazzo
12ef826d50
Dropped redundant call to conn_notice_process().
...
If the connection is sync, notices will be processed by pq_fetch()
downstream.
If the connection is async, here we have only sent the query: no result
is ready yet, and neither notices have had a chance to arrive: they will
be retrieved later by pq_is_busy().
Added tests to check the above statement don't break.
2010-04-21 15:09:14 +01:00
Daniele Varrazzo
bcfcea4b49
Fixed reference leak in notify reception.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
2af29b467d
Added missing points to the changelog.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
d8f4ed1a04
Fixed documentation and example for asynchronous notifications.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
6fecc36b7f
Connection method 'executing()' renamed to 'isexecuting()'.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
7ee09353ec
Connection method 'issync()' changed into the attribute 'async'.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
7cf52da969
Ensure to close the connections in the doctests to avoid deadlocks.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
ac6938a26a
Fixed async documentation after cursor.poll() dropped.
2010-04-21 15:09:13 +01:00
Jan Urbański
a57a9976b4
Fix the NOTIFY example to use the correct APIs
2010-04-21 15:09:13 +01:00
Jan Urbański
067161d5f3
Remove fileno() and poll() from cursors
...
Instead, the code should be using the fileno() and poll() methods of
the cursor's connection. Handle the case when poll() is called on an
already built connection as a request to poll the asynchronous query
(if there is one) and get NOTIFY events.
Update the tests to reflect that change, add a test for NOTIFY.
2010-04-21 15:09:13 +01:00
Daniele Varrazzo
b7327a349d
FAQs grouped in themes.
2010-04-21 15:09:13 +01:00
Jan Urbański
f06f557111
Add one more test for errors involving two cursors
2010-04-20 23:01:10 +01:00
Jan Urbański
c4ebc0f702
Handle errors in asynchronous queries.
...
Do it by keeping the reference to the last PGresult in the cursor and
calling pq_fetch() before ending the asynchronous execution. This
takes care of handling the possible error state of the PGresult and
also allows the removal of the needsfetch flag, since now after
execution ends the results are already fetched and parsed.
2010-04-20 23:01:01 +01:00