Cause the format of BC timestamptz output to be 'datetime zone BC' rather
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 11 Jul 2004 04:57:20 +0000 (04:57 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 11 Jul 2004 04:57:20 +0000 (04:57 +0000)
than 'datetime BC zone', because the former is accepted by the timestamptz
input converter while the latter may not be depending on spacing.  This
is not a loss of compatibility w.r.t. 7.4 and before, because until very
recently there was never a case where we'd output both zone and 'BC'.

src/backend/utils/adt/datetime.c
src/test/regress/expected/horology.out
src/test/regress/expected/timestamptz.out

index 6fdefc536e8777d92ce9c363cc1c8c920c6da173..3ca0da8845d86f8ee61b347c3d3651551e655dfe 100644 (file)
@@ -8,7 +8,7 @@
  *
  *
  * IDENTIFICATION
- *       $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.130 2004/06/03 02:08:04 tgl Exp $
+ *       $PostgreSQL: pgsql/src/backend/utils/adt/datetime.c,v 1.131 2004/07/11 04:57:04 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -3521,19 +3521,18 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                        if (fsec != 0)
                        {
                                sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec);
+                               TrimTrailingZeros(str);
+                       }
 #else
                        if ((fsec != 0) && (tm->tm_year > 0))
                        {
                                sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec);
-#endif
                                TrimTrailingZeros(str);
                        }
+#endif
                        else
                                sprintf((str + strlen(str)), ":%02d", tm->tm_sec);
 
