Branch data Line data Source code
1 : : /***************************************************************************
2 : : qgsdatasourceuri.h - Structure to contain the component parts
3 : : of a data source URI
4 : : -------------------
5 : : begin : Dec 5, 2004
6 : : copyright : (C) 2004 by Gary E.Sherman
7 : : email : sherman at mrcc.com
8 : : ***************************************************************************/
9 : :
10 : : /***************************************************************************
11 : : * *
12 : : * This program is free software; you can redistribute it and/or modify *
13 : : * it under the terms of the GNU General Public License as published by *
14 : : * the Free Software Foundation; either version 2 of the License, or *
15 : : * (at your option) any later version. *
16 : : * *
17 : : ***************************************************************************/
18 : :
19 : : #ifndef QGSDATASOURCEURI_H
20 : : #define QGSDATASOURCEURI_H
21 : :
22 : : #include "qgis_core.h"
23 : : #include "qgis_sip.h"
24 : : #include "qgswkbtypes.h"
25 : :
26 : : #include <QMap>
27 : :
28 : : /**
29 : : * \ingroup core
30 : : * \brief Class for storing the component parts of a RDBMS data source URI (e.g. a Postgres data source).
31 : : *
32 : : * This structure stores the database connection information, including host, database,
33 : : * user name, password, schema, password, and SQL where clause.
34 : : */
35 : 78 : class CORE_EXPORT QgsDataSourceUri
36 : : {
37 : : Q_GADGET
38 : : public:
39 : :
40 : : /**
41 : : * Available SSL connection modes.
42 : : */
43 : : enum SslMode
44 : : {
45 : : SslPrefer,
46 : : SslDisable,
47 : : SslAllow,
48 : : SslRequire,
49 : : SslVerifyCa,
50 : : SslVerifyFull
51 : : };
52 : : Q_ENUM( SslMode )
53 : :
54 : : QgsDataSourceUri();
55 : :
56 : : /**
57 : : * Constructor for QgsDataSourceUri which parses an input \a uri string.
58 : : */
59 : : QgsDataSourceUri( const QString &uri );
60 : :
61 : : /**
62 : : * Constructor for QgsDataSourceUri which parses an input encoded \a uri).
63 : : * \note not available in Python bindings
64 : : */
65 : : QgsDataSourceUri( const QByteArray &uri ) SIP_SKIP;
66 : :
67 : : /**
68 : : * Returns the connection part of the URI.
69 : : */
70 : : QString connectionInfo( bool expandAuthConfig = true ) const;
71 : :
72 : : /**
73 : : * Returns the complete URI as a string.
74 : : */
75 : : QString uri( bool expandAuthConfig = true ) const;
76 : :
77 : : /**
78 : : * Returns the complete encoded URI as a byte array.
79 : : */
80 : : QByteArray encodedUri() const;
81 : :
82 : : /**
83 : : * Sets the complete encoded \a uri.
84 : : *
85 : : * \note not available in Python bindings
86 : : */
87 : : void setEncodedUri( const QByteArray &uri ) SIP_SKIP;
88 : :
89 : : /**
90 : : * Sets the complete encoded \a uri from a string value.
91 : : */
92 : : void setEncodedUri( const QString &uri );
93 : :
94 : : /**
95 : : * Returns the URI's table name, escaped and quoted.
96 : : */
97 : : QString quotedTablename() const;
98 : :
99 : : /**
100 : : * Sets a generic parameter \a value on the URI.
101 : : * \note If a parameter with the specified \a key already exists, another is inserted
102 : : * and the existing value is left unchanged.
103 : : */
104 : : void setParam( const QString &key, const QString &value );
105 : :
106 : : /**
107 : : * Sets a generic parameter list \a value on the URI.
108 : : * \note available in Python as setParamList
109 : : */
110 : : void setParam( const QString &key, const QStringList &value ) SIP_PYNAME( setParamList );
111 : :
112 : : /**
113 : : * Removes a generic parameter by \a key.
114 : : * \note Calling this method removes all the occurrences of key, and returns the number of parameters removed.
115 : : */
116 : : int removeParam( const QString &key );
117 : :
118 : : /**
119 : : * Returns a generic parameter value corresponding to the specified \a key.
120 : : */
121 : : QString param( const QString &key ) const;
122 : :
123 : : /**
124 : : * Returns multiple generic parameter values corresponding to the specified \a key.
125 : : */
126 : : QStringList params( const QString &key ) const;
127 : :
128 : : /**
129 : : * Returns TRUE if a parameter with the specified \a key exists.
130 : : */
131 : : bool hasParam( const QString &key ) const;
132 : :
133 : : /**
134 : : * Sets all connection related members at once.
135 : : */
136 : : void setConnection( const QString &aHost,
137 : : const QString &aPort,
138 : : const QString &aDatabase,
139 : : const QString &aUsername,
140 : : const QString &aPassword,
141 : : SslMode sslmode = SslPrefer,
142 : : const QString &authConfigId = QString() );
143 : :
144 : : /**
145 : : * Sets all connection related members at once (for a service case).
146 : : */
147 : : void setConnection( const QString &aService,
148 : : const QString &aDatabase,
149 : : const QString &aUsername,
150 : : const QString &aPassword,
151 : : SslMode sslmode = SslPrefer,
152 : : const QString &authConfigId = QString() );
153 : :
154 : : /**
155 : : * Sets the URI database name.
156 : : */
157 : : void setDatabase( const QString &database );
158 : :
159 : : /**
160 : : * Sets all data source related members at once.
161 : : *
162 : : * The \a aSql argument represents a subset filter string to be applied to the source, and should take the
163 : : * form of a SQL "where" clause (e.g. "VALUE > 5", "CAT IN (1,2,3)").
164 : : */
165 : : void setDataSource( const QString &aSchema,
166 : : const QString &aTable,
167 : : const QString &aGeometryColumn,
168 : : const QString &aSql = QString(),
169 : : const QString &aKeyColumn = QString() );
170 : :
171 : : /**
172 : : * Sets the authentication configuration ID for the URI.
173 : : */
174 : : void setAuthConfigId( const QString &authcfg );
175 : :
176 : : /**
177 : : * Sets the \a username for the URI.
178 : : */
179 : : void setUsername( const QString &username );
180 : :
181 : : /**
182 : : * Sets the \a password for the URI.
183 : : */
184 : : void setPassword( const QString &password );
185 : :
186 : : /**
187 : : * Removes the password element from a URI.
188 : : */
189 : : static QString removePassword( const QString &aUri );
190 : :
191 : : /**
192 : : * Returns any associated authentication configuration ID stored in the URI.
193 : : */
194 : : QString authConfigId() const;
195 : :
196 : : //! Returns the username stored in the URI.
197 : : QString username() const;
198 : :
199 : : //! Returns the schema stored in the URI.
200 : : QString schema() const;
201 : :
202 : : //! Returns the table name stored in the URI.
203 : : QString table() const;
204 : :
205 : : /**
206 : : * Returns the SQL filter stored in the URI, if set.
207 : : *
208 : : * This represents a subset filter string to be applied to the source, and takes the
209 : : * form of a SQL "where" clause (e.g. "VALUE > 5", "CAT IN (1,2,3)").
210 : : *
211 : : * \see setSql()
212 : : */
213 : : QString sql() const;
214 : :
215 : : //! Returns the name of the geometry column stored in the URI, if set.
216 : : QString geometryColumn() const;
217 : :
218 : : //! Sets whether estimated metadata should be used for the connection.
219 : : void setUseEstimatedMetadata( bool flag );
220 : :
221 : : //! Returns TRUE if estimated metadata should be used for the connection.
222 : : bool useEstimatedMetadata() const;
223 : :
224 : : //! Set to TRUE to disable selection by feature ID.
225 : : void disableSelectAtId( bool flag );
226 : :
227 : : //! Returns whether the selection by feature ID is disabled.
228 : : bool selectAtIdDisabled() const;
229 : :
230 : : //! Clears the schema stored in the URI.
231 : : void clearSchema();
232 : :
233 : : /**
234 : : * Sets the \a scheme for the URI.
235 : : * \since QGIS 2.12
236 : : */
237 : : void setSchema( const QString &schema );
238 : :
239 : : /**
240 : : * Sets the \a sql filter for the URI.
241 : : *
242 : : * The \a sql represents a subset filter string to be applied to the source, and should take the
243 : : * form of a SQL "where" clause (e.g. "VALUE > 5", "CAT IN (1,2,3)").
244 : : *
245 : : * \see sql()
246 : : */
247 : : void setSql( const QString &sql );
248 : :
249 : : //! Returns the host name stored in the URI.
250 : : QString host() const;
251 : : //! Returns the database name stored in the URI.
252 : : QString database() const;
253 : : //! Returns the port stored in the URI.
254 : : QString port() const;
255 : :
256 : : /**
257 : : * Returns the driver name stored in the URI
258 : : * \since QGIS 2.16
259 : : */
260 : : QString driver() const;
261 : :
262 : : /**
263 : : * Sets the \a driver name stored in the URI.
264 : : * \since QGIS 2.16
265 : : */
266 : : void setDriver( const QString &driver );
267 : :
268 : : //! Returns the password stored in the URI.
269 : : QString password() const;
270 : :
271 : : //! Returns the SSL mode associated with the URI.
272 : : SslMode sslMode() const;
273 : :
274 : : //! Returns the service name associated with the URI.
275 : : QString service() const;
276 : :
277 : : //! Returns the name of the (primary) key column for the referenced table.
278 : : QString keyColumn() const;
279 : :
280 : : //! Sets the name of the (primary) key \a column.
281 : : void setKeyColumn( const QString &column );
282 : :
283 : : /**
284 : : * Returns the WKB type associated with the URI.
285 : : */
286 : : QgsWkbTypes::Type wkbType() const;
287 : :
288 : : //! Sets the WKB \a type associated with the URI.
289 : : void setWkbType( QgsWkbTypes::Type type );
290 : :
291 : : //! Returns the spatial reference ID associated with the URI.
292 : : QString srid() const;
293 : :
294 : : //! Sets the spatial reference ID associated with the URI.
295 : : void setSrid( const QString &srid );
296 : :
297 : : /**
298 : : * Decodes SSL mode string into enum value. If the string is not recognized, SslPrefer is returned.
299 : : * \since QGIS 3.2
300 : : */
301 : : static SslMode decodeSslMode( const QString &sslMode );
302 : :
303 : : /**
304 : : * Encodes SSL mode enum value into a string.
305 : : * \since QGIS 3.2
306 : : */
307 : : static QString encodeSslMode( SslMode sslMode );
308 : :
309 : : /**
310 : : * Sets table to \a table
311 : : * \since QGIS 3.10
312 : : */
313 : : void setTable( const QString &table );
314 : :
315 : : /**
316 : : * Sets geometry column name to \a geometryColumn
317 : : * \since QGIS 3.10
318 : : */
319 : : void setGeometryColumn( const QString &geometryColumn );
320 : :
321 : : #ifdef SIP_RUN
322 : : SIP_PYOBJECT __repr__();
323 : : % MethodCode
324 : : QString str = QStringLiteral( "<QgsDataSourceUri: %1>" ).arg( sipCpp->uri( false ) );
325 : : sipRes = PyUnicode_FromString( str.toUtf8().constData() );
326 : : % End
327 : : #endif
328 : :
329 : : private:
330 : : void skipBlanks( const QString &uri, int &i );
331 : : QString getValue( const QString &uri, int &i );
332 : : QString escape( const QString &uri, QChar delim ) const;
333 : :
334 : : /* data */
335 : :
336 : : //! host name
337 : : QString mHost;
338 : : //! port the database server listens on
339 : : QString mPort;
340 : : //! device driver for ODBC
341 : : QString mDriver;
342 : : //! service name
343 : : QString mService;
344 : : //! database name
345 : : QString mDatabase;
346 : : //! schema
347 : : QString mSchema;
348 : : //! spatial table
349 : : QString mTable;
350 : : //! geometry column
351 : : QString mGeometryColumn;
352 : : //! SQL query or where clause used to limit features returned from the layer
353 : : QString mSql;
354 : : //! authentication configuration ID
355 : : QString mAuthConfigId;
356 : : //! username
357 : : QString mUsername;
358 : : //! password
359 : : QString mPassword;
360 : : //! ssl mode
361 : : SslMode mSSLmode = SslPrefer;
362 : : //! key column
363 : : QString mKeyColumn;
364 : : //! Use estimated metadata flag
365 : : bool mUseEstimatedMetadata = false;
366 : : //! Disable SelectAtId capability (e.g., to trigger the attribute table memory model for expensive views)
367 : : bool mSelectAtIdDisabled = false;
368 : : //! geometry type (or QgsWkbTypes::Unknown if not specified)
369 : : QgsWkbTypes::Type mWkbType = QgsWkbTypes::Unknown;
370 : : //! SRID or a null string if not specified
371 : : QString mSrid;
372 : : //! Generic params store
373 : : QMultiMap<QString, QString> mParams;
374 : : };
375 : :
376 : : #endif //QGSDATASOURCEURI_H
377 : :
|