2222#include < stdexcept>
2323
2424#include " IoTDBRpcDataSet.h"
25+
26+ #include < boost/optional/optional.hpp>
27+
2528#include " Column.h"
2629
2730const int32_t IoTDBRpcDataSet::startIndex = 2 ;
@@ -257,83 +260,83 @@ bool IoTDBRpcDataSet::isNull(int32_t index, int32_t rowNum) {
257260 return index >= 0 && curTsBlock_->getColumn (index)->isNull (rowNum);
258261}
259262
260- bool IoTDBRpcDataSet::getBooleanByIndex (int32_t columnIndex) {
263+ boost::optional< bool > IoTDBRpcDataSet::getBooleanByIndex (int32_t columnIndex) {
261264 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
262265 return getBooleanByTsBlockColumnIndex (index);
263266}
264267
265- bool IoTDBRpcDataSet::getBoolean (const std::string& columnName) {
268+ boost::optional< bool > IoTDBRpcDataSet::getBoolean (const std::string& columnName) {
266269 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
267270 return getBooleanByTsBlockColumnIndex (index);
268271}
269272
270- bool IoTDBRpcDataSet::getBooleanByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
273+ boost::optional< bool > IoTDBRpcDataSet::getBooleanByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
271274 checkRecord ();
272275 if (!isNull (tsBlockColumnIndex, tsBlockIndex_)) {
273276 lastReadWasNull_ = false ;
274277 return curTsBlock_->getColumn (tsBlockColumnIndex)->getBoolean (tsBlockIndex_);
275278 }
276279 else {
277280 lastReadWasNull_ = true ;
278- return false ;
281+ return boost::none ;
279282 }
280283}
281284
282- double IoTDBRpcDataSet::getDoubleByIndex (int32_t columnIndex) {
285+ boost::optional< double > IoTDBRpcDataSet::getDoubleByIndex (int32_t columnIndex) {
283286 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
284287 return getDoubleByTsBlockColumnIndex (index);
285288}
286289
287- double IoTDBRpcDataSet::getDouble (const std::string& columnName) {
290+ boost::optional< double > IoTDBRpcDataSet::getDouble (const std::string& columnName) {
288291 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
289292 return getDoubleByTsBlockColumnIndex (index);
290293}
291294
292- double IoTDBRpcDataSet::getDoubleByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
295+ boost::optional< double > IoTDBRpcDataSet::getDoubleByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
293296 checkRecord ();
294297 if (!isNull (tsBlockColumnIndex, tsBlockIndex_)) {
295298 lastReadWasNull_ = false ;
296299 return curTsBlock_->getColumn (tsBlockColumnIndex)->getDouble (tsBlockIndex_);
297300 }
298301 else {
299302 lastReadWasNull_ = true ;
300- return 0.0 ;
303+ return boost::none ;
301304 }
302305}
303306
304- float IoTDBRpcDataSet::getFloatByIndex (int32_t columnIndex) {
307+ boost::optional< float > IoTDBRpcDataSet::getFloatByIndex (int32_t columnIndex) {
305308 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
306309 return getFloatByTsBlockColumnIndex (index);
307310}
308311
309- float IoTDBRpcDataSet::getFloat (const std::string& columnName) {
312+ boost::optional< float > IoTDBRpcDataSet::getFloat (const std::string& columnName) {
310313 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
311314 return getFloatByTsBlockColumnIndex (index);
312315}
313316
314- float IoTDBRpcDataSet::getFloatByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
317+ boost::optional< float > IoTDBRpcDataSet::getFloatByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
315318 checkRecord ();
316319 if (!isNull (tsBlockColumnIndex, tsBlockIndex_)) {
317320 lastReadWasNull_ = false ;
318321 return curTsBlock_->getColumn (tsBlockColumnIndex)->getFloat (tsBlockIndex_);
319322 }
320323 else {
321324 lastReadWasNull_ = true ;
322- return 0 . 0f ;
325+ return boost::none ;
323326 }
324327}
325328
326- int32_t IoTDBRpcDataSet::getIntByIndex (int32_t columnIndex) {
329+ boost::optional< int32_t > IoTDBRpcDataSet::getIntByIndex (int32_t columnIndex) {
327330 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
328331 return getIntByTsBlockColumnIndex (index);
329332}
330333
331- int32_t IoTDBRpcDataSet::getInt (const std::string& columnName) {
334+ boost::optional< int32_t > IoTDBRpcDataSet::getInt (const std::string& columnName) {
332335 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
333336 return getIntByTsBlockColumnIndex (index);
334337}
335338
336- int32_t IoTDBRpcDataSet::getIntByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
339+ boost::optional< int32_t > IoTDBRpcDataSet::getIntByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
337340 checkRecord ();
338341 if (!isNull (tsBlockColumnIndex, tsBlockIndex_)) {
339342 lastReadWasNull_ = false ;
@@ -345,21 +348,21 @@ int32_t IoTDBRpcDataSet::getIntByTsBlockColumnIndex(int32_t tsBlockColumnIndex)
345348 }
346349 else {
347350 lastReadWasNull_ = true ;
348- return 0 ;
351+ return boost::none ;
349352 }
350353}
351354
352- int64_t IoTDBRpcDataSet::getLongByIndex (int32_t columnIndex) {
355+ boost::optional< int64_t > IoTDBRpcDataSet::getLongByIndex (int32_t columnIndex) {
353356 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
354357 return getLongByTsBlockColumnIndex (index);
355358}
356359
357- int64_t IoTDBRpcDataSet::getLong (const std::string& columnName) {
360+ boost::optional< int64_t > IoTDBRpcDataSet::getLong (const std::string& columnName) {
358361 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
359362 return getLongByTsBlockColumnIndex (index);
360363}
361364
362- int64_t IoTDBRpcDataSet::getLongByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
365+ boost::optional< int64_t > IoTDBRpcDataSet::getLongByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
363366 checkRecord ();
364367 if (tsBlockColumnIndex < 0 ) {
365368 lastReadWasNull_ = false ;
@@ -375,7 +378,7 @@ int64_t IoTDBRpcDataSet::getLongByTsBlockColumnIndex(int32_t tsBlockColumnIndex)
375378 }
376379 else {
377380 lastReadWasNull_ = true ;
378- return 0 ;
381+ return boost::none ;
379382 }
380383}
381384
@@ -401,25 +404,25 @@ std::shared_ptr<Binary> IoTDBRpcDataSet::getBinaryByTsBlockColumnIndex(int32_t t
401404 }
402405}
403406
404- std::string IoTDBRpcDataSet::getStringByIndex (int32_t columnIndex) {
407+ boost::optional< std::string> IoTDBRpcDataSet::getStringByIndex (int32_t columnIndex) {
405408 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
406409 return getStringByTsBlockColumnIndex (index);
407410}
408411
409- std::string IoTDBRpcDataSet::getString (const std::string& columnName) {
412+ boost::optional< std::string> IoTDBRpcDataSet::getString (const std::string& columnName) {
410413 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
411414 return getStringByTsBlockColumnIndex (index);
412415}
413416
414- std::string IoTDBRpcDataSet::getStringByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
417+ boost::optional< std::string> IoTDBRpcDataSet::getStringByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
415418 checkRecord ();
416- if (tsBlockColumnIndex == - 1 ) {
419+ if (tsBlockColumnIndex < 0 ) {
417420 int64_t timestamp = curTsBlock_->getTimeByIndex (tsBlockIndex_);
418421 return std::to_string (timestamp);
419422 }
420423 if (isNull (tsBlockColumnIndex, tsBlockIndex_)) {
421424 lastReadWasNull_ = true ;
422- return " " ;
425+ return boost::none ;
423426 }
424427 lastReadWasNull_ = false ;
425428 return getStringByTsBlockColumnIndexAndDataType (tsBlockColumnIndex,
@@ -470,22 +473,25 @@ int64_t IoTDBRpcDataSet::getTimestamp(const std::string& columnName) {
470473}
471474
472475int64_t IoTDBRpcDataSet::getTimestampByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
473- return getLongByTsBlockColumnIndex (tsBlockColumnIndex);
476+ return getLongByTsBlockColumnIndex (tsBlockColumnIndex). value () ;
474477}
475478
476- boost::gregorian::date IoTDBRpcDataSet::getDateByIndex (int32_t columnIndex) {
479+ boost::optional<boost:: gregorian::date> IoTDBRpcDataSet::getDateByIndex (int32_t columnIndex) {
477480 int32_t index = getTsBlockColumnIndexForColumnIndex (columnIndex);
478481 return getDateByTsBlockColumnIndex (index);
479482}
480483
481- boost::gregorian::date IoTDBRpcDataSet::getDate (const std::string& columnName) {
484+ boost::optional<boost:: gregorian::date> IoTDBRpcDataSet::getDate (const std::string& columnName) {
482485 int32_t index = getTsBlockColumnIndexForColumnName (columnName);
483486 return getDateByTsBlockColumnIndex (index);
484487}
485488
486- boost::gregorian::date IoTDBRpcDataSet::getDateByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
487- int32_t value = getIntByTsBlockColumnIndex (tsBlockColumnIndex);
488- return parseIntToDate (value);
489+ boost::optional<boost::gregorian::date> IoTDBRpcDataSet::getDateByTsBlockColumnIndex (int32_t tsBlockColumnIndex) {
490+ auto value = getIntByTsBlockColumnIndex (tsBlockColumnIndex);
491+ if (!value.is_initialized ()) {
492+ return boost::none;
493+ }
494+ return parseIntToDate (value.value ());
489495}
490496
491497TSDataType::TSDataType IoTDBRpcDataSet::getDataTypeByIndex (int32_t columnIndex) {
0 commit comments