|
|
|
|
@ -1159,7 +1159,7 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
ListCell *cell, |
|
|
|
|
*prev, |
|
|
|
|
*next; |
|
|
|
|
Node *keyCol; |
|
|
|
|
Expr *keyCol; |
|
|
|
|
Oid operoid; |
|
|
|
|
bool need_relabel, |
|
|
|
|
list_has_null = false; |
|
|
|
|
@ -1168,14 +1168,14 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
|
|
|
|
|
/* Left operand is either a simple Var or arbitrary expression */ |
|
|
|
|
if (key->partattrs[0] != 0) |
|
|
|
|
keyCol = (Node *) makeVar(1, |
|
|
|
|
keyCol = (Expr *) makeVar(1, |
|
|
|
|
key->partattrs[0], |
|
|
|
|
key->parttypid[0], |
|
|
|
|
key->parttypmod[0], |
|
|
|
|
key->parttypcoll[0], |
|
|
|
|
0); |
|
|
|
|
else |
|
|
|
|
keyCol = (Node *) copyObject(linitial(key->partexprs)); |
|
|
|
|
keyCol = (Expr *) copyObject(linitial(key->partexprs)); |
|
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
* We must remove any NULL value in the list; we handle it separately |
|
|
|
|
@ -1205,7 +1205,7 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
* expressions |
|
|
|
|
*/ |
|
|
|
|
nulltest1 = makeNode(NullTest); |
|
|
|
|
nulltest1->arg = (Expr *) keyCol; |
|
|
|
|
nulltest1->arg = keyCol; |
|
|
|
|
nulltest1->nulltesttype = IS_NOT_NULL; |
|
|
|
|
nulltest1->argisrow = false; |
|
|
|
|
nulltest1->location = -1; |
|
|
|
|
@ -1216,7 +1216,7 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
* Gin up a col IS NULL test that will be OR'd with other expressions |
|
|
|
|
*/ |
|
|
|
|
nulltest2 = makeNode(NullTest); |
|
|
|
|
nulltest2->arg = (Expr *) keyCol; |
|
|
|
|
nulltest2->arg = keyCol; |
|
|
|
|
nulltest2->nulltesttype = IS_NULL; |
|
|
|
|
nulltest2->argisrow = false; |
|
|
|
|
nulltest2->location = -1; |
|
|
|
|
@ -1237,7 +1237,7 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
operoid = get_partition_operator(key, 0, BTEqualStrategyNumber, |
|
|
|
|
&need_relabel); |
|
|
|
|
if (need_relabel || key->partcollation[0] != key->parttypcoll[0]) |
|
|
|
|
keyCol = (Node *) makeRelabelType((Expr *) keyCol, |
|
|
|
|
keyCol = (Expr *) makeRelabelType(keyCol, |
|
|
|
|
key->partopcintype[0], |
|
|
|
|
-1, |
|
|
|
|
key->partcollation[0], |
|
|
|
|
@ -1291,7 +1291,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
{ |
|
|
|
|
PartitionRangeDatum *ldatum = lfirst(cell1), |
|
|
|
|
*udatum = lfirst(cell2); |
|
|
|
|
Node *keyCol; |
|
|
|
|
Expr *keyCol; |
|
|
|
|
Const *lower_val = NULL, |
|
|
|
|
*upper_val = NULL; |
|
|
|
|
EState *estate; |
|
|
|
|
@ -1307,7 +1307,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
/* Left operand */ |
|
|
|
|
if (key->partattrs[i] != 0) |
|
|
|
|
{ |
|
|
|
|
keyCol = (Node *) makeVar(1, |
|
|
|
|
keyCol = (Expr *) makeVar(1, |
|
|
|
|
key->partattrs[i], |
|
|
|
|
key->parttypid[i], |
|
|
|
|
key->parttypmod[i], |
|
|
|
|
@ -1316,7 +1316,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
keyCol = (Node *) copyObject(lfirst(partexprs_item)); |
|
|
|
|
keyCol = copyObject(lfirst(partexprs_item)); |
|
|
|
|
partexprs_item = lnext(partexprs_item); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -1329,7 +1329,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
if (!IsA(keyCol, Var)) |
|
|
|
|
{ |
|
|
|
|
nulltest = makeNode(NullTest); |
|
|
|
|
nulltest->arg = (Expr *) keyCol; |
|
|
|
|
nulltest->arg = keyCol; |
|
|
|
|
nulltest->nulltesttype = IS_NOT_NULL; |
|
|
|
|
nulltest->argisrow = false; |
|
|
|
|
nulltest->location = -1; |
|
|
|
|
@ -1384,7 +1384,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
elog(ERROR, "invalid range bound specification"); |
|
|
|
|
|
|
|
|
|
if (need_relabel || key->partcollation[i] != key->parttypcoll[i]) |
|
|
|
|
keyCol = (Node *) makeRelabelType((Expr *) keyCol, |
|
|
|
|
keyCol = (Expr *) makeRelabelType(keyCol, |
|
|
|
|
key->partopcintype[i], |
|
|
|
|
-1, |
|
|
|
|
key->partcollation[i], |
|
|
|
|
@ -1393,7 +1393,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
make_opclause(operoid, |
|
|
|
|
BOOLOID, |
|
|
|
|
false, |
|
|
|
|
(Expr *) keyCol, |
|
|
|
|
keyCol, |
|
|
|
|
(Expr *) lower_val, |
|
|
|
|
InvalidOid, |
|
|
|
|
key->partcollation[i])); |
|
|
|
|
@ -1415,7 +1415,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
&need_relabel); |
|
|
|
|
|
|
|
|
|
if (need_relabel || key->partcollation[i] != key->parttypcoll[i]) |
|
|
|
|
keyCol = (Node *) makeRelabelType((Expr *) keyCol, |
|
|
|
|
keyCol = (Expr *) makeRelabelType(keyCol, |
|
|
|
|
key->partopcintype[i], |
|
|
|
|
-1, |
|
|
|
|
key->partcollation[i], |
|
|
|
|
@ -1424,7 +1424,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
make_opclause(operoid, |
|
|
|
|
BOOLOID, |
|
|
|
|
false, |
|
|
|
|
(Expr *) keyCol, |
|
|
|
|
keyCol, |
|
|
|
|
(Expr *) lower_val, |
|
|
|
|
InvalidOid, |
|
|
|
|
key->partcollation[i])); |
|
|
|
|
@ -1437,7 +1437,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
&need_relabel); |
|
|
|
|
|
|
|
|
|
if (need_relabel || key->partcollation[i] != key->parttypcoll[i]) |
|
|
|
|
keyCol = (Node *) makeRelabelType((Expr *) keyCol, |
|
|
|
|
keyCol = (Expr *) makeRelabelType(keyCol, |
|
|
|
|
key->partopcintype[i], |
|
|
|
|
-1, |
|
|
|
|
key->partcollation[i], |
|
|
|
|
@ -1447,7 +1447,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec) |
|
|
|
|
make_opclause(operoid, |
|
|
|
|
BOOLOID, |
|
|
|
|
false, |
|
|
|
|
(Expr *) keyCol, |
|
|
|
|
keyCol, |
|
|
|
|
(Expr *) upper_val, |
|
|
|
|
InvalidOid, |
|
|
|
|
key->partcollation[i])); |
|
|
|
|
|