dow.diff
text/x-diff
Filename: dow.diff
Type: text/x-diff
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/utils/adt/formatting.c | 0 | 0 |
| src/backend/utils/adt/timestamp.c | 0 | 0 |
| src/include/utils/timestamp.h | 0 | 0 |
diff --git a/src/backend/utils/adt/formatting.c b/src/backend/utils/adt/formatting.c
new file mode 100644
index 25af8a2..2aa6df1
*** a/src/backend/utils/adt/formatting.c
--- b/src/backend/utils/adt/formatting.c
*************** typedef struct
*** 412,418 ****
mi,
ss,
ssss,
! d,
dd,
ddd,
mm,
--- 412,418 ----
mi,
ss,
ssss,
! d, /* stored as 1-7, Sunday = 1, 0 means missing */
dd,
ddd,
mm,
*************** DCH_from_char(FormatNode *node, char *in
*** 2897,2902 ****
--- 2897,2903 ----
from_char_seq_search(&value, &s, days, ONE_UPPER,
MAX_DAY_LEN, n);
from_char_set_int(&out->d, value, n);
+ out->d++;
break;
case DCH_DY:
case DCH_Dy:
*************** DCH_from_char(FormatNode *node, char *in
*** 2904,2909 ****
--- 2905,2911 ----
from_char_seq_search(&value, &s, days, ONE_UPPER,
MAX_DY_LEN, n);
from_char_set_int(&out->d, value, n);
+ out->d++;
break;
case DCH_DDD:
from_char_parse_int(&out->ddd, &s, n);
*************** DCH_from_char(FormatNode *node, char *in
*** 2919,2929 ****
break;
case DCH_D:
from_char_parse_int(&out->d, &s, n);
- out->d--;
s += SKIP_THth(n->suffix);
break;
case DCH_ID:
from_char_parse_int_len(&out->d, &s, 1, n);
s += SKIP_THth(n->suffix);
break;
case DCH_WW:
--- 2921,2933 ----
break;
case DCH_D:
from_char_parse_int(&out->d, &s, n);
s += SKIP_THth(n->suffix);
break;
case DCH_ID:
from_char_parse_int_len(&out->d, &s, 1, n);
+ /* Shift numbering to match Gregorian where Sunday = 1 */
+ if (++out->d > 7)
+ out->d = 1;
s += SKIP_THth(n->suffix);
break;
case DCH_WW:
*************** do_to_timestamp(text *date_txt, text *fm
*** 3534,3540 ****
if (tmfc.w)
tmfc.dd = (tmfc.w - 1) * 7 + 1;
if (tmfc.d)
! tm->tm_wday = tmfc.d;
if (tmfc.dd)
tm->tm_mday = tmfc.dd;
if (tmfc.ddd)
--- 3538,3544 ----
if (tmfc.w)
tmfc.dd = (tmfc.w - 1) * 7 + 1;
if (tmfc.d)
! tm->tm_wday = tmfc.d - 1; /* convert to native numbering */
if (tmfc.dd)
tm->tm_mday = tmfc.dd;
if (tmfc.ddd)
diff --git a/src/backend/utils/adt/timestamp.c b/src/backend/utils/adt/timestamp.c
new file mode 100644
index 2adc178..50ef897
*** a/src/backend/utils/adt/timestamp.c
--- b/src/backend/utils/adt/timestamp.c
*************** isoweek2date(int woy, int *year, int *mo
*** 3775,3792 ****
/* isoweekdate2date()
*
! * Convert an ISO 8601 week date (ISO year, ISO week and day of week) into a Gregorian date.
* Populates year, mon, and mday with the correct Gregorian values.
* year must be passed in as the ISO year.
*/
void
! isoweekdate2date(int isoweek, int isowday, int *year, int *mon, int *mday)
{
int jday;
jday = isoweek2j(*year, isoweek);
! jday += isowday - 1;
!
j2date(jday, year, mon, mday);
}
--- 3775,3796 ----
/* isoweekdate2date()
*
! * Convert an ISO 8601 week date (ISO year, ISO week) into a Gregorian date.
! * Gregorian day of week sent so weekday strings can be supplied.
* Populates year, mon, and mday with the correct Gregorian values.
* year must be passed in as the ISO year.
*/
void
! isoweekdate2date(int isoweek, int wday, int *year, int *mon, int *mday)
{
int jday;
jday = isoweek2j(*year, isoweek);
! /* convert Gregorian week start (Sunday=1) to ISO week start (Monday=1) */
! if (wday > 1)
! jday += wday - 2;
! else
! jday += 6;
j2date(jday, year, mon, mday);
}
diff --git a/src/include/utils/timestamp.h b/src/include/utils/timestamp.h
new file mode 100644
index 665e969..e7cdb41
*** a/src/include/utils/timestamp.h
--- b/src/include/utils/timestamp.h
*************** extern int timestamp_cmp_internal(Timest
*** 236,242 ****
extern int isoweek2j(int year, int week);
extern void isoweek2date(int woy, int *year, int *mon, int *mday);
! extern void isoweekdate2date(int isoweek, int isowday, int *year, int *mon, int *mday);
extern int date2isoweek(int year, int mon, int mday);
extern int date2isoyear(int year, int mon, int mday);
extern int date2isoyearday(int year, int mon, int mday);
--- 236,242 ----
extern int isoweek2j(int year, int week);
extern void isoweek2date(int woy, int *year, int *mon, int *mday);
! extern void isoweekdate2date(int isoweek, int wday, int *year, int *mon, int *mday);
extern int date2isoweek(int year, int mon, int mday);
extern int date2isoyear(int year, int mon, int mday);
extern int date2isoyearday(int year, int mon, int mday);