定时任务兼容M*时间单位

This commit is contained in:
nancy_w
2023-05-27 16:54:28 +08:00
parent 46d3c969dd
commit cc316739ba
6 changed files with 163 additions and 15 deletions

View File

@ -28,7 +28,7 @@ schedule_expr: {
interval_expr:
quantity {YEAR | MONTH | DAY | HOUR | MINUTE |
SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY TO SECOND | HOUR TO MINUTE | HOUR TO SECOND | MINUTE TO SECOND}
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
</synopsis>
</refsynopsisdiv>
</refentry>

View File

@ -570,7 +570,7 @@ static void setDelimiterName(core_yyscan_t yyscanner, char*input, VariableSetStm
%type <list> extract_list timestamp_arg_list overlay_list position_list
%type <list> substr_list trim_list
%type <list> opt_interval interval_second
%type <list> opt_interval interval_second event_interval_unit opt_evtime_unit
%type <node> overlay_placing substr_from substr_for
%type <boolean> opt_instead opt_incremental
@ -864,7 +864,7 @@ static void setDelimiterName(core_yyscan_t yyscanner, char*input, VariableSetStm
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
SHRINK USE_P
DATA_P DATABASE DATAFILE DATANODE DATANODES DATATYPE_CL DATE_P DATE_FORMAT_P DAY_P DBCOMPATIBILITY_P DEALLOCATE DEC DECIMAL_P DECLARE DECODE DEFAULT DEFAULTS
DATA_P DATABASE DATAFILE DATANODE DATANODES DATATYPE_CL DATE_P DATE_FORMAT_P DAY_P DAY_HOUR_P DAY_MINUTE_P DAY_SECOND_P DBCOMPATIBILITY_P DEALLOCATE DEC DECIMAL_P DECLARE DECODE DEFAULT DEFAULTS
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DELTA DELTAMERGE DESC DETERMINISTIC
/* PGXC_BEGIN */
DICTIONARY DIRECT DIRECTORY DISABLE_P DISCARD DISTINCT DISTRIBUTE DISTRIBUTION DO DOCUMENT_P DOMAIN_P DOUBLE_P
@ -881,7 +881,7 @@ static void setDelimiterName(core_yyscan_t yyscanner, char*input, VariableSetStm
GENERATED GLOBAL GRANT GRANTED GREATEST GROUP_P GROUPING_P GROUPPARENT
HANDLER HAVING HDFSDIRECTORY HEADER_P HOLD HOUR_P
HANDLER HAVING HDFSDIRECTORY HEADER_P HOLD HOUR_P HOUR_MINUTE_P HOUR_SECOND_P
IDENTIFIED IDENTITY_P IF_P IGNORE IGNORE_EXTRA_DATA ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IN_P INCLUDE
INCLUDING INCREMENT INCREMENTAL INDEX INDEXES INFILE INHERIT INHERITS INITIAL_P INITIALLY INITRANS INLINE_P
@ -896,7 +896,7 @@ static void setDelimiterName(core_yyscan_t yyscanner, char*input, VariableSetStm
LABEL LANGUAGE LARGE_P LAST_P LC_COLLATE_P LC_CTYPE_P LEADING LEAKPROOF LINES
LEAST LESS LEFT LEVEL LIKE LIMIT LIST LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP
LOCATION LOCK_P LOCKED LOG_P LOGGING LOGIN_ANY LOGIN_FAILURE LOGIN_SUCCESS LOGOUT LOOP
MAPPING MASKING MASTER MATCH MATERIALIZED MATCHED MAXEXTENTS MAXSIZE MAXTRANS MAXVALUE MERGE MINUS_P MINUTE_P MINVALUE MINEXTENTS MODE MODIFY_P MONTH_P MOVE MOVEMENT
MAPPING MASKING MASTER MATCH MATERIALIZED MATCHED MAXEXTENTS MAXSIZE MAXTRANS MAXVALUE MERGE MINUS_P MINUTE_P MINUTE_SECOND_P MINVALUE MINEXTENTS MODE MODIFY_P MONTH_P MOVE MOVEMENT
MODEL // DB4AI
NAME_P NAMES NATIONAL NATURAL NCHAR NEXT NO NOCOMPRESS NOCYCLE NODE NOLOGGING NOMAXVALUE NOMINVALUE NONE
NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLCOLS NULLIF NULLS_P NUMBER_P NUMERIC NUMSTR NVARCHAR NVARCHAR2 NVL
@ -942,7 +942,7 @@ static void setDelimiterName(core_yyscan_t yyscanner, char*input, VariableSetStm
XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLEXISTS XMLFOREST XMLPARSE
XMLPI XMLROOT XMLSERIALIZE
YEAR_P YES_P
YEAR_P YEAR_MONTH_P YES_P
ZONE
@ -15086,8 +15086,12 @@ user:
ColId { $$ = $1; }
;
event_interval_unit: opt_interval {$$ = $1;}
| opt_evtime_unit {$$ = $1;}
;
every_interval:
Iconst opt_interval
Iconst event_interval_unit
{
TypeName *t;
t = SystemTypeName("interval");
@ -15095,7 +15099,7 @@ every_interval:
Node *num = makeIntConst($1, @1);
$$ = makeTypeCast(num, t, -1);
}
| Sconst opt_interval
| Sconst event_interval_unit
{
TypeName *t;
t = SystemTypeName("interval");
@ -15103,7 +15107,7 @@ every_interval:
Node *num = makeStringConst($1, @1);
$$ = makeTypeCast(num, t, -1);
}
| FCONST opt_interval
| FCONST event_interval_unit
{
TypeName *t;
t = SystemTypeName("interval");
@ -25211,6 +25215,47 @@ opt_timezone:
| /*EMPTY*/ { $$ = FALSE; }
;
opt_evtime_unit:
DAY_HOUR_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(DAY) |
INTERVAL_MASK(HOUR), @1));
}
| DAY_MINUTE_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(DAY) |
INTERVAL_MASK(HOUR) |
INTERVAL_MASK(MINUTE), @1));
}
| DAY_SECOND_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(DAY) |
INTERVAL_MASK(HOUR) |
INTERVAL_MASK(MINUTE) |
INTERVAL_MASK(SECOND), @1));
}
| HOUR_MINUTE_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(HOUR) |
INTERVAL_MASK(MINUTE), @1));
}
| HOUR_SECOND_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(HOUR) |
INTERVAL_MASK(MINUTE) |
INTERVAL_MASK(SECOND), @1));
}
| MINUTE_SECOND_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(MINUTE) |
INTERVAL_MASK(SECOND), @1));
}
| YEAR_MONTH_P
{
$$ = list_make1(makeIntConst(INTERVAL_MASK(YEAR) |
INTERVAL_MASK(MONTH), @1));
}
opt_interval:
YEAR_P
{ $$ = list_make1(makeIntConst(INTERVAL_MASK(YEAR), @1)); }
@ -28540,7 +28585,10 @@ unreserved_keyword:
| DATANODES
| DATATYPE_CL
| DATE_FORMAT_P
| DAY_HOUR_P
| DAY_MINUTE_P
| DAY_P
| DAY_SECOND_P
| DBCOMPATIBILITY_P
| DEALLOCATE
| DECLARE
@ -28621,7 +28669,9 @@ unreserved_keyword:
| HANDLER
| HEADER_P
| HOLD
| HOUR_MINUTE_P
| HOUR_P
| HOUR_SECOND_P
| IDENTIFIED
| IDENTITY_P
| IF_P
@ -28691,6 +28741,7 @@ unreserved_keyword:
| MERGE
| MINEXTENTS
| MINUTE_P
| MINUTE_SECOND_P
| MINVALUE
| MODE
| MODEL // DB4AI
@ -28918,6 +28969,7 @@ unreserved_keyword:
| WRAPPER
| WRITE
| XML_P
| YEAR_MONTH_P
| YEAR_P
| YES_P
| ZONE

