Example #1
0
void DatabaseSync::runTransaction(PassOwnPtr<SQLTransactionSyncCallback> callback, bool readOnly, ExceptionState& exceptionState)
{
    ASSERT(m_executionContext->isContextThread());

    if (sqliteDatabase().transactionInProgress()) {
        setLastErrorMessage("unable to start a transaction from within a transaction");
        exceptionState.throwUninformativeAndGenericDOMException(SQLDatabaseError);
        return;
    }

    RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, callback, readOnly);
    transaction->begin(exceptionState);
    if (exceptionState.hadException()) {
        rollbackTransaction(transaction);
        return;
    }

    transaction->execute(exceptionState);
    if (exceptionState.hadException()) {
        rollbackTransaction(transaction);
        return;
    }

    transaction->commit(exceptionState);
    if (exceptionState.hadException()) {
        rollbackTransaction(transaction);
        return;
    }

    setLastErrorMessage("");
}
Example #2
0
    bool TypeCommand::execute()
    {
        // now try and extract the var symbol
        std::string symbol;
        if(!m_func.getValueA<decltype(symbol)>(symbol, m_sharedCache)) {
            setLastErrorMessage("type: couldn't determine argument");
            return false;
        }

        // determine var key
        std::string key;
        if(!m_func.getValueB<decltype(key)>(key, m_sharedCache)) {
            setLastErrorMessage("type: couldn't determine var key");
            return false;
        }

        // determine type
        auto type = m_sharedCache->getType(symbol);
        if(!type) {
            setLastErrorMessage("type: couldn't determine type");
            return false;
        }

        m_sharedCache->setVar(key, getType(*type), Type::String);
        return true;
    }
Example #3
0
    bool RandomCommand::execute()
    {
        if(m_varName.empty()) {
            setLastErrorMessage("random: var name empty. Can't continue.");
            return false;
        }

        static std::default_random_engine re(m_r());

        if (m_type == "int") {
            int64_t a;
            if (VarExtractor::trySingleIntExtraction(m_func.paramB, a, m_sharedCache)) {
                using Dist = std::uniform_int_distribution<int64_t>;
                static Dist uid {};
                auto output = uid(re, Dist::param_type{0, a});
                m_sharedCache->setVar(m_varName, output, Type::Int);
                return true;
            }
        } else if (m_type == "real") {
            double d;
            if (VarExtractor::trySingleRealExtraction(m_func.paramB, d, m_sharedCache)) {
                using Dist = std::uniform_real_distribution<double>;
                static Dist udd {};
                auto output = udd(re, Dist::param_type{0, d});
                m_sharedCache->setVar(m_varName, output, Type::Real);
                return true;
            }
        }

        setLastErrorMessage("random: bad type.");
        return false;
    }
