Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: OpenGIS Simple Features Reference Implementation 4 : * Purpose: Implements OGRMySQLDriver class. 5 : * Author: Frank Warmerdam, warmerdam@pobox.com 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2004, Frank Warmerdam <warmerdam@pobox.com> 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "gdal_frmts.h" 14 : #include "gdalplugindriverproxy.h" 15 : 16 : #include "ogrsf_frmts.h" 17 : 18 : #include "ogrmysqldrivercore.h" 19 : 20 : /************************************************************************/ 21 : /* OGRMySQLDriverIdentify() */ 22 : /************************************************************************/ 23 : 24 53452 : int OGRMySQLDriverIdentify(GDALOpenInfo *poOpenInfo) 25 : 26 : { 27 53452 : return STARTS_WITH_CI(poOpenInfo->pszFilename, "MYSQL:"); 28 : } 29 : 30 : /************************************************************************/ 31 : /* OGRMySQLDriverSetCommonMetadata() */ 32 : /************************************************************************/ 33 : 34 1764 : void OGRMySQLDriverSetCommonMetadata(GDALDriver *poDriver) 35 : { 36 1764 : poDriver->SetDescription(DRIVER_NAME); 37 1764 : poDriver->SetMetadataItem(GDAL_DCAP_VECTOR, "YES"); 38 1764 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_LAYER, "YES"); 39 1764 : poDriver->SetMetadataItem(GDAL_DCAP_DELETE_LAYER, "YES"); 40 1764 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE_FIELD, "YES"); 41 1764 : poDriver->SetMetadataItem(GDAL_DCAP_MEASURED_GEOMETRIES, "YES"); 42 1764 : poDriver->SetMetadataItem(GDAL_DCAP_Z_GEOMETRIES, "YES"); 43 1764 : poDriver->SetMetadataItem(GDAL_DMD_LONGNAME, "MySQL"); 44 1764 : poDriver->SetMetadataItem(GDAL_DMD_HELPTOPIC, "drivers/vector/mysql.html"); 45 : 46 1764 : poDriver->SetMetadataItem(GDAL_DMD_CONNECTION_PREFIX, "MYSQL:"); 47 : 48 1764 : poDriver->SetMetadataItem( 49 : GDAL_DMD_OPENOPTIONLIST, 50 : "<OpenOptionList>" 51 : " <Option name='DBNAME' type='string' description='Database name' " 52 : "required='true'/>" 53 : " <Option name='PORT' type='int' description='Port'/>" 54 : " <Option name='USER' type='string' description='User name'/>" 55 : " <Option name='PASSWORD' type='string' description='Password'/>" 56 : " <Option name='HOST' type='string' description='Server hostname'/>" 57 : " <Option name='TABLES' type='string' description='Restricted set of " 58 : "tables to list (comma separated)'/>" 59 1764 : "</OpenOptionList>"); 60 : 61 1764 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONOPTIONLIST, 62 1764 : "<CreationOptionList/>"); 63 : 64 1764 : poDriver->SetMetadataItem( 65 : GDAL_DS_LAYER_CREATIONOPTIONLIST, 66 : "<LayerCreationOptionList>" 67 : " <Option name='OVERWRITE' type='boolean' description='Whether to " 68 : "overwrite an existing table with the layer name to be created' " 69 : "default='NO'/>" 70 : " <Option name='LAUNDER' type='boolean' description='Whether layer " 71 : "and field names will be laundered' default='YES'/>" 72 : " <Option name='PRECISION' type='boolean' description='Whether fields " 73 : "created should keep the width and precision' default='YES'/>" 74 : " <Option name='GEOMETRY_NAME' type='string' description='Name of " 75 : "geometry column.' default='SHAPE'/>" 76 : " <Option name='SPATIAL_INDEX' type='boolean' description='Whether to " 77 : "create a spatial index' default='YES'/>" 78 : " <Option name='FID' type='string' description='Name of the FID " 79 : "column to create' default='OGR_FID' deprecated_alias='MYSQL_FID'/>" 80 : " <Option name='FID64' type='boolean' description='Whether to create " 81 : "the FID column with BIGINT type to handle 64bit wide ids' " 82 : "default='NO'/>" 83 : " <Option name='ENGINE' type='string' description='Database engine to " 84 : "use.'/>" 85 1764 : "</LayerCreationOptionList>"); 86 : 87 1764 : poDriver->SetMetadataItem(GDAL_DMD_CREATIONFIELDDATATYPES, 88 : "Integer Integer64 Real String Date DateTime " 89 1764 : "Time Binary"); 90 1764 : poDriver->SetMetadataItem(GDAL_DCAP_NOTNULL_FIELDS, "YES"); 91 1764 : poDriver->SetMetadataItem(GDAL_DCAP_DEFAULT_FIELDS, "YES"); 92 1764 : poDriver->SetMetadataItem(GDAL_DCAP_MULTIPLE_VECTOR_LAYERS, "YES"); 93 1764 : poDriver->SetMetadataItem(GDAL_DMD_SUPPORTED_SQL_DIALECTS, 94 1764 : "NATIVE OGRSQL SQLITE"); 95 : 96 1764 : poDriver->pfnIdentify = OGRMySQLDriverIdentify; 97 1764 : poDriver->SetMetadataItem(GDAL_DCAP_OPEN, "YES"); 98 1764 : poDriver->SetMetadataItem(GDAL_DCAP_CREATE, "YES"); 99 : 100 1764 : poDriver->SetMetadataItem(GDAL_DCAP_UPDATE, "YES"); 101 1764 : poDriver->SetMetadataItem(GDAL_DMD_UPDATE_ITEMS, "Features"); 102 1764 : } 103 : 104 : /************************************************************************/ 105 : /* DeclareDeferredOGRMySQLPlugin() */ 106 : /************************************************************************/ 107 : 108 : #ifdef PLUGIN_FILENAME 109 2033 : void DeclareDeferredOGRMySQLPlugin() 110 : { 111 2033 : if (GDALGetDriverByName(DRIVER_NAME) != nullptr) 112 : { 113 283 : return; 114 : } 115 1750 : auto poDriver = new GDALPluginDriverProxy(PLUGIN_FILENAME); 116 : #ifdef PLUGIN_INSTALLATION_MESSAGE 117 : poDriver->SetMetadataItem(GDAL_DMD_PLUGIN_INSTALLATION_MESSAGE, 118 : PLUGIN_INSTALLATION_MESSAGE); 119 : #endif 120 1750 : OGRMySQLDriverSetCommonMetadata(poDriver); 121 1750 : GetGDALDriverManager()->DeclareDeferredPluginDriver(poDriver); 122 : } 123 : #endif