Fossil SCM

Correction and performance enhancement to ymd=. Add support for localtime to ym=.

drh 2024-12-26 14:01 trunk
Commit 376170abff9757fad848f3d38e4d9893b8ce74de7bd90cac7316974b7dd51088
1 file changed +35 -26
+35 -26
--- src/timeline.c
+++ src/timeline.c
@@ -2377,41 +2377,47 @@
23772377
blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog)\n");
23782378
}
23792379
if( zYearMonth ){
23802380
char *zNext;
23812381
int bZulu = 0;
2382
+ const char *zTZMod;
23822383
zYearMonth = timeline_expand_datetime(zYearMonth, &bZulu);
23832384
if( strlen(zYearMonth)>7 ){
23842385
zYearMonth = mprintf("%.7s", zYearMonth);
23852386
}
23862387
if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){
23872388
zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');");
23882389
}
2389
- zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','+1 month');",
2390
- zYearMonth);
2391
- if( db_int(0,
2392
- "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2393
- " WHERE blob.rid=event.objid AND mtime>=julianday('%q-01')%s)",
2394
- zNext, blob_sql_text(&cond))
2395
- ){
2396
- zNewerButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2397
- zNewerButtonLabel = "Following month";
2398
- }
2399
- fossil_free(zNext);
2400
- zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','-1 month');",
2401
- zYearMonth);
2402
- if( db_int(0,
2403
- "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2404
- " WHERE blob.rid=event.objid AND mtime<julianday('%q-01')%s)",
2405
- zYearMonth, blob_sql_text(&cond))
2406
- ){
2407
- zOlderButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2408
- zOlderButtonLabel = "Previous month";
2409
- }
2410
- fossil_free(zNext);
2411
- blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%m',event.mtime) ",
2412
- zYearMonth);
2390
+ zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
2391
+ if( db_int(0,
2392
+ "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2393
+ " WHERE blob.rid=event.objid"
2394
+ " AND mtime>=julianday('%q-01',%Q)%s)",
2395
+ zYearMonth, zTZMod, blob_sql_text(&cond))
2396
+ ){
2397
+ zNext = db_text(0, "SELECT strftime('%%Y%%m%q','%q-01','+1 month');",
2398
+ &"Z"[!bZulu], zYearMonth);
2399
+ zNewerButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2400
+ zNewerButtonLabel = "Following month";
2401
+ fossil_free(zNext);
2402
+ }
2403
+ if( db_int(0,
2404
+ "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2405
+ " WHERE blob.rid=event.objid"
2406
+ " AND mtime<julianday('%q-01',%Q)%s)",
2407
+ zYearMonth, zTZMod, blob_sql_text(&cond))
2408
+ ){
2409
+ zNext = db_text(0, "SELECT strftime('%%Y%%m%q','%q-01','-1 month');",
2410
+ &"Z"[!bZulu], zYearMonth);
2411
+ zOlderButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2412
+ zOlderButtonLabel = "Previous month";
2413
+ fossil_free(zNext);
2414
+ }
2415
+ blob_append_sql(&cond,
2416
+ " AND event.mtime>=julianday('%q-01',%Q)"
2417
+ " AND event.mtime<julianday('%q-01',%Q,'+1 month')\n",
2418
+ zYearMonth, zTZMod, zYearMonth, zTZMod);
24132419
nEntry = -1;
24142420
}
24152421
else if( zYearWeek ){
24162422
char *z, *zNext;
24172423
int bZulu = 0;
@@ -2467,11 +2473,11 @@
24672473
zDay = timeline_expand_datetime(zDay, &bZulu);
24682474
zDay = db_text(0, "SELECT date(%Q)", zDay);
24692475
if( zDay==0 || zDay[0]==0 ){
24702476
zDay = db_text(0, "SELECT date('now')");
24712477
}
2472
- zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "localtime" : "utc";
2478
+ zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
24732479
if( db_int(0,
24742480
"SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
24752481
" WHERE blob.rid=event.objid"
24762482
" AND mtime>=julianday(%Q,'+1 day',%Q)%s)",
24772483
zDay, zTZMod, blob_sql_text(&cond))
@@ -2492,11 +2498,14 @@
24922498
&"Z"[!bZulu], zDay);
24932499
zOlderButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0));
24942500
zOlderButtonLabel = "Previous day";
24952501
fossil_free(zNext);
24962502
}
2497
- blob_append_sql(&cond, " AND %Q=date(event.mtime,%Q) ", zDay, zTZMod);
2503
+ blob_append_sql(&cond,
2504
+ " AND event.mtime>=julianday(%Q,%Q)"
2505
+ " AND event.mtime<julianday(%Q,%Q,'+1 day')\n",
2506
+ zDay, zTZMod, zDay, zTZMod);
24982507
nEntry = -1;
24992508
if( fossil_ui_localtime() && bZulu ){
25002509
zDay = mprintf("%zZ", zDay); /* Add Z suffix to day for the title */
25012510
}
25022511
}
25032512
--- src/timeline.c
+++ src/timeline.c
@@ -2377,41 +2377,47 @@
2377 blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog)\n");
2378 }
2379 if( zYearMonth ){
2380 char *zNext;
2381 int bZulu = 0;
 
2382 zYearMonth = timeline_expand_datetime(zYearMonth, &bZulu);
2383 if( strlen(zYearMonth)>7 ){
2384 zYearMonth = mprintf("%.7s", zYearMonth);
2385 }
2386 if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){
2387 zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');");
2388 }
2389 zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','+1 month');",
2390 zYearMonth);
2391 if( db_int(0,
2392 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2393 " WHERE blob.rid=event.objid AND mtime>=julianday('%q-01')%s)",
2394 zNext, blob_sql_text(&cond))
2395 ){
2396 zNewerButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2397 zNewerButtonLabel = "Following month";
2398 }
2399 fossil_free(zNext);
2400 zNext = db_text(0, "SELECT strftime('%%Y-%%m','%q-01','-1 month');",
2401 zYearMonth);
2402 if( db_int(0,
2403 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2404 " WHERE blob.rid=event.objid AND mtime<julianday('%q-01')%s)",
2405 zYearMonth, blob_sql_text(&cond))
2406 ){
2407 zOlderButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2408 zOlderButtonLabel = "Previous month";
2409 }
2410 fossil_free(zNext);
2411 blob_append_sql(&cond, " AND %Q=strftime('%%Y-%%m',event.mtime) ",
2412 zYearMonth);
 
 
 
 
 
