659 Commits

Author SHA1 Message Date
Nyall Dawson
091f488985 Make sure primary keys are always marked with a unique, not null
constraint for all providers
2016-11-16 14:19:24 +01:00
Nyall Dawson
3242321aa9 [FEATURE] Add method to get list of unique strings matching
a substring from a vector data provider

Base implementation iterates through all features, but
providers can override with optimised versions. Native
implementations for postgres, spatialite and OGR included.
2016-11-16 14:19:24 +01:00
Martin Dobias
798bc09130 Fix conversion from WKB to string in postgres provider (follow up d729951) 2016-11-14 15:36:58 +08:00
Martin Dobias
d729951dcd Remove caching of WKB from QgsGeometry (was kept just for compatibility)
Also improves the API to export/import WKB as QByteArray
2016-11-14 13:36:12 +08:00
Nyall Dawson
32b1603c81 Update indentation 2016-11-08 08:57:51 +10:00
Nyall Dawson
1fea20de50 Split handling of literal default values from provider side
default value SQL clauses

QgsVectorDataProvider now has two methods:

- defaultValueClause: returns SQL fragment which must be evaluated
by the provider to obtain the default value, eg sequence values
- defaultValue: returns the literal constant default value
for a field
2016-11-08 08:18:16 +10:00
Patrick Valsecchi
8e7ae8f04d Avoid having duplicated relations in the discovery 2016-11-07 12:48:26 +01:00
Nyall Dawson
cb94b68d88 Move constraint handling to QgsFieldConstraints
Avoids cluttering QgsField API
2016-11-02 11:07:07 +10:00
Nyall Dawson
f99ea26bdf Refactor constraint handling
- store constraint origin in QgsField
- move handling of constraint expressions to QgsField
2016-11-02 11:07:07 +10:00
Nyall Dawson
4efad04bd8 Move constraints to QgsField 2016-11-02 11:07:07 +10:00
Nyall Dawson
d1fd588499 Add method to fetch constraints from a vector data provider
Implemented for unique and not null constraints for postgres
provider
2016-11-02 11:07:07 +10:00
Martin Dobias
5e4bb00fa3 Fix import of shapefiles to postgres - regression introduced in 5abdfcb (#3652)
(cherry picked from commit a965a132c52df9308b5a58be92c04a285826485a)
2016-11-01 11:41:23 +08:00
Denis Rouzaud
642e4a48c7 Revert "[Postgres] fix writing default value when primary key has varchar columns"
This reverts commit f456932514c750d4b077a9daaea5ddfbbad3f1c8.
2016-10-26 17:03:06 +02:00
Denis Rouzaud
f456932514 [Postgres] fix writing default value when primary key has varchar columns
kudos to @m-kuhn to find and solve this
2016-10-26 16:28:54 +02:00
Nyall Dawson
1367fd09fc Prepare commit converts single line doxygen block format
Flips single line doxygen comments to use the proper single line
format:

/*!< comment */   to   //!< Comment

and

/** comment */    to   //! Comment
2016-10-25 09:17:39 +10:00
Nyall Dawson
4166a3ea62 Fix most clazy qstring-unneeded-heap-allocations warnings
By flipping string literals to QStringLiteral/QLatin1String

see

https://woboq.com/blog/qstringliteral.html
2016-10-24 15:26:24 +10:00
Matthias Kuhn
1445647065 QgsVectorDataProvider API cleanup 2016-10-22 23:03:57 +02:00
Nyall Dawson
9459831422 Remove unused variables 2016-10-22 22:46:15 +10:00
Nyall Dawson
ef5110732b Fix clazy "qstring-ref" warnings
From the clazy docs:

Finds places where QString::fooRef() should be used instead of
QString::foo(), to avoid temporary heap allocations

eg

str.mid(5).toInt(ok) // BAD

str.midRef(5).toInt(ok) // GOOD
2016-10-22 22:46:14 +10:00
Matthias Kuhn
04e3796610 [postgres] Avoid crash when fetching default value fails 2016-10-21 10:58:14 +02:00
Sandro Santilli
799510f73a Revert "postgres provider: quote compound key columns in uri"
This reverts commit daa6510970e9afbc4d41d28e0c94b4f238eb372d.

I've tested that reverting this does not re-introduce bug
http://hub.qgis.org/issues/13710
2016-10-14 10:43:47 +02:00
Sandro Santilli
ada9348e2b Fix PostgreSQL import of layers with multi-column or quoted-column keys
Fixes #15226 (drag & drop of postgresql views)
Includes test
2016-10-14 10:43:41 +02:00
Sandro Santilli
0f4cba5c2d Fix bogus precision/scale in PostgreSQL for double values
This reverts commit 92f71b696ca93c792ae5602ed82863fcef0e5006,
which broke import of legit shapefiles by assuming wrong
semantic for the non-constraining QgsField length/precision
attributes.

Closes #15188

Includes test
2016-10-12 20:48:35 +02:00
Patrick Valsecchi
31a1c23903 Add auto-discovery of relations for PostgresQL
Fixed the add relation functionnality: the table is sorted. When the code
was setting the sorted column, the row was sorted and the other columns it was
setting were set on the wrong row.
2016-09-27 16:36:33 +02:00
Nyall Dawson
88e4410af1 Require Qt >= 5.5 2016-09-21 09:12:54 +10:00
Patrick Valsecchi
57d00949f7 Add an editor widget for QVariantList 2016-09-13 09:16:17 +02:00
Patrick Valsecchi
abc55f4c42 Add support for arrays in PostgresQL
Fix parsing of PostgresQL hstore. Had problems when the key or values were
containing comas.
2016-09-12 10:33:00 +02:00
Patrick Valsecchi
3d6e7c8bdb Add hstore support to the postgres provider 2016-09-08 09:51:46 +02:00
Patrick Valsecchi
7169079f91 Smarter default edit widgets with plugins to pick them
Now the widgets factories can give a score on how good they could handle
a widget.

Additionaly, plugins can be added to choose a widget factory in function
of an external information. One of them uses a table in PostgresQL to
allow specification of the widget type and configuration.

I took the opportunity to remove a few deprecated method in relation to
this.
2016-09-05 14:22:17 +02:00
Matthias Kuhn
a529b448e7 Revert "Merge pull request #3338 from pvalsecc/editor_widgets_selection"
This reverts commit bbafbf48872eda48a2be8876cc89a0770552c6ad, reversing
changes made to 13ac0434e10fc7edd1eca665ea7c8b6cb5fd212d.
2016-08-29 19:22:04 +02:00
Patrick Valsecchi
24bde35ce6 Smarter default edit widgets with plugins to pick them
Now the widgets factories can give a score on how good they could handle
a widget.

Additionaly, plugins can be added to choose a widget factory in function
of an external information. One of them uses a table in PostgresQL to
allow specification of the widget type and configuration.

I took the opportunity to remove a few deprecated method in relation to
this.
2016-08-29 07:42:50 +02:00
Nyall Dawson
cb313761ca Remove unused QgsProvider(Count|ExtentCalc)Event classes 2016-08-23 10:03:52 +10:00
Martin Dobias
be3c780f16 Make it work with Qt5 < 5.6 2016-08-12 00:01:59 +02:00
Martin Dobias
46f7c644da Fix postgres pkey map in Qt5 (fixes #15223)
Switching from QVariant to QVariantList solves the underlying Qt issue:
- comparison of QVariantList objects works fine
- comparison of QVariantList objects wrapped in QVariant does not work

The extra wrapping of QVariantList into another QVariant seems unnecessary anyway,
so we may as well save a tiny bit of memory and cpu
2016-08-11 17:10:57 +02:00
Nyall Dawson
4f3564cc7b Avoid potential QgsFields detachments 2016-08-05 06:08:07 +10:00
Nyall Dawson
ed4d34fdbc QgsFields returns QgsField value instead of const references
(since QgsField is implicitly shared)
2016-08-05 06:08:07 +10:00
Matthias Kuhn
bb79d13e82 Remove deprecated Qgis::WKBType and API cleanup (#3325)
* Remove deprecated Qgis::WKBType and API cleanup

Renames QgsWKBTypes to QgsWkbTypes

Replaces usage of the enums:

* Qgis::WKBType with QgsWkbTypes::Type
* Qgis::GeometryType with QgsWkbTypes::GeometryType

Their values should be forward compatible (a fact that was already
explited up to now by casting between the types)

Renames some SSLxxx to SslXxx and URIxxx to UriXxx

* Fix build warnings and simplify type handling

* Add a fixer to rewrite imports

* The forgotten rebase conflictThe forgotten rebase conflicts

* QgsDataSourcURI > QgsDataSourceUri

* QgsWKBTypes > QgsWkbTypes

* Qgis.WKBGeom > QgsWkbTypes.Geom

* Further python fixes

* Guess what... Qgis::wkbDimensions != QgsWkbTypes::wkbDimensions

* Fix tests

* Python 3 updates

* [travis] pull request caching cannot be disabled

so at least use it in r/w mode

* Fix python3 print in plugins
2016-08-04 09:10:08 +02:00
Nyall Dawson
bd7d913379 Refine QgsFeature geometry getters/setters
All pointer based methods have been removed.

Now we have only:

  void setGeometry( const QgsGeometry& geom )

and

  QgsGeometry geometry() const

Benefits include avoiding a whole lot of tricky pointer lifetime
issues, potential memory leaks, and finally closing #777, which
has survived for over 9 years!...

Impacts on PyQGIS code:
- no more need for the messy
  g = QgsGeometry( feature.geometry() )
  workaround, just use g = feature.geometry() instead
- IMPORTANT: you can no longer test whether a feature has geometry
 using `if f.geometry():`, since QgsFeature::geometry() will
 *always* return an object. Instead, use
 `if not f.geometry().isEmpty():`, or preferably the new method
 `if not f.hasGeometry():`

Fix #777
2016-08-01 16:25:46 +10:00
Nyall Dawson
429fe2d4ce Merge pull request #3335 from nyalldawson/vector_layer
QgsVectorDataProvider::Capability improvements
2016-07-29 05:10:37 +10:00
Nyall Dawson
58856fe82f Remove some deprecated QgsVectorDataProvider::Capabilities
Also make capabilities() return a QFlags
QgsVectorDataProvider::Capabilities, rather than an integer
value (for type safety)
2016-07-25 12:14:00 +10:00
Nyall Dawson
bb36c6048d Remove QgsCRSCache
No longer required now that QgsCoordinateReferenceSystem
internally uses caches for CRS initialization.
2016-07-25 10:15:46 +10:00
Nyall Dawson
1a2231f10c Rename QGis class to Qgis, for capitalisation consistency 2016-07-21 22:01:38 +10:00
Nyall Dawson
4cfacf14e3 Make API more consistent
- rename methods with XML to Xml, CRS to Crs, WMS to Wms, ID to Id
- rename methods with SRS to Crs
- rename methods with abbreviations like "dest" to "destination"
- rename methods with abbreviations like "src" to "source"
2016-07-21 08:40:50 +10:00
Nyall Dawson
a2efab0485 Make QgsVectorLayerImport use QgsCoordinateReferenceSystem
references, not pointers
2016-07-15 06:00:11 +10:00
Nyall Dawson
e683101b10 Make QgsVectorDataProvider::fields() return a copy
Implements a QGIS 3.0 TODO
2016-07-15 05:59:02 +10:00
Nyall Dawson
1bafa80089 Const correctness for numerous data provider methods 2016-07-15 05:57:57 +10:00
Matthias Kuhn
7b3e667282 Remove more debug noise 2016-06-12 16:05:40 +02:00
Juergen E. Fischer
ef0f3d5b8c use Qt types 2016-06-10 11:08:09 +02:00
Sandro Santilli
8b9a03536a Fix handling of int64 primary keys to use a FidMap
There was a code duplication where only one path did the right
thing. This commit also removes the duplication.
2016-06-09 11:48:30 +02:00
Sandro Santilli
92dda429d0 Do not loose signed semantic on converting int32 pk to fid
Fixes again editing of features with negative identifiers.
Now a test fails, but it is the test being broken this time
(testSignedIdentifiers). The test was added as part of
2bd7f446b4dd368968f23b990262c5e8a5a83f80, which fixed a crash
when using signed identifiers.
2016-06-09 11:48:29 +02:00