Skip to content
Permalink
Browse files

fixed ticket #1173, new script which runs both db.connect and db.logi…

…n (if necessary) for postgres database, connection is tested

git-svn-id: http://svn.osgeo.org/qgis/trunk@10795 c8812cc2-4d05-0410-92ff-de0c093fc19c
  • Loading branch information
rblazek
rblazek committed May 14, 2009
1 parent deec403 commit a79888973df9c3d718ba906fe8b31c4ae525668b
@@ -1,5 +1,5 @@

SUBDIRS(config modules themes)
SUBDIRS(config modules scripts themes)

ADD_DEFINITIONS(-DGRASS_BASE=\\\"${GRASS_PREFIX}\\\")
ADD_DEFINITIONS(-DHAVE_OPENPTY=${HAVE_OPENPTY})
@@ -403,6 +403,7 @@
<section label="Database management">
<grass name="db.connect"/>
<grass name="db.connect.schema"/>
<grass name="qgis.db.connect-login.pg"/>
<grass name="v.db.reconnect.all"/>
<grass name="db.login"/>
<grass name="db.in.ogr"/>
Binary file not shown.
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE qgisgrassmodule SYSTEM "http://mrcc.com/qgisgrassmodule.dtd">

<qgisgrassmodule label="Set PostgreSQL DB connection" module="qgis.db.connect-login.pg.py">
<option key="database" />
<option key="schema" />
<option key="host" />
<option key="port"/>
<option key="user"/>
<option key="password"/>
</qgisgrassmodule>
@@ -0,0 +1,5 @@

FILE (GLOB MODULE_FILES *.py )
INSTALL (FILES ${MODULE_FILES}
DESTINATION ${QGIS_DATA_DIR}/grass/scripts
PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE )
@@ -0,0 +1,117 @@
#!/usr/bin/env python

############################################################################
#
# MODULE: qgis.db.connect-login.py
# AUTHOR(S): Radim Blazek
#
# PURPOSE: Connect to Postgresql
# COPYRIGHT: (C) 2009 by Radim Blazek
#
# This program is free software under the GNU General Public
# License (>=v2). Read the file COPYING that comes with GRASS
# for details.
#
#############################################################################

#%Module
#% description: Make connection to PostgreSQL database and login.
#% keywords: database
#%End

#%option
#% key: host
#% type: string
#% label: Host
#% description: Host name of the machine on which the server is running.
#% required : no
#%end

#%option
#% key: port
#% type: integer
#% label: Port
#% description: TCP port on which the server is listening, usually 5432.
#% required : no
#%end

#%option
#% key: database
#% type: string
#% key_desc : name
#% gisprompt: old_dbname,dbname,dbname
#% label: Database
#% description: Database name
#% required : yes
#%end

#%option
#% key: schema
#% type: string
#% label: Schema
#% description: Database schema.
#% required : no
#%end

#%option
#% key: user
#% type: string
#% label: User
#% description: Connect to the database as the user username instead of the default.
#% required : no
#%end

#%option
#% key: password
#% type: string
#% label: Password
#% description: Password will be stored in file!
#% required : no
#%end

import sys
import os
import string
import grass

def main():
host = options['host']
port = options['port']
database = options['database']
schema = options['schema']
user = options['user']
password = options['password']

#if not maptable:
# grass.fatal("There is no table connected to this map. Cannot join any column.")

# Test connection
conn = "dbname=" + database
if host: conn += ",host=" + host
if port: conn += ",port=" + host

# Unfortunately we cannot test untill user/password is set
if user or password:
print "Setting login (db.login) ... "
sys.stdout.flush()
if grass.run_command('db.login', driver = "pg", database = conn, user = user, password = password) != 0:
grass.fatal("Cannot login")

# Try to connect
print "Testing connection ..."
sys.stdout.flush()
if grass.run_command('db.select', quiet = True, flags='c', driver= "pg", database=conn, sql="select version()" ) != 0:
if user or password:
print "Deleting login (db.login) ..."
sys.stdout.flush()
if grass.run_command('db.login', quiet = True, driver = "pg", database = conn, user = "", password = "") != 0:
print "Cannot delete login."
sys.stdout.flush()
grass.fatal("Cannot connect to database.")

if grass.run_command('db.connect', driver = "pg", database = conn, schema = schema) != 0:
grass.fatal("Cannot connect to database.")

if __name__ == "__main__":
options, flags = grass.parser()
main()
@@ -181,6 +181,7 @@ void GRASS_EXPORT QgsGrass::init( void )
#endif
QString path = "PATH=" + gisBase + "/bin";
path.append( sep + gisBase + "/scripts" );
path.append( sep + QgsApplication::pkgDataPath() + "/grass/scripts/" );

// On windows the GRASS libraries are in
// QgsApplication::prefixPath(), we have to add them

0 comments on commit a798889

Please sign in to comment.
You can’t perform that action at this time.