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