boolean CSyncSource::processBlob( const String& strCmd, const String& strObject, CAttrValue& oAttrValue ) { //TODO: when server return delete with rhoblob postfix - delete isBlobAttr if ( !(oAttrValue.m_strBlobSuffix.length() > 0 || getDB().getAttrMgr().isBlobAttr(getID(), oAttrValue.m_strAttrib.c_str())) ) return true; boolean bDownload = true; String strDbValue = ""; if ( !getDB().getAttrMgr().isOverwriteBlobFromServer(getID(), oAttrValue.m_strAttrib) ) { if ( m_bSchemaSource ) { String strSelect = String("SELECT ") + oAttrValue.m_strAttrib + " FROM " + getName() + " WHERE object=?"; DBResult(res, getDB().executeSQL( strSelect.c_str(), strObject)); if (!res.isEnd()) { strDbValue = res.getStringByIdx(0); bDownload = strDbValue.length() == 0; } }else { DBResult(res, getDB().executeSQL( "SELECT value FROM object_values WHERE object=? and attrib=? and source_id=?", strObject, oAttrValue.m_strAttrib, getID() ) ); if (!res.isEnd()) { strDbValue = res.getStringByIdx(0); bDownload = strDbValue.length() == 0; } } } if ( bDownload ) { getDB().endTransaction(); boolean bRes = downloadBlob(oAttrValue); getDB().startTransaction(); return bRes; } oAttrValue.m_strValue = strDbValue; return true; }
boolean CSyncSource::processSyncObject_ver1(CJSONEntry oJsonObject, int nSrcID)//throws Exception { const char* strOldObject = oJsonObject.getString("oo"); if ( isDeleteObjectsPass() != (nSrcID < 0) ) return true; if ( oJsonObject.hasName("e") ) { const char* strError = oJsonObject.getString("e"); getNotify().addCreateObjectError(nSrcID,strOldObject,strError); return true; } const char* strObject = oJsonObject.getString("o"); CJSONArrayIterator oJsonArr(oJsonObject, "av"); //oo conflicts boolean bUpdatedOO = false; // for( ; !oJsonArr.isEnd() && getSync().isContinueSync(); oJsonArr.next() ) { CJSONEntry oJsonEntry = oJsonArr.getCurItem(); if ( oJsonEntry.isEmpty() ) continue; if ( nSrcID >= 0 ) //insert { CValue value(oJsonEntry,1); if ( !downloadBlob(value) ) return false; String strAttrib = oJsonEntry.getString("a"); //oo conflicts if ( strOldObject != null && !bUpdatedOO ) { getDB().executeSQL("UPDATE object_values SET object=? where object=? and source_id=?", strObject, strOldObject, nSrcID ); getDB().executeSQL("UPDATE changed_values SET object=? where object=? and source_id=?", strObject, strOldObject, nSrcID ); getNotify().onObjectChanged(nSrcID,strOldObject, CSyncNotify::enCreate); bUpdatedOO = true; } DBResult(resInsert, getDB().executeSQLReportNonUnique("INSERT INTO object_values \ (id, attrib, source_id, object, value, attrib_type) VALUES(?,?,?,?,?,?)", value.m_nID, strAttrib, nSrcID, strObject, value.m_strValue, value.m_strAttrType ) ); if ( resInsert.isNonUnique() ) { getDB().executeSQL("UPDATE object_values \ SET id=?, value=?, attrib_type=? WHERE object=? and attrib=? and source_id=?", value.m_nID, value.m_strValue, value.m_strAttrType, strObject, strAttrib, nSrcID ); // oo conflicts getDB().executeSQL("UPDATE changed_values SET main_id=? where object=? and attrib=? and source_id=? and sent<=1", value.m_nID, strObject, strAttrib, nSrcID ); getDB().executeSQL("UPDATE changed_values SET sent=4 where object=? and attrib=? and source_id=? and sent>1", strObject, strAttrib, nSrcID ); // } getNotify().onObjectChanged(nSrcID,strObject, CSyncNotify::enUpdate); m_nInserted++; }else