// moves DB path information (from limbo transaction) to another buffer void getDbPathInfo(unsigned int& itemsLength, const unsigned char*& items, unsigned int& bufferLength, unsigned char*& buffer, Firebird::Array<unsigned char>& newItemsBuffer, const Firebird::PathName& dbpath) { if (itemsLength && items) { const unsigned char* ptr = (const unsigned char*) memchr(items, fb_info_tra_dbpath, itemsLength); if (ptr) { newItemsBuffer.add(items, itemsLength); newItemsBuffer.remove(ptr - items); items = newItemsBuffer.begin(); --itemsLength; unsigned int len = dbpath.length(); if (len + 3 > bufferLength) { len = bufferLength - 3; } bufferLength -= (len + 3); *buffer++ = fb_info_tra_dbpath; *buffer++ = len; *buffer++ = len >> 8; memcpy(buffer, dbpath.c_str(), len); buffer += len; } } }
void InAutonomousTransactionNode::print(Firebird::string& text, Firebird::Array<dsql_nod*>& nodes) const { text = "in autonomous transaction"; nodes.add(dsqlAction); }