⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 database.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if ((*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) < 0) {            sattr.bvalue = false;        } else {            execute(expr->operand[2], iattr, sattr2);            sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) <= 0;        }        return;      case dbvmIntToReference:        execute(expr->operand[0], iattr, sattr);        sattr.oid = (oid_t)sattr.ivalue;        return;       case dbvmIntToReal:        execute(expr->operand[0], iattr, sattr);        sattr.fvalue = (real8)sattr.ivalue;        return;      case dbvmRealToInt:        execute(expr->operand[0], iattr, sattr);        sattr.ivalue = (db_int8)sattr.fvalue;        return;      case dbvmIntToString:        execute(expr->operand[0], iattr, sattr);        convertIntToString(iattr, sattr);        return;      case dbvmRealToString:        execute(expr->operand[0], iattr, sattr);        convertRealToString(iattr, sattr);        return;      case dbvmStringConcat:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        concatenateStrings(iattr, sattr, sattr2);        return;      case dbvmUpperString:        execute(expr->operand[0], iattr, sattr);        uppercaseString(iattr, sattr);        return;      case dbvmLowerString:        execute(expr->operand[0], iattr, sattr);        lowercaseString(iattr, sattr);        return;      case dbvmEqString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = compareStrings(sattr, sattr2) == 0;        return;      case dbvmNeString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = compareStrings(sattr, sattr2) != 0;        return;      case dbvmGtString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = compareStrings(sattr, sattr2) > 0;        return;      case dbvmGeString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = compareStrings(sattr, sattr2) >= 0;        return;      case dbvmLtString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = compareStrings(sattr, sattr2) < 0;        return;      case dbvmLeString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = compareStrings(sattr, sattr2) <= 0;        return;#ifdef USE_REGEX      case dbvmMatchString:        execute(expr->regex.opd, iattr, sattr);        sattr.bvalue = regexec(&expr->regex.re, (char*)sattr.array.base, 0, NULL, 0) == 0;        return;#endif      case dbvmLikeString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = matchStrings(sattr, sattr2);        return;      case dbvmLikeEscapeString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        execute(expr->operand[2], iattr, sattr3);        sattr.bvalue = matchStrings(sattr, sattr2, *sattr3.array.base);        return;      case dbvmBetweenString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (compareStrings(sattr, sattr2) < 0) {             sattr.bvalue = false;        } else {             execute(expr->operand[2], iattr, sattr2);            sattr.bvalue = compareStrings(sattr, sattr2) <= 0;        }        return;      case dbvmEqBool:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.bvalue == sattr2.bvalue;        return;      case dbvmNeBool:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.bvalue != sattr2.bvalue;        return;      case dbvmEqReference:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.oid == sattr2.oid;        return;      case dbvmNeReference:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.oid != sattr2.oid;        return;      case dbvmDeref:        execute(expr->operand[0], iattr, sattr);        if (sattr.oid == 0) {             iattr.removeTemporaries();            iattr.db->handleError(NullReferenceError);        }        assert(!(iattr.db->currIndex[sattr.oid]                  & (dbInternalObjectMarker|dbFreeHandleMarker)));        sattr.base = iattr.db->baseAddr + iattr.db->currIndex[sattr.oid];        return;      case dbvmFuncArg2Bool:        sattr.bvalue = (*(bool(*)(dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0));        return;      case dbvmFuncArg2Int:        sattr.ivalue = (*(db_int8(*)(dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0));        return;      case dbvmFuncArg2Real:        sattr.fvalue = (*(real8(*)(dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0));        return;      case dbvmFuncArg2Str:        copyString(iattr, sattr,                    (*(char*(*)(dbUserFunctionArgument const&))expr->func.fptr)                   (dbUserFunctionArgument(expr, iattr, sattr, 0)));        return;      case dbvmFuncArgArg2Bool:        sattr.bvalue = (*(bool(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0),              dbUserFunctionArgument(expr, iattr, sattr, 1));        return;      case dbvmFuncArgArg2Int:        sattr.ivalue = (*(db_int8(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0),              dbUserFunctionArgument(expr, iattr, sattr, 1));        return;      case dbvmFuncArgArg2Real:        sattr.fvalue = (*(real8(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0),              dbUserFunctionArgument(expr, iattr, sattr, 1));        return;      case dbvmFuncArgArg2Str:        copyString(iattr, sattr,                    (*(char*(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)                   (dbUserFunctionArgument(expr, iattr, sattr, 0),                    dbUserFunctionArgument(expr, iattr, sattr, 1)));        return;      case dbvmFuncArgArgArg2Bool:        sattr.bvalue = (*(bool(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0),             dbUserFunctionArgument(expr, iattr, sattr, 1),              dbUserFunctionArgument(expr, iattr, sattr, 2));        return;      case dbvmFuncArgArgArg2Int:        sattr.ivalue = (*(db_int8(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0),              dbUserFunctionArgument(expr, iattr, sattr, 1),              dbUserFunctionArgument(expr, iattr, sattr, 2));        return;      case dbvmFuncArgArgArg2Real:        sattr.fvalue = (*(real8(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)            (dbUserFunctionArgument(expr, iattr, sattr, 0),              dbUserFunctionArgument(expr, iattr, sattr, 1),             dbUserFunctionArgument(expr, iattr, sattr, 2));        return;      case dbvmFuncArgArgArg2Str:        copyString(iattr, sattr,                    (*(char*(*)(dbUserFunctionArgument const&, dbUserFunctionArgument const&, dbUserFunctionArgument const&))expr->func.fptr)                   (dbUserFunctionArgument(expr, iattr, sattr, 0),                     dbUserFunctionArgument(expr, iattr, sattr, 1),                     dbUserFunctionArgument(expr, iattr, sattr, 2)));        return;      case dbvmFuncInt2Bool:        execute(expr->func.arg[0], iattr, sattr);        sattr.bvalue = (*(bool(*)(db_int8))expr->func.fptr)(sattr.ivalue);        return;      case dbvmFuncReal2Bool:        execute(expr->func.arg[0], iattr, sattr);        sattr.bvalue = (*(bool(*)(real8))expr->func.fptr)(sattr.fvalue);        return;      case dbvmFuncStr2Bool:        execute(expr->func.arg[0], iattr, sattr);        sattr.bvalue =             (*(bool(*)(char const*))expr->func.fptr)(sattr.array.base);        return;      case dbvmFuncInt2Int:        execute(expr->func.arg[0], iattr, sattr);        sattr.ivalue = (*(db_int8(*)(db_int8))expr->func.fptr)(sattr.ivalue);        return;      case dbvmFuncReal2Int:        execute(expr->func.arg[0], iattr, sattr);        sattr.ivalue = (*(db_int8(*)(real8))expr->func.fptr)(sattr.fvalue);        return;      case dbvmFuncStr2Int:        execute(expr->func.arg[0], iattr, sattr);        sattr.ivalue =             (*(db_int8(*)(char const*))expr->func.fptr)(sattr.array.base);        return;      case dbvmFuncInt2Real:        execute(expr->func.arg[0], iattr, sattr);        sattr.fvalue = (*(real8(*)(db_int8))expr->func.fptr)(sattr.ivalue);        return;      case dbvmFuncReal2Real:        execute(expr->func.arg[0], iattr, sattr);        sattr.fvalue = (*(real8(*)(real8))expr->func.fptr)(sattr.fvalue);        return;      case dbvmFuncStr2Real:        execute(expr->func.arg[0], iattr, sattr);        sattr.fvalue =             (*(real8(*)(char const*))expr->func.fptr)(sattr.array.base);        return;      case dbvmFuncInt2Str:        execute(expr->func.arg[0], iattr, sattr);        copyString(iattr, sattr,                    (*(char*(*)(db_int8))expr->func.fptr)(sattr.ivalue));        return;      case dbvmFuncReal2Str:        execute(expr->func.arg[0], iattr, sattr);        copyString(iattr, sattr,                    (*(char*(*)(real8))expr->func.fptr)(sattr.fvalue));        return;      case dbvmFuncStr2Str:        execute(expr->func.arg[0], iattr, sattr);        copyString(iattr, sattr,                   (*(char*(*)(char const*))expr->func.fptr)(sattr.array.base));        return;      case dbvmInArrayBool:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfBool(sattr, sattr2);        return;      case dbvmInArrayInt1:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfInt1(sattr, sattr2);        return;      case dbvmInArrayInt2:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfInt2(sattr, sattr2);        return;      case dbvmInArrayInt4:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfInt4(sattr, sattr2);        return;      case dbvmInArrayInt8:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfInt8(sattr, sattr2);        return;      case dbvmInArrayReal4:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfReal4(sattr, sattr2);        return;      case dbvmInArrayReal8:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfReal8(sattr, sattr2);        return;      case dbvmInArrayString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfString(sattr, sattr2);        return;      case dbvmInArrayReference:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfReference(sattr, sattr2);        return;      case dbvmInArrayRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchArrayOfRectangle(iattr, sattr, sattr2);        return;      case dbvmInString:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        searchInString(sattr, sattr2);        return;      default:        assert(false);    }}void dbDatabase::handleError(dbErrorClass error, char const* msg, int arg){    if (errorHandler != NULL) {         (*errorHandler)(error, msg, arg, errorHandlerContext);    }#ifdef THROW_EXCEPTION_ON_ERROR    if (error != NoError) {        if (error == DatabaseOpenError) {            fprintf(stderr, "%s\n", msg);        } else {             throw dbException(error, msg, arg);        }    }#else    char buf[256];    switch (error) {       case QueryError:        fprintf(stderr, "%s in position %d\n", msg, arg);        return;      case ArithmeticError:        fprintf(stderr, "%s\n", msg);        break;      case IndexOutOfRangeError:        fprintf(stderr, "Index %d is out of range\n", arg);        break;      case DatabaseOpenError:        fprintf(stderr, "%s\n", msg);        return;      case FileError:        fprintf(stderr, "%s: %s\n", msg,                 dbFile::errorText(arg, buf, sizeof(buf)));        break;      case OutOfMemoryError:        fprintf(stderr,"Not enough memory: failed to allocate %d bytes\n",arg);        break;      case NullReferenceError:        fprintf(stderr, "Null object reference is accessed\n");        break;      case Deadlock:        fprintf(stderr, "Deadlock is caused by upgrading shared locks to exclusive");        break;      case LockRevoked:        fprintf(stderr, "Lock is revoked by some other client");        break;        case InconsistentInverseReference:        fprintf(stderr, "%s\n", msg);        return;      case DatabaseReadOnly:        fprintf(stderr, "Attempt to modify readonly database");        break;      default:        return;    }       abort();#endif}bool dbDatabase::isReplicated()

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -