Thread: pgsql/src backend/access/transam/xact.c backen ...

pgsql/src backend/access/transam/xact.c backen ...

From
thomas@postgresql.org
Date:
CVSROOT:    /cvsroot
Module name:    pgsql
Changes by:    thomas@postgresql.org    01/09/28 04:09:14

Modified files:
    src/backend/access/transam: xact.c
    src/backend/parser: gram.y parse_coerce.c parse_expr.c
                        parse_target.c
    src/backend/utils/adt: date.c datetime.c format_type.c
                           formatting.c nabstime.c timestamp.c
    src/include/access: xact.h
    src/include/catalog: catversion.h duplicate_oids pg_aggregate.h
                         pg_amop.h pg_amproc.h pg_opclass.h
                         pg_operator.h pg_proc.h pg_type.h
    src/include/utils: builtins.h date.h datetime.h formatting.h
                       nabstime.h timestamp.h

Log message:
    Measure the current transaction time to milliseconds.
    Define a new function, GetCurrentTransactionStartTimeUsec() to get the time
    to this precision.
    Allow now() and timestamp 'now' to use this higher precision result so
    we now have fractional seconds in this "constant".
    Add timestamp without time zone type.
    Move previous timestamp type to timestamp with time zone.
    Accept another ISO variant for date/time values: yyyy-mm-ddThh:mm:ss
    (note the "T" separating the day from hours information).
    Remove 'current' from date/time types; convert to 'now' in input.
    Separate time and timetz regression tests.
    Separate timestamp and timestamptz regression test.


Re: pgsql/src backend/access/transam/xact.c backen ...

From
Tom Lane
Date:
I'm seeing the following failure in the rules regress test:

$ diff expected/rules.out results
1338c1338
<  shoelace_data | log_shoelace    | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <>
old.sl_avail)DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al
Bundy'::name,'Thu Jan 01 00:00:00 1970'::"timestamp"); 
---
>  shoelace_data | log_shoelace    | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <>
old.sl_avail)DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al
Bundy'::name,"timestamp"('epoch'::text)); 
$

The actual result corresponds to the former output, and is indeed what
I would expect, given that text_timestamp() is (and should be)
non-cachable.  Are you sure this expected file is correct?

I'm also seeing rather massive failures in horology, but this evidently
is because horology-no-DST-before-1970.out hasn't been updated ...

            regards, tom lane

Re: pgsql/src backend/access/transam/xact.c backen ...

From
Thomas Lockhart
Date:
> I'm seeing the following failure in the rules regress test:
...
> The actual result corresponds to the former output, and is indeed what
> I would expect, given that text_timestamp() is (and should be)
> non-cachable.  Are you sure this expected file is correct?

It was, when I had marked that function as cachable. I went through the
catalog one last time and changed it back (apparently).

> I'm also seeing rather massive failures in horology, but this evidently
> is because horology-no-DST-before-1970.out hasn't been updated ...

Right. I've got one failure in horology myself, since one test was
sensitive to DST and has a transition which apparently happened last
night!

Both should be fixed now. Or would be if cvs.postgresql.org was
responding to requests for ssh. I've enclosed a patch file to be
applied, if you would like to do the honors.

I don't have the right kind of box to be able to test horology for the
"pre1970 crowd" myself, so others will have to do it.

                        - ThomasIndex: expected/horology.out
===================================================================
RCS file: /home/thomas/cvs/repository/pgsql/src/test/regress/expected/horology.out,v
retrieving revision 1.27
diff -c -r1.27 horology.out
*** expected/horology.out    2001/09/28 07:59:52    1.27
--- expected/horology.out    2001/09/29 08:18:48
***************
*** 548,555 ****
   03:31:00
  (1 row)

! SELECT CAST(CAST(date 'today' + time with time zone '03:30'
!             + interval '1 month 04:01' AS time with time zone) AS time) AS "07:31:00";
   07:31:00
  ----------
   07:31:00
--- 548,555 ----
   03:31:00
  (1 row)