Example #4
0
void DatabaseSync::changeVersion(const String& oldVersion, const String& newVersion, PassOwnPtr<SQLTransactionSyncCallback> changeVersionCallback, ExceptionState& exceptionState)
{
    ASSERT(m_executionContext->isContextThread());

    if (sqliteDatabase().transactionInProgress()) {
        reportChangeVersionResult(1, SQLError::DATABASE_ERR, 0);
        setLastErrorMessage("unable to changeVersion from within a transaction");
        exceptionState.throwUninformativeAndGenericDOMException(SQLDatabaseError);
        return;
    }

    RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, changeVersionCallback, false);
    transaction->begin(exceptionState);
    if (exceptionState.hadException()) {
        ASSERT(!lastErrorMessage().isEmpty());
        return;
    }

    String actualVersion;
    if (!getVersionFromDatabase(actualVersion)) {
        reportChangeVersionResult(2, SQLError::UNKNOWN_ERR, sqliteDatabase().lastError());
        setLastErrorMessage("unable to read the current version", sqliteDatabase().lastError(), sqliteDatabase().lastErrorMsg());
        exceptionState.throwDOMException(UnknownError, SQLError::unknownErrorMessage);
        return;
    }

    if (actualVersion != oldVersion) {
        reportChangeVersionResult(3, SQLError::VERSION_ERR, 0);
        setLastErrorMessage("current version of the database and `oldVersion` argument do not match");
        exceptionState.throwDOMException(VersionError, SQLError::versionErrorMessage);
        return;
    }


    transaction->execute(exceptionState);
    if (exceptionState.hadException()) {
        ASSERT(!lastErrorMessage().isEmpty());
        return;
    }

    if (!setVersionInDatabase(newVersion)) {
        reportChangeVersionResult(4, SQLError::UNKNOWN_ERR, sqliteDatabase().lastError());
        setLastErrorMessage("unable to set the new version", sqliteDatabase().lastError(), sqliteDatabase().lastErrorMsg());
        exceptionState.throwDOMException(UnknownError, SQLError::unknownErrorMessage);
        return;
    }

    transaction->commit(exceptionState);
    if (exceptionState.hadException()) {
        ASSERT(!lastErrorMessage().isEmpty());
        setCachedVersion(oldVersion);
        return;
    }

    reportChangeVersionResult(0, -1, 0); // OK

    setExpectedVersion(newVersion);
    setLastErrorMessage("");
}
void DatabaseSync::changeVersion(const String& oldVersion, const String& newVersion, PassRefPtr<SQLTransactionSyncCallback> changeVersionCallback, ExceptionCode& ec)
{
    ASSERT(m_scriptExecutionContext->isContextThread());

    if (sqliteDatabase().transactionInProgress()) {
        reportChangeVersionResult(1, SQLException::DATABASE_ERR, 0);
        setLastErrorMessage("unable to changeVersion from within a transaction");
        ec = SQLException::DATABASE_ERR;
        return;
    }

    RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, changeVersionCallback, false);
    if ((ec = transaction->begin())) {
        ASSERT(!lastErrorMessage().isEmpty());
        return;
    }

    String actualVersion;
    if (!getVersionFromDatabase(actualVersion)) {
        reportChangeVersionResult(2, SQLException::UNKNOWN_ERR, sqliteDatabase().lastError());
        setLastErrorMessage("unable to read the current version", sqliteDatabase().lastError(), sqliteDatabase().lastErrorMsg());
        ec = SQLException::UNKNOWN_ERR;
        return;
    }

    if (actualVersion != oldVersion) {
        reportChangeVersionResult(3, SQLException::VERSION_ERR, 0);
        setLastErrorMessage("current version of the database and `oldVersion` argument do not match");
        ec = SQLException::VERSION_ERR;
        return;
    }

    if ((ec = transaction->execute())) {
        ASSERT(!lastErrorMessage().isEmpty());
        return;
    }

    if (!setVersionInDatabase(newVersion)) {
        reportChangeVersionResult(4, SQLException::UNKNOWN_ERR, sqliteDatabase().lastError());
        setLastErrorMessage("unable to set the new version", sqliteDatabase().lastError(), sqliteDatabase().lastErrorMsg());
        ec = SQLException::UNKNOWN_ERR;
        return;
    }

    if ((ec = transaction->commit())) {
        ASSERT(!lastErrorMessage().isEmpty());
        setCachedVersion(oldVersion);
        return;
    }

    reportChangeVersionResult(0, -1, 0); // OK

    setExpectedVersion(newVersion);
    setLastErrorMessage("");
}
Example #6
0
    bool ListAddTokenCommand::execute()
    {
        std::string varName;
        if(!m_func.getValueB<std::string>(varName, m_sharedCache)) {
            setLastErrorMessage("list_add: couldn't parse variable name");
            return false;
        }

        if(tryWithSymbolList(varName)) { return true; }
        setLastErrorMessage("list_add: no list found");
        return false;
    }
Example #7
0
    bool TieCommand::execute() 
    {

        ValueArray paramArray;
        if(!m_func.getValueB<ValueArray>(paramArray, m_sharedCache)) {
            setLastErrorMessage("tie: error");
            return false;
        }

        std::vector<List> lists;
        for(auto const & v : paramArray) {

            // Try symbol
            std::string symbol;
            if(VarExtractor::tryAnyCast(symbol, v)) {
                auto const list = m_sharedCache->getVar<List>(symbol, Type::List);
                if(list) {
                    lists.push_back(*list);
                    continue;
                }
            }

            // Try raw list
            List list;
            if(VarExtractor::tryAnyCast(list, v)) {
                lists.push_back(list);
                continue;
            }
        }

        if(lists.empty()) {
            setLastErrorMessage("tie: no lists");
            return false;
        }

        auto current = std::begin(lists);
        auto length = current->size();
        ++current;

        for(; current != std::end(lists); ++current) {
            auto const listLength = current->size();
            if(length != listLength) {
                setLastErrorMessage("tie: lists different lengths");
                return false;
            }
        }

        //m_sharedCache->setVar(resultName, matchesResult, Type::Bool);
        return true;
    }
