Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 6f58115

Browse files
author
Thomas G. Lockhart
committed
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.
1 parent 1f075a3 commit 6f58115

27 files changed

+2763
-1858
lines changed

src/backend/access/transam/xact.c

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.109 2001/08/25 18:52:41 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.110 2001/09/28 08:08:57 thomas Exp $
1212
*
1313
* NOTES
1414
* Transaction aborts can now occur two ways:
@@ -369,6 +369,21 @@ GetCurrentTransactionStartTime(void)
369369
}
370370

371371

372+
/* --------------------------------
373+
* GetCurrentTransactionStartTimeUsec
374+
* --------------------------------
375+
*/
376+
AbsoluteTime
377+
GetCurrentTransactionStartTimeUsec(int *msec)
378+
{
379+
TransactionState s = CurrentTransactionState;
380+
381+
*msec = s->startTimeMsec;
382+
383+
return s->startTime;
384+
}
385+
386+
372387
/* --------------------------------
373388
* TransactionIdIsCurrentTransactionId
374389
* --------------------------------
@@ -859,7 +874,10 @@ StartTransaction(void)
859874
*/
860875
s->commandId = FirstCommandId;
861876
s->scanCommandId = FirstCommandId;
877+
#if NOT_USED
862878
s->startTime = GetCurrentAbsoluteTime();
879+
#endif
880+
s->startTime = GetCurrentAbsoluteTimeUsec(&(s->startTimeMsec));
863881

864882
/*
865883
* initialize the various transaction subsystems

src/backend/parser/gram.y

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
*
1212
*
1313
* IDENTIFICATION
14-
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.253 2001/09/23 03:39:01 momjian Exp $
14+
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.254 2001/09/28 08:09:09 thomas Exp $
1515
*
1616
* HISTORY
1717
* AUTHOR DATE MAJOR EVENT
@@ -259,7 +259,7 @@ static void doNegateFloat(Value *v);
259259
%type <str> opt_charset, opt_collate
260260
%type <str> opt_float
261261
%type <ival> opt_numeric, opt_decimal
262-
%type <boolean> opt_varying, opt_timezone
262+
%type <boolean> opt_varying, opt_timezone, opt_timezone_x
263263

264264
%type <ival> Iconst
265265
%type <str> Sconst, comment_text
@@ -4229,10 +4229,16 @@ ConstDatetime: datetime
42294229
$$->name = xlateSqlType($1);
42304230
$$->typmod = -1;
42314231
}
4232-
| TIMESTAMP opt_timezone
4232+
| TIMESTAMP opt_timezone_x
42334233
{
42344234
$$ = makeNode(TypeName);
4235-
$$->name = xlateSqlType("timestamp");
4235+
if ($2)
4236+
$$->name = xlateSqlType("timestamptz");
4237+
else
4238+
$$->name = xlateSqlType("timestamp");
4239+
/* XXX the timezone field seems to be unused
4240+
* - thomas 2001-09-06
4241+
*/
42364242
$$->timezone = $2;
42374243
$$->typmod = -1;
42384244
}
@@ -4263,6 +4269,16 @@ datetime: YEAR_P { $$ = "year"; }
42634269
| SECOND_P { $$ = "second"; }
42644270
;
42654271

4272+
/* XXX Make the default be WITH TIME ZONE for 7.2 to help with database upgrades
4273+
* but revert this back to WITHOUT TIME ZONE for 7.3.
4274+
* Do this by simply reverting opt_timezone_x to opt_timezone - thomas 2001-09-06
4275+
*/
4276+
4277+
opt_timezone_x: WITH TIME ZONE { $$ = TRUE; }
4278+
| WITHOUT TIME ZONE { $$ = FALSE; }
4279+
| /*EMPTY*/ { $$ = TRUE; }
4280+
;
4281+
42664282
opt_timezone: WITH TIME ZONE { $$ = TRUE; }
42674283
| WITHOUT TIME ZONE { $$ = FALSE; }
42684284
| /*EMPTY*/ { $$ = FALSE; }

src/backend/parser/parse_coerce.c

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.60 2001/06/24 02:41:21 momjian Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_coerce.c,v 2.61 2001/09/28 08:09:09 thomas Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -240,7 +240,7 @@ can_coerce_type(int nargs, Oid *input_typeids, Oid *func_typeids)
240240
oid_array[0] = inputTypeId;
241241

242242
ftup = SearchSysCache(PROCNAME,
243-
PointerGetDatum(typeidTypeName(targetTypeId)),
243+
PointerGetDatum(typeidTypeName(targetTypeId)),
244244
Int32GetDatum(1),
245245
PointerGetDatum(oid_array),
246246
0);
@@ -498,6 +498,7 @@ TypeCategory(Oid inType)
498498
case (TIMETZOID):
499499
case (ABSTIMEOID):
500500
case (TIMESTAMPOID):
501+
case (TIMESTAMPTZOID):
501502
result = DATETIME_TYPE;
502503
break;
503504

@@ -577,7 +578,10 @@ PreferredType(CATEGORY category, Oid type)
577578
break;
578579

579580
case (DATETIME_TYPE):
580-
result = TIMESTAMPOID;
581+
if (type == DATEOID)
582+
result = TIMESTAMPOID;
583+
else
584+
result = TIMESTAMPTZOID;
581585
break;
582586

583587
case (TIMESPAN_TYPE):
@@ -634,10 +638,14 @@ PromoteTypeToNext(Oid inType)
634638
break;
635639

636640
case (DATEOID):
637-
case (ABSTIMEOID):
638641
result = TIMESTAMPOID;
639642
break;
640643

644+
case (ABSTIMEOID):
645+
case (TIMESTAMPOID):
646+
result = TIMESTAMPTZOID;
647+
break;
648+
641649
case (TIMEOID):
642650
case (RELTIMEOID):
643651
result = INTERVALOID;
@@ -646,7 +654,7 @@ PromoteTypeToNext(Oid inType)
646654
case (BOOLOID):
647655
case (TEXTOID):
648656
case (FLOAT8OID):
649-
case (TIMESTAMPOID):
657+
case (TIMESTAMPTZOID):
650658
case (INTERVALOID):
651659
default:
652660
result = inType;

src/backend/parser/parse_expr.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.101 2001/09/20 23:31:08 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_expr.c,v 1.102 2001/09/28 08:09:09 thomas Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -40,11 +40,11 @@ bool Transform_null_equals = false;
4040

4141
static Node *parser_typecast_constant(Value *expr, TypeName *typename);
4242
static Node *parser_typecast_expression(ParseState *pstate,
43-
Node *expr, TypeName *typename);
43+
Node *expr, TypeName *typename);
4444
static Node *transformAttr(ParseState *pstate, Attr *att, int precedence);
4545
static Node *transformIdent(ParseState *pstate, Ident *ident, int precedence);
4646
static Node *transformIndirection(ParseState *pstate, Node *basenode,
47-
List *indirection);
47+
List *indirection);
4848

4949

5050
/*

src/backend/parser/parse_target.c

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
*
99
*
1010
* IDENTIFICATION
11-
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.72 2001/09/17 01:06:36 tgl Exp $
11+
* $Header: /cvsroot/pgsql/src/backend/parser/parse_target.c,v 1.73 2001/09/28 08:09:09 thomas Exp $
1212
*
1313
*-------------------------------------------------------------------------
1414
*/
@@ -462,10 +462,13 @@ FigureColname(Node *node)
462462
{
463463
if (node == NULL)
464464
return "?column?";
465+
465466
switch (nodeTag(node))
466467
{
467468
case T_Ident:
468469
return ((Ident *) node)->name;
470+
case T_A_Const:
471+
return (FigureColname((Node *)((A_Const *) node)->typename));
469472
case T_Attr:
470473
{
471474
List *attrs = ((Attr *) node)->attrs;
@@ -481,7 +484,15 @@ FigureColname(Node *node)
481484
case T_FuncCall:
482485
return ((FuncCall *) node)->funcname;
483486
case T_TypeCast:
484-
return FigureColname(((TypeCast *) node)->arg);
487+
{
488+
char *name;
489+
490+
name = FigureColname(((TypeCast *) node)->arg);
491+
if (strcmp(name, "?column?") == 0)
492+
name = FigureColname((Node *)((TypeCast *) node)->typename);
493+
return name;
494+
}
495+
break;
485496
case T_CaseExpr:
486497
{
487498
char *name;
@@ -492,6 +503,8 @@ FigureColname(Node *node)
492503
return name;
493504
}
494505
break;
506+
case T_TypeName:
507+
return ((TypeName *) node)->name;
495508
default:
496509
break;
497510
}

0 commit comments

Comments
 (0)