2413 nEntry = -1;
2414 }
2415 else if( zYearWeek ){
2416 char *z, *zNext;
2417 int bZulu = 0;
@@ -2467,11 +2473,11 @@
2467 zDay = timeline_expand_datetime(zDay, &bZulu);
2468 zDay = db_text(0, "SELECT date(%Q)", zDay);
2469 if( zDay==0 || zDay[0]==0 ){
2470 zDay = db_text(0, "SELECT date('now')");
2471 }
2472 zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "localtime" : "utc";
2473 if( db_int(0,
2474 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2475 " WHERE blob.rid=event.objid"
2476 " AND mtime>=julianday(%Q,'+1 day',%Q)%s)",
2477 zDay, zTZMod, blob_sql_text(&cond))
@@ -2492,11 +2498,14 @@
2492 &"Z"[!bZulu], zDay);
2493 zOlderButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0));
2494 zOlderButtonLabel = "Previous day";
2495 fossil_free(zNext);
2496 }
2497 blob_append_sql(&cond, " AND %Q=date(event.mtime,%Q) ", zDay, zTZMod);
 
 
 
2498 nEntry = -1;
2499 if( fossil_ui_localtime() && bZulu ){
2500 zDay = mprintf("%zZ", zDay); /* Add Z suffix to day for the title */
2501 }
2502 }
2503
--- src/timeline.c
+++ src/timeline.c
@@ -2377,41 +2377,47 @@
2377 blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog)\n");
2378 }
2379 if( zYearMonth ){
2380 char *zNext;
2381 int bZulu = 0;
2382 const char *zTZMod;
2383 zYearMonth = timeline_expand_datetime(zYearMonth, &bZulu);
2384 if( strlen(zYearMonth)>7 ){
2385 zYearMonth = mprintf("%.7s", zYearMonth);
2386 }
2387 if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){
2388 zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');");
2389 }
2390 zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
2391 if( db_int(0,
2392 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2393 " WHERE blob.rid=event.objid"
2394 " AND mtime>=julianday('%q-01',%Q)%s)",
2395 zYearMonth, zTZMod, blob_sql_text(&cond))
2396 ){
2397 zNext = db_text(0, "SELECT strftime('%%Y%%m%q','%q-01','+1 month');",
2398 &"Z"[!bZulu], zYearMonth);
2399 zNewerButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2400 zNewerButtonLabel = "Following month";
2401 fossil_free(zNext);
2402 }
2403 if( db_int(0,
2404 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2405 " WHERE blob.rid=event.objid"
2406 " AND mtime<julianday('%q-01',%Q)%s)",
2407 zYearMonth, zTZMod, blob_sql_text(&cond))
2408 ){
2409 zNext = db_text(0, "SELECT strftime('%%Y%%m%q','%q-01','-1 month');",
2410 &"Z"[!bZulu], zYearMonth);
2411 zOlderButton = fossil_strdup(url_render(&url, "ym", zNext, 0, 0));
2412 zOlderButtonLabel = "Previous month";
2413 fossil_free(zNext);
2414 }
2415 blob_append_sql(&cond,
2416 " AND event.mtime>=julianday('%q-01',%Q)"
2417 " AND event.mtime<julianday('%q-01',%Q,'+1 month')\n",
2418 zYearMonth, zTZMod, zYearMonth, zTZMod);
2419 nEntry = -1;
2420 }
2421 else if( zYearWeek ){
2422 char *z, *zNext;
2423 int bZulu = 0;
@@ -2467,11 +2473,11 @@
2473 zDay = timeline_expand_datetime(zDay, &bZulu);
2474 zDay = db_text(0, "SELECT date(%Q)", zDay);
2475 if( zDay==0 || zDay[0]==0 ){
2476 zDay = db_text(0, "SELECT date('now')");
2477 }
2478 zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00";
2479 if( db_int(0,
2480 "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob"
2481 " WHERE blob.rid=event.objid"
2482 " AND mtime>=julianday(%Q,'+1 day',%Q)%s)",
2483 zDay, zTZMod, blob_sql_text(&cond))
@@ -2492,11 +2498,14 @@
2498 &"Z"[!bZulu], zDay);
2499 zOlderButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0));
2500 zOlderButtonLabel = "Previous day";
2501 fossil_free(zNext);
2502 }
2503 blob_append_sql(&cond,
2504 " AND event.mtime>=julianday(%Q,%Q)"
2505 " AND event.mtime<julianday(%Q,%Q,'+1 day')\n",
2506 zDay, zTZMod, zDay, zTZMod);
2507 nEntry = -1;
2508 if( fossil_ui_localtime() && bZulu ){
2509 zDay = mprintf("%zZ", zDay); /* Add Z suffix to day for the title */
2510 }
2511 }
2512

Keyboard Shortcuts

Open search /
Next entry (timeline) j
Previous entry (timeline) k
Open focused entry Enter
Show this help ?
Toggle theme Top nav button