Esempio n. 1
0
Nullable<Binary> Statement::GetBinaryDataInRow(unsigned int column) {
	Nullable<Binary> result;

	if (column >= _resultParams.size()) {
		throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "column out of range");
	}

	if (_resultBind[column].buffer_type != MYSQL_TYPE_BLOB) {
		throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "column not of correct type");
	}

	if (! (*(_resultParams[column]->IsNull()))) {
		if (mysql_stmt_fetch_column(_stmt, &(_resultBind[column]), column, 0) != 0) {
			throw DatabaseException(_stmt, "Error in GetDataInRow(Binary)");
		}	
		Binary fromdb;
		fromdb.AssignDataToBuffer((unsigned char *)_resultParams[column]->Buffer(), *(_resultParams[column]->BufferLength()));
		result = fromdb;
	}

	return result;
}
Esempio n. 2
0
void Statement::GetDataInRow(unsigned int column, Nullable<Binary> &result) {
	if (column >= _resultParams.size()) {
		throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "column out of range");
	}

	if (! (*(_resultParams[column]->IsNull()))) {
		if (_resultBind[column].buffer_type == MYSQL_TYPE_TINY_BLOB) {
			if (*(_resultParams[column]->BufferLength()) >= 256) {
				throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "data too large for Blob type");
			}
		} else if (_resultBind[column].buffer_type == MYSQL_TYPE_BLOB) {
			if (*(_resultParams[column]->BufferLength()) >= 64 * 1024) {
				throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "data too large for Blob type");
			}
		} else if (_resultBind[column].buffer_type == MYSQL_TYPE_MEDIUM_BLOB) {
			if (*(_resultParams[column]->BufferLength()) >= 16 * 1024 * 1024) {
				throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "data too large for Medium Blob type");
			}
		} else if (_resultBind[column].buffer_type == MYSQL_TYPE_LONG_BLOB) {
			if (*(_resultParams[column]->BufferLength()) >= (size_t) 4 * 1024 * 1024 * 1024) {
				throw DatabaseException("Error in Statement::GetDataInRow", 0, "----", "data too large for Large Blob type");
			}
		} else {
			throw DatabaseException("Error in Statement::GetDataInRow<Binary>", 0, "----", "column not of correct type (should be Blob)");
		}

		if (mysql_stmt_fetch_column(_stmt, &(_resultBind[column]), column, 0) != 0) {
			throw DatabaseException(_stmt, "Error in GetDataInRow<Binary>");
		}	

		Binary fromdb;
		fromdb.AssignDataToBuffer((unsigned char *)_resultParams[column]->Buffer(), *(_resultParams[column]->BufferLength()));
		result = fromdb;
	} else {
		result.ClearValue();
	}
}