Showing with 5,820 additions and 156 deletions.
  1. +3 −0 CMakeLists.txt
  2. +2 −0 cmake_templates/qgsconfig.h.in
  3. +1 −0 doc/CONTRIBUTORS
  4. +2 −0 images/images.qrc
  5. BIN images/themes/default/mActionAddMssqlLayer.png
  6. BIN images/themes/gis/mIconMssql.png
  7. +34 −0 src/app/qgisapp.cpp
  8. +4 −0 src/app/qgisapp.h
  9. +68 −13 src/core/qgsdatasourceuri.cpp
  10. +3 −3 src/core/qgsdatasourceuri.h
  11. +149 −0 src/gui/qgsmanageconnectionsdialog.cpp
  12. +3 −0 src/gui/qgsmanageconnectionsdialog.h
  13. +1 −0 src/providers/CMakeLists.txt
  14. +35 −0 src/providers/mssql/CMakeLists.txt
  15. +562 −0 src/providers/mssql/qgsmssqldataitems.cpp
  16. +117 −0 src/providers/mssql/qgsmssqldataitems.h
  17. +568 −0 src/providers/mssql/qgsmssqlgeometryparser.cpp
  18. +176 −0 src/providers/mssql/qgsmssqlnewconnection.cpp
  19. +45 −0 src/providers/mssql/qgsmssqlnewconnection.h
  20. +1,538 −0 src/providers/mssql/qgsmssqlprovider.cpp
  21. +348 −0 src/providers/mssql/qgsmssqlprovider.h
  22. +817 −0 src/providers/mssql/qgsmssqlsourceselect.cpp
  23. +189 −0 src/providers/mssql/qgsmssqlsourceselect.h
  24. +494 −0 src/providers/mssql/qgsmssqltablemodel.cpp
  25. +89 −0 src/providers/mssql/qgsmssqltablemodel.h
  26. +13 −10 src/providers/postgres/qgspgsourceselect.cpp
  27. +33 −24 src/providers/postgres/qgspgtablemodel.cpp
  28. +1 −1 src/providers/postgres/qgspgtablemodel.h
  29. +48 −57 src/providers/postgres/qgspostgresconn.cpp
  30. +3 −6 src/providers/postgres/qgspostgresconn.h
  31. +84 −9 src/providers/postgres/qgspostgresdataitems.cpp
  32. +5 −0 src/providers/postgres/qgspostgresdataitems.h
  33. +65 −23 src/providers/postgres/qgspostgresprovider.cpp
  34. +8 −7 src/providers/postgres/qgspostgresprovider.h
  35. +1 −1 src/providers/wfs/qgswfsdataitems.cpp
  36. +1 −1 src/providers/wms/qgswmsdataitems.cpp
  37. +15 −1 src/ui/qgisapp.ui
  38. +295 −0 src/ui/qgsmssqlnewconnectionbase.ui
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,9 @@ IF (SPATIALITE_FOUND)
SET (HAVE_SPATIALITE TRUE)
ENDIF (SPATIALITE_FOUND)

# following variable is used in qgsconfig.h
SET (HAVE_MSSQL TRUE)

#############################################################
# search for Qt4
SET(QT_MIN_VERSION 4.4.0)
Expand Down
2 changes: 2 additions & 0 deletions cmake_templates/qgsconfig.h.in
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@

#cmakedefine HAVE_SPATIALITE

#cmakedefine HAVE_MSSQL

#cmakedefine HAVE_PYTHON

#endif
Expand Down
1 change: 1 addition & 0 deletions doc/CONTRIBUTORS
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ Richard Kostecky
Robert Szczepanek
Stefanie Tellex
Steven Mizuno
Tamas Szekeres
Tom Russo
Tyler Mitchell
Vita Cizek
Expand Down
2 changes: 2 additions & 0 deletions images/images.qrc
Original file line number Diff line number Diff line change
Expand Up @@ -363,8 +363,10 @@
<file>themes/gis/mIconSpatialite.png</file>
<file>themes/gis/mIconRaster.png</file>
<file>themes/gis/mIconPostgis.png</file>
<file>themes/gis/mIconMssql.png</file>
<file>themes/gis/mIconConnect.png</file>
<file>themes/gis/mIconDbSchema.png</file>
<file>themes/default/mActionAddMssqlLayer.png</file>
</qresource>
<qresource prefix="/images/tips">
<file alias="symbol_levels.png">qgis_tips/symbol_levels.png</file>
Expand Down
Binary file added images/themes/default/mActionAddMssqlLayer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added images/themes/gis/mIconMssql.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
34 changes: 34 additions & 0 deletions src/app/qgisapp.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -860,6 +860,7 @@ void QgisApp::createActions()
connect( mActionAddRasterLayer, SIGNAL( triggered() ), this, SLOT( addRasterLayer() ) );
connect( mActionAddPgLayer, SIGNAL( triggered() ), this, SLOT( addDatabaseLayer() ) );
connect( mActionAddSpatiaLiteLayer, SIGNAL( triggered() ), this, SLOT( addSpatiaLiteLayer() ) );
connect( mActionAddMssqlLayer, SIGNAL( triggered() ), this, SLOT( addMssqlLayer() ) );
connect( mActionAddWmsLayer, SIGNAL( triggered() ), this, SLOT( addWmsLayer() ) );
connect( mActionAddWfsLayer, SIGNAL( triggered() ), this, SLOT( addWfsLayer() ) );
connect( mActionOpenTable, SIGNAL( triggered() ), this, SLOT( attributeTable() ) );
Expand Down Expand Up @@ -950,6 +951,11 @@ void QgisApp::createActions()
mActionAddPgLayer = NULL;
#endif

