@@ -396,34 +396,42 @@ END
396
396
$BODY$
397
397
LANGUAGE plpgsql set search_path FROM CURRENT;
398
398
399
- CREATE FUNCTION _get_cron_from_attrs (params jsonb) RETURNS jsonb AS
399
+ CREATE FUNCTION _get_cron_from_attrs (params jsonb, prev jsonb ) RETURNS jsonb AS
400
400
$BODY$
401
401
DECLARE
402
402
dates text [];
403
403
cron jsonb;
404
+ rule jsonb;
404
405
clean_cron jsonb;
405
406
N integer ;
406
407
name text ;
407
408
BEGIN
408
409
410
+ IF NOT params?' cron' AND NOT params?' rule' AND NOT params?' date' AND NOT params?' dates' THEN
411
+ RAISE EXCEPTION ' There is no information about job' ' s schedule'
412
+ USING HINT = ' Use ' ' cron' ' - cron string, ' ' rule' ' - json to set schedule rules or ' ' date' ' and ' ' dates' ' to set exact date(s)' ;
413
+ END IF;
414
+
409
415
IF params?' cron' THEN
410
416
EXECUTE ' SELECT cron2jsontext($1::cstring)::jsonb'
411
417
INTO cron
412
418
USING params- >> ' cron' ;
413
- ELSIF params?' rule' THEN
414
- cron := params- > ' rule' ;
415
- ELSIF NOT params?' date' AND NOT params?' dates' THEN
416
- RAISE EXCEPTION ' There is no information about job' ' s schedule'
417
- USING HINT = ' Use ' ' cron' ' - cron string, ' ' rule' ' - json to set schedule rules or ' ' date' ' and ' ' dates' ' to set exact date(s)' ;
419
+ IF prev IS NOT NULL THEN
420
+ cron := prev || cron;
421
+ END IF;
418
422
END IF;
419
423
420
- IF cron IS NOT NULL THEN
421
- IF cron?' date' THEN
422
- dates := _get_array_from_jsonb(dates, cron- > ' date' );
423
- END IF;
424
- IF cron?' dates' THEN
425
- dates := _get_array_from_jsonb(dates, cron- > ' dates' );
426
- END IF;
424
+ IF params?' rule' THEN
425
+ rule := params- > ' rule' ;
426
+ END IF;
427
+
428
+ cron := coalesce(cron, ' {}' ::jsonb) || coalesce(rule, ' {}' ::jsonb);
429
+
430
+ IF cron?' date' THEN
431
+ dates := _get_array_from_jsonb(dates, cron- > ' date' );
432
+ END IF;
433
+ IF cron?' dates' THEN
434
+ dates := _get_array_from_jsonb(dates, cron- > ' dates' );
427
435
END IF;
428
436
429
437
IF params?' date' THEN
@@ -437,7 +445,7 @@ BEGIN
437
445
IF N > 0 THEN
438
446
EXECUTE ' SELECT array_agg(lll) FROM (SELECT distinct(date_trunc(' ' min' ' , unnest::timestamp with time zone)) as lll FROM unnest($1) ORDER BY date_trunc(' ' min' ' , unnest::timestamp with time zone)) as Z'
439
447
INTO dates USING dates;
440
- cron := COALESCE( cron, ' {} ' ::jsonb) || jsonb_build_object(' dates' , array_to_json(dates));
448
+ cron := cron || jsonb_build_object(' dates' , array_to_json(dates));
441
449
END IF;
442
450
443
451
clean_cron := ' {}' ::jsonb;
@@ -564,7 +572,7 @@ BEGIN
564
572
RAISE WARNING ' You used excess keys in params: %.' , array_to_string(excess, ' , ' );
565
573
END IF;
566
574
567
- cron := _get_cron_from_attrs(params);
575
+ cron := _get_cron_from_attrs(params, NULL );
568
576
commands := _get_commands_from_attrs(params);
569
577
executor := _get_executor_from_attrs(params);
570
578
node := ' master' ;
@@ -711,7 +719,7 @@ BEGIN
711
719
712
720
IF attrs?' cron' OR attrs?' date' OR attrs?' dates' OR attrs?' rule' THEN
713
721
cmd := cmd || ' rule = ' ||
714
- quote_literal(_get_cron_from_attrs(attrs)) || ' ::jsonb, ' ;
722
+ quote_literal(_get_cron_from_attrs(attrs, job . rule )) || ' ::jsonb, ' ;
715
723
END IF;
716
724
717
725
IF attrs?' command' OR attrs?' commands' THEN
0 commit comments