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 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* 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)
...
@@ -311,6 +311,42 @@ GetNewTransactionId(TransactionId *xid)
SpinRelease
(
OidGenLockId
);
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
* object id generation support
* ----------------------------------------------------------------
* ----------------------------------------------------------------
...
...
src/backend/access/transam/xact.c
View file @
3498d878
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* 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
* NOTES
* Transaction aborts can now occur two ways:
* Transaction aborts can now occur two ways:
...
@@ -194,7 +194,8 @@ TransactionStateData CurrentTransactionStateData = {
...
@@ -194,7 +194,8 @@ TransactionStateData CurrentTransactionStateData = {
TransactionState
CurrentTransactionState
=
TransactionState
CurrentTransactionState
=
&
CurrentTransactionStateData
;
&
CurrentTransactionStateData
;
int
XactIsoLevel
=
XACT_SERIALIZED
;
int
DefaultXactIsoLevel
=
XACT_SERIALIZABLE
;
int
XactIsoLevel
;
/* ----------------
/* ----------------
* info returned when the system is disabled
* info returned when the system is disabled
...
@@ -798,6 +799,7 @@ StartTransaction()
...
@@ -798,6 +799,7 @@ StartTransaction()
TransactionIdFlushCache
();
TransactionIdFlushCache
();
FreeXactSnapshot
();
FreeXactSnapshot
();
XactIsoLevel
=
DefaultXactIsoLevel
;
/* ----------------
/* ----------------
* Check the current transaction state. If the transaction system
* Check the current transaction state. If the transaction system
...
...
src/backend/commands/command.c
View file @
3498d878
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* 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
* NOTES
* The PortalExecutorHeapMemory crap needs to be eliminated
* The PortalExecutorHeapMemory crap needs to be eliminated
...
@@ -39,6 +39,7 @@
...
@@ -39,6 +39,7 @@
#include "utils/mcxt.h"
#include "utils/mcxt.h"
#include "utils/portal.h"
#include "utils/portal.h"
#include "utils/syscache.h"
#include "utils/syscache.h"
#include "miscadmin.h"
/* ----------------
/* ----------------
* PortalExecutorHeapMemory stuff
* PortalExecutorHeapMemory stuff
...
@@ -492,3 +493,25 @@ PerformAddAttribute(char *relationName,
...
@@ -492,3 +493,25 @@ PerformAddAttribute(char *relationName,
pfree
(
reltup
);
pfree
(
reltup
);
heap_close
(
rel
);
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)
...
@@ -818,8 +818,8 @@ GetTupleForTrigger(EState *estate, ItemPointer tid, bool before)
case
HeapTupleUpdated
:
case
HeapTupleUpdated
:
ReleaseBuffer
(
buffer
);
ReleaseBuffer
(
buffer
);
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
elog
(
ERROR
,
"
Serialize access failed
due to concurrent update"
);
elog
(
ERROR
,
"
Can't serialize access
due to concurrent update"
);
else
else
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
return
(
NULL
);
return
(
NULL
);
...
...
src/backend/commands/variable.c
View file @
3498d878
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
* Routines for handling of 'SET var TO',
* Routines for handling of 'SET var TO',
* 'SHOW var' and 'RESET var' statements.
* '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 @@
...
@@ -15,6 +15,7 @@
#include "commands/variable.h"
#include "commands/variable.h"
#include "utils/builtins.h"
#include "utils/builtins.h"
#include "optimizer/internal.h"
#include "optimizer/internal.h"
#include "access/xact.h"
#ifdef MULTIBYTE
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#include "mb/pg_wchar.h"
#endif
#endif
...
@@ -44,6 +45,9 @@ static bool parse_geqo(const char *);
...
@@ -44,6 +45,9 @@ static bool parse_geqo(const char *);
static
bool
show_ksqo
(
void
);
static
bool
show_ksqo
(
void
);
static
bool
reset_ksqo
(
void
);
static
bool
reset_ksqo
(
void
);
static
bool
parse_ksqo
(
const
char
*
);
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
#ifdef QUERY_LIMIT
static
bool
show_query_limit
(
void
);
static
bool
show_query_limit
(
void
);
static
bool
reset_query_limit
(
void
);
static
bool
reset_query_limit
(
void
);
...
@@ -669,6 +673,9 @@ struct VariableParsers
...
@@ -669,6 +673,9 @@ struct VariableParsers
{
{
"ksqo"
,
parse_ksqo
,
show_ksqo
,
reset_ksqo
"ksqo"
,
parse_ksqo
,
show_ksqo
,
reset_ksqo
},
},
{
"XactIsoLevel"
,
parse_XactIsoLevel
,
show_XactIsoLevel
,
reset_XactIsoLevel
},
#ifdef QUERY_LIMIT
#ifdef QUERY_LIMIT
{
{
"query_limit"
,
parse_query_limit
,
show_query_limit
,
reset_query_limit
"query_limit"
,
parse_query_limit
,
show_query_limit
,
reset_query_limit
...
@@ -773,3 +780,58 @@ reset_ksqo()
...
@@ -773,3 +780,58 @@ reset_ksqo()
_use_keyset_query_optimizer
=
false
;
_use_keyset_query_optimizer
=
false
;
return
TRUE
;
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 @@
...
@@ -26,7 +26,7 @@
*
*
*
*
* IDENTIFICATION
* 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,
...
@@ -1037,8 +1037,8 @@ ExecDelete(TupleTableSlot *slot,
break
;
break
;
case
HeapTupleUpdated
:
case
HeapTupleUpdated
:
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
elog
(
ERROR
,
"
Serialize access failed
due to concurrent update"
);
elog
(
ERROR
,
"
Can't serialize access
due to concurrent update"
);
else
else
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
return
;
return
;
...
@@ -1167,8 +1167,8 @@ ExecReplace(TupleTableSlot *slot,
...
@@ -1167,8 +1167,8 @@ ExecReplace(TupleTableSlot *slot,
break
;
break
;
case
HeapTupleUpdated
:
case
HeapTupleUpdated
:
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
elog
(
ERROR
,
"
Serialize access failed
due to concurrent update"
);
elog
(
ERROR
,
"
Can't serialize access
due to concurrent update"
);
else
else
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
elog
(
ERROR
,
"Isolation level %u is not supported"
,
XactIsoLevel
);
return
;
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 @@
...
@@ -10,7 +10,7 @@
*
*
*
*
* IDENTIFICATION
* 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
* HISTORY
* AUTHOR DATE MAJOR EVENT
* AUTHOR DATE MAJOR EVENT
...
@@ -45,6 +45,7 @@
...
@@ -45,6 +45,7 @@
#include "catalog/catname.h"
#include "catalog/catname.h"
#include "utils/elog.h"
#include "utils/elog.h"
#include "access/xact.h"
#include "access/xact.h"
#include "storage/lmgr.h"
#ifdef MULTIBYTE
#ifdef MULTIBYTE
#include "mb/pg_wchar.h"
#include "mb/pg_wchar.h"
...
@@ -133,6 +134,8 @@ Oid param_type(int t); /* used in parse_expr.c */
...
@@ -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_database1, opt_database2, location, encoding
%type <str> opt_lmode
%type <pboolean> user_createdb_clause, user_createuser_clause
%type <pboolean> user_createdb_clause, user_createuser_clause
%type <str> user_passwd_clause
%type <str> user_passwd_clause
%type <str> user_valid_clause
%type <str> user_valid_clause
...
@@ -269,8 +272,8 @@ Oid param_type(int t); /* used in parse_expr.c */
...
@@ -269,8 +272,8 @@ Oid param_type(int t); /* used in parse_expr.c */
ELSE, END_TRANS, EXECUTE, EXISTS, EXTRACT,
ELSE, END_TRANS, EXECUTE, EXISTS, EXTRACT,
FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
FALSE_P, FETCH, FLOAT, FOR, FOREIGN, FROM, FULL,
GRANT, GROUP, HAVING, HOUR_P,
GRANT, GROUP, HAVING, HOUR_P,
IN, INNER_P, INSENSITIVE, INSERT, INTERVAL, INTO, IS,
IN, INNER_P, INSENSITIVE, INSERT, INTERVAL, INTO, IS,
ISOLATION,
JOIN, KEY, LANGUAGE, LEADING, LEFT, LIKE, LOCAL,
JOIN, KEY, LANGUAGE, LEADING, LEFT, L
EVEL, L
IKE, LOCAL,
MATCH, MINUTE_P, MONTH_P, NAMES,
MATCH, MINUTE_P, MONTH_P, NAMES,
NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF, NULL_P, NUMERIC,
NATIONAL, NATURAL, NCHAR, NEXT, NO, NOT, NULLIF, NULL_P, NUMERIC,
OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P,
OF, ON, ONLY, OPTION, OR, ORDER, OUTER_P,
...
@@ -539,6 +542,24 @@ VariableSetStmt: SET ColId TO var_value
...
@@ -539,6 +542,24 @@ VariableSetStmt: SET ColId TO var_value
n->value = $4;
n->value = $4;
$$ = (Node *) n;
$$ = (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
| SET NAMES encoding
{
{
#ifdef MB
#ifdef MB
...
@@ -573,6 +594,12 @@ VariableShowStmt: SHOW ColId
...
@@ -573,6 +594,12 @@ VariableShowStmt: SHOW ColId
n->name = "timezone";
n->name = "timezone";
$$ = (Node *) n;
$$ = (Node *) n;
}
}
| SHOW TRANSACTION ISOLATION LEVEL
{
VariableShowStmt *n = makeNode(VariableShowStmt);
n->name = "XactIsoLevel";
$$ = (Node *) n;
}
;
;
VariableResetStmt: RESET ColId
VariableResetStmt: RESET ColId
...
@@ -587,6 +614,12 @@ VariableResetStmt: RESET ColId
...
@@ -587,6 +614,12 @@ VariableResetStmt: RESET ColId
n->name = "timezone";
n->name = "timezone";
$$ = (Node *) n;
$$ = (Node *) n;
}
}
| RESET TRANSACTION ISOLATION LEVEL
{
VariableResetStmt *n = makeNode(VariableResetStmt);
n->name = "XactIsoLevel";
$$ = (Node *) n;
}
;
;
...
@@ -2473,28 +2506,77 @@ DeleteStmt: DELETE FROM relation_name
...
@@ -2473,28 +2506,77 @@ DeleteStmt: DELETE FROM relation_name
}
}
;
;
/*
LockStmt: LOCK_P opt_table 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
{
{
DeleteStmt *n = makeNode(DeleteStmt);
LockStmt *n = makeNode(LockStmt);
A_Const *c = makeNode(A_Const);
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;
n->relname = $3;
c->val.val.str = "f";
if (strcasecmp($8, "MODE"))
c->typename = makeNode(TypeName);
elog(ERROR,"parser: syntax error at or near \"%s\"", $8);
c->typename->name = xlateSqlType("bool");
if ($5 != NULL)
c->typename->typmod = -1;
{
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->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;
$$ = (Node *)n;
}
}
;
;
opt_lmode: IDENT { $$ = $1; }
| /*EMPTY*/ { $$ = NULL; }
;
/*****************************************************************************
/*****************************************************************************
*
*
...
...
src/backend/parser/keywords.c
View file @
3498d878
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* 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[] = {
...
@@ -124,12 +124,14 @@ static ScanKeyword ScanKeywords[] = {
{
"into"
,
INTO
},
{
"into"
,
INTO
},
{
"is"
,
IS
},
{
"is"
,
IS
},
{
"isnull"
,
ISNULL
},
{
"isnull"
,
ISNULL
},
{
"isolation"
,
ISOLATION
},
{
"join"
,
JOIN
},
{
"join"
,
JOIN
},
{
"key"
,
KEY
},
{
"key"
,
KEY
},
{
"lancompiler"
,
LANCOMPILER
},
{
"lancompiler"
,
LANCOMPILER
},
{
"language"
,
LANGUAGE
},
{
"language"
,
LANGUAGE
},
{
"leading"
,
LEADING
},
{
"leading"
,
LEADING
},
{
"left"
,
LEFT
},
{
"left"
,
LEFT
},
{
"level"
,
LEVEL
},
{
"like"
,
LIKE
},
{
"like"
,
LIKE
},
{
"listen"
,
LISTEN
},
{
"listen"
,
LISTEN
},
{
"load"
,
LOAD
},
{
"load"
,
LOAD
},
...
...
src/backend/parser/parse.h
View file @
3498d878
...
@@ -94,157 +94,159 @@ typedef union
...
@@ -94,157 +94,159 @@ typedef union
#define INTERVAL 320
#define INTERVAL 320
#define INTO 321
#define INTO 321
#define IS 322
#define IS 322
#define JOIN 323
#define ISOLATION 323
#define KEY 324
#define JOIN 324
#define LANGUAGE 325
#define KEY 325
#define LEADING 326
#define LANGUAGE 326
#define LEFT 327
#define LEADING 327
#define LIKE 328
#define LEFT 328
#define LOCAL 329
#define LEVEL 329
#define MATCH 330
#define LIKE 330
#define MINUTE_P 331
#define LOCAL 331
#define MONTH_P 332
#define MATCH 332
#define NAMES 333
#define MINUTE_P 333
#define NATIONAL 334
#define MONTH_P 334
#define NATURAL 335
#define NAMES 335
#define NCHAR 336
#define NATIONAL 336
#define NEXT 337
#define NATURAL 337
#define NO 338
#define NCHAR 338
#define NOT 339
#define NEXT 339
#define NULLIF 340
#define NO 340
#define NULL_P 341
#define NOT 341
#define NUMERIC 342
#define NULLIF 342
#define OF 343
#define NULL_P 343
#define ON 344
#define NUMERIC 344
#define ONLY 345
#define OF 345
#define OPTION 346
#define ON 346
#define OR 347
#define ONLY 347
#define ORDER 348
#define OPTION 348
#define OUTER_P 349
#define OR 349
#define PARTIAL 350
#define ORDER 350
#define POSITION 351
#define OUTER_P 351
#define PRECISION 352
#define PARTIAL 352
#define PRIMARY 353
#define POSITION 353
#define PRIOR 354
#define PRECISION 354
#define PRIVILEGES 355
#define PRIMARY 355
#define PROCEDURE 356
#define PRIOR 356
#define PUBLIC 357
#define PRIVILEGES 357
#define READ 358
#define PROCEDURE 358
#define REFERENCES 359
#define PUBLIC 359
#define RELATIVE 360
#define READ 360
#define REVOKE 361
#define REFERENCES 361
#define RIGHT 362
#define RELATIVE 362
#define ROLLBACK 363
#define REVOKE 363
#define SCROLL 364
#define RIGHT 364
#define SECOND_P 365
#define ROLLBACK 365
#define SELECT 366
#define SCROLL 366
#define SET 367
#define SECOND_P 367
#define SUBSTRING 368
#define SELECT 368
#define TABLE 369
#define SET 369
#define THEN 370
#define SUBSTRING 370
#define TIME 371
#define TABLE 371
#define TIMESTAMP 372
#define THEN 372
#define TIMEZONE_HOUR 373
#define TIME 373
#define TIMEZONE_MINUTE 374
#define TIMESTAMP 374
#define TO 375
#define TIMEZONE_HOUR 375
#define TRAILING 376
#define TIMEZONE_MINUTE 376
#define TRANSACTION 377
#define TO 377
#define TRIM 378
#define TRAILING 378
#define TRUE_P 379
#define TRANSACTION 379
#define UNION 380
#define TRIM 380
#define UNIQUE 381
#define TRUE_P 381
#define UPDATE 382
#define UNION 382
#define USER 383
#define UNIQUE 383
#define USING 384
#define UPDATE 384
#define VALUES 385
#define USER 385
#define VARCHAR 386
#define USING 386
#define VARYING 387
#define VALUES 387
#define VIEW 388
#define VARCHAR 388
#define WHEN 389
#define VARYING 389
#define WHERE 390
#define VIEW 390
#define WITH 391
#define WHEN 391
#define WORK 392
#define WHERE 392
#define YEAR_P 393
#define WITH 393
#define ZONE 394
#define WORK 394
#define TRIGGER 395
#define YEAR_P 395
#define TYPE_P 396
#define ZONE 396
#define ABORT_TRANS 397
#define TRIGGER 397
#define AFTER 398
#define TYPE_P 398
#define AGGREGATE 399
#define ABORT_TRANS 399
#define ANALYZE 400
#define AFTER 400
#define BACKWARD 401
#define AGGREGATE 401
#define BEFORE 402
#define ANALYZE 402
#define BINARY 403
#define BACKWARD 403
#define CACHE 404
#define BEFORE 404
#define CLUSTER 405
#define BINARY 405
#define COPY 406
#define CACHE 406
#define CREATEDB 407
#define CLUSTER 407
#define CREATEUSER 408
#define COPY 408
#define CYCLE 409
#define CREATEDB 409
#define DATABASE 410
#define CREATEUSER 410
#define DELIMITERS 411
#define CYCLE 411
#define DO 412
#define DATABASE 412
#define EACH 413
#define DELIMITERS 413
#define ENCODING 414
#define DO 414
#define EXPLAIN 415
#define EACH 415
#define EXTEND 416
#define ENCODING 416
#define FORWARD 417
#define EXPLAIN 417
#define FUNCTION 418
#define EXTEND 418
#define HANDLER 419
#define FORWARD 419
#define INCREMENT 420
#define FUNCTION 420
#define INDEX 421
#define HANDLER 421
#define INHERITS 422
#define INCREMENT 422
#define INSTEAD 423
#define INDEX 423
#define ISNULL 424
#define INHERITS 424
#define LANCOMPILER 425
#define INSTEAD 425
#define LISTEN 426
#define ISNULL 426
#define LOAD 427
#define LANCOMPILER 427
#define LOCATION 428
#define LISTEN 428
#define LOCK_P 429
#define LOAD 429
#define MAXVALUE 430
#define LOCATION 430
#define MINVALUE 431
#define LOCK_P 431
#define MOVE 432
#define MAXVALUE 432
#define NEW 433
#define MINVALUE 433
#define NOCREATEDB 434
#define MOVE 434
#define NOCREATEUSER 435
#define NEW 435
#define NONE 436
#define NOCREATEDB 436
#define NOTHING 437
#define NOCREATEUSER 437
#define NOTIFY 438
#define NONE 438
#define NOTNULL 439
#define NOTHING 439
#define OIDS 440
#define NOTIFY 440
#define OPERATOR 441
#define NOTNULL 441
#define PASSWORD 442
#define OIDS 442
#define PROCEDURAL 443
#define OPERATOR 443
#define RECIPE 444
#define PASSWORD 444
#define RENAME 445
#define PROCEDURAL 445
#define RESET 446
#define RECIPE 446
#define RETURNS 447
#define RENAME 447
#define ROW 448
#define RESET 448
#define RULE 449
#define RETURNS 449
#define SEQUENCE 450
#define ROW 450
#define SERIAL 451
#define RULE 451
#define SETOF 452
#define SEQUENCE 452
#define SHOW 453
#define SERIAL 453
#define START 454
#define SETOF 454
#define STATEMENT 455
#define SHOW 455
#define STDIN 456
#define START 456
#define STDOUT 457
#define STATEMENT 457
#define TRUSTED 458
#define STDIN 458
#define UNLISTEN 459
#define STDOUT 459
#define UNTIL 460
#define TRUSTED 460
#define VACUUM 461
#define UNLISTEN 461
#define VALID 462
#define UNTIL 462
#define VERBOSE 463
#define VACUUM 463
#define VERSION 464
#define VALID 464
#define IDENT 465
#define VERBOSE 465
#define SCONST 466
#define VERSION 466
#define Op 467
#define IDENT 467
#define ICONST 468
#define SCONST 468
#define PARAM 469
#define Op 469
#define FCONST 470
#define ICONST 470
#define OP 471
#define PARAM 471
#define UMINUS 472
#define FCONST 472
#define TYPECAST 473
#define OP 473
#define UMINUS 474
#define TYPECAST 475
extern
YYSTYPE
yylval
;
extern
YYSTYPE
yylval
;
src/backend/storage/ipc/shmem.c
View file @
3498d878
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* 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)
...
@@ -636,7 +636,7 @@ TransactionIdIsInProgress(TransactionId xid)
* Yet another strange func for this place... - vadim 07/21/98
* Yet another strange func for this place... - vadim 07/21/98
*/
*/
Snapshot
Snapshot
GetSnapshotData
(
void
)
GetSnapshotData
(
bool
serializable
)
{
{
Snapshot
snapshot
=
(
Snapshot
)
malloc
(
sizeof
(
SnapshotData
));
Snapshot
snapshot
=
(
Snapshot
)
malloc
(
sizeof
(
SnapshotData
));
ShmemIndexEnt
*
result
;
ShmemIndexEnt
*
result
;
...
@@ -648,8 +648,11 @@ GetSnapshotData(void)
...
@@ -648,8 +648,11 @@ GetSnapshotData(void)
Assert
(
ShmemIndex
);
Assert
(
ShmemIndex
);
snapshot
->
xip
=
(
TransactionId
*
)
malloc
(
have
*
sizeof
(
TransactionId
));
snapshot
->
xip
=
(
TransactionId
*
)
malloc
(
have
*
sizeof
(
TransactionId
));
snapshot
->
xmax
=
cid
;
snapshot
->
xmin
=
cid
;
snapshot
->
xmin
=
cid
;
if
(
serializable
)
snapshot
->
xmax
=
cid
;
else
ReadNewTransactionId
(
&
(
snapshot
->
xmax
));
SpinAcquire
(
ShmemIndexLock
);
SpinAcquire
(
ShmemIndexLock
);
...
...
src/backend/tcop/utility.c
View file @
3498d878
...
@@ -9,7 +9,7 @@
...
@@ -9,7 +9,7 @@
*
*
*
*
* IDENTIFICATION
* 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,
...
@@ -760,6 +760,13 @@ ProcessUtility(Node *parsetree,
RemoveUser
(((
DropUserStmt
*
)
parsetree
)
->
user
);
RemoveUser
(((
DropUserStmt
*
)
parsetree
)
->
user
);
break
;
break
;
case
T_LockStmt
:
PS_SET_STATUS
(
commandTag
=
"LOCK TABLE"
);
CHECK_IF_ABORTED
();
LockTableCommand
((
LockStmt
*
)
parsetree
);
break
;
/*
/*
* ******************************** default ********************************
* ******************************** default ********************************
...
...
src/backend/utils/time/tqual.c
View file @
3498d878
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
*
*
* IDENTIFICATION
* 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;
...
@@ -30,7 +30,7 @@ SnapshotData SnapshotDirtyData;
Snapshot
SnapshotDirty
=
&
SnapshotDirtyData
;
Snapshot
SnapshotDirty
=
&
SnapshotDirtyData
;
Snapshot
QuerySnapshot
=
NULL
;
Snapshot
QuerySnapshot
=
NULL
;
static
Snapshot
Serialized
Snapshot
=
NULL
;
Snapshot
Serializable
Snapshot
=
NULL
;
/*
/*
* XXX Transaction system override hacks start here
* XXX Transaction system override hacks start here
...
@@ -551,24 +551,24 @@ SetQuerySnapshot(void)
...
@@ -551,24 +551,24 @@ SetQuerySnapshot(void)
{
{
/* 1st call in xaction */
/* 1st call in xaction */
if
(
Serializ
ed
Snapshot
==
NULL
)
if
(
Serializ
able
Snapshot
==
NULL
)
{
{
Serializ
edSnapshot
=
GetSnapshotData
(
);
Serializ
ableSnapshot
=
GetSnapshotData
(
true
);
QuerySnapshot
=
Serializ
ed
Snapshot
;
QuerySnapshot
=
Serializ
able
Snapshot
;
Assert
(
QuerySnapshot
!=
NULL
);
Assert
(
QuerySnapshot
!=
NULL
);
return
;
return
;
}
}
if
(
QuerySnapshot
!=
Serializ
ed
Snapshot
)
if
(
QuerySnapshot
!=
Serializ
able
Snapshot
)
{
{
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
);
free
(
QuerySnapshot
);
}
}
if
(
XactIsoLevel
==
XACT_SERIALIZ
ED
)
if
(
XactIsoLevel
==
XACT_SERIALIZ
ABLE
)
QuerySnapshot
=
Serializ
ed
Snapshot
;
QuerySnapshot
=
Serializ
able
Snapshot
;
else
else
QuerySnapshot
=
GetSnapshotData
();
QuerySnapshot
=
GetSnapshotData
(
false
);
Assert
(
QuerySnapshot
!=
NULL
);
Assert
(
QuerySnapshot
!=
NULL
);
...
@@ -578,7 +578,7 @@ void
...
@@ -578,7 +578,7 @@ void
FreeXactSnapshot
(
void
)
FreeXactSnapshot
(
void
)
{
{
if
(
QuerySnapshot
!=
NULL
&&
QuerySnapshot
!=
Serializ
ed
Snapshot
)
if
(
QuerySnapshot
!=
NULL
&&
QuerySnapshot
!=
Serializ
able
Snapshot
)
{
{
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
->
xip
);
free
(
QuerySnapshot
);
free
(
QuerySnapshot
);
...
@@ -586,12 +586,12 @@ FreeXactSnapshot(void)
...
@@ -586,12 +586,12 @@ FreeXactSnapshot(void)
QuerySnapshot
=
NULL
;
QuerySnapshot
=
NULL
;
if
(
Serializ
ed
Snapshot
!=
NULL
)
if
(
Serializ
able
Snapshot
!=
NULL
)
{
{
free
(
Serializ
ed
Snapshot
->
xip
);
free
(
Serializ
able
Snapshot
->
xip
);
free
(
Serializ
ed
Snapshot
);
free
(
Serializ
able
Snapshot
);
}
}
Serializ
ed
Snapshot
=
NULL
;
Serializ
able
Snapshot
=
NULL
;
}
}
src/include/access/transam.h
View file @
3498d878
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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
* NOTES
* Transaction System Version 101 now support proper oid
* Transaction System Version 101 now support proper oid
...
@@ -160,6 +160,7 @@ extern void TransBlockNumberSetXidStatus(Relation relation,
...
@@ -160,6 +160,7 @@ extern void TransBlockNumberSetXidStatus(Relation relation,
/* in transam/varsup.c */
/* in transam/varsup.c */
extern
void
VariableRelationPutNextXid
(
TransactionId
xid
);
extern
void
VariableRelationPutNextXid
(
TransactionId
xid
);
extern
void
GetNewTransactionId
(
TransactionId
*
xid
);
extern
void
GetNewTransactionId
(
TransactionId
*
xid
);
extern
void
ReadNewTransactionId
(
TransactionId
*
xid
);
extern
void
GetNewObjectId
(
Oid
*
oid_return
);
extern
void
GetNewObjectId
(
Oid
*
oid_return
);
extern
void
CheckMaxObjectId
(
Oid
assigned_oid
);
extern
void
CheckMaxObjectId
(
Oid
assigned_oid
);
...
...
src/include/access/xact.h
View file @
3498d878
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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
...
@@ -36,8 +36,9 @@ typedef struct TransactionStateData
#define XACT_DIRTY_READ 0
/* not implemented */
#define XACT_DIRTY_READ 0
/* not implemented */
#define XACT_READ_COMMITTED 1
#define XACT_READ_COMMITTED 1
#define XACT_REPEATABLE_READ 2
/* not implemented */
#define XACT_REPEATABLE_READ 2
/* not implemented */
#define XACT_SERIALIZ
ED
3
#define XACT_SERIALIZ
ABLE
3
extern
int
DefaultXactIsoLevel
;
extern
int
XactIsoLevel
;
extern
int
XactIsoLevel
;
/* ----------------
/* ----------------
...
...
src/include/commands/command.h
View file @
3498d878
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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);
...
@@ -44,4 +44,6 @@ extern void PortalCleanup(Portal portal);
extern
void
PerformAddAttribute
(
char
*
relationName
,
char
*
userName
,
extern
void
PerformAddAttribute
(
char
*
relationName
,
char
*
userName
,
bool
inh
,
ColumnDef
*
colDef
);
bool
inh
,
ColumnDef
*
colDef
);
extern
void
LockTableCommand
(
LockStmt
*
lockstmt
);
#endif
/* COMMAND_H */
#endif
/* COMMAND_H */
src/include/nodes/nodes.h
View file @
3498d878
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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
...
@@ -190,6 +190,7 @@ typedef enum NodeTag
T_CreateUserStmt
,
T_CreateUserStmt
,
T_AlterUserStmt
,
T_AlterUserStmt
,
T_DropUserStmt
,
T_DropUserStmt
,
T_LockStmt
,
T_A_Expr
=
700
,
T_A_Expr
=
700
,
T_Attr
,
T_Attr
,
...
...
src/include/nodes/parsenodes.h
View file @
3498d878
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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
...
@@ -574,6 +574,16 @@ typedef struct VariableResetStmt
char
*
name
;
char
*
name
;
}
VariableResetStmt
;
}
VariableResetStmt
;
/* ----------------------
* LOCK Statement
* ----------------------
*/
typedef
struct
LockStmt
{
NodeTag
type
;
char
*
relname
;
/* relation to lock */
int
mode
;
/* lock mode */
}
LockStmt
;
/*****************************************************************************
/*****************************************************************************
* Optimizable Statements
* Optimizable Statements
...
...
src/include/utils/tqual.h
View file @
3498d878
...
@@ -7,7 +7,7 @@
...
@@ -7,7 +7,7 @@
*
*
* Copyright (c) 1994, Regents of the University of California
* 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;
...
@@ -31,6 +31,7 @@ typedef SnapshotData *Snapshot;
extern
Snapshot
SnapshotDirty
;
extern
Snapshot
SnapshotDirty
;
extern
Snapshot
QuerySnapshot
;
extern
Snapshot
QuerySnapshot
;
extern
Snapshot
SerializableSnapshot
;
#define IsSnapshotNow(snapshot) ((Snapshot) snapshot == SnapshotNow)
#define IsSnapshotNow(snapshot) ((Snapshot) snapshot == SnapshotNow)
#define IsSnapshotSelf(snapshot) ((Snapshot) snapshot == SnapshotSelf)
#define IsSnapshotSelf(snapshot) ((Snapshot) snapshot == SnapshotSelf)
...
@@ -99,7 +100,7 @@ extern int HeapTupleSatisfiesUpdate(HeapTuple tuple);
...
@@ -99,7 +100,7 @@ extern int HeapTupleSatisfiesUpdate(HeapTuple tuple);
extern
void
setheapoverride
(
bool
on
);
extern
void
setheapoverride
(
bool
on
);
extern
Snapshot
GetSnapshotData
(
void
);
extern
Snapshot
GetSnapshotData
(
bool
serializable
);
extern
void
SetQuerySnapshot
(
void
);
extern
void
SetQuerySnapshot
(
void
);
extern
void
FreeXactSnapshot
(
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