#ifndef HAVE_MSSQL
delete mActionAddMssqlLayer;
mActionAddMssqlLayer = NULL;
#endif

}

#include "qgsstylev2.h"
Expand Down Expand Up @@ -1462,6 +1468,9 @@ void QgisApp::setTheme( QString theThemeName )
#ifdef HAVE_SPATIALITE
mActionNewSpatialiteLayer->setIcon( getThemeIcon( "/mActionNewVectorLayer.png" ) );
mActionAddSpatiaLiteLayer->setIcon( getThemeIcon( "/mActionAddSpatiaLiteLayer.png" ) );
#endif
#ifdef HAVE_MSSQL
mActionAddMssqlLayer->setIcon( getThemeIcon( "/mActionAddMssqlLayer.png" ) );
#endif
mActionRemoveLayer->setIcon( getThemeIcon( "/mActionRemoveLayer.png" ) );
mActionSetLayerCRS->setIcon( getThemeIcon( "/mActionSetLayerCRS.png" ) );
Expand Down Expand Up @@ -2506,6 +2515,31 @@ void QgisApp::addSpatiaLiteLayer()
} // QgisApp::addSpatiaLiteLayer()
#endif

#ifndef HAVE_MSSQL
void QgisApp::addMssqlLayer() {}
#else
void QgisApp::addMssqlLayer()
{
if ( mMapCanvas && mMapCanvas->isDrawing() )
{
return;
}

// show the MS SQL dialog
QDialog *dbs = dynamic_cast<QDialog*>( QgsProviderRegistry::instance()->selectWidget( QString( "mssql" ), this ) );
if ( !dbs )
{
QMessageBox::warning( this, tr( "MSSQL" ), tr( "Cannot get MS SQL select dialog from provider." ) );
return;
}
connect( dbs , SIGNAL( addDatabaseLayers( QStringList const &, QString const & ) ),
this , SLOT( addDatabaseLayers( QStringList const &, QString const & ) ) );
dbs->exec();
delete dbs;

} // QgisApp::addMssqlLayer()
#endif

void QgisApp::addWmsLayer()
{
if ( mMapCanvas && mMapCanvas->isDrawing() )
Expand Down
4 changes: 4 additions & 0 deletions src/app/qgisapp.h
Original file line number Diff line number Diff line change
Expand Up @@ -497,6 +497,10 @@ class QgisApp : public QMainWindow, private Ui::MainWindow
//! Add a SpatiaLite layer to the map
void addSpatiaLiteLayer();
//#endif
//#ifdef HAVE_MSSQL
//! Add a SpatiaLite layer to the map
void addMssqlLayer();
//#endif
/** toggles whether the current selected layer is in overview or not */
void isInOverview();
//! Slot to show the map coordinate position of the mouse cursor
Expand Down
81 changes: 68 additions & 13 deletions src/core/qgsdatasourceuri.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ QgsDataSourceURI::QgsDataSourceURI()
, mKeyColumn( "" )
, mUseEstimatedMetadata( false )
, mSelectAtIdDisabled( false )
, mGeometryType( QGis::UnknownGeometry )
, mWkbType( QGis::WKBUnknown )
{
// do nothing
}
Expand All @@ -37,7 +37,7 @@ QgsDataSourceURI::QgsDataSourceURI( QString uri )
, mKeyColumn( "" )
, mUseEstimatedMetadata( false )
, mSelectAtIdDisabled( false )
, mGeometryType( QGis::UnknownGeometry )
, mWkbType( QGis::WKBUnknown )
{
int i = 0;
while ( i < uri.length() )
Expand Down Expand Up @@ -134,19 +134,31 @@ QgsDataSourceURI::QgsDataSourceURI( QString uri )
QString geomTypeUpper = pval.toUpper();
if ( geomTypeUpper == "POINT" )
{
mGeometryType = QGis::Point;
mWkbType = QGis::WKBPoint;
}
else if ( geomTypeUpper == "LINE" )
else if ( geomTypeUpper == "LINESTRING" || geomTypeUpper == "LINE" )
{
mGeometryType = QGis::Line;
mWkbType = QGis::WKBLineString;
}
else if ( geomTypeUpper == "POLYGON" )
{
mGeometryType = QGis::Polygon;
mWkbType = QGis::WKBPolygon;
}
else if ( geomTypeUpper == "MULTIPOINT" )
{
mWkbType = QGis::WKBMultiPoint;
}
else if ( geomTypeUpper == "MULTLINESTRING" )
{
mWkbType = QGis::WKBMultiLineString;
}
else if ( geomTypeUpper == "MULTIPOLYGON" )
{
mWkbType = QGis::WKBMultiPolygon;
}
else
{
mGeometryType = QGis::UnknownGeometry;
mWkbType = QGis::WKBUnknown;
}
}
else if ( pname == "selectatid" )
Expand Down Expand Up @@ -514,9 +526,52 @@ QString QgsDataSourceURI::uri() const
theUri += QString( " srid=%1" ).arg( mSrid );
}