View File

@ -525,7 +525,7 @@ extern THR_LOCAL bool stmt_contains_operator_plus;
CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR CYCLE
SHRINK USE_P
DATA_P DATABASE DATAFILE DATANODE DATANODES DATATYPE_CL DATE_P DATE_FORMAT_P DAY_P DBCOMPATIBILITY_P DEALLOCATE DEC DECIMAL_P DECLARE DECODE DEFAULT DEFAULTS
DATA_P DATABASE DATAFILE DATANODE DATANODES DATATYPE_CL DATE_P DATE_FORMAT_P DAY_P DAY_HOUR_P DAY_MINUTE_P DAY_SECOND_P DBCOMPATIBILITY_P DEALLOCATE DEC DECIMAL_P DECLARE DECODE DEFAULT DEFAULTS
DEFERRABLE DEFERRED DEFINER DELETE_P DELIMITER DELIMITERS DELTA DELTAMERGE DESC DETERMINISTIC
/* PGXC_BEGIN */
DICTIONARY DIRECT DIRECTORY DISABLE_P DISCARD DISTINCT DISTRIBUTE DISTRIBUTION DO DOCUMENT_P DOMAIN_P DOUBLE_P
@ -543,7 +543,7 @@ extern THR_LOCAL bool stmt_contains_operator_plus;
GENERATED GLOBAL GRANT GRANTED GREATEST GROUP_P GROUPING_P GROUPPARENT
HANDLER HAVING HDFSDIRECTORY HEADER_P HOLD HOUR_P
HANDLER HAVING HDFSDIRECTORY HEADER_P HOLD HOUR_P HOUR_MINUTE_P HOUR_SECOND_P
IDENTIFIED IDENTITY_P IF_P IGNORE IGNORE_EXTRA_DATA ILIKE IMMEDIATE IMMUTABLE IMPLICIT_P IN_P
INCLUDE INCLUDING INCREMENT INCREMENTAL INDEX INDEXES INFILE INHERIT INHERITS INITIAL_P INITIALLY INITRANS INLINE_P
@ -557,7 +557,7 @@ extern THR_LOCAL bool stmt_contains_operator_plus;
LABEL LANGUAGE LARGE_P LAST_P LC_COLLATE_P LC_CTYPE_P LEADING LEAKPROOF LINES
LEAST LESS LEFT LEVEL LIST LIKE LIMIT LISTEN LOAD LOCAL LOCALTIME LOCALTIMESTAMP
LOCATION LOCK_P LOCKED LOG_P LOGGING LOGIN_ANY LOGIN_SUCCESS LOGIN_FAILURE LOGOUT LOOP
MAPPING MASKING MASTER MASTR MATCH MATERIALIZED MATCHED MAXEXTENTS MAXSIZE MAXTRANS MAXVALUE MERGE MINUS_P MINUTE_P MINVALUE MINEXTENTS MODE MODIFY_P MONTH_P MOVE MOVEMENT
MAPPING MASKING MASTER MASTR MATCH MATERIALIZED MATCHED MAXEXTENTS MAXSIZE MAXTRANS MAXVALUE MERGE MINUS_P MINUTE_P MINUTE_SECOND_P MINVALUE MINEXTENTS MODE MODIFY_P MONTH_P MOVE MOVEMENT
MODEL // DB4AI
NAME_P NAMES NATIONAL NATURAL NCHAR NEXT NLSSORT NO NOCOMPRESS NOCYCLE NODE NOLOGGING NOMAXVALUE NOMINVALUE NONE
NOT NOTHING NOTIFY NOTNULL NOWAIT NULL_P NULLCOLS NULLIF NULLS_P NUMBER_P NUMERIC NUMSTR NVARCHAR NVARCHAR2 NVL
@ -603,7 +603,7 @@ extern THR_LOCAL bool stmt_contains_operator_plus;
XML_P XMLATTRIBUTES XMLCONCAT XMLELEMENT XMLEXISTS XMLFOREST XMLPARSE
XMLPI XMLROOT XMLSERIALIZE
YEAR_P YES_P
YEAR_P YEAR_MONTH_P YES_P
ZONE
@ -11687,8 +11687,11 @@ unreserved_keyword:
| DATANODE
| DATANODES
| DATATYPE_CL
| DAY_P
| DATE_FORMAT_P
| DAY_HOUR_P
| DAY_MINUTE_P
| DAY_P
| DAY_SECOND_P
| DBCOMPATIBILITY_P
| DEALLOCATE
| DECLARE
@ -11761,7 +11764,9 @@ unreserved_keyword:
| HANDLER
| HEADER_P
| HOLD
| HOUR_MINUTE_P
| HOUR_P
| HOUR_SECOND_P
| IDENTIFIED
| IDENTITY_P
| IF_P
@ -11830,6 +11835,7 @@ unreserved_keyword:
| MERGE
| MINEXTENTS
| MINUTE_P
| MINUTE_SECOND_P
| MINVALUE
| MODE
| MODEL // DB4AI
@ -12039,6 +12045,7 @@ unreserved_keyword:
| WRAPPER
| WRITE
| XML_P
| YEAR_MONTH_P
| YEAR_P
| YES_P
| ZONE

