@@ -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