コード例 #1
0
ファイル: cvaluables.cpp プロジェクト: Sheridan/HAcc
void CValuables::thingUpdated(const hacc::TDBID & thingID)
{
    QSqlQuery q = HACC_DB->query("select "
                                 "transactions_things.id "
                                 "from transactions_things "
                                 "where transactions_things.thing_id=?",
                                 QVariantList() << thingID);
    while(q.next())
    {
        hacc::TDBID transactionID = HACC_DB_2_DBID(q, 0);
        QSqlQuery inq = HACC_DB->query("select id from valuables where transaction_id=?",
                                       QVariantList() << transactionID);
        hacc::TDBID valID = HACC_QUERY_DATA_AVIALABLE(inq) ? HACC_DB_2_DBID(inq, 0) : 0;
        if(HACC_THINGS->tagAttached(HACC_TAG_ID_OBJECT, thingID))
        {
            if(!valID)
            {
                hacc::TDBID newID = nextID();
                HACC_DB->exec("insert into valuables (id,transaction_id,serial_number) values (?,?,?)",
                              QVariantList() << newID << transactionID << idToSerial(newID));
                emit created(newID);
            }
        }
        else
        {
            if(valID)
            {
                execRemove("transaction_id=?", QVariantList() << transactionID);
            }
        }
    }
}
コード例 #2
0
ファイル: batch_executor.cpp プロジェクト: AndrewCEmil/mongo
    void WriteBatchExecutor::bulkExecute( const BatchedCommandRequest& request,
                                          std::vector<BatchedUpsertDetail*>* upsertedIds,
                                          std::vector<WriteErrorDetail*>* errors ) {

        if ( request.getBatchType() == BatchedCommandRequest::BatchType_Insert ) {
            execInserts( request, errors );
        }
        else if ( request.getBatchType() == BatchedCommandRequest::BatchType_Update ) {
            for ( size_t i = 0; i < request.sizeWriteOps(); i++ ) {

                WriteErrorDetail* error = NULL;
                BSONObj upsertedId;
                execUpdate( BatchItemRef( &request, i ), &upsertedId, &error );

                if ( !upsertedId.isEmpty() ) {
                    BatchedUpsertDetail* batchUpsertedId = new BatchedUpsertDetail;
                    batchUpsertedId->setIndex( i );
                    batchUpsertedId->setUpsertedID( upsertedId );
                    upsertedIds->push_back( batchUpsertedId );
                }

                if ( error ) {
                    errors->push_back( error );
                    if ( request.getOrdered() )
                        break;
                }
            }
        }
        else {
            dassert( request.getBatchType() == BatchedCommandRequest::BatchType_Delete );
            for ( size_t i = 0; i < request.sizeWriteOps(); i++ ) {

                WriteErrorDetail* error = NULL;
                execRemove( BatchItemRef( &request, i ), &error );

                if ( error ) {
                    errors->push_back( error );
                    if ( request.getOrdered() )
                        break;
                }
            }
        }

        // Fill in stale version errors for unordered batches (update/delete can't do this on own)
        if ( !errors->empty() && !request.getOrdered() ) {

            const WriteErrorDetail* finalError = errors->back();

            if ( finalError->getErrCode() == ErrorCodes::StaleShardVersion ) {
                for ( size_t i = finalError->getIndex() + 1; i < request.sizeWriteOps(); i++ ) {
                    WriteErrorDetail* dupStaleError = new WriteErrorDetail;
                    finalError->cloneTo( dupStaleError );
                    errors->push_back( dupStaleError );
                }
            }
        }
    }
コード例 #3
0
ファイル: cvaluables.cpp プロジェクト: Sheridan/HAcc
void CValuables::thingRemoved(const hacc::TDBID & thingID)
{
    QSqlQuery q = HACC_DB->query("select "
                                 "transactions_things.id "
                                 "from transactions_things "
                                 "where transactions_things.thing_id=?",
                                 QVariantList() << thingID);
    while(q.next())
    {
        execRemove("transaction_id=?", QVariantList() << HACC_DB_2_DBID(q, 0));
    }
}