Offering: openGaussDev

More detail: 

# Conflicts:
#	src/gausskernel/storage/tcap/tcap_manager.cpp

Match-id-c0b0a159ce50e302e53a882e1916b594b0f47286
This commit is contained in:
openGaussDev 2022-03-05 17:53:24 +08:00 committed by yanghao
parent e5970d87e0
commit 1d66aded47
5 changed files with 1918 additions and 1894 deletions

View File

@ -19590,6 +19590,11 @@ for_locking_items:
for_locking_item:
FOR UPDATE hint_string locked_rels_list opt_nowait
{
if (u_sess->parser_cxt.isTimeCapsule) {
u_sess->parser_cxt.isTimeCapsule = false;
ereport(errstate, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
errmsg("SELECT TIMECAPSULE FOR UPDATE is not supported.")));
}
LockingClause *n = makeNode(LockingClause);
n->lockedRels = $4;
n->forUpdate = TRUE;
@ -20193,22 +20198,22 @@ timecapsule_clause:
TIMECAPSULE opt_timecapsule_clause { $$ = $2; }
opt_timecapsule_clause:
CSN a_expr
CSN {u_sess->parser_cxt.isTimeCapsule = true;} a_expr
{
TcapFeatureEnsure();
RangeTimeCapsule *n = makeNode(RangeTimeCapsule);
n->tvtype = TV_VERSION_CSN;
n->tvver = (Node *)$2;
n->location = @2;
n->tvver = (Node *)$3;
n->location = @3;
$$ = (Node *) n;
}
| TIMESTAMP a_expr
| TIMESTAMP {u_sess->parser_cxt.isTimeCapsule = true;} a_expr
{
TcapFeatureEnsure();
RangeTimeCapsule *n = makeNode(RangeTimeCapsule);
n->tvtype = TV_VERSION_TIMESTAMP;
n->tvver = (Node *)$2;
n->location = @2;
n->tvver = (Node *)$3;
n->location = @3;
$$ = (Node *) n;
}
;

View File

@ -28,6 +28,11 @@
extern void resetOperatorPlusFlag();
static void resetIsTimeCapsuleFlag()
{
u_sess->parser_cxt.isTimeCapsule = false;
}
static void resetCreateFuncFlag()
{
u_sess->parser_cxt.isCreateFuncOrProc = false;
@ -48,6 +53,9 @@ List* raw_parser(const char* str, List** query_string_locationlist)
/* reset u_sess->parser_cxt.stmt_contains_operator_plus */
resetOperatorPlusFlag();
/* reset u_sess->parser_cxt.isTimeCapsule */
resetIsTimeCapsuleFlag();
/* reset u_sess->parser_cxt.isCreateFuncOrProc */
resetCreateFuncFlag();

View File

@ -280,6 +280,7 @@ static void knl_u_parser_init(knl_u_parser_context* parser_cxt)
parser_cxt->ddl_pbe_context = NULL;
parser_cxt->in_package_function_compile = false;
parser_cxt->isCreateFuncOrProc = false;
parser_cxt->isTimeCapsule = false;
}
static void knl_u_advisor_init(knl_u_advisor_context* adv_cxt)

File diff suppressed because it is too large Load Diff

View File

@ -417,6 +417,8 @@ typedef struct knl_u_parser_context {
/* this is used in parser.gram.y not in plpgsql */
bool isCreateFuncOrProc;
bool isTimeCapsule;
} knl_u_parser_context;
typedef struct knl_u_trigger_context {