View File

@ -171,6 +171,9 @@ PG_KEYWORD("datatype_cl", DATATYPE_CL, UNRESERVED_KEYWORD)
PG_KEYWORD("date", DATE_P, COL_NAME_KEYWORD)
PG_KEYWORD("date_format", DATE_FORMAT_P, UNRESERVED_KEYWORD)
PG_KEYWORD("day", DAY_P, UNRESERVED_KEYWORD)
PG_KEYWORD("day_hour", DAY_HOUR_P, UNRESERVED_KEYWORD)
PG_KEYWORD("day_minute", DAY_MINUTE_P, UNRESERVED_KEYWORD)
PG_KEYWORD("day_second", DAY_SECOND_P, UNRESERVED_KEYWORD)
PG_KEYWORD("dbcompatibility", DBCOMPATIBILITY_P, UNRESERVED_KEYWORD)
PG_KEYWORD("deallocate", DEALLOCATE, UNRESERVED_KEYWORD)
PG_KEYWORD("dec", DEC, COL_NAME_KEYWORD)
@ -284,6 +287,8 @@ PG_KEYWORD("hdfsdirectory", HDFSDIRECTORY, TYPE_FUNC_NAME_KEYWORD)
PG_KEYWORD("header", HEADER_P, UNRESERVED_KEYWORD)
PG_KEYWORD("hold", HOLD, UNRESERVED_KEYWORD)
PG_KEYWORD("hour", HOUR_P, UNRESERVED_KEYWORD)
PG_KEYWORD("hour_minute", HOUR_MINUTE_P, UNRESERVED_KEYWORD)
PG_KEYWORD("hour_second", HOUR_SECOND_P, UNRESERVED_KEYWORD)
/* new key-word for ALTER ROLE */
PG_KEYWORD("identified", IDENTIFIED, UNRESERVED_KEYWORD)
PG_KEYWORD("identity", IDENTITY_P, UNRESERVED_KEYWORD)
@ -376,6 +381,7 @@ PG_KEYWORD("merge", MERGE, UNRESERVED_KEYWORD)
PG_KEYWORD("minextents", MINEXTENTS, UNRESERVED_KEYWORD)
PG_KEYWORD("minus", MINUS_P, RESERVED_KEYWORD)
PG_KEYWORD("minute", MINUTE_P, UNRESERVED_KEYWORD)
PG_KEYWORD("minute_second", MINUTE_SECOND_P, UNRESERVED_KEYWORD)
PG_KEYWORD("minvalue", MINVALUE, UNRESERVED_KEYWORD)
PG_KEYWORD("mode", MODE, UNRESERVED_KEYWORD)
PG_KEYWORD("model", MODEL, UNRESERVED_KEYWORD)
@ -693,5 +699,6 @@ PG_KEYWORD("xmlpi", XMLPI, COL_NAME_KEYWORD)
PG_KEYWORD("xmlroot", XMLROOT, COL_NAME_KEYWORD)
PG_KEYWORD("xmlserialize", XMLSERIALIZE, COL_NAME_KEYWORD)
PG_KEYWORD("year", YEAR_P, UNRESERVED_KEYWORD)
PG_KEYWORD("year_month", YEAR_MONTH_P, UNRESERVED_KEYWORD)
PG_KEYWORD("yes", YES_P, UNRESERVED_KEYWORD)
PG_KEYWORD("zone", ZONE, UNRESERVED_KEYWORD)

