CREATE OR REPLACE FUNCTION logidze_compact_history(log_data jsonb, cutoff integer DEFAULT 1) RETURNS jsonb AS $body$

-- version: 1
DECLARE
  merged jsonb;
BEGIN
  LOOP
    merged := jsonb_build_object(
      'ts',
      log_data#>'{h,1,ts}',
      'v',
      log_data#>'{h,1,v}',
      'c',
      (log_data#>'{h,0,c}') || (log_data#>'{h,1,c}')
    );

    IF (log_data#>'{h,1}' ? 'm') THEN
      merged := jsonb_set(merged, ARRAY['m'], log_data#>'{h,1,m}');
    END IF;

    log_data := jsonb_set(
      log_data,
      '{h}',
      jsonb_set(
        log_data->'h',
        '{1}',
        merged
      ) - 0
    );

    cutoff := cutoff - 1;

    EXIT WHEN cutoff <= 0;
  END LOOP;

  return log_data;
END;

$body$ LANGUAGE plpgsql;