! SELECT CAST(cast(date 'today' + time with time zone '03:30-08'
!   + interval '1 month 04:01' as timestamp without time zone) AS time) AS "07:31:00";
   07:31:00
  ----------
   07:31:00
Index: expected/rules.out
===================================================================
RCS file: /home/thomas/cvs/repository/pgsql/src/test/regress/expected/rules.out,v
retrieving revision 1.44
diff -c -r1.44 rules.out
*** expected/rules.out    2001/09/28 07:59:53    1.44
--- expected/rules.out    2001/09/29 08:19:59
***************
*** 1308,1315 ****

  SELECT tablename, rulename, definition FROM pg_rules
      ORDER BY tablename, rulename;
!    tablename   |    rulename     |
                                     definition
                                                  
!
---------------+-----------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   rtest_emp     | rtest_emp_del   | CREATE RULE rtest_emp_del AS ON DELETE TO rtest_emp DO INSERT INTO rtest_emplog
(ename,who, "action", newsal, oldsal) VALUES (old.ename, "current_user"(), 'fired     '::bpchar, '$0.00'::money,
old.salary);
   rtest_emp     | rtest_emp_ins   | CREATE RULE rtest_emp_ins AS ON INSERT TO rtest_emp DO INSERT INTO rtest_emplog
(ename,who, "action", newsal, oldsal) VALUES (new.ename, "current_user"(), 'hired     '::bpchar, new.salary,
'$0.00'::money);
   rtest_emp     | rtest_emp_upd   | CREATE RULE rtest_emp_upd AS ON UPDATE TO rtest_emp WHERE (new.salary <>
old.salary)DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (new.ename, "current_user"(),
'honored  '::bpchar, new.salary, old.salary); 
--- 1308,1315 ----

  SELECT tablename, rulename, definition FROM pg_rules
      ORDER BY tablename, rulename;
!    tablename   |    rulename     |
                                  definition
                                           
!
---------------+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
   rtest_emp     | rtest_emp_del   | CREATE RULE rtest_emp_del AS ON DELETE TO rtest_emp DO INSERT INTO rtest_emplog
(ename,who, "action", newsal, oldsal) VALUES (old.ename, "current_user"(), 'fired     '::bpchar, '$0.00'::money,
old.salary);
   rtest_emp     | rtest_emp_ins   | CREATE RULE rtest_emp_ins AS ON INSERT TO rtest_emp DO INSERT INTO rtest_emplog
(ename,who, "action", newsal, oldsal) VALUES (new.ename, "current_user"(), 'hired     '::bpchar, new.salary,
'$0.00'::money);
   rtest_emp     | rtest_emp_upd   | CREATE RULE rtest_emp_upd AS ON UPDATE TO rtest_emp WHERE (new.salary <>
old.salary)DO INSERT INTO rtest_emplog (ename, who, "action", newsal, oldsal) VALUES (new.ename, "current_user"(),
'honored  '::bpchar, new.salary, old.salary); 
***************
*** 1335,1341 ****
   shoelace      | shoelace_del    | CREATE RULE shoelace_del AS ON DELETE TO shoelace DO INSTEAD DELETE FROM
shoelace_dataWHERE (shoelace_data.sl_name = old.sl_name); 
   shoelace      | shoelace_ins    | CREATE RULE shoelace_ins AS ON INSERT TO shoelace DO INSTEAD INSERT INTO
shoelace_data(sl_name, sl_avail, sl_color, sl_len, sl_unit) VALUES (new.sl_name, new.sl_avail, new.sl_color,
new.sl_len,new.sl_unit); 
   shoelace      | shoelace_upd    | CREATE RULE shoelace_upd AS ON UPDATE TO shoelace DO INSTEAD UPDATE shoelace_data
