[repo, undo] Finish repository-side implementation of the undo feature (closes #893940)
1) Changes API for undo_transaction in order to raise an exception:
the previous API returned a sequence of error, the user of the API
needed to be careful to check explicitly. We change this for it to
raise an UndoException with the list of errors as an attribute.
2) The server-side support for undoing update actions is finished
3) The configuration for `undo-support` is now a simple boolean
Beware of the costs, both in DB space and in number of requests
on the RDBMS backend, once this feture is activated.
4) Adds a txuuid param/attribute to the existing NoSuchTransaction
exception.
/* -*- sql -*-
postgres specific registered procedures,
require the plpgsql language installed
*/
DROP FUNCTION IF EXISTS comma_join (anyarray) CASCADE;
CREATE FUNCTION comma_join (anyarray) RETURNS text AS $$
SELECT array_to_string($1, ', ')
$$ LANGUAGE SQL;;
DROP AGGREGATE IF EXISTS group_concat (anyelement) CASCADE;
CREATE AGGREGATE group_concat (
basetype = anyelement,
sfunc = array_append,
stype = anyarray,
finalfunc = comma_join,
initcond = '{}'
);;
DROP FUNCTION IF EXISTS limit_size (fulltext text, format text, maxsize integer);
CREATE FUNCTION limit_size (fulltext text, format text, maxsize integer) RETURNS text AS $$
DECLARE
plaintext text;
BEGIN
IF char_length(fulltext) < maxsize THEN
RETURN fulltext;
END IF;
IF format = 'text/html' OR format = 'text/xhtml' OR format = 'text/xml' THEN
plaintext := regexp_replace(fulltext, '<[\\w/][^>]+>', '', 'g');
ELSE
plaintext := fulltext;
END IF;
IF char_length(plaintext) < maxsize THEN
RETURN plaintext;
ELSE
RETURN substring(plaintext from 1 for maxsize) || '...';
END IF;
END
$$ LANGUAGE plpgsql;;
DROP FUNCTION IF EXISTS text_limit_size (fulltext text, maxsize integer);
CREATE FUNCTION text_limit_size (fulltext text, maxsize integer) RETURNS text AS $$
BEGIN
RETURN limit_size(fulltext, 'text/plain', maxsize);
END
$$ LANGUAGE plpgsql;;