Beispiel #1
0
void Object::addInternalAttributeIncDB(BString key,std::string value)
{
    if(hasInternalAttribute(key))
    {
        setInternalAttributeIncDB(key,value);
        return;
    }

    mInternalAttributeMap.insert(std::make_pair(key.getCrc(),value));

    uint32 attributeID = gWorldManager->getAttributeId(key.getCrc());
    if(!attributeID)
    {
        DLOG(info) << "Object::addAttribute DB: no such attribute in the attribute table : " << key.getAnsi();
        return;
    }
    int8 sql[512],*sqlPointer,restStr[128];
//	int8 sql[1024]
    sprintf(sql,"INSERT INTO %s.item_attributes VALUES(%" PRIu64 ",%u,'",gWorldManager->getDatabase()->galaxy() ,this->getId(), attributeID);

    sqlPointer = sql + strlen(sql);
    sqlPointer += gWorldManager->getDatabase()->escapeString(sqlPointer, value.c_str(), value.length());
    sprintf(restStr,"',%u,0)",static_cast<uint32>(this->mInternalAttributeMap.size()));
    strcat(sql,restStr);

    gWorldManager->getDatabase()->executeSqlAsync(0, 0, sql);
}
Beispiel #2
0
void Object::setInternalAttributeIncDB(BString key,std::string value)
{
    if(!hasInternalAttribute(key))
    {
        addInternalAttributeIncDB(key,value);
    }

    AttributeMap::iterator it = mInternalAttributeMap.find(key.getCrc());

    if(it == mInternalAttributeMap.end())
    {
        DLOG(INFO) << "Object::setAttribute: could not find " << key.getAnsi();
        return;
    }

    (*it).second = value;

    uint32 attributeID = gWorldManager->getAttributeId(key.getCrc());
    if(!attributeID)
    {
        DLOG(INFO) << "Object::addAttribute DB: no such attribute in the attribute table :" << key.getAnsi();
        return;
    }

    int8 sql[512],*sqlPointer,restStr[128];
//	int8 sql[1024]
    sprintf(sql,"UPDATE item_attributes SET value='");

    sqlPointer = sql + strlen(sql);
    sqlPointer += gWorldManager->getDatabase()->escapeString(sqlPointer,value.c_str(),value.length());
    sprintf(restStr,"'WHERE item_id=%"PRIu64" AND attribute_id=%u",this->getId(),attributeID);
    strcat(sql,restStr);

    //sprintf(sql,"UPDATE item_attributes SET value='%s' WHERE item_id=%"PRIu64" AND attribute_id=%u",value,this->getId(),attributeID);
    gWorldManager->getDatabase()->executeSqlAsync(0,0,sql);
  
}