Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: MSSQL Spatial driver 4 : * Purpose: Definition of classes for OGR MSSQL Spatial driver. 5 : * Author: Tamas Szekeres, szekerest at gmail.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2010, Tamas Szekeres 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdal_frmts.h" 14 : #include "gdalplugindriverproxy.h" 15 : 16 : #include "ogrsf_frmts.h" 17 : #include "ogrmssqlspatialdrivercore.h" 18 : 19 : /************************************************************************/ 20 : /* OGRMSSQLSPATIALDriverIdentify() */ 21 : /************************************************************************/ 22 : 23 54179 : int OGRMSSQLSPATIALDriverIdentify(GDALOpenInfo *poOpenInfo) 24 : 25 : { 26 54179 : return STARTS_WITH_CI(poOpenInfo->pszFilename, "MSSQL:"); 27 : } 28 : 29 : /************************************************************************/ 30 : /* OGRMSSQLSPATIALDriverSetCommonMetadata() */ 31 : /************************************************************************/ 32 : 33 1760 : void OGRMSSQLSPATIALDriverSetCommonMetadata(GDALDriver *poDriver) 34 : { 35 1760 : poDriver->SetDescription(DRIVER_NAME); 36 : 37 1760 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 38 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 39 1760 : poDriver->SetMetadataItem(GDAL_DCAP_DELETE_LAYER, "YES"); 40 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES"); 41 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CURVE_GEOMETRIES, "YES"); 42 1760 : poDriver->SetMetadataItem(GDAL_DCAP_MEASURED_GEOMETRIES, "YES"); 43 1760 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 44 1760 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, 45 1760 : "NATIVE OGRSQL SQLITE"); 46 : 47 1760 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, 48 : "Microsoft SQL Server Spatial Database" 49 : #ifdef MSSQL_BCP_SUPPORTED 50 : " (BCP)" 51 : #endif 52 1760 : ); 53 1760 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, 54 1760 : "drivers/vector/mssqlspatial.html"); 55 1760 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONOPTIONLIST, 56 1760 : "<CreationOptionList/>"); 57 : 58 1760 : poDriver->SetMetadataItem( 59 : GDAL_DS_LAYER_CREATIONOPTIONLIST, 60 : "<LayerCreationOptionList>" 61 : " <Option name='GEOM_TYPE' type='string-select' description='Format " 62 : "of geometry columns' default='geometry'>" 63 : " <Value>geometry</Value>" 64 : " <Value>geography</Value>" 65 : " </Option>" 66 : " <Option name='OVERWRITE' type='boolean' description='Whether to " 67 : "overwrite an existing table with the layer name to be created' " 68 : "default='NO'/>" 69 : " <Option name='LAUNDER' type='boolean' description='Whether layer " 70 : "and field names will be laundered' default='YES'/>" 71 : " <Option name='PRECISION' type='boolean' description='Whether fields " 72 : "created should keep the width and precision' default='YES'/>" 73 : " <Option name='DIM' type='integer' description='Set to 2 to force " 74 : "the geometries to be 2D, or 3 to be 2.5D'/>" 75 : " <Option name='GEOMETRY_NAME' type='string' description='Name of " 76 : "geometry column.' default='ogr_geometry' " 77 : "deprecated_alias='GEOM_NAME'/>" 78 : " <Option name='SCHEMA' type='string' description='Name of schema " 79 : "into which to create the new table' default='dbo'/>" 80 : " <Option name='SRID' type='int' description='Forced SRID of the " 81 : "layer'/>" 82 : " <Option name='SPATIAL_INDEX' type='boolean' description='Whether to " 83 : "create a spatial index' default='YES'/>" 84 : " <Option name='UPLOAD_GEOM_FORMAT' type='string-select' " 85 : "description='Geometry format when creating or modifying features' " 86 : "default='wkb'>" 87 : " <Value>wkb</Value>" 88 : " <Value>wkt</Value>" 89 : " </Option>" 90 : " <Option name='FID' type='string' description='Name of the FID " 91 : "column to create' default='ogr_fid'/>" 92 : " <Option name='FID64' type='boolean' description='Whether to create " 93 : "the FID column with bigint type to handle 64bit wide ids' " 94 : "default='NO'/>" 95 : " <Option name='GEOMETRY_NULLABLE' type='boolean' " 96 : "description='Whether the values of the geometry column can be NULL' " 97 : "default='YES'/>" 98 : " <Option name='EXTRACT_SCHEMA_FROM_LAYER_NAME' type='boolean' " 99 : "description='Whether a dot in a layer name should be considered as " 100 : "the separator for the schema and table name' default='YES'/>" 101 1760 : "</LayerCreationOptionList>"); 102 : 103 1760 : poDriver->SetMetadataItem(GDAL_DMD_CONNECTION_PREFIX, "MSSQL:"); 104 : 105 1760 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONFIELDDATATYPES, 106 : "Integer Integer64 Real String Date Time " 107 1760 : "DateTime Binary"); 108 1760 : poDriver->SetMetadataItem(GDAL_DMD_CREATION_FIELD_DEFN_FLAGS, 109 1760 : "WidthPrecision Nullable Default"); 110 : 111 1760 : poDriver->SetMetadataItem(GDAL_DCAP_NOTNULL_FIELDS, "YES"); 112 1760 : poDriver->SetMetadataItem(GDAL_DCAP_DEFAULT_FIELDS, "YES"); 113 1760 : poDriver->SetMetadataItem(GDAL_DCAP_NOTNULL_GEOMFIELDS, "YES"); 114 1760 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 115 : 116 1760 : poDriver->pfnIdentify = OGRMSSQLSPATIALDriverIdentify; 117 1760 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 118 1760 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 119 : 120 1760 : poDriver->SetMetadataItem(GDAL_DCAP_UPDATE, "YES"); 121 1760 : poDriver->SetMetadataItem(GDAL_DMD_UPDATE_ITEMS, "Features"); 122 1760 : } 123 : 124 : /************************************************************************/ 125 : /* DeclareDeferredOGRMSSQLSpatialPlugin() */ 126 : /************************************************************************/ 127 : 128 : #ifdef PLUGIN_FILENAME 129 2033 : void DeclareDeferredOGRMSSQLSpatialPlugin() 130 : { 131 2033 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 132 : { 133 283 : return; 134 : } 135 1750 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 136 : #ifdef PLUGIN_INSTALLATION_MESSAGE 137 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 138 : PLUGIN_INSTALLATION_MESSAGE); 139 : #endif 140 1750 : OGRMSSQLSPATIALDriverSetCommonMetadata(poDriver); 141 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 142 : } 143 : #endif