C++ API Reference for Intel® Data Analytics Acceleration Library 2019 Update 4

data_management/data_source/modifiers/sql/internal/engine.h
1 /* file: engine.h */
2 /*******************************************************************************
3 * Copyright 2014-2019 Intel Corporation.
4 *
5 * This software and the related documents are Intel copyrighted materials, and
6 * your use of them is governed by the express license under which they were
7 * provided to you (License). Unless the License provides otherwise, you may not
8 * use, modify, copy, publish, distribute, disclose or transmit this software or
9 * the related documents without Intel's prior written permission.
10 *
11 * This software and the related documents are provided as is, with no express
12 * or implied warranties, other than those that are expressly stated in the
13 * License.
14 *******************************************************************************/
15 
16 #ifndef __DATA_SOURCE_MODIFIERS_SQL_INTERNAL_ENGINE_H__
17 #define __DATA_SOURCE_MODIFIERS_SQL_INTERNAL_ENGINE_H__
18 
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"
24 
25 namespace daal
26 {
27 namespace data_management
28 {
29 namespace modifiers
30 {
31 namespace sql
32 {
33 namespace internal
34 {
35 
36 using data_management::internal::SQLFeatureInfo;
37 using data_management::internal::SQLFeaturesInfo;
38 using data_management::internal::SQLFetchBuffer;
39 using data_management::internal::SQLFetchBufferFragment;
40 
45 class InputFeatureInfo : public modifiers::internal::InputFeatureInfo
46 {
47 public:
48  InputFeatureInfo() { }
49 
50  explicit InputFeatureInfo(const SQLFeatureInfo &featureInfo,
51  const SQLFetchBufferFragment &fetchBuffer) :
52  _featureInfo(featureInfo),
53  _fetchBuffer(fetchBuffer) { }
54 
55  const SQLFeatureInfo &getFeatureInfo() const
56  {
57  return _featureInfo;
58  }
59 
60  const SQLFetchBufferFragment &getFetchBuffer() const
61  {
62  return _fetchBuffer;
63  }
64 
65 private:
66  SQLFeatureInfo _featureInfo;
67  SQLFetchBufferFragment _fetchBuffer;
68 };
69 
74 class OutputFeatureInfo : public modifiers::internal::OutputFeatureInfo { };
75 
80 class ConfigImpl : public Config,
81  public modifiers::internal::Config<InputFeatureInfo,
82  OutputFeatureInfo>
83 {
84 private:
85  typedef modifiers::internal::Config<InputFeatureInfo,
86  OutputFeatureInfo> impl;
87 
88 public:
89  ConfigImpl() { }
90 
91  explicit ConfigImpl(const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
92  services::Status *status = NULL) :
93  impl(pickedInputFeatures, status) { }
94 
95  virtual size_t getNumberOfInputFeatures() const DAAL_C11_OVERRIDE
96  {
97  return impl::getNumberOfInputFeatures();
98  }
99 
100  virtual services::Status setNumberOfOutputFeatures(size_t numberOfOutputFeatures) DAAL_C11_OVERRIDE
101  {
102  return impl::setNumberOfOutputFeatures(numberOfOutputFeatures);
103  }
104 
105  virtual services::Status setOutputFeatureType(size_t outputFeatureIndex,
106  features::FeatureType featureType) DAAL_C11_OVERRIDE
107  {
108  return impl::setOutputFeatureType(outputFeatureIndex, featureType);
109  }
110 
111  virtual services::Status setNumberOfCategories(size_t outputFeatureIndex,
112  size_t numberOfCategories) DAAL_C11_OVERRIDE
113  {
114  return impl::setNumberOfCategories(outputFeatureIndex, numberOfCategories);
115  }
116 
117  virtual services::Status setCategoricalDictionary(size_t outputFeatureIndex,
118  const CategoricalFeatureDictionaryPtr &dictionary) DAAL_C11_OVERRIDE
119  {
120  return impl::setCategoricalDictionary(outputFeatureIndex, dictionary);
121  }
122 };
123 
128 class ContextImpl : public Context,
129  public modifiers::internal::Context<InputFeatureInfo,
130  OutputFeatureInfo>
131 {
132 private:
133  typedef modifiers::internal::Context<InputFeatureInfo,
134  OutputFeatureInfo> impl;
135 
136 public:
137  ContextImpl() { }
138 
139  explicit ContextImpl(const services::internal::CollectionPtr<InputFeatureInfo *> &pickedInputFeatures,
140  services::Status *status = NULL) :
141  impl(pickedInputFeatures, status) { }
142 
143  virtual size_t getNumberOfColumns() const DAAL_C11_OVERRIDE
144  {
145  return impl::getNumberOfInputFeatures();
146  }
147 
148  virtual services::BufferView<DAAL_DATA_TYPE> getOutputBuffer() const DAAL_C11_OVERRIDE
149  {
150  return impl::getOutputBuffer();
151  }
152 
153  virtual services::BufferView<char> getRawValue(size_t columnIndex) const DAAL_C11_OVERRIDE
154  {
155  const InputFeatureInfo &fi = impl::getPickedInputFeature(columnIndex);
156  return fi.getFetchBuffer().view();
157  }
158 };
159 
164 class ModifiersManager : public modifiers::internal::ModifiersManager<FeatureModifierIface,
165  ConfigImpl, ContextImpl>
166 {
167 public:
168  static services::SharedPtr<ModifiersManager> create(services::Status *status = NULL)
169  {
170  return services::internal::wrapSharedAndTryThrow(new ModifiersManager(), status);
171  }
172 
173  services::Status prepare(const SQLFeaturesInfo &featuresInfo,
174  const SQLFetchBuffer &fetchBuffer)
175  {
176  services::Status status;
177 
178  const features::FeatureIdMappingIfacePtr mapping = createMapping(featuresInfo, &status);
179  DAAL_CHECK_STATUS_VAR(status);
180 
181  const services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
182  createInputFeaturesInfo(featuresInfo, fetchBuffer, &status);
183  DAAL_CHECK_STATUS_VAR(status);
184 
185  status |= getBinder().bind(mapping, inputFeaturesInfo);
186 
187  return status;
188  }
189 
190 private:
191  ModifiersManager() { }
192 
193  services::internal::CollectionPtr<InputFeatureInfo> createInputFeaturesInfo(const SQLFeaturesInfo &featuresInfo,
194  const SQLFetchBuffer &fetchBuffer,
195  services::Status *status = NULL)
196  {
197  const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
198 
199  services::internal::CollectionPtr<InputFeatureInfo> inputFeaturesInfo =
200  services::internal::HeapAllocatableCollection<InputFeatureInfo>::create(numberOfFeatures);
201  if (!inputFeaturesInfo)
202  {
203  services::internal::tryAssignStatusAndThrow(status, services::ErrorMemoryAllocationFailed);
204  return inputFeaturesInfo;
205  }
206 
207  for (size_t i = 0; i < numberOfFeatures; i++)
208  {
209  const SQLFeatureInfo &fi = featuresInfo[i];
210  const SQLFetchBufferFragment &ff = fetchBuffer.getFragment(i);
211  (*inputFeaturesInfo)[i] = InputFeatureInfo(fi, ff);
212  }
213 
214  return inputFeaturesInfo;
215  }
216 
217  features::FeatureIdMappingIfacePtr createMapping(const SQLFeaturesInfo &featuresInfo,
218  services::Status *status = NULL)
219  {
220  const size_t numberOfFeatures = featuresInfo.getNumberOfFeatures();
221 
222  services::Status localStatus;
223  const features::internal::FeatureIdDefaultMappingPtr mapping =
224  features::internal::FeatureIdDefaultMapping::create(numberOfFeatures, &localStatus);
225  if (!localStatus)
226  {
227  services::internal::tryAssignStatusAndThrow(status, localStatus);
228  return mapping;
229  }
230 
231  for (size_t i = 0; i < numberOfFeatures; ++i)
232  {
233  mapping->setFeatureKey(i, featuresInfo[i].columnName);
234  }
235 
236  return mapping;
237  }
238 };
239 typedef services::SharedPtr<ModifiersManager> ModifiersManagerPtr;
240 
241 } // namespace internal
242 } // namespace sql
243 } // namespace modifiers
244 } // namespace data_management
245 } // namespace daal
246 
247 #endif
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:146
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::InputFeatureInfo
Class represents configuration of single input feature.
Definition: data_management/data_source/modifiers/sql/internal/engine.h:45
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::InputFeatureInfo
Base class represents input feature for modifier, contains information about single input feature...
Definition: data_management/data_source/modifiers/internal/engine.h:35
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

For more complete information about compiler optimizations, see our Optimization Notice.