static void deserializeFromString(const AggregateFunctionPtr & function, IColumn & column, const String & s)
{
	ColumnAggregateFunction & column_concrete = static_cast<ColumnAggregateFunction &>(column);

	size_t size_of_state = function->sizeOfData();
	AggregateDataPtr place = column_concrete.createOrGetArena().alloc(size_of_state);

	function->create(place);

	try
	{
		ReadBufferFromString istr(s);
		function->deserialize(place, istr);
	}
	catch (...)
	{
		function->destroy(place);
		throw;
	}

	column_concrete.getData().push_back(place);
}