23 #include <QStringList>
28 : mSSLmode( SSLprefer )
30 , mUseEstimatedMetadata( false )
31 , mSelectAtIdDisabled( false )
32 , mWkbType(
QGis::WKBUnknown )
38 : mSSLmode( SSLprefer )
40 , mUseEstimatedMetadata( false )
41 , mSelectAtIdDisabled( false )
42 , mWkbType(
QGis::WKBUnknown )
58 while ( i < uri.
length() && uri[i] !=
'=' && !uri[i].isSpace() )
65 if ( i == uri.
length() || uri[i] !=
'=' )
82 QString pval = getValue( uri, i );
84 if ( pname ==
"table" )
91 mTable = getValue( uri, i );
105 while ( i < uri.
length() && uri[i] !=
')' )
107 if ( uri[i] ==
'\\' )
117 mGeometryColumn = uri.
mid( start, i - start );
118 mGeometryColumn.
replace(
"\\)",
")" );
119 mGeometryColumn.
replace(
"\\\\",
"\\" );
125 mGeometryColumn = QString::null;
128 else if ( pname ==
"key" )
132 else if ( pname ==
"estimatedmetadata" )
134 mUseEstimatedMetadata = pval ==
"true";
136 else if ( pname ==
"srid" )
140 else if ( pname ==
"type" )
144 else if ( pname ==
"selectatid" )
146 mSelectAtIdDisabled = pval ==
"false";
148 else if ( pname ==
"service" )
152 else if ( pname ==
"user" )
156 else if ( pname ==
"password" )
160 else if ( pname ==
"connect_timeout" )
164 else if ( pname ==
"dbname" )
168 else if ( pname ==
"host" )
172 else if ( pname ==
"hostaddr" )
176 else if ( pname ==
"port" )
180 else if ( pname ==
"tty" )
184 else if ( pname ==
"options" )
188 else if ( pname ==
"sslmode" )
190 if ( pval ==
"disable" )
192 else if ( pval ==
"allow" )
194 else if ( pval ==
"prefer" )
196 else if ( pval ==
"require" )
199 else if ( pname ==
"requiressl" )
206 else if ( pname ==
"krbsrvname" )
210 else if ( pname ==
"gsslib" )
216 QgsDebugMsg(
"parameter \"" + pname +
"\":\"" + pval +
"\" added" );
228 if ( aUri.
contains(
" password=" ) )
231 safeName.
replace( regexp,
" " );
233 else if ( aUri.
contains(
",password=" ) )
236 safeName.
replace( regexp,
"," );
241 safeName.
replace( regexp,
" " );
243 else if (( aUri.
contains(
"OCI:" ) )
247 safeName.
replace( regexp,
"/@" );
252 safeName = strlist[0] +
"," + strlist[1] +
"," + strlist[2] +
"," + strlist[3];
319 return mGeometryColumn;
335 mUseEstimatedMetadata = theFlag;
340 return mUseEstimatedMetadata;
345 mSelectAtIdDisabled = theFlag;
350 return mSelectAtIdDisabled;
373 void QgsDataSourceURI::skipBlanks(
const QString &uri,
int &i )
376 while ( i < uri.
length() && uri[i].isSpace() )
382 skipBlanks( uri, i );
386 if ( i < uri.
length() && ( uri[i] ==
'\'' || uri[i] ==
'"' ) )
388 QChar delim = uri[i];
397 QgsDebugMsg(
"unterminated quoted string in connection info string" );
401 if ( uri[i] ==
'\\' )
406 if ( uri[i] != delim && uri[i] !=
'\\' )
409 else if ( uri[i] == delim )
421 while ( i < uri.
length() )
423 if ( uri[i].isSpace() )
429 if ( uri[i] ==
'\\' )
434 if ( uri[i] !=
'\\' && uri[i] !=
'\'' )
442 skipBlanks( uri, i );
451 if ( mDatabase !=
"" )
453 connectionItems <<
"dbname='" + escape( mDatabase ) +
"'";
456 if ( mService !=
"" )
458 connectionItems <<
"service='" + escape( mService ) +
"'";
460 else if ( mHost !=
"" )
462 connectionItems <<
"host=" + mHost;
468 connectionItems <<
"port=" + mPort;
471 if ( mUsername !=
"" )
473 connectionItems <<
"user='" + escape( mUsername ) +
"'";
475 if ( mPassword !=
"" )
477 connectionItems <<
"password='" + escape( mPassword ) +
"'";
482 connectionItems <<
"sslmode=disable";
484 connectionItems <<
"sslmode=allow";
486 connectionItems <<
"sslmode=require";
489 connectionItems <<
"sslmode=prefer";
492 return connectionItems.
join(
" " );
501 theUri +=
QString(
" key='%1'" ).
arg( escape( mKeyColumn ) );
504 if ( mUseEstimatedMetadata )
506 theUri +=
QString(
" estimatedmetadata=true" );
520 if ( mSelectAtIdDisabled )
522 theUri +=
QString(
" selectatid=false" );
527 if ( it.key().contains(
"=" ) || it.key().contains(
" " ) )
533 theUri +=
" " + it.key() +
"='" + escape( it.value() ) +
"'";
536 QString columnName( mGeometryColumn );
537 columnName.
replace(
"\\",
"\\\\" );
538 columnName.
replace(
")",
"\\)" );
540 theUri +=
QString(
" table=%1%2 sql=%3" )
581 return QString(
"\"%1\".\"%2\"" )
582 .
arg( escape( mSchema,
'"' ) )
583 .
arg( escape( mTable,
'"' ) );
586 .
arg( escape( mTable,
'"' ) );
671 return mParams.
remove( key );
676 return mParams.
value( key );
681 return mParams.
values( key );
QgsDataSourceURI()
default constructor
bool contains(const Key &key) const
int removeParam(const QString &key)
Remove generic param (generic mode)
QList< T > values() const
QString quotedTablename() const
quoted table name
QString geometryColumn() const
void setMinimal(bool minimal)
void setEncodedUri(const QByteArray &uri)
set complete encoded uri (generic mode)
static QString removePassword(const QString &aUri)
Removes password element from uris.
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QList< QPair< QString, QString > > queryItems() const
void setDatabase(const QString &database)
Set database.
QString connectionInfo() const
return connection part of URI
WkbType
Used for symbology operations.
The QGis class provides global constants for use throughout the application.
QString join(const QString &separator) const
bool useEstimatedMetadata() const
QStringList params(const QString &key) const
Get multiple generic param (generic mode)
QString keyColumn() const
void setPattern(const QString &pattern)
void setConnection(const QString &aHost, const QString &aPort, const QString &aDatabase, const QString &aUsername, const QString &aPassword, SSLmode sslmode=SSLprefer)
Set all connection related members at once.
void setPassword(QString password)
set password
static Type flatType(Type type)
iterator insertMulti(const Key &key, const T &value)
void disableSelectAtId(bool theFlag)
QGis::WkbType wkbType() const
QString uri() const
return complete uri
void setParam(const QString &key, const QString &value)
Set generic param (generic mode)
void setUseEstimatedMetadata(bool theFlag)
set use Estimated Metadata
enum SSLmode sslMode() const
bool hasParam(const QString &key) const
Test if param exists (generic mode)
void setSrid(QString srid)
bool contains(QChar ch, Qt::CaseSensitivity cs) const
QString param(const QString &key) const
Get generic param (generic mode)
QString & replace(int position, int n, QChar after)
void setKeyColumn(QString column)
void setEncodedQuery(const QByteArray &query)
void setUsername(QString username)
set username
QString mid(int position, int n) const
void setWkbType(QGis::WkbType type)
QByteArray encodedQuery() const
bool selectAtIdDisabled() const
void addQueryItem(const QString &key, const QString &value)
QByteArray encodedUri() const
return complete encoded uri (generic mode)
static Type parseType(const QString &wktStr)
static QString displayString(Type type)
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QByteArray toAscii() const
void setDataSource(const QString &aSchema, const QString &aTable, const QString &aGeometryColumn, const QString &aSql=QString(), const QString &aKeyColumn=QString())
Set all data source related members at once.
const T value(const Key &key) const
int remove(const Key &key)
QList< Key > uniqueKeys() const