Example #8
0
void DatabaseSync::rollbackTransaction(PassRefPtr<SQLTransactionSync> transaction)
{
    ASSERT(!lastErrorMessage().isEmpty());
    transaction->rollback();
    setLastErrorMessage("");
    return;
}
Example #9
0
 MSCResult convertExceptionsToResultCode(F functor)
 {
     try {
         functor();
         return MSCR_Success;
     } catch (mcore::Exception& ex) {
         setLastErrorMessage(ex.what());
         return ex.code();
     } catch (std::exception& ex) {
         setLastErrorMessage(ex.what());
         return MSCR_Unknown;
     } catch (...) {
         setLastErrorMessage("Unknown exception thrown.");
         return MSCR_Unknown;
     }
 }
Example #10
0
 RandomCommand::RandomCommand(Function &func_,
                              SharedCacheStack const &sharedCache,
                              OptionalOutputStream const &output)
 : Command(func_, sharedCache, output)
 , m_type()
 , m_varName()
 , m_r()
 {
     // random:int 5 -> a;
     // random:real 3.14 -> d;
     if(VarExtractor::tryAnyCast(m_type, m_func.paramA)) {
         if(!VarExtractor::tryAnyCast(m_varName, m_func.paramC)) {
             setLastErrorMessage("random: problem determining var name");
         }
     } else {
         setLastErrorMessage("random: problem determining random type");
     }
 }
