void DBOperationHelper_VO(Handle<Object> spec, KeyOperation & op) { HandleScope scope; Local<Value> v; Local<Object> o; Local<Object> valueObj; v = spec->Get(HELPER_VALUE_OBJECT); valueObj = v->ToObject(); NdbRecordObject * nro = unwrapPointer<NdbRecordObject *>(valueObj); /* Set the key record and key buffer from the helper spec */ setKeysInOp(spec, op); /* Set the row record, row buffer, and mask from the VO */ op.row_record = nro->getRecord(); op.row_buffer = nro->getBuffer(); /* "write" and "persist" must write all columns. Other operations only require the columns that have changed since read. */ if(op.opcode == 2 || op.opcode == 8) op.setRowMask(0xFFFFFFFF); else op.setRowMask(nro->getMaskValue()); DEBUG_PRINT(" VO opcode: %d mask: %u", op.opcode, op.u.maskvalue); nro->resetMask(); }
void DBOperationHelper_VO(Handle<Object> spec, KeyOperation & op) { DEBUG_MARKER(UDEB_DETAIL); Local<Value> v; Local<Object> o; Local<Object> valueObj; v = spec->Get(HELPER_VALUE_OBJECT); valueObj = v->ToObject(); NdbRecordObject * nro = unwrapPointer<NdbRecordObject *>(valueObj); /* Set the key record and key buffer from the helper spec */ setKeysInOp(spec, op); /* Set the row record, row buffer, and mask from the VO */ op.row_record = nro->getRecord(); op.row_buffer = nro->getBuffer(); /* A persist operation must write all columns. A save operation must write all columns only if the PK has changed. Other operations only write columns that have changed since being read. */ if(op.opcode == 2) op.setRowMask(op.row_record->getAllColumnMask()); else if(op.opcode == 8 && (nro->getMaskValue() & op.row_record->getPkColumnMask())) op.setRowMask(op.row_record->getAllColumnMask()); else op.setRowMask(nro->getMaskValue()); op.nblobs = nro->createBlobWriteHandles(op); DEBUG_PRINT(" VO %s -- mask: %u lobs: %d", op.getOperationName(), op.u.maskvalue, op.nblobs); nro->resetMask(); }
Handle<Value> DBOperationHelper_VO(const Arguments &args) { HandleScope scope; Local<Value> v; Local<Object> o; Local<Object> valueObj; Handle<Value> returnVal; Operation op; const Local<Object> spec = args[0]->ToObject(); int opcode = args[1]->Int32Value(); NdbTransaction *tx = unwrapPointer<NdbTransaction *>(args[2]->ToObject()); /* NdbOperation.prepare() just verified that this is really a VO */ v = spec->Get(HELPER_VALUE_OBJECT); valueObj = v->ToObject(); NdbRecordObject * nro = unwrapPointer<NdbRecordObject *>(valueObj); /* The VO may have values that are not yet encoded to its buffer. */ returnVal = nro->prepare(); // do something with this? /* Set the key record and key buffer from the helper spec */ setKeysInOp(spec, op); /* Set the row record, row buffer, and mask from the VO */ op.row_record = nro->getRecord(); op.row_buffer = nro->getBuffer(); /* "write" and "persist" must write all columns. Other operations only require the columns that have changed since read. */ if(opcode == 2 || opcode == 8) op.setRowMask(0xFFFFFFFF); else op.setRowMask(nro->getMaskValue()); DEBUG_PRINT(" VO opcode: %d mask: %u", opcode, op.u.maskvalue); returnVal = buildNdbOperation(op, opcode, tx); nro->resetMask(); return scope.Close(returnVal); }