Fossil SCM
Correction and performance enhancement to ymd=. Add support for localtime to ym=.
Commit
376170abff9757fad848f3d38e4d9893b8ce74de7bd90cac7316974b7dd51088
Parent
36eb0b4d2864bcf…
1 file changed
+35
-26
+35
-26
| --- src/timeline.c | ||
| +++ src/timeline.c | ||
| @@ -2377,41 +2377,47 @@ | ||
| 2377 | 2377 | blob_append_sql(&cond, " AND event.objid IN (SELECT rid FROM bilog)\n"); |
| 2378 | 2378 | } |
| 2379 | 2379 | if( zYearMonth ){ |
| 2380 | 2380 | char *zNext; |
| 2381 | 2381 | int bZulu = 0; |
| 2382 | + const char *zTZMod; | |
| 2382 | 2383 | zYearMonth = timeline_expand_datetime(zYearMonth, &bZulu); |
| 2383 | 2384 | if( strlen(zYearMonth)>7 ){ |
| 2384 | 2385 | zYearMonth = mprintf("%.7s", zYearMonth); |
| 2385 | 2386 | } |
| 2386 | 2387 | if( db_int(0,"SELECT julianday('%q-01') IS NULL", zYearMonth) ){ |
| 2387 | 2388 | zYearMonth = db_text(0, "SELECT strftime('%%Y-%%m','now');"); |
| 2388 | 2389 | } |
| 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); | |
| 2413 | 2419 | nEntry = -1; |
| 2414 | 2420 | } |
| 2415 | 2421 | else if( zYearWeek ){ |
| 2416 | 2422 | char *z, *zNext; |
| 2417 | 2423 | int bZulu = 0; |
| @@ -2467,11 +2473,11 @@ | ||
| 2467 | 2473 | zDay = timeline_expand_datetime(zDay, &bZulu); |
| 2468 | 2474 | zDay = db_text(0, "SELECT date(%Q)", zDay); |
| 2469 | 2475 | if( zDay==0 || zDay[0]==0 ){ |
| 2470 | 2476 | zDay = db_text(0, "SELECT date('now')"); |
| 2471 | 2477 | } |
| 2472 | - zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "localtime" : "utc"; | |
| 2478 | + zTZMod = (bZulu==0 && fossil_ui_localtime()) ? "utc" : "+00:00"; | |
| 2473 | 2479 | if( db_int(0, |
| 2474 | 2480 | "SELECT EXISTS (SELECT 1 FROM event CROSS JOIN blob" |
| 2475 | 2481 | " WHERE blob.rid=event.objid" |
| 2476 | 2482 | " AND mtime>=julianday(%Q,'+1 day',%Q)%s)", |
| 2477 | 2483 | zDay, zTZMod, blob_sql_text(&cond)) |
| @@ -2492,11 +2498,14 @@ | ||
| 2492 | 2498 | &"Z"[!bZulu], zDay); |
| 2493 | 2499 | zOlderButton = fossil_strdup(url_render(&url, "ymd", zNext, 0, 0)); |
| 2494 | 2500 | zOlderButtonLabel = "Previous day"; |
| 2495 | 2501 | fossil_free(zNext); |
| 2496 | 2502 | } |
| 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); | |
| 2498 | 2507 | nEntry = -1; |
| 2499 | 2508 | if( fossil_ui_localtime() && bZulu ){ |
| 2500 | 2509 | zDay = mprintf("%zZ", zDay); /* Add Z suffix to day for the title */ |
| 2501 | 2510 | } |
| 2502 | 2511 | } |
| 2503 | 2512 |
| --- 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 |