16 #ifndef __DATA_SOURCE_MODIFIERS_SQL_INTERNAL_ENGINE_H__
17 #define __DATA_SOURCE_MODIFIERS_SQL_INTERNAL_ENGINE_H__
19 #include "services/internal/error_handling_helpers.h"
20 #include "data_management/features/internal/helpers.h"
21 #include "data_management/data_source/internal/sql_feature_utils.h"
22 #include "data_management/data_source/modifiers/internal/engine.h"
23 #include "data_management/data_source/modifiers/sql/modifier.h"
27 namespace data_management
36 using data_management::internal::SQLFeatureInfo;
37 using data_management::internal::SQLFeaturesInfo;
38 using data_management::internal::SQLFetchBuffer;
39 using data_management::internal::SQLFetchBufferFragment;
45 class InputFeatureInfo :
public modifiers::internal::InputFeatureInfo
48 InputFeatureInfo() { }
50 explicit InputFeatureInfo(
const SQLFeatureInfo &featureInfo,
51 const SQLFetchBufferFragment &fetchBuffer) :
52 _featureInfo(featureInfo),
53 _fetchBuffer(fetchBuffer) { }
55 const SQLFeatureInfo &getFeatureInfo()
const
60 const SQLFetchBufferFragment &getFetchBuffer()
const
66 SQLFeatureInfo _featureInfo;
67 SQLFetchBufferFragment _fetchBuffer;
74 class OutputFeatureInfo :
public modifiers::internal::OutputFeatureInfo { };
80 class ConfigImpl :
public Config,
81 public modifiers::internal::Config<InputFeatureInfo,
85 typedef modifiers::internal::Config<InputFeatureInfo,
86 OutputFeatureInfo> impl;
91 explicit ConfigImpl(
const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
92 services::Status *status = NULL) :
93 impl(pickedInputFeatures, status) { }
95 virtual size_t getNumberOfInputFeatures()
const DAAL_C11_OVERRIDE
97 return impl::getNumberOfInputFeatures();
100 virtual services::Status setNumberOfOutputFeatures(
size_t numberOfOutputFeatures) DAAL_C11_OVERRIDE
102 return impl::setNumberOfOutputFeatures(numberOfOutputFeatures);
105 virtual services::Status setOutputFeatureType(
size_t outputFeatureIndex,
106 features::FeatureType featureType) DAAL_C11_OVERRIDE
108 return impl::setOutputFeatureType(outputFeatureIndex, featureType);
111 virtual services::Status setNumberOfCategories(
size_t outputFeatureIndex,
112 size_t numberOfCategories) DAAL_C11_OVERRIDE
114 return impl::setNumberOfCategories(outputFeatureIndex, numberOfCategories);
117 virtual services::Status setCategoricalDictionary(
size_t outputFeatureIndex,
118 const CategoricalFeatureDictionaryPtr &dictionary) DAAL_C11_OVERRIDE
120 return impl::setCategoricalDictionary(outputFeatureIndex, dictionary);
128 class ContextImpl :
public Context,
129 public modifiers::internal::Context<InputFeatureInfo,
133 typedef modifiers::internal::Context<InputFeatureInfo,
134 OutputFeatureInfo> impl;
139 explicit ContextImpl(
const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
140 services::Status *status = NULL) :
141 impl(pickedInputFeatures, status) { }
143 virtual size_t getNumberOfColumns()
const DAAL_C11_OVERRIDE
145 return impl::getNumberOfInputFeatures();
148 virtual services::BufferView<DAAL_DATA_TYPE> getOutputBuffer()
const DAAL_C11_OVERRIDE
150 return impl::getOutputBuffer();
153 virtual services::BufferView<char> getRawValue(
size_t columnIndex)
const DAAL_C11_OVERRIDE
155 const InputFeatureInfo &fi = impl::getPickedInputFeature(columnIndex);
156 return fi.getFetchBuffer().view();
164 class ModifiersManager :
public modifiers::internal::ModifiersManager<FeatureModifierIface,
165 ConfigImpl, ContextImpl>
168 static services::SharedPtr<ModifiersManager> create(services::Status *status = NULL)
170 return services::internal::wrapSharedAndTryThrow(
new ModifiersManager(), status);
173 services::Status prepare(
const SQLFeaturesInfo &featuresInfo,
174 const SQLFetchBuffer &fetchBuffer)
176 services::Status status;
178 const features::FeatureIdMappingIfacePtr mapping = createMapping(featuresInfo, &status);
179 DAAL_CHECK_STATUS_VAR(status);
181 const services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
182 createInputFeaturesInfo(featuresInfo, fetchBuffer, &status);
183 DAAL_CHECK_STATUS_VAR(status);
185 status |= getBinder().bind(mapping, inputFeaturesInfo);
191 ModifiersManager() { }
193 services::internal::CollectionPtr<InputFeatureInfo> createInputFeaturesInfo(
const SQLFeaturesInfo &featuresInfo,
194 const SQLFetchBuffer &fetchBuffer,
195 services::Status *status = NULL)
197 const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
199 services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
200 services::internal::HeapAllocatableCollection<InputFeatureInfo>::create(numberOfFeatures);
201 if (!inputFeaturesInfo)
203 services::internal::tryAssignStatusAndThrow(status, services::ErrorMemoryAllocationFailed);
204 return inputFeaturesInfo;
207 for (
size_t i = 0; i < numberOfFeatures; i++)
209 const SQLFeatureInfo &fi = featuresInfo[i];
210 const SQLFetchBufferFragment &ff = fetchBuffer.getFragment(i);
211 (*inputFeaturesInfo)[i] = InputFeatureInfo(fi, ff);
214 return inputFeaturesInfo;
217 features::FeatureIdMappingIfacePtr createMapping(
const SQLFeaturesInfo &featuresInfo,
218 services::Status *status = NULL)
220 const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
222 services::Status localStatus;
223 const features::internal::FeatureIdDefaultMappingPtr mapping =
224 features::internal::FeatureIdDefaultMapping::create(numberOfFeatures, &localStatus);
227 services::internal::tryAssignStatusAndThrow(status, localStatus);
231 for (
size_t i = 0; i < numberOfFeatures; ++i)
233 mapping->setFeatureKey(i, featuresInfo[i].columnName);
239 typedef services::SharedPtr<ModifiersManager> ModifiersManagerPtr;
daal::services::internal::HeapAllocatableCollection
Wrapper for services::Collection that allocates and deallocates memory using internal new/delete oper...
Definition: internal/collection.h:92
daal
Definition: algorithm_base_common.h:31
daal::data_management::modifiers::internal::Config
Base class for modifier configuration.
Definition: data_management/data_source/modifiers/internal/engine.h:100
daal::services::internal::CollectionPtr
Shared pointer to the Collection object.
Definition: internal/collection.h:136
daal::data_management::modifiers::sql::internal::ConfigImpl
Internal implementation of feature modifier configuration.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:80
daal::services::ErrorMemoryAllocationFailed
Definition: error_indexes.h:147
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:164
daal::data_management::modifiers::sql::internal::ContextImpl
Internal implementation of feature modifier context.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:128
daal::data_management::modifiers::sql::internal::OutputFeatureInfo
Class represents configuration of single feature.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:74
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:41
daal::data_management::modifiers::internal::Context
Base class for modifier context.
Definition: data_management/data_source/modifiers/internal/engine.h:214
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:449