2012-10-06 13:10:25 +02:00
# -*- coding: utf-8 -*-
"""
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
dlg_field_properties . py
- - - - - - - - - - - - - - - - - - - - -
Date : April 2012
Copyright : ( C ) 2012 by Giuseppe Sucameli
Email : brush dot tyler at gmail dot com
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* This program is free software ; you can redistribute it and / or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation ; either version 2 of the License , or *
* ( at your option ) any later version . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
"""
2016-09-21 18:24:26 +02:00
from builtins import str
2012-10-06 13:10:25 +02:00
__author__ = ' Giuseppe Sucameli '
__date__ = ' April 2012 '
__copyright__ = ' (C) 2012, Giuseppe Sucameli '
# This will get replaced with a git SHA1 when you do a git archive
2019-01-10 16:29:34 +01:00
__revision__ = ' $Format: % H$ '
2012-10-06 13:10:25 +02:00
2016-04-22 10:38:48 +02:00
from qgis . PyQt . QtWidgets import QDialog , QMessageBox
2012-04-16 13:19:40 +02:00
from . db_plugins . plugin import TableField
2012-12-09 17:47:26 +01:00
from . ui . ui_DlgFieldProperties import Ui_DbManagerDlgFieldProperties as Ui_Dialog
2012-12-10 00:12:07 +01:00
2015-03-21 10:41:58 +10:00
2012-12-09 17:47:26 +01:00
class DlgFieldProperties ( QDialog , Ui_Dialog ) :
2015-08-22 14:29:41 +02:00
2015-03-21 10:41:58 +10:00
def __init__ ( self , parent = None , fld = None , table = None , db = None ) :
QDialog . __init__ ( self , parent )
self . fld = fld
self . table = self . fld . table ( ) if self . fld and self . fld . table ( ) else table
self . db = self . table . database ( ) if self . table and self . table . database ( ) else db
self . setupUi ( self )
2012-12-10 00:12:07 +01:00
2015-03-21 10:41:58 +10:00
for item in self . db . connector . fieldTypes ( ) :
self . cboType . addItem ( item )
self . setField ( self . fld )
2012-04-16 13:19:40 +02:00
2016-03-15 23:41:19 +01:00
self . buttonBox . accepted . connect ( self . onOK )
2012-04-16 13:19:40 +02:00
2015-03-21 10:41:58 +10:00
def setField ( self , fld ) :
if fld is None :
return
self . editName . setText ( fld . name )
self . cboType . setEditText ( fld . dataType )
if fld . modifier :
2016-09-21 18:24:26 +02:00
self . editLength . setText ( str ( fld . modifier ) )
2015-03-21 10:41:58 +10:00
self . chkNull . setChecked ( not fld . notNull )
if fld . hasDefault :
self . editDefault . setText ( fld . default )
2019-01-11 11:10:02 +01:00
# Check with SQL query if a comment exists for the field
sql_cpt = " Select count(*) from pg_description pd, pg_class pc, pg_attribute pa where relname = ' %s ' and attname = ' %s ' and pa.attrelid = pc.oid and pd.objoid = pc.oid and pd.objsubid = pa.attnum " % ( self . table . name , self . editName . text ( ) )
# Get the comment for the field with SQL Query
sql = " Select pd.description from pg_description pd, pg_class pc, pg_attribute pa where relname = ' %s ' and attname = ' %s ' and pa.attrelid = pc.oid and pd.objoid = pc.oid and pd.objsubid = pa.attnum " % ( self . table . name , self . editName . text ( ) )
c = self . db . connector . _execute ( None , sql_cpt ) # Execute check query
res = self . db . connector . _fetchone ( c ) [ 0 ] # Fetch data
# Check if result is 1 then it's ok, else we don't want to get a value
if res == 1 :
c = self . db . connector . _execute ( None , sql ) # Execute query returning the comment value
res = self . db . connector . _fetchone ( c ) [ 0 ] # Fetch the comment value
self . db . connector . _close_cursor ( c ) # Close cursor
self . editCom . setText ( res ) # Set comment value
2012-04-16 13:19:40 +02:00
2015-03-21 10:41:58 +10:00
def getField ( self , newCopy = False ) :
fld = TableField ( self . table ) if not self . fld or newCopy else self . fld
fld . name = self . editName . text ( )
fld . dataType = self . cboType . currentText ( )
fld . notNull = not self . chkNull . isChecked ( )
fld . default = self . editDefault . text ( )
fld . hasDefault = fld . default != " "
2019-01-11 11:10:02 +01:00
# Get the comment from the LineEdit
2019-01-10 16:46:55 +01:00
fld . comment = self . editCom . text ( )
2015-03-21 10:41:58 +10:00
try :
modifier = int ( self . editLength . text ( ) )
except ValueError :
ok = False
else :
ok = True
fld . modifier = modifier if ok else None
return fld
2012-04-16 13:19:40 +02:00
2015-03-21 10:41:58 +10:00
def onOK ( self ) :
""" first check whether everything ' s fine """
fld = self . getField ( True ) # don't change the original copy
if fld . name == " " :
2018-02-13 08:04:32 +10:00
QMessageBox . critical ( self , self . tr ( " DB Manager " ) , self . tr ( " Field name must not be empty. " ) )
2015-03-21 10:41:58 +10:00
return
if fld . dataType == " " :
2018-02-13 08:04:32 +10:00
QMessageBox . critical ( self , self . tr ( " DB Manager " ) , self . tr ( " Field type must not be empty. " ) )
2015-03-21 10:41:58 +10:00
return
2012-04-16 13:19:40 +02:00
2015-03-21 10:41:58 +10:00
self . accept ( )