OpenM++ runtime library (libopenm)
runController.h
Go to the documentation of this file.
1
5// Copyright (c) 2013-2015 OpenM++
6// This code is licensed under the MIT license (see LICENSE.txt for details)
7
8#ifndef RUN_CTRL_H
9#define RUN_CTRL_H
10
11#include <fstream>
12#include "metaLoader.h"
13#include "dbValue.h"
14
15using namespace std;
16
17static constexpr size_t MinSizeToSaveMicrodata = 128 * 1024;
18static constexpr size_t MaxSizeToSaveMicrodata = 2 * 1024 * 1024;
20namespace openm
21{
23 class RunController : public MetaLoader, public IRunBase
24 {
25 public:
28
31
34
37
39 static RunController * create(const ArgReader & i_argOpts, bool i_isMpiUsed, IDbExec * i_dbExec, IMsgExec * i_msgExec);
40
42 virtual ~RunController(void) noexcept = 0;
43
45 int parameterIdByName(const char * i_name) const override { return MetaLoader::parameterIdByName(i_name); };
46
48 int parameterSubCount(int i_paramId) const override { return MetaLoader::parameterSubCount(i_paramId); }
49
51 int parameterSelfSubCount(int i_paramId) const override
52 {
53 return parameterSubCount(i_paramId) > 1 ? selfSubCount : 1;
54 }
55
57 int parameterSubValueIndex(int i_paramId, int i_subId) const override
58 {
59 return (parameterSubCount(i_paramId) > 1 && subFirstId <= i_subId && i_subId < subFirstId + selfSubCount) ?
60 i_subId - subFirstId :
61 0;
62 }
63
65 bool isUseSubValue(int i_subId) const override
66 {
67 return subFirstId <= i_subId && i_subId < subFirstId + selfSubCount;
68 }
69
71 bool isTableSuppressed(const char * i_name) const override {
72 return isSuppressed(i_name);
73 }
74
76 bool isTableSuppressed(int i_tableId) const override {
77 return isSuppressed(i_tableId);
78 }
79
81 RunStateHolder & runStateStore(void) { return runStateHolder; }
82
84 virtual int nextRun(void) = 0;
85
87 virtual void shutdownRun(int i_runId) = 0;
88
90 virtual void shutdownWaitAll(void) = 0;
91
93 virtual void shutdownOnExit(ModelStatus i_status) = 0;
94
96 virtual bool childExchange(void) = 0;
97
99 virtual void writeAccumulators(
100 const RunOptions & i_runOpts,
101 bool i_isLastTable,
102 const char * i_name,
103 size_t i_size,
104 forward_list<unique_ptr<double[]> > & io_accValues
105 ) = 0;
106
108 bool isOptionExist(const char * i_key) const noexcept override {
109 return metaStore->runOptionTable ? metaStore->runOptionTable->isExist(currentRunId(), i_key) : false;
110 }
111
113 string strOption(const char * i_key, const string & i_default = "") const noexcept override {
114 return metaStore->runOptionTable ? metaStore->runOptionTable->strValue(currentRunId(), i_key, i_default) : i_default;
115 }
116
118 bool boolOption(const char * i_key) const noexcept override {
119 return metaStore->runOptionTable ? metaStore->runOptionTable->boolValue(currentRunId(), i_key) : false;
120 }
121
128 int boolOptionToInt(const char * i_key) const noexcept override {
129 return metaStore->runOptionTable ? metaStore->runOptionTable->boolValueToInt(currentRunId(), i_key) : -1;
130 }
131
133 int intOption(const char * i_key, int i_default) const noexcept override {
134 return metaStore->runOptionTable ? metaStore->runOptionTable->intValue(currentRunId(), i_key, i_default) : i_default;
135 }
136
138 long long longOption(const char * i_key, long long i_default) const noexcept override {
139 return metaStore->runOptionTable ? metaStore->runOptionTable->longValue(currentRunId(), i_key, i_default) : i_default;
140 }
141
143 double doubleOption(const char * i_key, double i_default) const noexcept override {
144 return metaStore->runOptionTable ? metaStore->runOptionTable->doubleValue(currentRunId(), i_key, i_default) : i_default;
145 }
146
148 vector<pair<string, string>> allOptions(void) const noexcept override;
149
152 {
153 int attrId;
154 int idxOf;
155 ptrdiff_t rowOffset = 0;
156 unique_ptr<IValueFormatter> fmtValue;
157 unique_ptr<IValueFormatter> sqlFmtValue;
159 EntityAttrItem(int i_attrId, int i_index) : attrId(i_attrId), idxOf(i_index) {}
160 };
161
164 {
165 int entityId;
166 vector<EntityAttrItem> attrs;
167 string genDigest;
168 int genHid = 0;
170 string csvHdr;
171 size_t rowSize = 0;
173 vector<DbValueSetter> rowSetter;
174 vector<const type_info *> rowTypes;
176 EntityItem(int i_entityId) : entityId(i_entityId) {}
177 };
178
186 void pushDbMicrodata(int i_runId, int i_entityKind, uint64_t i_microdataKey, const void * i_entityThis);
187
196 void writeCsvMicrodata(int i_entityKind, uint64_t i_microdataKey, int i_eventId, bool i_isSameEntity, const void * i_entityThis, string & io_line);
197
199 const string csvHeaderMicrodata(int i_entityKind) const;
200
202 void makeCsvLineMicrodata(const EntityItem & i_entityItem, uint64_t i_microdataKey, int i_eventId, bool i_isSameEntity, const void * i_entityThis, string & io_line) const;
203
205 tuple<bool, const RunController::EntityItem &> findEntityItem(int i_entityKind) const;
206
208 bool isEntityEventInFilter(int i_entityKind, uint64_t i_microdataKey, int i_eventId) const;
209
210 protected:
212 RunController(const ArgReader & i_argStore) : MetaLoader(i_argStore),
213 subFirstId(0),
214 selfSubCount(0),
215 processCount(1),
216 processRank(0)
217 { }
218
220 virtual void init(void) = 0;
221
223 virtual int currentRunId(void) const noexcept = 0;
224
226 int createTaskRun(int i_taskId, IDbExec * i_dbExec);
227
229 int findTask(IDbExec * i_dbExec);
230
232 tuple<int, int, ModelStatus> createNewRun(int i_taskRunId, bool i_isWaitTaskRun, IDbExec * i_dbExec);
233
235 void doShutdownOnExit(ModelStatus i_status, int i_runId, int i_taskRunId, IDbExec * i_dbExec);
236
238 void doShutdownRun(int i_runId, int i_taskRunId, IDbExec * i_dbExec);
239
241 void doShutdownAll(int i_taskRunId, IDbExec * i_dbExec);
242
245 int i_runId,
246 IDbExec * i_dbExec,
247 const RunOptions & i_runOpts,
248 const char * i_name,
249 size_t i_size,
250 forward_list<unique_ptr<double[]> > & io_accValues
251 ) const;
252
254 void updateRestartSubValueId(int i_runId, IDbExec * i_dbExec, int i_subRestart) const;
255
257 void updateRunState(IDbExec * i_dbExec, const map<pair<int, int>, RunState> i_updated) const;
258
259 // microdata entities to write into database or csv
260 map<int, EntityItem> entityMap;
261 vector<int> entityIds; // sorted microdata entity id's
262
271 map<int, list<unique_ptr<uint8_t[]>>> pullDbMicrodata(bool i_isNow = false);
272
275 {
277 virtual uint8_t * toFirst(void) = 0;
278
280 virtual uint8_t * toNext(void) = 0;
281 };
282
285 {
287 ListFirstNext(list<unique_ptr<uint8_t[]>>::const_iterator i_begin, list<unique_ptr<uint8_t[]>>::const_iterator i_end) {
288 beginIt = i_begin;
289 endIt = i_end;
290 rowIt = i_begin;
291 }
292
294 virtual uint8_t * toFirst(void) override
295 {
296 rowIt = beginIt;
297 return rowIt != endIt ? rowIt->get() : nullptr;
298 }
299
301 virtual uint8_t * toNext(void) override
302 {
303 if (rowIt == endIt) return nullptr;
304
305 ++rowIt;
306 return rowIt != endIt ? rowIt->get() : nullptr;
307 }
308 private:
309 list<unique_ptr<uint8_t[]>>::const_iterator beginIt; // first row
310 list<unique_ptr<uint8_t[]>>::const_iterator endIt; // after last row
311 list<unique_ptr<uint8_t[]>>::const_iterator rowIt; // current row
312 };
313
316 {
318 BytesFirstNext(size_t i_rowCount, size_t i_rowSize, uint8_t * i_rows) : count(i_rowCount), size(i_rowSize) {
319 totalSize = size * count;
320 pRows = i_rows;
321 rowNow = 0;
322 }
323
325 virtual uint8_t * toFirst(void) override
326 {
327 if (pRows == nullptr || count <= 0 || size <= 0) return nullptr;
328
329 rowNow = 0;
330 return size <= totalSize ? pRows : nullptr;
331 }
332
334 virtual uint8_t * toNext(void) override
335 {
336 if (pRows == nullptr || count <= 0 || size <= 0 || rowNow >= count) return nullptr;
337
338 rowNow++;
339 return (rowNow + 1) * size <= totalSize ? pRows + (rowNow * size) : nullptr;
340 }
341 private:
342 size_t count = 0; // rows count
343 size_t size = 0; // row size in bytes
344 size_t totalSize = 0; // total size in bytes
345 uint8_t * pRows; // array of bytes [count, size]
346 size_t rowNow = 0; // current row index
347 };
348
350 size_t doDbMicrodata(IDbExec * i_dbExec, int i_entityId, IRowsFirstNext & i_entityMdRows);
351
353 size_t doDbMicrodataSql(IDbExec * i_dbExec, const map<int, list<unique_ptr<uint8_t[]>>> & i_entityMdRows);
354
356 void openCsvMicrodata(void);
357
358 private:
360 RunStateHolder runStateHolder;
361
363 tuple<int, string, bool, bool> findWorkset(int i_setId, IDbExec * i_dbExec);
364
366 int findBaseRun(IDbExec * i_dbExec);
367
369 void createRunOptions(int i_runId, int i_setId, const string & i_setName, int i_baseRunId, int i_taskRunId, IDbExec * i_dbExec) const;
370
371 // copy input parameters from "base" run and working set into new run id
372 void createRunParameters(int i_runId, int i_setId, bool i_isWsDefault, bool i_isReadonlyWsDefault, int i_baseRunId, IDbExec * i_dbExec) const;
373
374 // cretate run description and notes using run options or by copy it from workset text
375 void createRunText(int i_runId, int i_setId, IDbExec * i_dbExec) const;
376
377 // insert run entity metadata and create run entity database tables
378 void createRunEntityTables(IDbExec* i_dbExec);
379
380 // insert run entity rows for all entities in that model run
381 void insertRunEntity(int i_runId, IDbExec * i_dbExec);
382
383 // calculate entity generation digest: based on entity digest, attributes id, name, type digest
384 const string makeEntityGenDigest(const EntityDicRow * i_entRow, const vector<EntityAttrRow> i_attrRows) const;
385
387 void writeOutputValues(int i_runId, IDbExec * i_dbExec) const;
388
390 void writeMicrodataDigest(int i_runId, IDbExec * i_dbExec) const;
391
392 // check sub-value id's and count: sub id must be zero in range [0, sub count -1] and count must be equal to parameter size
393 void checkParamSubCounts(int i_runId, int i_subCount, const ParamDicRow & i_paramRow, IDbExec * i_dbExec) const;
394
395 // make part of where clause to select sub_id's
396 const string makeWhereSubId(const MetaLoader::ParamSubOpts & i_subOpts, int i_defaultSubId) const;
397
398 // make part of select columns list to map source sub id's to run parameter sub_id's
399 const string mapSelectedSubId(const MetaLoader::ParamSubOpts & i_subOpts) const;
400
401 // return parameter sub-value options by parameter id
402 const MetaLoader::ParamSubOpts subOptsById(const ParamDicRow & i_paramRow, int i_subCount, int i_defaultSubId) const;
403
405 RunImportOpts findImportRun(const string & i_modelName, const ImportOpts & i_importOpts, const IModelDicTable * i_mainModelTable, IDbExec * i_dbExec) const;
406
408 bool importOutputTable(
409 int i_runId,
410 const ParamDicRow & i_paramRow,
411 const ParameterNameSizeItem * i_nameSizeItem,
412 const RunImportOpts & i_riOpts,
413 const ParamImportRow * i_importRow,
414 IDbExec * i_dbExec
415 ) const;
416
418 bool importParameter(
419 int i_runId,
420 const ParamDicRow & i_paramRow,
421 const ParameterNameSizeItem * i_nameSizeItem,
422 const RunImportOpts & i_riOpts,
423 const ParamImportRow * i_importRow,
424 const ParamSubOpts & i_subOpts,
425 IDbExec * i_dbExec
426 ) const;
427
428 // microdata entity to strore in database
429 struct EntityDbItem
430 {
431 int entityId; // entity metadata id
432 //
433 recursive_mutex theMutex; // mutex to lock for db write operations
434 list<unique_ptr<uint8_t[]>> rowLst; // microdata list of rows
435 chrono::system_clock::time_point lastSaveTime = chrono::system_clock::time_point::min(); // last time of save
436 };
437 map<int, EntityDbItem> entityDbMap; // map entity id to database microdata buffer
438
443 tuple<bool, size_t> statusDbMicrodata(chrono::system_clock::time_point i_nowTime, EntityDbItem & i_entityDbItem);
444
446 list<unique_ptr<uint8_t[]>> && moveDbMicrodata(chrono::system_clock::time_point i_nowTime, EntityDbItem & io_entityDbItem);
447
448 // microdata entity to write into csv
449 struct EntityCsvItem
450 {
451 int entityId; // entity metadata id
452 string filePath; // if not empty then microdata csv file path
453 //
454 recursive_mutex theMutex; // mutex to lock for csv write operations
455 bool isReady; // if true then csv output file open and ready to use
456 ofstream csvSt; // csv output stream
457 };
458 map<int, EntityCsvItem> entityCsvMap; // map entity id to microdata entity csv file
459
460 // initialize microdata entity writing
461 void initMicrodata(void);
462
464 void closeCsvMicrodata(void) noexcept;
465
467 void writeCsvLineMicrodata(EntityCsvItem & io_entityCsvItem, const string & i_line);
468
469 private:
470 RunController(const RunController & i_runCtrl) = delete;
471 RunController & operator=(const RunController & i_runCtrl) = delete;
472 };
473}
474
475#endif // RUN_CTRL_H
database connection wrapper to execute sql commands.
Definition: dbExec.h:21
public interface for message passing
Definition: msg.h:138
model metadata loader: read and broadcast metadata and run options.
Definition: metaLoader.h:251
int parameterSubCount(int i_paramId) const
return sub-values count by parameter id
Definition: metaLoader.h:275
bool isSuppressed(const char *i_name) const
check by name if output table suppressed
Definition: metaLoader.h:287
int parameterIdByName(const char *i_name) const
return index of parameter by name
Definition: metaLoader.cpp:116
run controller: create new model run(s) and support data exchange.
Definition: runController.h:24
long long longOption(const char *i_key, long long i_default) const noexcept override
return long value of run option by i_key or default if not found or can not be converted to long.
Definition: runController.h:138
void updateRunState(IDbExec *i_dbExec, const map< pair< int, int >, RunState > i_updated) const
merge updated sub-values run statue into database
Definition: runController.cpp:353
int parameterSelfSubCount(int i_paramId) const override
number of parameter sub-values for current process
Definition: runController.h:51
virtual ~RunController(void) noexcept=0
last cleanup
Definition: runController.cpp:21
virtual void writeAccumulators(const RunOptions &i_runOpts, bool i_isLastTable, const char *i_name, size_t i_size, forward_list< unique_ptr< double[]> > &io_accValues)=0
write output table accumulators or send data to root process.
virtual int currentRunId(void) const noexcept=0
get run id of the current model run.
const string csvHeaderMicrodata(int i_entityKind) const
return microdata entity csv file header
Definition: runControllerMicrodata.cpp:882
virtual void shutdownOnExit(ModelStatus i_status)=0
model process shutdown if exiting without completion (ie: exit on error).
int parameterIdByName(const char *i_name) const override
return index of parameter by name
Definition: runController.h:45
int createTaskRun(int i_taskId, IDbExec *i_dbExec)
create task run entry in database
Definition: runControllerNewRun.cpp:16
bool isUseSubValue(int i_subId) const override
return true if sub-value used by current process
Definition: runController.h:65
int findTask(IDbExec *i_dbExec)
find modeling task, if specified
Definition: runControllerNewRun.cpp:57
int parameterSubCount(int i_paramId) const override
number of parameter sub-values for current model run
Definition: runController.h:48
bool isTableSuppressed(const char *i_name) const override
check by name if output table suppressed.
Definition: runController.h:71
virtual void init(void)=0
get number of sub-values, read and broadcast metadata.
tuple< bool, const RunController::EntityItem & > findEntityItem(int i_entityKind) const
check if any microdata write required for this entity kind
Definition: runControllerMicrodata.cpp:83
RunStateHolder & runStateStore(void)
return holder of all sub-values modeling run states
Definition: runController.h:81
bool isTableSuppressed(int i_tableId) const override
check by id if output table suppressed.
Definition: runController.h:76
string strOption(const char *i_key, const string &i_default="") const noexcept override
return string value of run option by i_key or default value if not found.
Definition: runController.h:113
virtual void shutdownWaitAll(void)=0
model process shutdown: cleanup resources.
void openCsvMicrodata(void)
create microdata CSV files for new model run.
Definition: runControllerMicrodata.cpp:889
void writeCsvMicrodata(int i_entityKind, uint64_t i_microdataKey, int i_eventId, bool i_isSameEntity, const void *i_entityThis, string &io_line)
write microdata into the CSV file.
Definition: runControllerMicrodata.cpp:853
int selfSubCount
number of sub-values for current process
Definition: runController.h:30
virtual int nextRun(void)=0
create new run and input parameters in database.
static RunController * create(const ArgReader &i_argOpts, bool i_isMpiUsed, IDbExec *i_dbExec, IMsgExec *i_msgExec)
create run controller, load metadata tables and broadcast it to all modeling processes.
Definition: runController.cpp:24
int intOption(const char *i_key, int i_default) const noexcept override
return int value of run option by i_key or default if not found or can not be converted to int.
Definition: runController.h:133
bool isOptionExist(const char *i_key) const noexcept override
return true if run option found by i_key in run_option table for the current run id.
Definition: runController.h:108
bool boolOption(const char *i_key) const noexcept override
return boolean value of run option by i_key or false if not found or value is not "yes",...
Definition: runController.h:118
tuple< int, int, ModelStatus > createNewRun(int i_taskRunId, bool i_isWaitTaskRun, IDbExec *i_dbExec)
create new run, create input parameters and run options for input working sets
Definition: runControllerNewRun.cpp:89
virtual void shutdownRun(int i_runId)=0
model run shutdown: save results and update run status.
int processCount
number of modeling processes: MPI world size
Definition: runController.h:33
void pushDbMicrodata(int i_runId, int i_entityKind, uint64_t i_microdataKey, const void *i_entityThis)
push microdata database rows into the buffer.
Definition: runControllerMicrodata.cpp:318
void updateRestartSubValueId(int i_runId, IDbExec *i_dbExec, int i_subRestart) const
update sub-value index to restart the run
Definition: runController.cpp:339
virtual bool childExchange(void)=0
exchange between root and child processes and threads.
int parameterSubValueIndex(int i_paramId, int i_subId) const override
return index of parameter sub-value in the storage array of sub-values
Definition: runController.h:57
void makeCsvLineMicrodata(const EntityItem &i_entityItem, uint64_t i_microdataKey, int i_eventId, bool i_isSameEntity, const void *i_entityThis, string &io_line) const
make attributes csv line by converting attribute values into string
Definition: runControllerMicrodata.cpp:954
double doubleOption(const char *i_key, double i_default) const noexcept override
return double value of run option by i_key or default if not found or can not be converted to double.
Definition: runController.h:143
void doShutdownAll(int i_taskRunId, IDbExec *i_dbExec)
implementation model process shutdown.
Definition: runController.cpp:127
void doShutdownOnExit(ModelStatus i_status, int i_runId, int i_taskRunId, IDbExec *i_dbExec)
impelementation of model process shutdown if exiting without completion.
Definition: runController.cpp:66
void doWriteAccumulators(int i_runId, IDbExec *i_dbExec, const RunOptions &i_runOpts, const char *i_name, size_t i_size, forward_list< unique_ptr< double[]> > &io_accValues) const
write output table accumulators if table is not suppressed.
Definition: runController.cpp:297
void doShutdownRun(int i_runId, int i_taskRunId, IDbExec *i_dbExec)
implementation of model run shutdown.
Definition: runController.cpp:157
RunController(const ArgReader &i_argStore)
create run controller
Definition: runController.h:212
bool isEntityEventInFilter(int i_entityKind, uint64_t i_microdataKey, int i_eventId) const
retrun true if entity event id is matching events filter or if there no filter and all events are all...
Definition: runControllerMicrodata.cpp:997
map< int, list< unique_ptr< uint8_t[]> > > pullDbMicrodata(bool i_isNow=false)
pull microdata database rows from the buffer.
Definition: runControllerMicrodata.cpp:359
int boolOptionToInt(const char *i_key) const noexcept override
search for boolean value of run option by i_key and return one of: return 1 if key found and value i...
Definition: runController.h:128
size_t doDbMicrodata(IDbExec *i_dbExec, int i_entityId, IRowsFirstNext &i_entityMdRows)
write entity microdata rows into database and return inserted rows count
Definition: runControllerMicrodata.cpp:422
int processRank
modeling processes rank: MPI rank
Definition: runController.h:36
vector< pair< string, string > > allOptions(void) const noexcept override
return a copy of all run options as [key, value] pairs, ordered by key.
Definition: runControllerNewRun.cpp:348
size_t doDbMicrodataSql(IDbExec *i_dbExec, const map< int, list< unique_ptr< uint8_t[]> > > &i_entityMdRows)
write microdata into database using sql insert literal and return inserted rows count
Definition: runControllerMicrodata.cpp:515
int subFirstId
sub-value staring index for current modeling process
Definition: runController.h:27
sub-value run state for all modeling threads, identified by (run id, sub-value id) pair
Definition: modelRunState.h:61
OpenM++ data library: db value classes access value rows: input parameter, accumulator or expression ...
OpenM++ modeling library: model metadata loader to read and broadcast metadata and run options.
openM++ namespace
Definition: log.h:32
ModelStatus
modeling job status
Definition: omModelRunState.h:43
arguments reader to get runtime arguments from command line and ini-file.
Definition: argReader.h:56
entity_dic table row.
Definition: dbMetaRow.h:1200
model_dic table public interface.
Definition: dbMetaTable.h:175
public interface to initialize model run and input parameters
Definition: omModel.h:112
Definition: metaLoader.h:355
parameter_dic join to model_parameter_dic table row.
Definition: dbMetaRow.h:473
parameter_dic join to model_parameter_import table row.
Definition: dbMetaRow.h:547
model input parameter name, type and size
Definition: omModel.h:190
array of bytes rows wrapped into IRowsFirstNext interface
Definition: runController.h:316
BytesFirstNext(size_t i_rowCount, size_t i_rowSize, uint8_t *i_rows)
create interface to opaque list of bytes rows
Definition: runController.h:318
virtual uint8_t * toNext(void) override
move pointer to the next row, return NULL at the end of rows.
Definition: runController.h:334
virtual uint8_t * toFirst(void) override
move pointer to the first row, return NULL if row list is empty.
Definition: runController.h:325
entity attribute item to write microdata into database or csv file
Definition: runController.h:152
unique_ptr< IValueFormatter > fmtValue
attribute value offset in database row buffer
Definition: runController.h:156
int idxOf
entity attribute metadata id
Definition: runController.h:154
ptrdiff_t rowOffset
attribute index in EntityNameSizeArr
Definition: runController.h:155
unique_ptr< IValueFormatter > sqlFmtValue
attribute value to string converter for csv output
Definition: runController.h:157
EntityAttrItem(int i_attrId, int i_index)
attribute value to string converter for database insert
Definition: runController.h:159
entity item to write microdata into database or csv file
Definition: runController.h:164
string sqlInsPrefix
database row size
Definition: runController.h:172
string csvHdr
db microdata table name
Definition: runController.h:170
string dbMicrodataTable
entity generation unique id, unique in that database
Definition: runController.h:169
string genDigest
entity attributes
Definition: runController.h:167
int genHid
entity generation digest
Definition: runController.h:168
vector< DbValueSetter > rowSetter
microdata sql statement prefix
Definition: runController.h:173
vector< EntityAttrItem > attrs
entity metadata id
Definition: runController.h:166
EntityItem(int i_entityId)
column types of insert statement
Definition: runController.h:176
vector< const type_info * > rowTypes
function helpers to set column value of insert statement
Definition: runController.h:174
size_t rowSize
microdata csv header line
Definition: runController.h:171
interface to opaque list of bytes rows
Definition: runController.h:275
virtual uint8_t * toNext(void)=0
move pointer to the next row, return NULL at the end of rows.
virtual uint8_t * toFirst(void)=0
move pointer to the first row, return NULL if row list is empty.
list of bytes rows wrapped into IRowsFirstNext interface
Definition: runController.h:285
virtual uint8_t * toNext(void) override
move pointer to the next row, return NULL at the end of rows.
Definition: runController.h:301
virtual uint8_t * toFirst(void) override
move pointer to the first row, return NULL if row list is empty.
Definition: runController.h:294
ListFirstNext(list< unique_ptr< uint8_t[]> >::const_iterator i_begin, list< unique_ptr< uint8_t[]> >::const_iterator i_end)
create interface to opaque list of bytes rows
Definition: runController.h:287
basic model run options
Definition: omModel.h:26
model run state data: status, progress, update times
Definition: omModelRunState.h:93