18 #ifndef __DATA_SOURCE_MODIFIERS_SQL_INTERNAL_ENGINE_H__
19 #define __DATA_SOURCE_MODIFIERS_SQL_INTERNAL_ENGINE_H__
21 #include "services/internal/error_handling_helpers.h"
22 #include "data_management/features/internal/helpers.h"
23 #include "data_management/data_source/internal/sql_feature_utils.h"
24 #include "data_management/data_source/modifiers/internal/engine.h"
25 #include "data_management/data_source/modifiers/sql/modifier.h"
29 namespace data_management
38 using data_management::internal::SQLFeatureInfo;
39 using data_management::internal::SQLFeaturesInfo;
40 using data_management::internal::SQLFetchBuffer;
41 using data_management::internal::SQLFetchBufferFragment;
47 class InputFeatureInfo :
public modifiers::internal::InputFeatureInfo
50 InputFeatureInfo() { }
52 explicit InputFeatureInfo(
const SQLFeatureInfo &featureInfo,
53 const SQLFetchBufferFragment &fetchBuffer) :
54 _featureInfo(featureInfo),
55 _fetchBuffer(fetchBuffer) { }
57 const SQLFeatureInfo &getFeatureInfo()
const
62 const SQLFetchBufferFragment &getFetchBuffer()
const
68 SQLFeatureInfo _featureInfo;
69 SQLFetchBufferFragment _fetchBuffer;
76 class OutputFeatureInfo :
public modifiers::internal::OutputFeatureInfo { };
82 class ConfigImpl :
public Config,
83 public modifiers::internal::Config<InputFeatureInfo,
87 typedef modifiers::internal::Config<InputFeatureInfo,
88 OutputFeatureInfo> impl;
93 explicit ConfigImpl(
const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
94 services::Status *status = NULL) :
95 impl(pickedInputFeatures, status) { }
97 virtual size_t getNumberOfInputFeatures()
const DAAL_C11_OVERRIDE
99 return impl::getNumberOfInputFeatures();
102 virtual services::Status setNumberOfOutputFeatures(
size_t numberOfOutputFeatures) DAAL_C11_OVERRIDE
104 return impl::setNumberOfOutputFeatures(numberOfOutputFeatures);
107 virtual services::Status setOutputFeatureType(
size_t outputFeatureIndex,
108 features::FeatureType featureType) DAAL_C11_OVERRIDE
110 return impl::setOutputFeatureType(outputFeatureIndex, featureType);
113 virtual services::Status setNumberOfCategories(
size_t outputFeatureIndex,
114 size_t numberOfCategories) DAAL_C11_OVERRIDE
116 return impl::setNumberOfCategories(outputFeatureIndex, numberOfCategories);
119 virtual services::Status setCategoricalDictionary(
size_t outputFeatureIndex,
120 const CategoricalFeatureDictionaryPtr &dictionary) DAAL_C11_OVERRIDE
122 return impl::setCategoricalDictionary(outputFeatureIndex, dictionary);
130 class ContextImpl :
public Context,
131 public modifiers::internal::Context<InputFeatureInfo,
135 typedef modifiers::internal::Context<InputFeatureInfo,
136 OutputFeatureInfo> impl;
141 explicit ContextImpl(
const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
142 services::Status *status = NULL) :
143 impl(pickedInputFeatures, status) { }
145 virtual size_t getNumberOfColumns()
const DAAL_C11_OVERRIDE
147 return impl::getNumberOfInputFeatures();
150 virtual services::BufferView<DAAL_DATA_TYPE> getOutputBuffer()
const DAAL_C11_OVERRIDE
152 return impl::getOutputBuffer();
155 virtual services::BufferView<char> getRawValue(
size_t columnIndex)
const DAAL_C11_OVERRIDE
157 const InputFeatureInfo &fi = impl::getPickedInputFeature(columnIndex);
158 return fi.getFetchBuffer().view();
166 class ModifiersManager :
public modifiers::internal::ModifiersManager<FeatureModifierIface,
167 ConfigImpl, ContextImpl>
170 static services::SharedPtr<ModifiersManager> create(services::Status *status = NULL)
172 return services::internal::wrapSharedAndTryThrow(
new ModifiersManager(), status);
175 services::Status prepare(
const SQLFeaturesInfo &featuresInfo,
176 const SQLFetchBuffer &fetchBuffer)
178 services::Status status;
180 const features::FeatureIdMappingIfacePtr mapping = createMapping(featuresInfo, &status);
181 DAAL_CHECK_STATUS_VAR(status);
183 const services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
184 createInputFeaturesInfo(featuresInfo, fetchBuffer, &status);
185 DAAL_CHECK_STATUS_VAR(status);
187 status |= getBinder().bind(mapping, inputFeaturesInfo);
193 ModifiersManager() { }
195 services::internal::CollectionPtr<InputFeatureInfo> createInputFeaturesInfo(
const SQLFeaturesInfo &featuresInfo,
196 const SQLFetchBuffer &fetchBuffer,
197 services::Status *status = NULL)
199 const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
201 services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
202 services::internal::HeapAllocatableCollection<InputFeatureInfo>::create(numberOfFeatures);
203 if (!inputFeaturesInfo)
205 services::internal::tryAssignStatusAndThrow(status, services::ErrorMemoryAllocationFailed);
206 return inputFeaturesInfo;
209 for (
size_t i = 0; i < numberOfFeatures; i++)
211 const SQLFeatureInfo &fi = featuresInfo[i];
212 const SQLFetchBufferFragment &ff = fetchBuffer.getFragment(i);
213 (*inputFeaturesInfo)[i] = InputFeatureInfo(fi, ff);
216 return inputFeaturesInfo;
219 features::FeatureIdMappingIfacePtr createMapping(
const SQLFeaturesInfo &featuresInfo,
220 services::Status *status = NULL)
222 const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
224 services::Status localStatus;
225 const features::internal::FeatureIdDefaultMappingPtr mapping =
226 features::internal::FeatureIdDefaultMapping::create(numberOfFeatures, &localStatus);
229 services::internal::tryAssignStatusAndThrow(status, localStatus);
233 for (
size_t i = 0; i < numberOfFeatures; ++i)
235 mapping->setFeatureKey(i, featuresInfo[i].columnName);
241 typedef services::SharedPtr<ModifiersManager> ModifiersManagerPtr;
daal::data_management::modifiers::internal::Context
Base class for modifier context.
Definition: data_management/data_source/modifiers/internal/engine.h:216
daal::data_management::modifiers::internal::ModifiersManager
Class that holds modifiers and implements logic of modifiers applying flow.
Definition: data_management/data_source/modifiers/internal/engine.h:451
daal::data_management::modifiers::sql::internal::ConfigImpl
Internal implementation of feature modifier configuration.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:82
daal::data_management::modifiers::internal::Config
Base class for modifier configuration.
Definition: data_management/data_source/modifiers/internal/engine.h:102
daal::services::internal::HeapAllocatableCollection
Wrapper for services::Collection that allocates and deallocates memory using internal new/delete oper...
Definition: internal/collection.h:94
daal::data_management::modifiers::sql::internal::ContextImpl
Internal implementation of feature modifier context.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:130
daal::data_management::modifiers::internal::InputFeatureInfo
Base class represents input feature for modifier, contains information about single input feature...
Definition: data_management/data_source/modifiers/internal/engine.h:37
daal::services::internal::CollectionPtr
Shared pointer to the Collection object.
Definition: internal/collection.h:138
daal::data_management::modifiers::sql::internal::InputFeatureInfo
Class represents configuration of single input feature.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:47
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:150
daal::data_management::modifiers::sql::internal::OutputFeatureInfo
Class represents configuration of single feature.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:76
daal::data_management::modifiers::sql::internal::ModifiersManager
Class that holds modifiers and implements logic of modifiers applying flow.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:166
daal::data_management::modifiers::internal::OutputFeatureInfo
Base class represents output feature for modifier, contains information about single output feature...
Definition: data_management/data_source/modifiers/internal/engine.h:43