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

📄 database.cpp

📁 FastDb是高效的内存数据库系统
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        sattr.fvalue = *(real4*)((char*)expr->var + iattr.paramBase);        return;      case dbvmLoadVarReal8:        sattr.fvalue = *(real8*)((char*)expr->var + iattr.paramBase);        return;      case dbvmLoadVarReference:        sattr.oid = *(oid_t*)((char*)expr->var + iattr.paramBase);        return;      case dbvmLoadVarRectangle:        sattr.rvalue = *(rectangle*)((char*)expr->var + iattr.paramBase);        return;      case dbvmLoadVarString:        sattr.array.base = (char*)((char*)expr->var + iattr.paramBase);        sattr.array.size = strlen((char*)sattr.array.base) + 1;        return;      case dbvmLoadVarStringPtr:        sattr.array.base = *(char**)((char*)expr->var + iattr.paramBase);        sattr.array.size = strlen((char*)sattr.array.base) + 1;        return;      case dbvmLoadVarArrayOfOid:      case dbvmLoadVarArrayOfInt4:      case dbvmLoadVarArrayOfInt8:        sattr.array.base = (char*)((dbAnyArray*)((char*)expr->var + iattr.paramBase))->base();        sattr.array.size = ((dbAnyArray*)((char*)expr->var + iattr.paramBase))->length();        return;      case dbvmLoadVarArrayOfOidPtr:      case dbvmLoadVarArrayOfInt4Ptr:      case dbvmLoadVarArrayOfInt8Ptr:        {            dbAnyArray* arr = *(dbAnyArray**)((char*)expr->var + iattr.paramBase);            sattr.array.base = (char*)arr->base();            sattr.array.size = arr->length();            return;        }      case dbvmLoadVarRawBinary:        sattr.raw = (void*)((char*)expr->var + iattr.paramBase);        return;#ifdef USE_STD_STRING      case dbvmLoadVarStdString:        sattr.array.base = (char*)((std::string*)((char*)expr->var + iattr.paramBase))->c_str();        sattr.array.size = ((std::string*)((char*)expr->var + iattr.paramBase))->length() + 1;        return;#endif      case dbvmLoadTrue:        sattr.bvalue = true;        return;      case dbvmLoadFalse:        sattr.bvalue = false;        return;      case dbvmLoadNull:        sattr.oid = 0;        return;      case dbvmLoadIntConstant:        sattr.ivalue = expr->ivalue;        return;      case dbvmLoadRealConstant:        sattr.fvalue = expr->fvalue;        return;      case dbvmLoadRectangleConstant:        sattr.rvalue = expr->rvalue;        return;      case dbvmLoadStringConstant:        sattr.array.base = expr->svalue.str;        sattr.array.size = expr->svalue.len;        return;          case dbvmOrBool:        execute(expr->operand[0], iattr, sattr);        if (sattr.bvalue == 0) {             execute(expr->operand[1], iattr, sattr);        }        return;      case dbvmAndBool:        execute(expr->operand[0], iattr, sattr);        if (sattr.bvalue != 0) {             execute(expr->operand[1], iattr, sattr);        }        return;      case dbvmNotBool:        execute(expr->operand[0], iattr, sattr);        sattr.bvalue = !sattr.bvalue;         return;      case dbvmIsNull:        execute(expr->operand[0], iattr, sattr);        sattr.bvalue = sattr.oid == 0;        return;      case dbvmAddRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.rvalue += sattr2.rvalue;        return;      case dbvmNegInt:        execute(expr->operand[0], iattr, sattr);        sattr.ivalue = -sattr.ivalue;        return;      case dbvmAddInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.ivalue += sattr2.ivalue;        return;      case dbvmSubInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.ivalue -= sattr2.ivalue;        return;      case dbvmMulInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.ivalue *= sattr2.ivalue;        return;      case dbvmDivInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr2.ivalue == 0) {             iattr.removeTemporaries();            iattr.db->handleError(ArithmeticError, "Division by zero");        } else {             sattr.ivalue /= sattr2.ivalue;        }        return;      case dbvmAndInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.ivalue &= sattr2.ivalue;        return;      case dbvmOrInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.ivalue |= sattr2.ivalue;        return;      case dbvmNotInt:        execute(expr->operand[0], iattr, sattr);        sattr.ivalue = ~sattr.ivalue;        return;      case dbvmAbsInt:        execute(expr->operand[0], iattr, sattr);        if (sattr.ivalue < 0) {             sattr.ivalue = -sattr.ivalue;        }        return;      case dbvmPowerInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr.ivalue == 2) {             sattr.ivalue = sattr2.ivalue < 64                 ? (nat8)1 << (int)sattr2.ivalue : 0;        } else if (sattr.ivalue == 0 && sattr2.ivalue < 0) {             iattr.removeTemporaries();            iattr.db->handleError(ArithmeticError,                                   "Raise zero to negative power");                  } else {             sattr.ivalue = powerIntInt(sattr.ivalue, sattr2.ivalue);        }        return;              case dbvmEqInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.ivalue == sattr2.ivalue;        return;      case dbvmNeInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.ivalue != sattr2.ivalue;        return;      case dbvmGtInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.ivalue > sattr2.ivalue;        return;      case dbvmGeInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.ivalue >= sattr2.ivalue;        return;      case dbvmLtInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.ivalue < sattr2.ivalue;        return;      case dbvmLeInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.ivalue <= sattr2.ivalue;        return;      case dbvmBetweenInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr.ivalue < sattr2.ivalue) {             sattr.bvalue = false;        } else {             execute(expr->operand[2], iattr, sattr2);            sattr.bvalue = sattr.ivalue <= sattr2.ivalue;        }        return;      case dbvmEqRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue == sattr2.rvalue;        return;      case dbvmNeRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue != sattr2.rvalue;        return;      case dbvmGtRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue > sattr2.rvalue;        return;      case dbvmGeRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue >= sattr2.rvalue;        return;      case dbvmLtRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue < sattr2.rvalue;        return;      case dbvmLeRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue <= sattr2.rvalue;        return;      case dbvmOverlapsRectangle:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.rvalue & sattr2.rvalue;        return;      case dbvmRectangleArea:        execute(expr->operand[0], iattr, sattr);        sattr.fvalue = (double)area(sattr.rvalue);        return;      case dbvmNegReal:        execute(expr->operand[0], iattr, sattr);        sattr.fvalue = -sattr.fvalue;        return;      case dbvmAddReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.fvalue += sattr2.fvalue;        return;      case dbvmSubReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.fvalue -= sattr2.fvalue;        return;      case dbvmMulReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.fvalue *= sattr2.fvalue;        return;      case dbvmDivReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr2.fvalue == 0.0) {            iattr.removeTemporaries();            iattr.db->handleError(ArithmeticError, "Division by zero");        } else {            sattr.fvalue /= sattr2.fvalue;        }        return;      case dbvmAbsReal:        execute(expr->operand[0], iattr, sattr);        if (sattr.fvalue < 0) {             sattr.fvalue = -sattr.fvalue;        }        return;      case dbvmPowerReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr.fvalue < 0) {             iattr.removeTemporaries();            iattr.db->handleError(ArithmeticError,                                   "Power operator returns complex result");        } else if (sattr.fvalue == 0.0 && sattr2.fvalue < 0) {             iattr.removeTemporaries();            iattr.db->handleError(ArithmeticError,                                   "Raise zero to negative power");                  } else {             sattr.fvalue = pow(sattr.fvalue, sattr2.fvalue);        }        return;      case dbvmPowerRealInt:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr.fvalue == 0.0 && sattr2.ivalue < 0) {             iattr.removeTemporaries();            iattr.db->handleError(ArithmeticError,                                   "Raise zero to negative power");                  } else {             sattr.fvalue = powerRealInt(sattr.fvalue, sattr2.ivalue);        }        return;      case dbvmEqReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.fvalue == sattr2.fvalue;        return;      case dbvmNeReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.fvalue != sattr2.fvalue;        return;      case dbvmGtReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.fvalue > sattr2.fvalue;        return;      case dbvmGeReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.fvalue >= sattr2.fvalue;        return;      case dbvmLtReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.fvalue < sattr2.fvalue;        return;      case dbvmLeReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = sattr.fvalue <= sattr2.fvalue;        return;      case dbvmBetweenReal:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        if (sattr.fvalue < sattr2.fvalue) {             sattr.bvalue = false;        } else {             execute(expr->operand[2], iattr, sattr2);            sattr.bvalue = sattr.fvalue <= sattr2.fvalue;        }        return;     case dbvmEqBinary:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) == 0;        return;      case dbvmNeBinary:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) != 0;        return;      case dbvmGtBinary:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) > 0;        return;      case dbvmGeBinary:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) >= 0;        return;      case dbvmLtBinary:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) < 0;        return;      case dbvmLeBinary:        execute(expr->operand[0], iattr, sattr);        execute(expr->operand[1], iattr, sattr2);        sattr.bvalue = (*(dbUDTComparator)expr->func.fptr)(sattr.raw, sattr2.raw, expr->offs) <= 0;        return;      case dbvmBetweenBinary:

⌨️ 快捷键说明

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