Changeset: 72d9e1a03075 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=72d9e1a03075
Modified Files:
sql/server/sql_datetime.c
sql/server/sql_datetime.h
sql/server/sql_parser.y
sql/server/sql_scan.c
Branch: mtime
Log Message:
Implemented EXTRACT(DOW FROM x) and EXTRACT(DOY FROM x).
The DOW (day-of-week) is the ISO version where Monday=1 and Sunday=7.
(Note PostgreSQL has dow and isodow where the former has Sunday=0 and
Saturday=6 and the latter Monday=1 and Sunday=7.)
diffs (72 lines):
diff --git a/sql/server/sql_datetime.c b/sql/server/sql_datetime.c
--- a/sql/server/sql_datetime.c
+++ b/sql/server/sql_datetime.c
@@ -295,6 +295,10 @@ datetime_field(itype f)
return "quarter";
case iweek:
return "week";
+ case idow:
+ return "dayofweek";
+ case idoy:
+ return "dayofyear";
}
}
diff --git a/sql/server/sql_datetime.h b/sql/server/sql_datetime.h
--- a/sql/server/sql_datetime.h
+++ b/sql/server/sql_datetime.h
@@ -20,7 +20,9 @@ typedef enum inttype {
imin,
isec,
iquarter,
- iweek
+ iweek,
+ idow,
+ idoy
} itype;
int parse_interval_qualifier(mvc *sql, struct dlist *pers, int *sk, int *ek,
int *sp, int *ep);
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -696,7 +696,7 @@ SQLCODE SQLERROR UNDER WHENEVER
%token ALTER ADD TABLE COLUMN TO UNIQUE VALUES VIEW WHERE WITH
%token<sval> sqlDATE TIME TIMESTAMP INTERVAL
-%token YEAR QUARTER MONTH WEEK DAY HOUR MINUTE SECOND ZONE
+%token YEAR QUARTER DOW DOY MONTH WEEK DAY HOUR MINUTE SECOND ZONE
%token LIMIT OFFSET SAMPLE SEED
%token CASE WHEN THEN ELSE NULLIF COALESCE IF ELSEIF WHILE DO
@@ -4691,6 +4691,10 @@ extract_datetime_field:
datetime_field
| QUARTER { $$ = iquarter; }
| WEEK { $$ = iweek; }
+ | DOW { $$ = idow; }
+ /* | DAY OF WEEK { $$ = idow; } */
+ | DOY { $$ = idoy; }
+ /* | DAY OF YEAR { $$ = idoy; } */
;
start_field:
@@ -5748,6 +5752,8 @@ non_reserved_word:
| SQL_TRACE { $$ = sa_strdup(SA, "trace"); }
| TYPE { $$ = sa_strdup(SA, "type"); }
| WEEK { $$ = sa_strdup(SA, "week"); }
+| DOW { $$ = sa_strdup(SA, "dow"); }
+| DOY { $$ = sa_strdup(SA, "doy"); }
| ZONE { $$ = sa_strdup(SA, "zone"); }
/* SQL/XML non reserved words */
diff --git a/sql/server/sql_scan.c b/sql/server/sql_scan.c
--- a/sql/server/sql_scan.c
+++ b/sql/server/sql_scan.c
@@ -307,6 +307,8 @@ scanner_init_keywords(void)
failed += keywords_insert("QUARTER", QUARTER);
failed += keywords_insert("MONTH", MONTH);
failed += keywords_insert("WEEK", WEEK);
+ failed += keywords_insert("DOW", DOW);
+ failed += keywords_insert("DOY", DOY);
failed += keywords_insert("DAY", DAY);
failed += keywords_insert("HOUR", HOUR);
failed += keywords_insert("MINUTE", MINUTE);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list