SETsl_name = new.sl_name, sl_avail = new.sl_avail, sl_color = new.sl_color, sl_len = new.sl_len, sl_unit = new.sl_unit
WHERE(shoelace_data.sl_name = old.sl_name); 
!  shoelace_data | log_shoelace    | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <>
old.sl_avail)DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al
Bundy'::name,'Thu Jan 01 00:00:00 1970'::"timestamp"); 
   shoelace_ok   | shoelace_ok_ins | CREATE RULE shoelace_ok_ins AS ON INSERT TO shoelace_ok DO INSTEAD UPDATE shoelace
SETsl_avail = (shoelace.sl_avail + new.ok_quant) WHERE (shoelace.sl_name = new.ok_name); 
  (27 rows)

--- 1335,1341 ----
   shoelace      | shoelace_del    | CREATE RULE shoelace_del AS ON DELETE TO shoelace DO INSTEAD DELETE FROM
shoelace_dataWHERE (shoelace_data.sl_name = old.sl_name); 
   shoelace      | shoelace_ins    | CREATE RULE shoelace_ins AS ON INSERT TO shoelace DO INSTEAD INSERT INTO
shoelace_data(sl_name, sl_avail, sl_color, sl_len, sl_unit) VALUES (new.sl_name, new.sl_avail, new.sl_color,
new.sl_len,new.sl_unit); 
   shoelace      | shoelace_upd    | CREATE RULE shoelace_upd AS ON UPDATE TO shoelace DO INSTEAD UPDATE shoelace_data
SETsl_name = new.sl_name, sl_avail = new.sl_avail, sl_color = new.sl_color, sl_len = new.sl_len, sl_unit = new.sl_unit
WHERE(shoelace_data.sl_name = old.sl_name); 
!  shoelace_data | log_shoelace    | CREATE RULE log_shoelace AS ON UPDATE TO shoelace_data WHERE (new.sl_avail <>
old.sl_avail)DO INSERT INTO shoelace_log (sl_name, sl_avail, log_who, log_when) VALUES (new.sl_name, new.sl_avail, 'Al
Bundy'::name,"timestamp"('epoch'::text)); 
   shoelace_ok   | shoelace_ok_ins | CREATE RULE shoelace_ok_ins AS ON INSERT TO shoelace_ok DO INSTEAD UPDATE shoelace
SETsl_avail = (shoelace.sl_avail + new.ok_quant) WHERE (shoelace.sl_name = new.ok_name); 
  (27 rows)

Index: sql/horology.sql
===================================================================
RCS file: /home/thomas/cvs/repository/pgsql/src/test/regress/sql/horology.sql,v
retrieving revision 1.16
diff -c -r1.16 horology.sql
*** sql/horology.sql    2001/09/28 08:00:11    1.16
--- sql/horology.sql    2001/09/29 08:17:34
***************
*** 87,94 ****
  SELECT CAST(CAST(date 'today' + time with time zone '01:30'
              + interval '02:01' AS time with time zone) AS time) AS "03:31:00";

! SELECT CAST(CAST(date 'today' + time with time zone '03:30'
!             + interval '1 month 04:01' AS time with time zone) AS time) AS "07:31:00";

  SELECT interval '04:30' - time with time zone '01:02-05' AS "20:32:00-05";

--- 87,94 ----
  SELECT CAST(CAST(date 'today' + time with time zone '01:30'
              + interval '02:01' AS time with time zone) AS time) AS "03:31:00";

! SELECT CAST(cast(date 'today' + time with time zone '03:30-08'
!   + interval '1 month 04:01' as timestamp without time zone) AS time) AS "07:31:00";

  SELECT interval '04:30' - time with time zone '01:02-05' AS "20:32:00-05";


Re: pgsql/src backend/access/transam/xact.c backen ...

From
Tom Lane
Date:
Thomas Lockhart <lockhart@fourpalms.org> writes:
> Both should be fixed now. Or would be if cvs.postgresql.org was
> responding to requests for ssh. I've enclosed a patch file to be
> applied, if you would like to do the honors.

Done.

> I don't have the right kind of box to be able to test horology for the
> "pre1970 crowd" myself, so others will have to do it.

I updated horology-no-DST-before-1970.out.  We still need someone
to submit updated result files for the solaris-1947 cases.

            regards, tom lane