View File

@ -413,6 +413,65 @@ select job_name, nspname from pg_job where dbname='event_b';
drop event if exists evtest;
NOTICE: event "evtest" is not exists, skipping
--test time unit
drop event if exists ev_unit;
NOTICE: event "ev_unit" is not exists, skipping
create event ev_unit on schedule every '1-1' YEAR_MONTH do select 1;
select interval from pg_job where job_name='ev_unit';
interval
-------------------------------
interval '1-1' year to month
(1 row)
drop event if exists ev_unit;
create event ev_unit on schedule every '-1 10' DAY_HOUR do select 1;
select interval from pg_job where job_name='ev_unit';
interval
-------------------------------
interval '-1 10' day to hour
(1 row)
drop event if exists ev_unit;
create event ev_unit on schedule every '1 1:00' DAY_MINUTE do select 1;
select interval from pg_job where job_name='ev_unit';
interval
----------------------------------
interval '1 1:00' day to minute
(1 row)
drop event if exists ev_unit;
create event ev_unit on schedule every '1 1:1:1' DAY_SECOND do select 1;
select interval from pg_job where job_name='ev_unit';
interval
-----------------------------------
interval '1 1:1:1' day to second
(1 row)
drop event if exists ev_unit;
create event ev_unit on schedule every '1:1:1' HOUR_MINUTE do select 1;
select interval from pg_job where job_name='ev_unit';
interval
----------------------------------
interval '1:1:1' hour to minute
(1 row)
drop event if exists ev_unit;
create event ev_unit on schedule every '1:1' MINUTE_SECOND do select 1;
select interval from pg_job where job_name='ev_unit';
interval
----------------------------------
interval '1:1' minute to second
(1 row)
drop event if exists ev_unit;
create event ev_unit on schedule every '01:12:30' HOUR_SECOND do select 1;
select interval from pg_job where job_name='ev_unit';
interval
-------------------------------------
interval '01:12:30' hour to second
(1 row)
drop event if exists ev_unit;
--if not exists
create event e on schedule every 1 month disable do select 1;
select pg_sleep(0.2);
@ -907,7 +966,7 @@ schedule_expr: {
interval_expr:
quantity {YEAR | MONTH | DAY | HOUR | MINUTE |
SECOND | YEAR_MONTH | DAY_HOUR | DAY_MINUTE |
DAY TO SECOND | HOUR TO MINUTE | HOUR TO SECOND | MINUTE TO SECOND}
DAY_SECOND | HOUR_MINUTE | HOUR_SECOND | MINUTE_SECOND}
\h ALTER EVENT
Command: ALTER EVENT

View File

@ -119,6 +119,29 @@ create event IF NOT EXISTS evtest on schedule every 1 minute starts sysdate + in
select pg_sleep(0.2);
select job_name, nspname from pg_job where dbname='event_b';
drop event if exists evtest;
--test time unit
drop event if exists ev_unit;
create event ev_unit on schedule every '1-1' YEAR_MONTH do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
create event ev_unit on schedule every '-1 10' DAY_HOUR do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
create event ev_unit on schedule every '1 1:00' DAY_MINUTE do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
create event ev_unit on schedule every '1 1:1:1' DAY_SECOND do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
create event ev_unit on schedule every '1:1:1' HOUR_MINUTE do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
create event ev_unit on schedule every '1:1' MINUTE_SECOND do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
create event ev_unit on schedule every '01:12:30' HOUR_SECOND do select 1;
select interval from pg_job where job_name='ev_unit';
drop event if exists ev_unit;
--if not exists