Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Postgres FD Implementation
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Abuhujair Javed
Postgres FD Implementation
Commits
3498d878
Commit
3498d878
authored
Dec 18, 1998
by
Vadim B. Mikheev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
SET TRANSACTION ISOLATION LEVEL ...
LOCK TABLE IN ... MODE ...implemented
parent
c7da80bb
Changes
19
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
6453 additions
and
6016 deletions
+6453
-6016
src/backend/access/transam/varsup.c
src/backend/access/transam/varsup.c
+37
-1
src/backend/access/transam/xact.c
src/backend/access/transam/xact.c
+4
-2
src/backend/commands/command.c
src/backend/commands/command.c
+24
-1
src/backend/commands/trigger.c
src/backend/commands/trigger.c
+2
-2
src/backend/commands/variable.c
src/backend/commands/variable.c
+63
-1
src/backend/executor/execMain.c
src/backend/executor/execMain.c
+5
-5
src/backend/parser/gram.c
src/backend/parser/gram.c
+6011
-5809
src/backend/parser/gram.y
src/backend/parser/gram.y
+99
-17
src/backend/parser/keywords.c
src/backend/parser/keywords.c
+3
-1
src/backend/parser/parse.h
src/backend/parser/parse.h
+153
-151
src/backend/storage/ipc/shmem.c
src/backend/storage/ipc/shmem.c
+6
-3
src/backend/tcop/utility.c
src/backend/tcop/utility.c
+8
-1
src/backend/utils/time/tqual.c
src/backend/utils/time/tqual.c
+14
-14
src/include/access/transam.h
src/include/access/transam.h
+2
-1
src/include/access/xact.h
src/include/access/xact.h
+3
-2
src/include/commands/command.h
src/include/commands/command.h
+3
-1
src/include/nodes/nodes.h
src/include/nodes/nodes.h
+2
-1
src/include/nodes/parsenodes.h
src/include/nodes/parsenodes.h
+11
-1
src/include/utils/tqual.h
src/include/utils/tqual.h
+3
-2
No files found.
src/backend/access/transam/varsup.c
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.1
7 1998/09/01 04:27:18 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/access/transam/varsup.c,v 1.1
8 1998/12/18 09:10:17 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -311,6 +311,42 @@ GetNewTransactionId(TransactionId *xid)
SpinRelease
(
OidGenLockId
);
}
/*
* Like GetNewTransactionId reads nextXid but don't fetch it.
*/
void
ReadNewTransactionId
(
TransactionId
*
xid
)
{
/* ----------------
* during bootstrap initialization, we return the special
* bootstrap transaction id.
* ----------------
*/
if
(
AMI_OVERRIDE
)
{
TransactionIdStore
(
AmiTransactionId
,
xid
);
return
;
}
SpinAcquire
(
OidGenLockId
);
/* not good for concurrency... */
if
(
ShmemVariableCache
->
xid_count
==
0
)
{
TransactionId
nextid
;
VariableRelationGetNextXid
(
&
nextid
);
TransactionIdStore
(
nextid
,
&
(
ShmemVariableCache
->
nextXid
));
ShmemVariableCache
->
xid_count
=
VAR_XID_PREFETCH
;
TransactionIdAdd
(
&
nextid
,
VAR_XID_PREFETCH
);
VariableRelationPutNextXid
(
nextid
);
}
TransactionIdStore
(
ShmemVariableCache
->
nextXid
,
xid
);
SpinRelease
(
OidGenLockId
);
}
/* ----------------------------------------------------------------
* object id generation support
* ----------------------------------------------------------------
...
...
src/backend/access/transam/xact.c
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.2
7 1998/12/16 11:53:44
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/access/transam/xact.c,v 1.2
8 1998/12/18 09:10:18
vadim Exp $
*
* NOTES
* Transaction aborts can now occur two ways:
...
...
@@ -194,7 +194,8 @@ TransactionStateData CurrentTransactionStateData = {
TransactionState
CurrentTransactionState
=
&
CurrentTransactionStateData
;
int
XactIsoLevel
=
XACT_SERIALIZED
;
int
DefaultXactIsoLevel
=
XACT_SERIALIZABLE
;
int
XactIsoLevel
;
/* ----------------
* info returned when the system is disabled
...
...
@@ -798,6 +799,7 @@ StartTransaction()
TransactionIdFlushCache
();
FreeXactSnapshot
();
XactIsoLevel
=
DefaultXactIsoLevel
;
/* ----------------
* Check the current transaction state. If the transaction system
...
...
src/backend/commands/command.c
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.3
4 1998/12/15 12:45:52
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.3
5 1998/12/18 09:10:18
vadim Exp $
*
* NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated
...
...
@@ -39,6 +39,7 @@
#include "utils/mcxt.h"
#include "utils/portal.h"
#include "utils/syscache.h"
#include "miscadmin.h"
/* ----------------
* PortalExecutorHeapMemory stuff
...
...
@@ -492,3 +493,25 @@ PerformAddAttribute(char *relationName,
pfree
(
reltup
);
heap_close
(
rel
);
}
void
LockTableCommand
(
LockStmt
*
lockstmt
)
{
Relation
rel
;
int
aclresult
;
rel
=
heap_openr
(
lockstmt
->
relname
);
if
(
rel
==
NULL
)
elog
(
ERROR
,
"LOCK TABLE: relation %s can't be openned"
,
lockstmt
->
relname
);
if
(
lockstmt
->
mode
==
AccessShareLock
)
aclresult
=
pg_aclcheck
(
lockstmt
->
relname
,
GetPgUserName
(),
ACL_RD
);
else
aclresult
=
pg_aclcheck
(
lockstmt
->
relname
,
GetPgUserName
(),
ACL_WR
);
if
(
aclresult
!=
ACLCHECK_OK
)
elog
(
ERROR
,
"LOCK TABLE: permission denied"
);
LockRelation
(
rel
,
lockstmt
->
mode
);
}
src/backend/commands/trigger.c
View file @
3498d878
...
...
@@ -818,8 +818,8 @@ GetTupleForTrigger(EState *estate, ItemPointer tid, bool before)
case
HeapTupleUpdated
:
ReleaseBuffer
(
buffer
);
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
elog
(
ERROR
,
"
Serialize access failed
due to concurrent update"
);
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
elog
(
ERROR
,
"
Can't serialize access
due to concurrent update"
);
else
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
return
(
NULL
);
...
...
src/backend/commands/variable.c
View file @
3498d878
...
...
@@ -2,7 +2,7 @@
* Routines for handling of 'SET var TO',
* 'SHOW var' and 'RESET var' statements.
*
* $Id: variable.c,v 1.1
7 1998/10/26 00:59:22 tgl
Exp $
* $Id: variable.c,v 1.1
8 1998/12/18 09:10:20 vadim
Exp $
*
*/
...
...
@@ -15,6 +15,7 @@
#include "commands/variable.h"
#include "utils/builtins.h"
#include "optimizer/internal.h"
#include "access/xact.h"
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#endif
...
...
@@ -44,6 +45,9 @@ static bool parse_geqo(const char *);
static
bool
show_ksqo
(
void
);
static
bool
reset_ksqo
(
void
);
static
bool
parse_ksqo
(
const
char
*
);
static
bool
show_XactIsoLevel
(
void
);
static
bool
reset_XactIsoLevel
(
void
);
static
bool
parse_XactIsoLevel
(
const
char
*
);
#ifdef QUERY_LIMIT
static
bool
show_query_limit
(
void
);
static
bool
reset_query_limit
(
void
);
...
...
@@ -669,6 +673,9 @@ struct VariableParsers
{
"ksqo"
,
parse_ksqo
,
show_ksqo
,
reset_ksqo
},
{
"XactIsoLevel"
,
parse_XactIsoLevel
,
show_XactIsoLevel
,
reset_XactIsoLevel
},
#ifdef QUERY_LIMIT
{
"query_limit"
,
parse_query_limit
,
show_query_limit
,
reset_query_limit
...
...
@@ -773,3 +780,58 @@ reset_ksqo()
_use_keyset_query_optimizer
=
false
;
return
TRUE
;
}
/* SET TRANSACTION */
static
bool
parse_XactIsoLevel
(
const
char
*
value
)
{
if
(
value
==
NULL
)
{
reset_XactIsoLevel
();
return
TRUE
;
}
if
(
SerializableSnapshot
!=
NULL
)
{
elog
(
ERROR
,
"SET TRANSACTION ISOLATION LEVEL must be called before any query"
);
return
TRUE
;
}
if
(
strcasecmp
(
value
,
"SERIALIZABLE"
)
==
0
)
XactIsoLevel
=
XACT_SERIALIZABLE
;
else
if
(
strcasecmp
(
value
,
"COMMITTED"
)
==
0
)
XactIsoLevel
=
XACT_READ_COMMITTED
;
else
elog
(
ERROR
,
"Bad TRANSACTION ISOLATION LEVEL (%s)"
,
value
);
return
TRUE
;
}
static
bool
show_XactIsoLevel
()
{
if
(
XactIsoLevel
==
XACT_SERIALIZABLE
)
elog
(
NOTICE
,
"TRANSACTION ISOLATION LEVEL is SERIALIZABLE"
);
else
elog
(
NOTICE
,
"TRANSACTION ISOLATION LEVEL is READ COMMITTED"
);
return
TRUE
;
}
static
bool
reset_XactIsoLevel
()
{
if
(
SerializableSnapshot
!=
NULL
)
{
elog
(
ERROR
,
"SET TRANSACTION ISOLATION LEVEL must be called before any query"
);
return
TRUE
;
}
XactIsoLevel
=
DefaultXactIsoLevel
;
return
TRUE
;
}
src/backend/executor/execMain.c
View file @
3498d878
...
...
@@ -26,7 +26,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.6
1 1998/12/16 11:53:45
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/executor/execMain.c,v 1.6
2 1998/12/18 09:10:21
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -1037,8 +1037,8 @@ ExecDelete(TupleTableSlot *slot,
break
;
case
HeapTupleUpdated
:
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
elog
(
ERROR
,
"
Serialize access failed
due to concurrent update"
);
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
elog
(
ERROR
,
"
Can't serialize access
due to concurrent update"
);
else
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
return
;
...
...
@@ -1167,8 +1167,8 @@ ExecReplace(TupleTableSlot *slot,
break
;
case
HeapTupleUpdated
:
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
elog
(
ERROR
,
"
Serialize access failed
due to concurrent update"
);
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
elog
(
ERROR
,
"
Can't serialize access
due to concurrent update"
);
else
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
return
;
...
...
src/backend/parser/gram.c
View file @
3498d878
This diff is collapsed.
Click to expand it.
src/backend/parser/gram.y
View file @
3498d878
...
...
@@ -10,7 +10,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.
39 1998/12/13 04:37:51 momjian
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.
40 1998/12/18 09:10:32 vadim
Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
...
...
@@ -45,6 +45,7 @@
#include "catalog/catname.h"
#include "utils/elog.h"
#include "access/xact.h"
#include "storage/lmgr.h"
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
...
...
@@ -133,6 +134,8 @@ Oid param_type(int t); /* used in parse_expr.c */
%type <str> opt_database1, opt_database2, location, encoding
%type <str> opt_lmode
%type <pboolean> user_createdb_clause, user_createuser_clause
%type <str> user_passwd_clause
%type <str> user_valid_clause
...
...
@@ -269,8 +272,8 @@ Oid param_type(int t); /* used in parse_expr.c */
ELSE, END_TRANS, EXECUTE, EXISTS, EXTRACT,
FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
GRANT, GROUP, HAVING, HOUR_P,
IN, INNER_P, INSENSITIVE, INSERT, INTERVAL, INTO, IS,
JOIN, KEY, LANGUAGE, LEADING, LEFT, LIKE, LOCAL,
IN, INNER_P, INSENSITIVE, INSERT, INTERVAL, INTO, IS,
ISOLATION,
JOIN, KEY, LANGUAGE, LEADING, LEFT, L
EVEL, L
IKE, LOCAL,
MATCH, MINUTE_P, MONTH_P, NAMES,
NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF, NULL_P, NUMERIC,
OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P,
...
...
@@ -539,6 +542,24 @@ VariableSetStmt: SET ColId TO var_value
n->value = $4;
$$ = (Node *) n;
}
| SET TRANSACTION ISOLATION LEVEL READ ColId
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = "XactIsoLevel";
n->value = $6;
if (strcasecmp(n->value, "COMMITTED"))
elog(ERROR,"parser: syntax error at or near \"%s\"", n->value);
$$ = (Node *) n;
}
| SET TRANSACTION ISOLATION LEVEL ColId
{
VariableSetStmt *n = makeNode(VariableSetStmt);
n->name = "XactIsoLevel";
n->value = $5;
if (strcasecmp(n->value, "SERIALIZABLE"))
elog(ERROR,"parser: syntax error at or near \"%s\"", n->value);
$$ = (Node *) n;
}
| SET NAMES encoding
{
#ifdef MB
...
...
@@ -573,6 +594,12 @@ VariableShowStmt: SHOW ColId
n->name = "timezone";
$$ = (Node *) n;
}
| SHOW TRANSACTION ISOLATION LEVEL
{
VariableShowStmt *n = makeNode(VariableShowStmt);
n->name = "XactIsoLevel";
$$ = (Node *) n;
}
;
VariableResetStmt: RESET ColId
...
...
@@ -587,6 +614,12 @@ VariableResetStmt: RESET ColId
n->name = "timezone";
$$ = (Node *) n;
}
| RESET TRANSACTION ISOLATION LEVEL
{
VariableResetStmt *n = makeNode(VariableResetStmt);
n->name = "XactIsoLevel";
$$ = (Node *) n;
}
;
...
...
@@ -2473,28 +2506,77 @@ DeleteStmt: DELETE FROM relation_name
}
;
/*
* Total hack to just lock a table inside a transaction.
* Is it worth making this a separate command, with
* its own node type and file. I don't think so. bjm 1998/1/22
*/
LockStmt: LOCK_P opt_table relation_name
LockStmt: LOCK_P opt_table relation_name
{
DeleteStmt *n = makeNode(DeleteStmt);
A_Const *c = makeNode(A_Const);
LockStmt *n = makeNode(LockStmt);
n->relname = $3;
n->mode = AccessExclusiveLock;
$$ = (Node *)n;
}
| LOCK_P opt_table relation_name IN opt_lmode ROW IDENT IDENT
{
LockStmt *n = makeNode(LockStmt);
c->val.type = T_String;
c->val.val.str = "f";
c->typename = makeNode(TypeName);
c->typename->name = xlateSqlType("bool");
c->typename->typmod = -1;
n->relname = $3;
if (strcasecmp($8, "MODE"))
elog(ERROR,"parser: syntax error at or near \"%s\"", $8);
if ($5 != NULL)
{
if (strcasecmp($5, "SHARE"))
elog(ERROR,"parser: syntax error at or near \"%s\"", $5);
if (strcasecmp($7, "EXCLUSIVE"))
elog(ERROR,"parser: syntax error at or near \"%s\"", $7);
n->mode = ShareRowExclusiveLock;
}
else
{
if (strcasecmp($7, "SHARE") == 0)
n->mode = RowShareLock;
else if (strcasecmp($7, "EXCLUSIVE") == 0)
n->mode = RowExclusiveLock;
else
elog(ERROR,"parser: syntax error at or near \"%s\"", $7);
}
$$ = (Node *)n;
}
| LOCK_P opt_table relation_name IN IDENT IDENT IDENT
{
LockStmt *n = makeNode(LockStmt);
n->relname = $3;
if (strcasecmp($7, "MODE"))
elog(ERROR,"parser: syntax error at or near \"%s\"", $7);
if (strcasecmp($5, "ACCESS"))
elog(ERROR,"parser: syntax error at or near \"%s\"", $5);
if (strcasecmp($6, "SHARE") == 0)
n->mode = AccessShareLock;
else if (strcasecmp($6, "EXCLUSIVE") == 0)
n->mode = AccessExclusiveLock;
else
elog(ERROR,"parser: syntax error at or near \"%s\"", $6);
$$ = (Node *)n;
}
| LOCK_P opt_table relation_name IN IDENT IDENT
{
LockStmt *n = makeNode(LockStmt);
n->relname = $3;
n->whereClause = (Node *)c;
if (strcasecmp($6, "MODE"))
elog(ERROR,"parser: syntax error at or near \"%s\"", $6);
if (strcasecmp($5, "SHARE") == 0)
n->mode = ShareLock;
else if (strcasecmp($5, "EXCLUSIVE") == 0)
n->mode = ExclusiveLock;
else
elog(ERROR,"parser: syntax error at or near \"%s\"", $5);
$$ = (Node *)n;
}
;
opt_lmode: IDENT { $$ = $1; }
| /*EMPTY*/ { $$ = NULL; }
;
/*****************************************************************************
*
...
...
src/backend/parser/keywords.c
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.
49 1998/12/04 15:34:29 thomas
Exp $
* $Header: /cvsroot/pgsql/src/backend/parser/keywords.c,v 1.
50 1998/12/18 09:10:34 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -124,12 +124,14 @@ static ScanKeyword ScanKeywords[] = {
{
"into"
,
INTO
},
{
"is"
,
IS
},
{
"isnull"
,
ISNULL
},
{
"isolation"
,
ISOLATION
},
{
"join"
,
JOIN
},
{
"key"
,
KEY
},
{
"lancompiler"
,
LANCOMPILER
},
{
"language"
,
LANGUAGE
},
{
"leading"
,
LEADING
},
{
"left"
,
LEFT
},
{
"level"
,
LEVEL
},
{
"like"
,
LIKE
},
{
"listen"
,
LISTEN
},
{
"load"
,
LOAD
},
...
...
src/backend/parser/parse.h
View file @
3498d878
...
...
@@ -94,157 +94,159 @@ typedef union
#define INTERVAL 320
#define INTO 321
#define IS 322
#define JOIN 323
#define KEY 324
#define LANGUAGE 325
#define LEADING 326
#define LEFT 327
#define LIKE 328
#define LOCAL 329
#define MATCH 330
#define MINUTE_P 331
#define MONTH_P 332
#define NAMES 333
#define NATIONAL 334
#define NATURAL 335
#define NCHAR 336
#define NEXT 337
#define NO 338
#define NOT 339
#define NULLIF 340
#define NULL_P 341
#define NUMERIC 342
#define OF 343
#define ON 344
#define ONLY 345
#define OPTION 346
#define OR 347
#define ORDER 348
#define OUTER_P 349
#define PARTIAL 350
#define POSITION 351
#define PRECISION 352
#define PRIMARY 353
#define PRIOR 354
#define PRIVILEGES 355
#define PROCEDURE 356
#define PUBLIC 357
#define READ 358
#define REFERENCES 359
#define RELATIVE 360
#define REVOKE 361
#define RIGHT 362
#define ROLLBACK 363
#define SCROLL 364
#define SECOND_P 365
#define SELECT 366
#define SET 367
#define SUBSTRING 368
#define TABLE 369
#define THEN 370
#define TIME 371
#define TIMESTAMP 372
#define TIMEZONE_HOUR 373
#define TIMEZONE_MINUTE 374
#define TO 375
#define TRAILING 376
#define TRANSACTION 377
#define TRIM 378
#define TRUE_P 379
#define UNION 380
#define UNIQUE 381
#define UPDATE 382
#define USER 383
#define USING 384
#define VALUES 385
#define VARCHAR 386
#define VARYING 387
#define VIEW 388
#define WHEN 389
#define WHERE 390
#define WITH 391
#define WORK 392
#define YEAR_P 393
#define ZONE 394
#define TRIGGER 395
#define TYPE_P 396
#define ABORT_TRANS 397
#define AFTER 398
#define AGGREGATE 399
#define ANALYZE 400
#define BACKWARD 401
#define BEFORE 402
#define BINARY 403
#define CACHE 404
#define CLUSTER 405
#define COPY 406
#define CREATEDB 407
#define CREATEUSER 408
#define CYCLE 409
#define DATABASE 410
#define DELIMITERS 411
#define DO 412
#define EACH 413
#define ENCODING 414
#define EXPLAIN 415
#define EXTEND 416
#define FORWARD 417
#define FUNCTION 418
#define HANDLER 419
#define INCREMENT 420
#define INDEX 421
#define INHERITS 422
#define INSTEAD 423
#define ISNULL 424
#define LANCOMPILER 425
#define LISTEN 426
#define LOAD 427
#define LOCATION 428
#define LOCK_P 429
#define MAXVALUE 430
#define MINVALUE 431
#define MOVE 432
#define NEW 433
#define NOCREATEDB 434
#define NOCREATEUSER 435
#define NONE 436
#define NOTHING 437
#define NOTIFY 438
#define NOTNULL 439
#define OIDS 440
#define OPERATOR 441
#define PASSWORD 442
#define PROCEDURAL 443
#define RECIPE 444
#define RENAME 445
#define RESET 446
#define RETURNS 447
#define ROW 448
#define RULE 449
#define SEQUENCE 450
#define SERIAL 451
#define SETOF 452
#define SHOW 453
#define START 454
#define STATEMENT 455
#define STDIN 456
#define STDOUT 457
#define TRUSTED 458
#define UNLISTEN 459
#define UNTIL 460
#define VACUUM 461
#define VALID 462
#define VERBOSE 463
#define VERSION 464
#define IDENT 465
#define SCONST 466
#define Op 467
#define ICONST 468
#define PARAM 469
#define FCONST 470
#define OP 471
#define UMINUS 472
#define TYPECAST 473
#define ISOLATION 323
#define JOIN 324
#define KEY 325
#define LANGUAGE 326
#define LEADING 327
#define LEFT 328
#define LEVEL 329
#define LIKE 330
#define LOCAL 331
#define MATCH 332
#define MINUTE_P 333
#define MONTH_P 334
#define NAMES 335
#define NATIONAL 336
#define NATURAL 337
#define NCHAR 338
#define NEXT 339
#define NO 340
#define NOT 341
#define NULLIF 342
#define NULL_P 343
#define NUMERIC 344
#define OF 345
#define ON 346
#define ONLY 347
#define OPTION 348
#define OR 349
#define ORDER 350
#define OUTER_P 351
#define PARTIAL 352
#define POSITION 353
#define PRECISION 354
#define PRIMARY 355
#define PRIOR 356
#define PRIVILEGES 357
#define PROCEDURE 358
#define PUBLIC 359
#define READ 360
#define REFERENCES 361
#define RELATIVE 362
#define REVOKE 363
#define RIGHT 364
#define ROLLBACK 365
#define SCROLL 366
#define SECOND_P 367
#define SELECT 368
#define SET 369
#define SUBSTRING 370
#define TABLE 371
#define THEN 372
#define TIME 373
#define TIMESTAMP 374
#define TIMEZONE_HOUR 375
#define TIMEZONE_MINUTE 376
#define TO 377
#define TRAILING 378
#define TRANSACTION 379
#define TRIM 380
#define TRUE_P 381
#define UNION 382
#define UNIQUE 383
#define UPDATE 384
#define USER 385
#define USING 386
#define VALUES 387
#define VARCHAR 388
#define VARYING 389
#define VIEW 390
#define WHEN 391
#define WHERE 392
#define WITH 393
#define WORK 394
#define YEAR_P 395
#define ZONE 396
#define TRIGGER 397
#define TYPE_P 398
#define ABORT_TRANS 399
#define AFTER 400
#define AGGREGATE 401
#define ANALYZE 402
#define BACKWARD 403
#define BEFORE 404
#define BINARY 405
#define CACHE 406
#define CLUSTER 407
#define COPY 408
#define CREATEDB 409
#define CREATEUSER 410
#define CYCLE 411
#define DATABASE 412
#define DELIMITERS 413
#define DO 414
#define EACH 415
#define ENCODING 416
#define EXPLAIN 417
#define EXTEND 418
#define FORWARD 419
#define FUNCTION 420
#define HANDLER 421
#define INCREMENT 422
#define INDEX 423
#define INHERITS 424
#define INSTEAD 425
#define ISNULL 426
#define LANCOMPILER 427
#define LISTEN 428
#define LOAD 429
#define LOCATION 430
#define LOCK_P 431
#define MAXVALUE 432
#define MINVALUE 433
#define MOVE 434
#define NEW 435
#define NOCREATEDB 436
#define NOCREATEUSER 437
#define NONE 438
#define NOTHING 439
#define NOTIFY 440
#define NOTNULL 441
#define OIDS 442
#define OPERATOR 443
#define PASSWORD 444
#define PROCEDURAL 445
#define RECIPE 446
#define RENAME 447
#define RESET 448
#define RETURNS 449
#define ROW 450
#define RULE 451
#define SEQUENCE 452
#define SERIAL 453
#define SETOF 454
#define SHOW 455
#define START 456
#define STATEMENT 457
#define STDIN 458
#define STDOUT 459
#define TRUSTED 460
#define UNLISTEN 461
#define UNTIL 462
#define VACUUM 463
#define VALID 464
#define VERBOSE 465
#define VERSION 466
#define IDENT 467
#define SCONST 468
#define Op 469
#define ICONST 470
#define PARAM 471
#define FCONST 472
#define OP 473
#define UMINUS 474
#define TYPECAST 475
extern
YYSTYPE
yylval
;
src/backend/storage/ipc/shmem.c
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.3
3 1998/12/16 11:53:46
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/storage/ipc/shmem.c,v 1.3
4 1998/12/18 09:10:34
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -636,7 +636,7 @@ TransactionIdIsInProgress(TransactionId xid)
* Yet another strange func for this place... - vadim 07/21/98
*/
Snapshot
GetSnapshotData
(
void
)
GetSnapshotData
(
bool
serializable
)
{
Snapshot
snapshot
=
(
Snapshot
)
malloc
(
sizeof
(
SnapshotData
));
ShmemIndexEnt
*
result
;
...
...
@@ -648,8 +648,11 @@ GetSnapshotData(void)
Assert
(
ShmemIndex
);
snapshot
->
xip
=
(
TransactionId
*
)
malloc
(
have
*
sizeof
(
TransactionId
));
snapshot
->
xmax
=
cid
;
snapshot
->
xmin
=
cid
;
if
(
serializable
)
snapshot
->
xmax
=
cid
;
else
ReadNewTransactionId
(
&
(
snapshot
->
xmax
));
SpinAcquire
(
ShmemIndexLock
);
...
...
src/backend/tcop/utility.c
View file @
3498d878
...
...
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.5
0 1998/09/25 13:47:27 thomas
Exp $
* $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.5
1 1998/12/18 09:10:36 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -760,6 +760,13 @@ ProcessUtility(Node *parsetree,
RemoveUser
(((
DropUserStmt
*
)
parsetree
)
->
user
);
break
;
case
T_LockStmt
:
PS_SET_STATUS
(
commandTag
=
"LOCK TABLE"
);
CHECK_IF_ABORTED
();
LockTableCommand
((
LockStmt
*
)
parsetree
);
break
;
/*
* ******************************** default ********************************
...
...
src/backend/utils/time/tqual.c
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
*
* IDENTIFICATION
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.2
2 1998/12/16 11:53:55
vadim Exp $
* $Header: /cvsroot/pgsql/src/backend/utils/time/tqual.c,v 1.2
3 1998/12/18 09:10:39
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -30,7 +30,7 @@ SnapshotData SnapshotDirtyData;
Snapshot
SnapshotDirty
=
&
SnapshotDirtyData
;
Snapshot
QuerySnapshot
=
NULL
;
static
Snapshot
Serialized
Snapshot
=
NULL
;
Snapshot
Serializable
Snapshot
=
NULL
;
/*
* XXX Transaction system override hacks start here
...
...
@@ -551,24 +551,24 @@ SetQuerySnapshot(void)
{
/* 1st call in xaction */
if
(
Serializ
ed
Snapshot
==
NULL
)
if
(
Serializ
able
Snapshot
==
NULL
)
{
Serializ
edSnapshot
=
GetSnapshotData
(
);
QuerySnapshot
=
Serializ
ed
Snapshot
;
Serializ
ableSnapshot
=
GetSnapshotData
(
true
);
QuerySnapshot
=
Serializ
able
Snapshot
;
Assert
(
QuerySnapshot
!=
NULL
);
return
;
}
if
(
QuerySnapshot
!=
Serializ
ed
Snapshot
)
if
(
QuerySnapshot
!=
Serializ
able
Snapshot
)
{
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
);
}
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
QuerySnapshot
=
Serializ
ed
Snapshot
;
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
QuerySnapshot
=
Serializ
able
Snapshot
;
else
QuerySnapshot
=
GetSnapshotData
();
QuerySnapshot
=
GetSnapshotData
(
false
);
Assert
(
QuerySnapshot
!=
NULL
);
...
...
@@ -578,7 +578,7 @@ void
FreeXactSnapshot
(
void
)
{
if
(
QuerySnapshot
!=
NULL
&&
QuerySnapshot
!=
Serializ
ed
Snapshot
)
if
(
QuerySnapshot
!=
NULL
&&
QuerySnapshot
!=
Serializ
able
Snapshot
)
{
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
);
...
...
@@ -586,12 +586,12 @@ FreeXactSnapshot(void)
QuerySnapshot
=
NULL
;
if
(
Serializ
ed
Snapshot
!=
NULL
)
if
(
Serializ
able
Snapshot
!=
NULL
)
{
free
(
Serializ
ed
Snapshot
->
xip
);
free
(
Serializ
ed
Snapshot
);
free
(
Serializ
able
Snapshot
->
xip
);
free
(
Serializ
able
Snapshot
);
}
Serializ
ed
Snapshot
=
NULL
;
Serializ
able
Snapshot
=
NULL
;
}
src/include/access/transam.h
View file @
3498d878
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: transam.h,v 1.1
7 1998/12/16 11:52:10
vadim Exp $
* $Id: transam.h,v 1.1
8 1998/12/18 09:09:52
vadim Exp $
*
* NOTES
* Transaction System Version 101 now support proper oid
...
...
@@ -160,6 +160,7 @@ extern void TransBlockNumberSetXidStatus(Relation relation,
/* in transam/varsup.c */
extern
void
VariableRelationPutNextXid
(
TransactionId
xid
);
extern
void
GetNewTransactionId
(
TransactionId
*
xid
);
extern
void
ReadNewTransactionId
(
TransactionId
*
xid
);
extern
void
GetNewObjectId
(
Oid
*
oid_return
);
extern
void
CheckMaxObjectId
(
Oid
assigned_oid
);
...
...
src/include/access/xact.h
View file @
3498d878
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: xact.h,v 1.1
8 1998/12/15 12:46:47
vadim Exp $
* $Id: xact.h,v 1.1
9 1998/12/18 09:09:52
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -36,8 +36,9 @@ typedef struct TransactionStateData
#define XACT_DIRTY_READ 0
/* not implemented */
#define XACT_READ_COMMITTED 1
#define XACT_REPEATABLE_READ 2
/* not implemented */
#define XACT_SERIALIZ
ED
3
#define XACT_SERIALIZ
ABLE
3
extern
int
DefaultXactIsoLevel
;
extern
int
XactIsoLevel
;
/* ----------------
...
...
src/include/commands/command.h
View file @
3498d878
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: command.h,v 1.1
0 1998/09/01 04:35:25 momjian
Exp $
* $Id: command.h,v 1.1
1 1998/12/18 09:09:52 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -44,4 +44,6 @@ extern void PortalCleanup(Portal portal);
extern
void
PerformAddAttribute
(
char
*
relationName
,
char
*
userName
,
bool
inh
,
ColumnDef
*
colDef
);
extern
void
LockTableCommand
(
LockStmt
*
lockstmt
);
#endif
/* COMMAND_H */
src/include/nodes/nodes.h
View file @
3498d878
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: nodes.h,v 1.3
2 1998/12/04 15:34:44 thomas
Exp $
* $Id: nodes.h,v 1.3
3 1998/12/18 09:09:53 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -190,6 +190,7 @@ typedef enum NodeTag
T_CreateUserStmt
,
T_AlterUserStmt
,
T_DropUserStmt
,
T_LockStmt
,
T_A_Expr
=
700
,
T_Attr
,
...
...
src/include/nodes/parsenodes.h
View file @
3498d878
...
...
@@ -6,7 +6,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: parsenodes.h,v 1.6
2 1998/12/04 15:34:44 thomas
Exp $
* $Id: parsenodes.h,v 1.6
3 1998/12/18 09:09:54 vadim
Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -574,6 +574,16 @@ typedef struct VariableResetStmt
char
*
name
;
}
VariableResetStmt
;
/* ----------------------
* LOCK Statement
* ----------------------
*/
typedef
struct
LockStmt
{
NodeTag
type
;
char
*
relname
;
/* relation to lock */
int
mode
;
/* lock mode */
}
LockStmt
;
/*****************************************************************************
* Optimizable Statements
...
...
src/include/utils/tqual.h
View file @
3498d878
...
...
@@ -7,7 +7,7 @@
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: tqual.h,v 1.1
7 1998/12/16 11:52:11
vadim Exp $
* $Id: tqual.h,v 1.1
8 1998/12/18 09:09:55
vadim Exp $
*
*-------------------------------------------------------------------------
*/
...
...
@@ -31,6 +31,7 @@ typedef SnapshotData *Snapshot;
extern
Snapshot
SnapshotDirty
;
extern
Snapshot
QuerySnapshot
;
extern
Snapshot
SerializableSnapshot
;
#define IsSnapshotNow(snapshot) ((Snapshot) snapshot == SnapshotNow)
#define IsSnapshotSelf(snapshot) ((Snapshot) snapshot == SnapshotSelf)
...
...
@@ -99,7 +100,7 @@ extern int HeapTupleSatisfiesUpdate(HeapTuple tuple);
extern
void
setheapoverride
(
bool
on
);
extern
Snapshot
GetSnapshotData
(
void
);
extern
Snapshot
GetSnapshotData
(
bool
serializable
);
extern
void
SetQuerySnapshot
(
void
);
extern
void
FreeXactSnapshot
(
void
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment