aboutsummaryrefslogtreecommitdiff
path: root/src/common/DataStores/DB2FileLoader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/DataStores/DB2FileLoader.cpp')
-rw-r--r--src/common/DataStores/DB2FileLoader.cpp74
1 files changed, 73 insertions, 1 deletions
diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp
index 7578eace9b6..204f4bd316b 100644
--- a/src/common/DataStores/DB2FileLoader.cpp
+++ b/src/common/DataStores/DB2FileLoader.cpp
@@ -44,6 +44,23 @@ uint32 DB2FileLoadInfo::GetStringFieldCount(bool localizedOnly) const
return stringFields;
}
+std::pair<int32, int32> DB2FileLoadInfo::GetFieldIndexByName(char const* fieldName) const
+{
+ std::size_t ourIndex = Meta->HasIndexFieldInData() ? 0 : 1;
+ for (uint32 i = 0; i < Meta->FieldCount; ++i)
+ {
+ for (uint8 arr = 0; arr < Meta->ArraySizes[i]; ++arr)
+ {
+ if (!strcmp(Fields[ourIndex].Name, fieldName))
+ return std::make_pair(int32(i), int32(arr));
+
+ ++ourIndex;
+ }
+ }
+
+ return std::make_pair(-1, -1);
+}
+
DB2FileSource::~DB2FileSource()
{
}
@@ -61,6 +78,7 @@ public:
virtual uint32 GetRecordCount() const = 0;
virtual uint32 GetRecordCopyCount() const = 0;
virtual uint32 GetMaxId() const = 0;
+ virtual DB2FileLoadInfo const* GetLoadInfo() const = 0;
private:
friend class DB2Record;
@@ -91,6 +109,7 @@ public:
uint32 GetRecordCount() const override;
uint32 GetRecordCopyCount() const override;
uint32 GetMaxId() const override;
+ DB2FileLoadInfo const* GetLoadInfo() const override;
private:
void FillCommonValues(char** indexTable);
@@ -139,12 +158,13 @@ public:
bool Load(DB2FileSource* source, DB2FileLoadInfo const* loadInfo, DB2Header const* header) override;
char* AutoProduceData(uint32& records, char**& indexTable, std::vector<char*>& stringPool) override;
char* AutoProduceStrings(char* dataTable, uint32 locale) override;
- void AutoProduceRecordCopies(uint32 /*records*/, char** /*indexTable*/, char* /*dataTable*/) override { }
+ void AutoProduceRecordCopies(uint32 records, char** indexTable, char* dataTable) override { }
DB2Record GetRecord(uint32 recordNumber) const override;
DB2RecordCopy GetRecordCopy(uint32 copyNumber) const override;
uint32 GetRecordCount() const override;
uint32 GetRecordCopyCount() const override;
uint32 GetMaxId() const override;
+ DB2FileLoadInfo const* GetLoadInfo() const override;
private:
unsigned char const* GetRawRecordData(uint32 recordNumber) const override;
@@ -744,6 +764,11 @@ uint32 DB2FileLoaderRegularImpl::GetMaxId() const
return maxId;
}
+DB2FileLoadInfo const* DB2FileLoaderRegularImpl::GetLoadInfo() const
+{
+ return _loadInfo;
+}
+
DB2FileLoaderSparseImpl::DB2FileLoaderSparseImpl()
{
fileName = nullptr;
@@ -1165,6 +1190,11 @@ uint32 DB2FileLoaderSparseImpl::GetMaxId() const
return _header->MaxId;
}
+DB2FileLoadInfo const* DB2FileLoaderSparseImpl::GetLoadInfo() const
+{
+ return _loadInfo;
+}
+
DB2Record::DB2Record(DB2FileLoaderImpl const& db2, uint32 recordIndex, std::size_t* fieldOffsets)
: _db2(db2), _recordIndex(recordIndex), _recordData(db2.GetRawRecordData(recordIndex)), _fieldOffsets(fieldOffsets)
{
@@ -1190,31 +1220,73 @@ uint8 DB2Record::GetUInt8(uint32 field, uint32 arrayIndex) const
return _db2.RecordGetUInt8(_recordData, field, arrayIndex);
}
+uint8 DB2Record::GetUInt8(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetUInt8(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
uint16 DB2Record::GetUInt16(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetUInt16(_recordData, field, arrayIndex);
}
+uint16 DB2Record::GetUInt16(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetUInt16(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
uint32 DB2Record::GetUInt32(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetUInt32(_recordData, field, arrayIndex);
}
+uint32 DB2Record::GetUInt32(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetUInt32(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
int32 DB2Record::GetInt32(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetInt32(_recordData, field, arrayIndex);
}
+int32 DB2Record::GetInt32(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetInt32(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
float DB2Record::GetFloat(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetFloat(_recordData, field, arrayIndex);
}
+float DB2Record::GetFloat(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetFloat(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
char const* DB2Record::GetString(uint32 field, uint32 arrayIndex) const
{
return _db2.RecordGetString(_recordData, field, arrayIndex);
}
+char const* DB2Record::GetString(char const* fieldName) const
+{
+ std::pair<int32, int32> fieldIndex = _db2.GetLoadInfo()->GetFieldIndexByName(fieldName);
+ ASSERT(fieldIndex.first != -1, "Field with name %s does not exist!", fieldName);
+ return _db2.RecordGetString(_recordData, uint32(fieldIndex.first), uint32(fieldIndex.second));
+}
+
void DB2Record::MakePersistent()
{
_fieldOffsets = _db2.RecordCreateDetachedFieldOffsets(_fieldOffsets);