Line data Source code
1 : /****************************************************************************** 2 : * 3 : * Project: SAP HANA Spatial Driver 4 : * Purpose: OGRHanaResultLayer class implementation 5 : * Author: Maxim Rylov 6 : * 7 : ****************************************************************************** 8 : * Copyright (c) 2020, SAP SE 9 : * 10 : * SPDX-License-Identifier: MIT 11 : ****************************************************************************/ 12 : 13 : #include "ogr_core.h" 14 : #include "ogr_hana.h" 15 : 16 : #include <memory> 17 : 18 : #include "odbc/PreparedStatement.h" 19 : #include "odbc/ResultSetMetaData.h" 20 : 21 : namespace OGRHANA 22 : { 23 : 24 : /************************************************************************/ 25 : /* OGRHanaResultLayer() */ 26 : /************************************************************************/ 27 : 28 13 : OGRHanaResultLayer::OGRHanaResultLayer(OGRHanaDataSource *datasource, 29 13 : const char *query) 30 13 : : OGRHanaLayer(datasource) 31 : { 32 13 : rawQuery_ = (query == nullptr) ? "" : query; 33 13 : SetDescription("sql_statement"); 34 13 : } 35 : 36 : /************************************************************************/ 37 : /* Initialize() */ 38 : /************************************************************************/ 39 : 40 13 : OGRErr OGRHanaResultLayer::Initialize() 41 : { 42 13 : if (initialized_) 43 0 : return OGRERR_NONE; 44 : 45 13 : auto names = dataSource_->FindSchemaAndTableNames(rawQuery_.c_str()); 46 13 : OGRErr err = InitFeatureDefinition(names.first, names.second, rawQuery_, 47 : "sql_statement"); 48 13 : return err; 49 : } 50 : 51 : /************************************************************************/ 52 : /* TestCapability() */ 53 : /************************************************************************/ 54 : 55 24 : int OGRHanaResultLayer::TestCapability(const char *capabilities) 56 : { 57 24 : if (EQUAL(capabilities, OLCFastGetExtent)) 58 : { 59 2 : EnsureInitialized(); 60 2 : return IsFastExtentAvailable(); 61 : } 62 22 : if (EQUAL(capabilities, OLCFastFeatureCount) || 63 22 : EQUAL(capabilities, OLCFastSpatialFilter)) 64 : { 65 0 : EnsureInitialized(); 66 0 : return (geomColumns_.size() > 0); 67 : } 68 22 : if (EQUAL(capabilities, OLCStringsAsUTF8)) 69 1 : return TRUE; 70 : 71 21 : return FALSE; 72 : } 73 : 74 : } // namespace OGRHANA