if ( mGeometryType != QGis::UnknownGeometry && mGeometryType != QGis::NoGeometry )
if ( mWkbType != QGis::WKBUnknown && mWkbType != QGis::WKBNoGeometry )
{
theUri += QString( " type=%1" ).arg( QGis::qgisVectorGeometryType[mGeometryType] );
theUri += " type=";

switch( mWkbType )
{
case QGis::WKBPoint:
theUri += "POINT";
break;
case QGis::WKBLineString:
theUri += "LINESTRING";
break;
case QGis::WKBPolygon:
theUri += "POLYGON";
break;
case QGis::WKBMultiPoint:
theUri += "MULTIPOINT";
break;
case QGis::WKBMultiLineString:
theUri += "MULTILINESTRING";
break;
case QGis::WKBMultiPolygon:
theUri += "MULTIPOLYGON";
break;
case QGis::WKBPoint25D:
theUri += "POINTM";
break;
case QGis::WKBLineString25D:
theUri += "LINESTRINGM";
break;
case QGis::WKBPolygon25D:
theUri += "POLYGONM";
break;
case QGis::WKBMultiPoint25D:
theUri += "MULTIPOINTM";
break;
case QGis::WKBMultiLineString25D:
theUri += "MULTILINESTRINGM";
break;
case QGis::WKBMultiPolygon25D:
theUri += "MULTIPOLYGONM";
break;
case QGis::WKBUnknown:
case QGis::WKBNoGeometry:
break;
}
}

if ( mSelectAtIdDisabled )
Expand Down Expand Up @@ -589,14 +644,14 @@ void QgsDataSourceURI::setDatabase( const QString &database )
mDatabase = database;
}

QGis::GeometryType QgsDataSourceURI::geometryType() const
QGis::WkbType QgsDataSourceURI::wkbType() const
{
return mGeometryType;
return mWkbType;
}

void QgsDataSourceURI::setGeometryType( QGis::GeometryType geometryType )
void QgsDataSourceURI::setWkbType( QGis::WkbType wkbType )
{
mGeometryType = geometryType;
mWkbType = wkbType;
}

QString QgsDataSourceURI::srid() const
Expand Down
6 changes: 3 additions & 3 deletions src/core/qgsdatasourceuri.h
Original file line number Diff line number Diff line change
Expand Up @@ -118,8 +118,8 @@ class CORE_EXPORT QgsDataSourceURI
void setKeyColumn( QString column );

// added in 1.9
QGis::GeometryType geometryType() const;
void setGeometryType( QGis::GeometryType type );
QGis::WkbType wkbType() const;
void setWkbType( QGis::WkbType type );

QString srid() const;
void setSrid( QString srid );
Expand Down Expand Up @@ -160,7 +160,7 @@ class CORE_EXPORT QgsDataSourceURI
//! Disable SelectAtId capability (eg. to trigger the attribute table memory model for expensive views)
bool mSelectAtIdDisabled;
//! geometry type (or QGis::WKBUnknown if not specified)
QGis::GeometryType mGeometryType;
QGis::WkbType mWkbType;
//! SRID or a null string if not specified
QString mSrid;
};
Expand Down
Loading