Skip to content

Commit 38bc774

Browse files
authored
Fix: do not close connection after an empty statement (#403)
1 parent a37db98 commit 38bc774

File tree

7 files changed

+28
-3
lines changed

7 files changed

+28
-3
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 3.4.6
4+
5+
- Fix: do not close connection after an empty statement.
6+
37
## 3.4.5
48

59
- `close(force: true)` to indicate intent to force-close pending queries and resources. [#396](https://github.com/isoos/postgresql-dart/pull/396) by [davidmartos96](https://github.com/davidmartos96)

lib/src/message_window.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ Map<int, _ServerMessageFn> _messageTypeMap = {
2121
67: (r, _) => CommandCompleteMessage.parse(r),
2222
68: (r, _) => DataRowMessage.parse(r),
2323
69: ErrorResponseMessage.parse,
24+
73: (_, __) => EmptyQueryResponseMessage(),
2425
75: (r, _) => BackendKeyMessage.parse(r),
2526
82: AuthenticationMessage.parse,
2627
83: (r, l) => ParameterStatusMessage.parse(r),

lib/src/messages/server_messages.dart

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -449,6 +449,13 @@ Future<XLogDataMessage> parseXLogDataMessage(
449449
}
450450
}
451451

452+
class EmptyQueryResponseMessage extends ServerMessage {
453+
EmptyQueryResponseMessage();
454+
455+
@override
456+
String toString() => 'EmptyQueryResponseMessage()';
457+
}
458+
452459
class UnknownMessage extends ServerMessage {
453460
final int code;
454461
final Uint8List bytes;
@@ -476,6 +483,9 @@ class UnknownMessage extends ServerMessage {
476483
}
477484
return true;
478485
}
486+
487+
@override
488+
String toString() => 'UnknownMessage($code, length=${bytes.length})';
479489
}
480490

481491
abstract class ErrorFieldId {

lib/src/v3/connection.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -926,6 +926,8 @@ class _PgResultStreamSubscription
926926
// TODO(osaxma): Prevent executing queries when Streaming Replication
927927
// is ongoing
928928
await _completeQuery();
929+
case EmptyQueryResponseMessage():
930+
break;
929931
default:
930932
// Unexpected message - either a severe bug in this package or in the
931933
// connection. We better close it.

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: postgres
22
description: PostgreSQL database driver. Supports statement reuse and binary protocol and connection pooling.
3-
version: 3.4.5
3+
version: 3.4.6
44
homepage: https://github.com/isoos/postgresql-dart
55
topics:
66
- sql

test/pool_test.dart

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,10 @@ void main() {
135135
),
136136
);
137137

138-
// this doesn't throw but it causes the connection to close
139138
await db.execute('-- test');
140-
await db.execute('SELECT 1');
139+
expect(await db.execute('SELECT 1'), [
140+
[1]
141+
]);
141142
});
142143
});
143144

test/v3_close_test.dart

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,13 @@ void main() {
7171
await conn2.execute(
7272
'select pg_terminate_backend($conn1PID) from pg_stat_activity;');
7373
});
74+
75+
test('empty query does not close connection', () async {
76+
await conn1.execute('-- test');
77+
expect(await conn1.execute('SELECT 1'), [
78+
[1]
79+
]);
80+
});
7481
});
7582

7683
group('force close', () {

0 commit comments

Comments
 (0)