--- /dev/null
+.. change::
+ :tags: bug, postgresql
+ :tickets: 4601
+
+ Fixed regression from release 1.3.2 caused by :ticket:`4562` where a URL
+ that contained only a query string and no hostname, such as for the
+ purposes of specifying a service file with connection information, would no
+ longer be propagated to psycopg2 properly. The change in :ticket:`4562`
+ has been adjusted to further suit psycopg2's exact requirements, which is
+ that if there are any connection parameters whatsoever, the "dsn" parameter
+ is no longer required, so in this case the query string parameters are
+ passed alone.
\ No newline at end of file
# send individual dbname, user, password, host, port
# parameters to psycopg2.connect()
return ([], opts)
+ elif url.query:
+ # any other connection arguments, pass directly
+ opts.update(url.query)
+ return ([], opts)
else:
- # send a blank string for "dsn" to psycopg2.connect()
+ # no connection arguments whatsoever; psycopg2.connect()
+ # requires that "dsn" be present as a blank string.
return ([''], opts)
def is_disconnect(self, e, connection, cursor):
eq_(cargs, [])
eq_(cparams, {"host": "host"})
+ def test_psycopg2_empty_connection_string_w_query_one(self):
+ dialect = psycopg2_dialect.dialect()
+ u = url.make_url("postgresql:///?service=swh-log")
+ cargs, cparams = dialect.create_connect_args(u)
+ eq_(cargs, [])
+ eq_(cparams, {"service": "swh-log"})
+
+ def test_psycopg2_empty_connection_string_w_query_two(self):
+ dialect = psycopg2_dialect.dialect()
+ u = url.make_url("postgresql:///?any_random_thing=yes")
+ cargs, cparams = dialect.create_connect_args(u)
+ eq_(cargs, [])
+ eq_(cparams, {"any_random_thing": "yes"})
+
+ def test_psycopg2_nonempty_connection_string_w_query(self):
+ dialect = psycopg2_dialect.dialect()
+ u = url.make_url("postgresql://somehost/?any_random_thing=yes")
+ cargs, cparams = dialect.create_connect_args(u)
+ eq_(cargs, [])
+ eq_(cparams, {"host": "somehost", "any_random_thing": "yes"})
+
class BatchInsertsTest(fixtures.TablesTest):
__only_on__ = "postgresql+psycopg2"