diff --git a/src/shared/Database/DBCFileLoader.cpp b/src/shared/Database/DBCFileLoader.cpp index 475fafa1b..8cd88bf63 100644 --- a/src/shared/Database/DBCFileLoader.cpp +++ b/src/shared/Database/DBCFileLoader.cpp @@ -107,29 +107,42 @@ uint32 DBCFileLoader::GetFormatRecordSize(const char * format,int32* index_pos) { uint32 recordsize = 0; int32 i = -1; - for(uint32 x=0; format[x];++x) + for(uint32 x = 0; format[x]; ++ x) + { switch(format[x]) { case FT_FLOAT: + recordsize += sizeof(float); + break; case FT_INT: - recordsize+=4; + recordsize += sizeof(uint32); break; case FT_STRING: - recordsize+=sizeof(char*); + recordsize += sizeof(char*); break; case FT_SORT: i=x; break; case FT_IND: i=x; - recordsize+=4; + recordsize += sizeof(uint32); break; case FT_BYTE: - recordsize += 1; + recordsize += sizeof(uint8); + break; + case FT_LOGIC: + assert(false && "DBC files not have logic field type"); + break; + case FT_NA: + case FT_NA_BYTE: + break; + default: + assert(false && "unknown format character"); break; } + } - if(index_pos) + if (index_pos) *index_pos = i; return recordsize; @@ -181,35 +194,45 @@ char* DBCFileLoader::AutoProduceData(const char* format, uint32& records, char** uint32 offset=0; - for(uint32 y =0;y=0) + if (i >= 0) { indexTable[getRecord(y).getUInt(i)]=&dataTable[offset]; } else indexTable[y]=&dataTable[offset]; - for(uint32 x=0;x::storeValue(V value, SQLStorage &store, char *p, ui subclass->convert_to_str(x, value, *((char**)(&p[offset])) ); offset+=sizeof(char*); break; + case FT_NA: + case FT_NA_BYTE: + break; + case FT_IND: + case FT_SORT: + assert(false && "SQL storage not have sort field types"); + break; + default: + assert(false && "unknown format character"); + break; } } @@ -117,6 +127,16 @@ void SQLStorageLoaderBase::storeValue(char const* value, SQLStorage &store, c subclass->convert_str_to_str(x, value, *((char**)(&p[offset])) ); offset+=sizeof(char*); break; + case FT_NA: + case FT_NA_BYTE: + break; + case FT_IND: + case FT_SORT: + assert(false && "SQL storage not have sort field types"); + break; + default: + assert(false && "unknown format character"); + break; } } @@ -172,17 +192,32 @@ void SQLStorageLoaderBase::Load(SQLStorage &store, bool error_at_empty /*= tr } //get struct size - uint32 sc=0; - uint32 bo=0; - uint32 bb=0; - for(uint32 x=0; x< store.iNumFields; x++) - if(store.dst_format[x]==FT_STRING) - ++sc; - else if (store.dst_format[x]==FT_LOGIC) - ++bo; - else if (store.dst_format[x]==FT_BYTE) - ++bb; - recordsize=(store.iNumFields-sc-bo-bb)*4+sc*sizeof(char*)+bo*sizeof(bool)+bb*sizeof(char); + for(uint32 x = 0; x < store.iNumFields; ++x) + { + switch(store.dst_format[x]) + { + case FT_LOGIC: + recordsize += sizeof(bool); break; + case FT_BYTE: + recordsize += sizeof(char); break; + case FT_INT: + recordsize += sizeof(uint32); break; + case FT_FLOAT: + recordsize += sizeof(float); break; + case FT_STRING: + recordsize += sizeof(char*); break; + case FT_NA: + case FT_NA_BYTE: + break; + case FT_IND: + case FT_SORT: + assert(false && "SQL storage not have sort field types"); + break; + default: + assert(false && "unknown format character"); + break; + } + } char** newIndex=new char*[maxi]; memset(newIndex,0,maxi*sizeof(char*)); @@ -211,6 +246,15 @@ void SQLStorageLoaderBase::Load(SQLStorage &store, bool error_at_empty /*= tr storeValue((float)fields[x].GetFloat(), store, p, x, offset); break; case FT_STRING: storeValue((char const*)fields[x].GetString(), store, p, x, offset); break; + case FT_NA: + case FT_NA_BYTE: + break; + case FT_IND: + case FT_SORT: + assert(false && "SQL storage not have sort field types"); + break; + default: + assert(false && "unknown format character"); } ++count; }while( result->NextRow() ); diff --git a/src/shared/revision_nr.h b/src/shared/revision_nr.h index 64ecdfe30..5a9f328f4 100644 --- a/src/shared/revision_nr.h +++ b/src/shared/revision_nr.h @@ -1,4 +1,4 @@ #ifndef __REVISION_NR_H__ #define __REVISION_NR_H__ - #define REVISION_NR "11247" + #define REVISION_NR "11248" #endif // __REVISION_NR_H__