Skip to content

Commit 4996e20

Browse files
authored
Merge pull request #41 from jef-n/add-service
add support for service= parameter
2 parents c43fe1b + 97898d8 commit 4996e20

File tree

1 file changed

+23
-11
lines changed

1 file changed

+23
-11
lines changed

connectors/postgis.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ def connect(self, selected, parent=None):
119119
raise DbError( 'there is no defined database connection "%s".' % selected )
120120

121121
get_value_str = lambda x: unicode(settings.value(x) if Utils.isSIPv2() else settings.value(x).toString())
122-
host, port, database, username, password = map(get_value_str, ["host", "port", "database", "username", "password"])
122+
service, host, port, database, username, password = map(get_value_str, ["service", "host", "port", "database", "username", "password"])
123123

124124
# qgis1.5 use 'savePassword' instead of 'save' setting
125125
isSave = settings.value("save") if Utils.isSIPv2() else settings.value("save").toBool()
@@ -131,43 +131,54 @@ def connect(self, selected, parent=None):
131131
settings.endGroup()
132132

133133
uri = qgis.core.QgsDataSourceURI()
134-
uri.setConnection(host, port, database, username, password)
134+
if service:
135+
uri.setConnection(service, database, username, password)
136+
else:
137+
uri.setConnection(host, port, database, username, password)
138+
135139
return Connection(uri)
136140

137141

138142
def __init__(self, uri):
139143
DbConn.Connection.__init__(self, uri)
140144

145+
self.service = uri.service()
141146
self.host = uri.host()
142147
self.port = uri.port()
143148
self.dbname = uri.database()
144149
self.user = uri.username()
145150
self.passwd = uri.password()
146151

147-
if self.dbname == '' or self.dbname is None:
148-
self.dbname = self.user
149-
150152
try:
151153
self.con = psycopg2.connect(self.con_info())
152154
except psycopg2.OperationalError, e:
153155
raise DbError(e)
156+
157+
if not self.dbname:
158+
self.dbname = self.get_dbname()
154159

155160
self.has_spatial = self.check_spatial()
156161

157162
self.check_geometry_columns_table()
158163

159164
# a counter to ensure that the cursor will be unique
160165
self.last_cursor_id = 0
161-
166+
162167
def con_info(self):
163168
con_str = ''
164-
if self.host: con_str += "host='%s' " % self.host
165-
if self.port: con_str += "port=%s " % self.port
166-
if self.dbname: con_str += "dbname='%s' " % self.dbname
167-
if self.user: con_str += "user='%s' " % self.user
168-
if self.passwd: con_str += "password='%s' " % self.passwd
169+
if self.service: con_str += "service='%s' " % self.service
170+
if self.host: con_str += "host='%s' " % self.host
171+
if self.port: con_str += "port=%s " % self.port
172+
if self.dbname: con_str += "dbname='%s' " % self.dbname
173+
if self.user: con_str += "user='%s' " % self.user
174+
if self.passwd: con_str += "password='%s' " % self.passwd
169175
return con_str
170176

177+
def get_dbname(self):
178+
c = self.con.cursor()
179+
self._exec_sql(c, "SELECT current_database()")
180+
return c.fetchone()[0]
181+
171182
def get_info(self):
172183
c = self.con.cursor()
173184
self._exec_sql(c, "SELECT version()")
@@ -841,3 +852,4 @@ def _table_name(self, schema, table):
841852
#except DbError, e:
842853
# print e.message, e.query
843854

855+
# vim: noet ts=8 :

0 commit comments

Comments
 (0)