]> granicus.if.org Git - postgresql/commitdiff
Initialize day of year value.
authorMichael Meskes <meskes@postgresql.org>
Fri, 19 Jul 2013 06:59:20 +0000 (08:59 +0200)
committerMichael Meskes <meskes@postgresql.org>
Fri, 19 Jul 2013 07:03:45 +0000 (09:03 +0200)
There are cases where the day of year value in struct tm is used, but it never
got calculated. Problem found by Coverity scan.

src/interfaces/ecpg/pgtypeslib/timestamp.c
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stdout
src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc

index 79539c73e1341e5c1244c8fb662500385b4401b6..3770bd2925b2a8b6481787ade3254f7e33ffb8af 100644 (file)
@@ -255,6 +255,8 @@ recalc_t:
                        *tzn = NULL;
        }
 
+       tm->tm_yday = dDate - date2j(tm->tm_year, 1, 1) + 1;
+
        return 0;
 }      /* timestamp2tm() */
 
index 648b648e219cf68c720ed84f630ff2af5256f22c..78f6b3de71e71567d87b8e0a25e6e8ce535f6413 100644 (file)
@@ -147,6 +147,12 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        free(text);
        free(out);
 
+       out = (char*) malloc(48);
+       i = PGTYPEStimestamp_fmt_asc(&ts1, out, 47, "Which is day number %j in %Y.");
+       printf("%s\n", out);
+       free(out);
+
+
        /* rdate_defmt_asc() */
 
        date1 = 0; text = "";
@@ -431,16 +437,16 @@ if (sqlca.sqlcode < 0) sqlprint ( );}
        free(text);
 
        { ECPGtrans(__LINE__, NULL, "rollback");
-#line 359 "dt_test.pgc"
+#line 365 "dt_test.pgc"
 
 if (sqlca.sqlcode < 0) sqlprint ( );}
-#line 359 "dt_test.pgc"
+#line 365 "dt_test.pgc"
 
         { ECPGdisconnect(__LINE__, "CURRENT");
-#line 360 "dt_test.pgc"
+#line 366 "dt_test.pgc"
 
 if (sqlca.sqlcode < 0) sqlprint ( );}
-#line 360 "dt_test.pgc"
+#line 366 "dt_test.pgc"
 
 
        return (0);
index 41a8013f47a2273ccad219d9f9da50d352f656db..c1285f54c37f5802d270b7e75d761d427d79008a 100644 (file)
@@ -42,7 +42,7 @@
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_get_data on line 38: RESULT: 2000-07-12 17:34:29 offset: -1; array: no
 [NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGtrans on line 359: action "rollback"; connection "regress1"
+[NO_PID]: ECPGtrans on line 365: action "rollback"; connection "regress1"
 [NO_PID]: sqlca: code: 0, state: 00000
 [NO_PID]: ecpg_finish: connection regress1 closed
 [NO_PID]: sqlca: code: 0, state: 00000
index a2ff5f7a3b23222a6e1abad0a13aa8dd24cc6f27..823b6e0062352a2f072f86fab86673603c4948ea 100644 (file)
@@ -6,6 +6,7 @@ date seems to get encoded to julian -622
 m: 4, d: 19, y: 1998
 date_day of 2003-12-04 17:34:29 is 4
 Above date in format "(ddd), mmm. dd, yyyy, repeat: (ddd), mmm. dd, yyyy. end" is "(Thu), Dec. 04, 2003, repeat: (Thu), Dec. 04, 2003. end"
+Which is day number 338 in 2003.
 date_defmt_asc1: 1995-12-25
 date_defmt_asc2: 0095-12-25
 date_defmt_asc3: 0095-12-25
index d56ca87e2198df3d5b57cc8a7a1ec5a8d85f8b6d..768cbd5e6f1f3b021c13b6a9c8aa93ca4c7519b7 100644 (file)
@@ -73,6 +73,12 @@ main(void)
        free(text);
        free(out);
 
+       out = (char*) malloc(48);
+       i = PGTYPEStimestamp_fmt_asc(&ts1, out, 47, "Which is day number %j in %Y.");
+       printf("%s\n", out);
+       free(out);
+
+
        /* rdate_defmt_asc() */
 
        date1 = 0; text = "";