DB2
DB2
DB2 files are the new version of client side databases, introduced in Cataclysm, containing data about items, NPCs, environment, world and a lot more. Except for their header they are pretty much equivalent to DBC files. You may want to also look at those. The structure described here is also used in ADB files, which are a cache of dynamically streamed database entries / hotfixes.
Table content structures
This page describes the structure of DB2 files. For a list of existing DB2 files and their contents see the categories DBC, Vanilla, Burning Crusade, Wrath of the Lich King, Cataclysm and Mists of Pandaria found on wowdev's wiki.
Structure
struct db2_header { uint32_t magic; // 'WDB2' for .db2 (database), 'WCH2' for .adb (cache) uint32_t record_count; uint32_t field_count; uint32_t record_size; uint32_t string_table_size; // string block always contains at least one zero-byte uint32_t table_hash; uint32_t build; uint32_t timestamp_last_written; // set to time(0); when writing in WowClientDB2_Base::Save() uint32_t min_id; uint32_t max_id; uint32_t locale; // as seen in TextWowEnum uint32_t unk2; }; template<typename record_type> struct db2_file { db2_header header; // static_assert (header.record_size == sizeof (record_type)); if (header.max_id != 0) { int indices[header.max_id - header.min_id + 1]; // maps from id to row index in records[] below short string_lengths[header.max_id - header.min_id + 1]; // sum of lengths of all strings in row } record_type records[header.record_count]; char string_block[header.string_block_size]; };
String Block
Equivalent to DBC version. See documentation there.
Localization
DB2 records can contain localized strings. In contrast to DBCs, a DB2 file only contains localized values for a given locale (header.locale).