void DatabaseSync::runTransaction(PassRefPtr<SQLTransactionSyncCallback> callback, bool readOnly, ExceptionCode& ec)
{
    ASSERT(m_scriptExecutionContext->isContextThread());

    if (sqliteDatabase().transactionInProgress()) {
        setLastErrorMessage("unable to start a transaction from within a transaction");
        ec = SQLException::DATABASE_ERR;
        return;
    }

    RefPtr<SQLTransactionSync> transaction = SQLTransactionSync::create(this, callback, readOnly);
    if ((ec = transaction->begin()) || (ec = transaction->execute()) || (ec = transaction->commit())) {
        ASSERT(!lastErrorMessage().isEmpty());
        transaction->rollback();
    }

    setLastErrorMessage("");
}
void QTweetGeoReverseGeoCode::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QList<QTweetPlace> places = QTweetConvert::variantToPlaceList(json);

        emit parsedPlaces(places);
    } else {
        qDebug() << "QTweetGeoReverseGeoCode parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
void QTweetAccountVerifyCredentials::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QTweetUser user = QTweetConvert::variantMapToUserInfo(json.toMap());

        emit parsedUser(user);
    } else {
        qDebug() << "QTweetAccountVerifyCredentials parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
void QTweetListCreate::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QTweetList list = QTweetConvert::variantMapToTweetList(json.toMap());

        emit parsedList(list);
    } else {
        qDebug() << "QTweetListCreate json parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
void QTweetFriendshipDestroy::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QTweetUser user = QTweetConvert::variantMapToUserInfo(json.toMap());

        emit parsedUser(user);
    } else {
        qDebug() << "QTweetFriendshipCreate parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
void QTweetDirectMessageDestroy::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QTweetDMStatus dm = QTweetConvert::variantMapToDirectMessage(json.toMap());

        emit parsedDirectMessage(dm);
    } else {
        qDebug() << "QTweetDirectMessageDestroy parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
Example #17
0
bool UBWaveRecorder::stop()
{
    mIsRecording = false;

    if (waveInStop(mWaveInDevice) != MMSYSERR_NOERROR)
    {
        setLastErrorMessage("Cannot stop wave in device ");
        return false;
    }

    return true;
}
void QTweetDirectMessagesSent::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QList<QTweetDMStatus> directMessages = QTweetConvert::variantToDirectMessagesList(json);

        emit parsedDirectMessages(directMessages);
    } else {
        qDebug() << "QTweetDirectMessagesSent parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
Example #19
0
/// parses the given grammar file
/// @param file the file to read
/// @return the language grammar or 0 on error
TextGrammar* TmLanguageParser::parse(const QString& fileName)
{
    QFile file(fileName);
    if( file.open( QIODevice::ReadOnly ) ) {
        TextGrammar* result = parse( &file );
        file.close();
        return result;
    } else {
        setLastErrorMessage( file.errorString()  );
        return 0;
    }
}
void QTweetStatusRetweet::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QTweetStatus status = QTweetConvert::variantMapToStatus(json.toMap());

        emit postedRetweet(status);
    } else {
        qDebug() << "QTweetStatusRetweet JSON parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
Example #21
0
    bool FileAppendBytesCommand::execute() 
    { 
         std::string filename;
        if(VarExtractor::trySingleStringExtraction(m_func.paramB, filename, m_sharedCache)) {

            ByteArray value;
            if(!VarExtractor::trySingleArrayExtraction(m_func.paramA, value, m_sharedCache, Type::ByteArray)) {
                setLastErrorMessage("file_append_bytes: problem with bytes array");
                return false;
            }
            // open the file and write data
            writeBytes(filename, 
                       reinterpret_cast<char const*>(&value.front()), 
                       value.size(),
                       std::ios::binary | std::ios::app);
        } else {
            setLastErrorMessage("file_append_bytes: couldn't parse filename");
            return false;
        }
        return true;
    }
Example #22
0
void QTweetMentions::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QList<QTweetStatus> statuses = QTweetConvert::variantToStatusList(json);

        emit parsedStatuses(statuses);
    } else {
        qDebug() << "QTweetMentions JSON parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
Example #23
0
bool UBWaveRecorder::close()
{
    if (waveInReset(mWaveInDevice) != MMSYSERR_NOERROR)
    {
        setLastErrorMessage("Cannot reset wave in device ");
        return false;
    }

    foreach(WAVEHDR* buffer, mWaveBuffers)
    {
        waveInUnprepareHeader(mWaveInDevice, buffer, sizeof(WAVEHDR));
        delete [] buffer->lpData;
        delete buffer;
    }
Example #24
0
 OptionalList ListAddTokenCommand::getNewVAToken()
 {
     std::string token;
     if(!m_func.getValueA<std::string>(token, m_sharedCache)) {
         List va;
         if(m_func.getValueA<List>(va, m_sharedCache)) {
             return va;
         }
     } else {
         auto result = m_sharedCache->getVar<List>(token, Type::List);
         if(result) {
             return *result;
         }
     }
     setLastErrorMessage("list_add: problem getting new token");
     return OptionalList();
 }
Example #25
0
 OptionalString ListAddTokenCommand::getNewStringToken()
 {
     std::string token;
     if(!m_func.getValueA<std::string>(token, m_sharedCache)) {
         LiteralString literal;
         if(m_func.getValueA<LiteralString>(literal, m_sharedCache)) {
             return OptionalString(literal.literal);
         }
     } else {
         auto result = m_sharedCache->getVar<std::string>(token, Type::String);
         if(result) {
             return OptionalString(*result);
         }
     }
     setLastErrorMessage("list_add: problem getting new token");
     return OptionalString();
 }
Example #26
0
bool UBWaveRecorder::start()
{
    if (!mIsRecording)
    {
        mRecordingStartTime = QTime::currentTime();
        mMsTimeStamp = 0;
        mIsRecording = true;
    }

    if (waveInStart(mWaveInDevice) != MMSYSERR_NOERROR)
    {
        setLastErrorMessage("Cannot start wave in device ");
        return false;
    }

    return true;
}
void QTweetListSubscriptions::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QVariantMap respMap = json.toMap();

        QVariant listsVar = respMap["lists"];

        QList<QTweetList> lists = QTweetConvert::variantToTweetLists(listsVar);

        QString nextCursor = respMap["next_cursor_str"].toString();
        QString prevCursor = respMap["previous_cursor_str"].toString();

        emit parsedLists(lists, nextCursor, prevCursor);
    } else {
        qDebug() << "QTweetListSubscriptions json parser error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
void QTweetListSubscribers::parsingJsonFinished(const QVariant &json, bool ok, const QString &errorMsg)
{
    if (ok) {
        QVariantMap respMap = json.toMap();

        QVariant userList = respMap["users"];

        QList<QTweetUser> users = QTweetConvert::variantToUserInfoList(userList);

        QString nextCursor = respMap["next_cursor_str"].toString();
        QString prevCursor = respMap["previous_cursor_str"].toString();

        emit parsedUsers(users, nextCursor, prevCursor);
    } else {
        qDebug() << "QTweetListSubscribers json parsing error: " << errorMsg;
        setLastErrorMessage(errorMsg);
        emit error(JsonParsingError, errorMsg);
    }
}
bool UBAudioQueueRecorder::init(const QString& waveInDeviceName)
{
    if(mIsRecording)
    {
        setLastErrorMessage("Already recording ...");
        return false;
    }

    OSStatus err = AudioQueueNewInput (&sAudioFormat, UBAudioQueueRecorder::audioQueueInputCallback,
                    this, 0, 0, 0, &mQueue);

    if (err)
    {
        setLastErrorMessage(QString("Cannot acquire audio input %1").arg(err));
        mQueue = 0;
        close();
        return false;
    }

    //qDebug() << "init with waveInDeviceName ..." << waveInDeviceName;

    if (waveInDeviceName.length() > 0 && waveInDeviceName != "Default")
    {
        AudioDeviceID deviceID = deviceIDFromDeviceName(waveInDeviceName);

        if (deviceID)
        {
            QString deviceUID = deviceUIDFromDeviceID(deviceID);
            if (deviceUID.length() > 0)
            {
                CFStringRef sr = CFStringCreateWithCString(0, deviceUID.toUtf8().constData(), kCFStringEncodingUTF8);

                err = AudioQueueSetProperty(mQueue, kAudioQueueProperty_CurrentDevice, &sr, sizeof(CFStringRef));
                if (err)
                {
                    setLastErrorMessage(QString("Cannot set audio input %1 (%2)").arg(waveInDeviceName).arg(err));
                }
                else
                {
                    qDebug() << "recording with input" << waveInDeviceName;
                }
            }
            else
            {
                setLastErrorMessage(QString("Cannot find audio input device UID with ID %1 (%2)").arg(deviceID).arg(err));
            }
        }
        else
        {
            setLastErrorMessage(QString("Cannot find audio input with name %1 (%2)").arg(waveInDeviceName).arg(err));
        }
    }

    UInt32 monitor = true;

    err = AudioQueueSetProperty(mQueue, kAudioQueueProperty_EnableLevelMetering , &monitor, sizeof(UInt32));
    if (err)
    {
        qWarning() << QString("Cannot set recording level monitoring %1").arg(err);
    }

    int nbBuffers = 6;
    mSampleBufferSize = sAudioFormat.mSampleRate *  sAudioFormat.mChannelsPerFrame
                * 2 * mBufferLengthInMs / 1000; // 44.1 Khz * stereo * 16bit * buffer length

    for (int i = 0; i < nbBuffers; i++)
    {
        AudioQueueBufferRef outBuffer;
        err = AudioQueueAllocateBuffer(mQueue, mSampleBufferSize, &outBuffer);

        if (err)
        {
            setLastErrorMessage(QString("Cannot allocate audio buffer %1").arg(err));
            close();
            return false;
        }

        mBuffers << outBuffer;
    }

    foreach(AudioQueueBufferRef buffer, mBuffers)
    {
        err = AudioQueueEnqueueBuffer(mQueue, buffer, 0, 0);
        if (err)
        {
            setLastErrorMessage(QString("Cannot enqueue audio buffer %1").arg(err));
            close();
            return false;
        }
    }
Example #30
0
bool UBWaveRecorder::init(const QString& waveInDeviceName)
{
    UINT deviceID = WAVE_MAPPER;

    if (waveInDeviceName.length() > 0)
    {
        int count = waveInGetNumDevs();

        WAVEINCAPS caps;
        for (int i = 0; i < count; i++)
        {
            if (waveInGetDevCaps(i, &caps, sizeof(caps)) == MMSYSERR_NOERROR)
            {
                QString deviceName  = QString:: fromUtf16(caps.szPname);

                if (deviceName == waveInDeviceName)
                {
                    deviceID = i;
                    break;
                }
            }
        }
    }

    WAVEFORMATEX format;
    format.cbSize = 0;
    format.wFormatTag = WAVE_FORMAT_PCM;
    format.nChannels = mNbChannels;
    format.wBitsPerSample = mBitsPerSample;
    format.nSamplesPerSec = mSampleRate;
    format.nBlockAlign = format.nChannels * (format.wBitsPerSample / 8);
    format.nAvgBytesPerSec = format.nSamplesPerSec * format.nBlockAlign;

    if (waveInOpen(&mWaveInDevice, deviceID, &format, (DWORD)waveInProc, (DWORD_PTR)this, CALLBACK_FUNCTION) != MMSYSERR_NOERROR)
    {
        setLastErrorMessage("Cannot open wave in device ");
        return false;
    }

    int nbBuffers = 6;
    int sampleBufferSize = 44100 *  2 * 2 * mBufferLengthInMs / 1000; // 44.1 Khz * stereo * 16bit * buffer length

    for (int i = 0; i < nbBuffers; i++)
    {
        WAVEHDR* buffer = new WAVEHDR();
        ZeroMemory(buffer, sizeof(WAVEHDR));

        buffer->lpData = (LPSTR)new BYTE[sampleBufferSize];
        ZeroMemory(buffer->lpData, sampleBufferSize);

        buffer->dwBufferLength = sampleBufferSize;
        buffer->dwFlags = 0;

        if (waveInPrepareHeader(mWaveInDevice, buffer, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
        {
            setLastErrorMessage("Cannot prepare wave header");
            return false;
        }

        if (waveInAddBuffer(mWaveInDevice, buffer, sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
        {
            setLastErrorMessage("Cannot add buffer");
            return false;
        }

        mWaveBuffers << buffer;
    }

    return true;
}