Ejemplo n.º 1
0
PreparedStatement::~PreparedStatement()
{
	thread_db* tdbb = JRD_get_thread_data();

	DSQL_free_statement(tdbb, request, DSQL_drop);

	if (resultSet)
		resultSet->stmt = NULL;
}
Ejemplo n.º 2
0
ResultSet::~ResultSet()
{
	if (!stmt)
		return;

	thread_db* tdbb = JRD_get_thread_data();

	stmt->resultSet = NULL;

	if (stmt->request->req_type != REQ_EXEC_PROCEDURE)
		DSQL_free_statement(tdbb, stmt->request, DSQL_close);
}
Ejemplo n.º 3
0
ResultSet::~ResultSet()
{
	if (!stmt)
		return;

	thread_db* tdbb = JRD_get_thread_data();

	stmt->resultSet = NULL;

	if (stmt->request->getStatement()->getType() != DsqlCompiledStatement::TYPE_EXEC_PROCEDURE)
		DSQL_free_statement(tdbb, stmt->request, DSQL_close);
}
Ejemplo n.º 4
0
void GlobalRWLock::shutdownLock()
{
	thread_db* tdbb = JRD_get_thread_data();

	Database::CheckoutLockGuard counterGuard(tdbb->getDatabase(), counterMutex);

	COS_TRACE(("(%p)->shutdownLock readers(%d), blocking(%d), pendingWriters(%d), currentWriter(%d), lck_physical(%d)",
		this, readers, blocking, pendingWriters, currentWriter, cachedLock->lck_physical));

	if (!cachedLock)
		return;

	LCK_release(tdbb, cachedLock);

	delete cachedLock;
	cachedLock = NULL;
}
Ejemplo n.º 5
0
// Returns false if conversion is not needed.
bool DataTypeUtil::convertToUTF8(const string& src, string& dst, CHARSET_ID charset, ErrorFunction err)
{
	thread_db* tdbb = JRD_get_thread_data();

	if (charset == CS_dynamic)
	{
		fb_assert(tdbb->getAttachment());
		charset = tdbb->getAttachment()->att_charset;
	}

	if (charset == CS_UTF8 || charset == CS_UNICODE_FSS)
		return false;

	if (charset == CS_NONE)
	{
		const FB_SIZE_T length = src.length();

		const char* s = src.c_str();
		char* p = dst.getBuffer(length);

		for (const char* end = src.end(); s < end; ++p, ++s)
			*p = (*s < 0 ? '?' : *s);
	}
	else // charset != CS_UTF8
	{
		DataTypeUtil dtUtil(tdbb);
		ULONG length = dtUtil.convertLength(src.length(), charset, CS_UTF8);

		length = INTL_convert_bytes(tdbb,
			CS_UTF8, (UCHAR*) dst.getBuffer(length), length,
			charset, (const BYTE*) src.begin(), src.length(),
			err);

		dst.resize(length);
	}

	return true;
}