-                       if (tm->tm_year <= 0)
-                               sprintf((str + strlen(str)), " BC");
-
                        /*
                         * tzp == NULL indicates that we don't want *any* time zone
                         * info in the output string. *tzn != NULL indicates that we
@@ -3546,6 +3545,9 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                                min = ((abs(*tzp) / 60) % 60);
                                sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
                        }
+
+                       if (tm->tm_year <= 0)
+                               sprintf((str + strlen(str)), " BC");
                        break;
 
                case USE_SQL_DATES:
@@ -3571,19 +3573,18 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                        if (fsec != 0)
                        {
                                sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec);
+                               TrimTrailingZeros(str);
+                       }
 #else
                        if ((fsec != 0) && (tm->tm_year > 0))
                        {
                                sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec);
-#endif
                                TrimTrailingZeros(str);
                        }
+#endif
                        else
                                sprintf((str + strlen(str)), ":%02d", tm->tm_sec);
 
-                       if (tm->tm_year <= 0)
-                               sprintf((str + strlen(str)), " BC");
-
                        if ((tzp != NULL) && (tm->tm_isdst >= 0))
                        {
                                if (*tzn != NULL)
@@ -3595,6 +3596,9 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                                        sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
                                }
                        }
+
+                       if (tm->tm_year <= 0)
+                               sprintf((str + strlen(str)), " BC");
                        break;
 
                case USE_GERMAN_DATES:
@@ -3617,19 +3621,18 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                        if (fsec != 0)
                        {
                                sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec);
+                               TrimTrailingZeros(str);
+                       }
 #else
                        if ((fsec != 0) && (tm->tm_year > 0))
                        {
                                sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec);
-#endif
                                TrimTrailingZeros(str);
                        }
+#endif
                        else
                                sprintf((str + strlen(str)), ":%02d", tm->tm_sec);
 
-                       if (tm->tm_year <= 0)
-                               sprintf((str + strlen(str)), " BC");
-
                        if ((tzp != NULL) && (tm->tm_isdst >= 0))
                        {
                                if (*tzn != NULL)
@@ -3641,6 +3644,9 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                                        sprintf((str + strlen(str)), ((min != 0) ? "%+03d:%02d" : "%+03d"), hour, min);
                                }
                        }
+
+                       if (tm->tm_year <= 0)
+                               sprintf((str + strlen(str)), " BC");
                        break;
 
                case USE_POSTGRES_DATES:
@@ -3671,20 +3677,20 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                        if (fsec != 0)
                        {
                                sprintf((str + strlen(str)), ":%02d.%06d", tm->tm_sec, fsec);
+                               TrimTrailingZeros(str);
+                       }
 #else
                        if ((fsec != 0) && (tm->tm_year > 0))
                        {
                                sprintf((str + strlen(str)), ":%09.6f", tm->tm_sec + fsec);
-#endif
                                TrimTrailingZeros(str);
                        }
+#endif
                        else
                                sprintf((str + strlen(str)), ":%02d", tm->tm_sec);
 
                        sprintf((str + strlen(str)), " %04d",
                                 ((tm->tm_year > 0) ? tm->tm_year : -(tm->tm_year - 1)));
-                       if (tm->tm_year <= 0)
-                               sprintf((str + strlen(str)), " BC");
 
                        if ((tzp != NULL) && (tm->tm_isdst >= 0))
                        {
@@ -3704,11 +3710,14 @@ EncodeDateTime(struct pg_tm * tm, fsec_t fsec, int *tzp, char **tzn, int style,
                                        sprintf((str + strlen(str)), ((min != 0) ? " %+03d:%02d" : " %+03d"), hour, min);
                                }
                        }
+
+                       if (tm->tm_year <= 0)
+                               sprintf((str + strlen(str)), " BC");
                        break;
        }
 
        return TRUE;
-}      /* EncodeDateTime() */
+}
 
 
 /* EncodeInterval()
index 188b8e7b78ae008dbc180dc10c884e6c0589700e..d35241dab93c6bd61ad44912f9680572207a97bb 100644 (file)
@@ -672,7 +672,7 @@ SELECT '' AS "64", d1 + interval '1 year' AS one_year FROM TIMESTAMPTZ_TBL;
     | Sat Feb 14 17:32:01 1998 PST
     | Sun Feb 15 17:32:01 1998 PST
     | Mon Feb 16 17:32:01 1998 PST
-    | Thu Feb 16 17:32:01 0096 BC PST
+    | Thu Feb 16 17:32:01 0096 PST BC
     | Sun Feb 16 17:32:01 0098 PST
     | Fri Feb 16 17:32:01 0598 PST
     | Wed Feb 16 17:32:01 1098 PST
@@ -741,7 +741,7 @@ SELECT '' AS "64", d1 - interval '1 year' AS one_year FROM TIMESTAMPTZ_TBL;
     | Wed Feb 14 17:32:01 1996 PST
     | Thu Feb 15 17:32:01 1996 PST
     | Fri Feb 16 17:32:01 1996 PST
-    | Mon Feb 16 17:32:01 0098 BC PST
+    | Mon Feb 16 17:32:01 0098 PST BC
     | Thu Feb 16 17:32:01 0096 PST
     | Tue Feb 16 17:32:01 0596 PST
     | Sun Feb 16 17:32:01 1096 PST
index c07604ff724f0e7aa6563443ea52cba51479ba29..20560b6bc874a1a6bd4c6eaeb0802bd8c8378a9c 100644 (file)
@@ -180,7 +180,7 @@ SELECT '' AS "64", d1 FROM TIMESTAMPTZ_TBL;
     | Fri Feb 14 17:32:01 1997 PST
     | Sat Feb 15 17:32:01 1997 PST
     | Sun Feb 16 17:32:01 1997 PST
-    | Tue Feb 16 17:32:01 0097 BC PST
+    | Tue Feb 16 17:32:01 0097 PST BC
     | Sat Feb 16 17:32:01 0097 PST
     | Thu Feb 16 17:32:01 0597 PST
     | Tue Feb 16 17:32:01 1097 PST
@@ -266,7 +266,7 @@ SELECT '' AS "15", d1 FROM TIMESTAMPTZ_TBL
 ----+---------------------------------
     | -infinity
     | Wed Dec 31 16:00:00 1969 PST
-    | Tue Feb 16 17:32:01 0097 BC PST
+    | Tue Feb 16 17:32:01 0097 PST BC
     | Sat Feb 16 17:32:01 0097 PST
     | Thu Feb 16 17:32:01 0597 PST
     | Tue Feb 16 17:32:01 1097 PST
@@ -332,7 +332,7 @@ SELECT '' AS "63", d1 FROM TIMESTAMPTZ_TBL
     | Fri Feb 14 17:32:01 1997 PST
     | Sat Feb 15 17:32:01 1997 PST
     | Sun Feb 16 17:32:01 1997 PST
-    | Tue Feb 16 17:32:01 0097 BC PST
+    | Tue Feb 16 17:32:01 0097 PST BC
     | Sat Feb 16 17:32:01 0097 PST
     | Thu Feb 16 17:32:01 0597 PST
     | Tue Feb 16 17:32:01 1097 PST
@@ -364,7 +364,7 @@ SELECT '' AS "16", d1 FROM TIMESTAMPTZ_TBL
     | -infinity
     | Wed Dec 31 16:00:00 1969 PST
     | Thu Jan 02 00:00:00 1997 PST
-    | Tue Feb 16 17:32:01 0097 BC PST
+    | Tue Feb 16 17:32:01 0097 PST BC
     | Sat Feb 16 17:32:01 0097 PST
     | Thu Feb 16 17:32:01 0597 PST
     | Tue Feb 16 17:32:01 1097 PST