77 if (indexTableSize > records)
79 char** tmpIdxTable =
new char*[indexTableSize];
80 memset(tmpIdxTable, 0, indexTableSize *
sizeof(
char*));
81 memcpy(tmpIdxTable, indexTable, records *
sizeof(
char*));
83 indexTable = tmpIdxTable;
86 std::unique_ptr<char[]> dataTable = std::make_unique<char[]>(result->GetRowCount() *
_recordSize);
87 std::unique_ptr<uint32[]> newIndexes = std::make_unique<uint32[]>(result->GetRowCount());
93 Field* fields = result->Fetch();
97 char* dataValue = indexTable[indexValue];
100 newIndexes[newRecords] = indexValue;
101 dataValue = &dataTable[newRecords++ *
_recordSize];
111 uint32 sqlColumnNumber = 0;
114 for (; (*dbcFormat || *sqlFormat); ++dbcFormat, ++sqlFormat)
116 if (!*dbcFormat || !*sqlFormat)
129 *
reinterpret_cast<float*
>(&dataValue[dataOffset]) = fields[sqlColumnNumber].GetFloat();
130 dataOffset +=
sizeof(float);
134 *
reinterpret_cast<uint32*
>(&dataValue[dataOffset]) = fields[sqlColumnNumber].GetUInt32();
135 dataOffset +=
sizeof(
uint32);
138 *
reinterpret_cast<uint8*
>(&dataValue[dataOffset]) = fields[sqlColumnNumber].GetUInt8();
139 dataOffset +=
sizeof(
uint8);
142 *
reinterpret_cast<char**
>(&dataValue[dataOffset]) =
CloneStringToPool(fields[sqlColumnNumber].GetString());
143 dataOffset +=
sizeof(
char*);
157 *
reinterpret_cast<float*
>(&dataValue[dataOffset]) = 0.0f;
158 dataOffset +=
sizeof(float);
162 *
reinterpret_cast<uint32*
>(&dataValue[dataOffset]) =
uint32(0);
163 dataOffset +=
sizeof(
uint32);
166 *
reinterpret_cast<uint8*
>(&dataValue[dataOffset]) =
uint8(0);
167 dataOffset +=
sizeof(
uint8);
170 *
reinterpret_cast<char**
>(&dataValue[dataOffset]) =
const_cast<char*
>(
nullStr);
171 dataOffset +=
sizeof(
char*);
180 ASSERT(sqlColumnNumber == result->GetFieldCount(),
"SQL format string does not match database for table: '%s'",
_sqlTableName);
182 }
while (result->NextRow());
184 ASSERT(newRecords == result->GetRowCount());
187 for (
uint32 i = 0; i < newRecords; ++i)
188 indexTable[newIndexes[i]] = &dataTable[i *
_recordSize];
190 records = indexTableSize;
192 return dataTable.release();