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

Reply via email to