mirror of
https://github.com/postgres/postgres.git
synced 2025-07-31 22:04:40 +03:00
Improve Node vs Expr use a bit
Author: Mark Dilger <hornschnorter@gmail.com>
This commit is contained in:
@ -1159,7 +1159,7 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
ListCell *cell,
|
ListCell *cell,
|
||||||
*prev,
|
*prev,
|
||||||
*next;
|
*next;
|
||||||
Node *keyCol;
|
Expr *keyCol;
|
||||||
Oid operoid;
|
Oid operoid;
|
||||||
bool need_relabel,
|
bool need_relabel,
|
||||||
list_has_null = false;
|
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 */
|
/* Left operand is either a simple Var or arbitrary expression */
|
||||||
if (key->partattrs[0] != 0)
|
if (key->partattrs[0] != 0)
|
||||||
keyCol = (Node *) makeVar(1,
|
keyCol = (Expr *) makeVar(1,
|
||||||
key->partattrs[0],
|
key->partattrs[0],
|
||||||
key->parttypid[0],
|
key->parttypid[0],
|
||||||
key->parttypmod[0],
|
key->parttypmod[0],
|
||||||
key->parttypcoll[0],
|
key->parttypcoll[0],
|
||||||
0);
|
0);
|
||||||
else
|
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
|
* 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
|
* expressions
|
||||||
*/
|
*/
|
||||||
nulltest1 = makeNode(NullTest);
|
nulltest1 = makeNode(NullTest);
|
||||||
nulltest1->arg = (Expr *) keyCol;
|
nulltest1->arg = keyCol;
|
||||||
nulltest1->nulltesttype = IS_NOT_NULL;
|
nulltest1->nulltesttype = IS_NOT_NULL;
|
||||||
nulltest1->argisrow = false;
|
nulltest1->argisrow = false;
|
||||||
nulltest1->location = -1;
|
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
|
* Gin up a col IS NULL test that will be OR'd with other expressions
|
||||||
*/
|
*/
|
||||||
nulltest2 = makeNode(NullTest);
|
nulltest2 = makeNode(NullTest);
|
||||||
nulltest2->arg = (Expr *) keyCol;
|
nulltest2->arg = keyCol;
|
||||||
nulltest2->nulltesttype = IS_NULL;
|
nulltest2->nulltesttype = IS_NULL;
|
||||||
nulltest2->argisrow = false;
|
nulltest2->argisrow = false;
|
||||||
nulltest2->location = -1;
|
nulltest2->location = -1;
|
||||||
@ -1237,7 +1237,7 @@ get_qual_for_list(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
operoid = get_partition_operator(key, 0, BTEqualStrategyNumber,
|
operoid = get_partition_operator(key, 0, BTEqualStrategyNumber,
|
||||||
&need_relabel);
|
&need_relabel);
|
||||||
if (need_relabel || key->partcollation[0] != key->parttypcoll[0])
|
if (need_relabel || key->partcollation[0] != key->parttypcoll[0])
|
||||||
keyCol = (Node *) makeRelabelType((Expr *) keyCol,
|
keyCol = (Expr *) makeRelabelType(keyCol,
|
||||||
key->partopcintype[0],
|
key->partopcintype[0],
|
||||||
-1,
|
-1,
|
||||||
key->partcollation[0],
|
key->partcollation[0],
|
||||||
@ -1291,7 +1291,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
{
|
{
|
||||||
PartitionRangeDatum *ldatum = lfirst(cell1),
|
PartitionRangeDatum *ldatum = lfirst(cell1),
|
||||||
*udatum = lfirst(cell2);
|
*udatum = lfirst(cell2);
|
||||||
Node *keyCol;
|
Expr *keyCol;
|
||||||
Const *lower_val = NULL,
|
Const *lower_val = NULL,
|
||||||
*upper_val = NULL;
|
*upper_val = NULL;
|
||||||
EState *estate;
|
EState *estate;
|
||||||
@ -1307,7 +1307,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
/* Left operand */
|
/* Left operand */
|
||||||
if (key->partattrs[i] != 0)
|
if (key->partattrs[i] != 0)
|
||||||
{
|
{
|
||||||
keyCol = (Node *) makeVar(1,
|
keyCol = (Expr *) makeVar(1,
|
||||||
key->partattrs[i],
|
key->partattrs[i],
|
||||||
key->parttypid[i],
|
key->parttypid[i],
|
||||||
key->parttypmod[i],
|
key->parttypmod[i],
|
||||||
@ -1316,7 +1316,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
keyCol = (Node *) copyObject(lfirst(partexprs_item));
|
keyCol = copyObject(lfirst(partexprs_item));
|
||||||
partexprs_item = lnext(partexprs_item);
|
partexprs_item = lnext(partexprs_item);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1329,7 +1329,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
if (!IsA(keyCol, Var))
|
if (!IsA(keyCol, Var))
|
||||||
{
|
{
|
||||||
nulltest = makeNode(NullTest);
|
nulltest = makeNode(NullTest);
|
||||||
nulltest->arg = (Expr *) keyCol;
|
nulltest->arg = keyCol;
|
||||||
nulltest->nulltesttype = IS_NOT_NULL;
|
nulltest->nulltesttype = IS_NOT_NULL;
|
||||||
nulltest->argisrow = false;
|
nulltest->argisrow = false;
|
||||||
nulltest->location = -1;
|
nulltest->location = -1;
|
||||||
@ -1384,7 +1384,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
elog(ERROR, "invalid range bound specification");
|
elog(ERROR, "invalid range bound specification");
|
||||||
|
|
||||||
if (need_relabel || key->partcollation[i] != key->parttypcoll[i])
|
if (need_relabel || key->partcollation[i] != key->parttypcoll[i])
|
||||||
keyCol = (Node *) makeRelabelType((Expr *) keyCol,
|
keyCol = (Expr *) makeRelabelType(keyCol,
|
||||||
key->partopcintype[i],
|
key->partopcintype[i],
|
||||||
-1,
|
-1,
|
||||||
key->partcollation[i],
|
key->partcollation[i],
|
||||||
@ -1393,7 +1393,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
make_opclause(operoid,
|
make_opclause(operoid,
|
||||||
BOOLOID,
|
BOOLOID,
|
||||||
false,
|
false,
|
||||||
(Expr *) keyCol,
|
keyCol,
|
||||||
(Expr *) lower_val,
|
(Expr *) lower_val,
|
||||||
InvalidOid,
|
InvalidOid,
|
||||||
key->partcollation[i]));
|
key->partcollation[i]));
|
||||||
@ -1415,7 +1415,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
&need_relabel);
|
&need_relabel);
|
||||||
|
|
||||||
if (need_relabel || key->partcollation[i] != key->parttypcoll[i])
|
if (need_relabel || key->partcollation[i] != key->parttypcoll[i])
|
||||||
keyCol = (Node *) makeRelabelType((Expr *) keyCol,
|
keyCol = (Expr *) makeRelabelType(keyCol,
|
||||||
key->partopcintype[i],
|
key->partopcintype[i],
|
||||||
-1,
|
-1,
|
||||||
key->partcollation[i],
|
key->partcollation[i],
|
||||||
@ -1424,7 +1424,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
make_opclause(operoid,
|
make_opclause(operoid,
|
||||||
BOOLOID,
|
BOOLOID,
|
||||||
false,
|
false,
|
||||||
(Expr *) keyCol,
|
keyCol,
|
||||||
(Expr *) lower_val,
|
(Expr *) lower_val,
|
||||||
InvalidOid,
|
InvalidOid,
|
||||||
key->partcollation[i]));
|
key->partcollation[i]));
|
||||||
@ -1437,7 +1437,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
&need_relabel);
|
&need_relabel);
|
||||||
|
|
||||||
if (need_relabel || key->partcollation[i] != key->parttypcoll[i])
|
if (need_relabel || key->partcollation[i] != key->parttypcoll[i])
|
||||||
keyCol = (Node *) makeRelabelType((Expr *) keyCol,
|
keyCol = (Expr *) makeRelabelType(keyCol,
|
||||||
key->partopcintype[i],
|
key->partopcintype[i],
|
||||||
-1,
|
-1,
|
||||||
key->partcollation[i],
|
key->partcollation[i],
|
||||||
@ -1447,7 +1447,7 @@ get_qual_for_range(PartitionKey key, PartitionBoundSpec *spec)
|
|||||||
make_opclause(operoid,
|
make_opclause(operoid,
|
||||||
BOOLOID,
|
BOOLOID,
|
||||||
false,
|
false,
|
||||||
(Expr *) keyCol,
|
keyCol,
|
||||||
(Expr *) upper_val,
|
(Expr *) upper_val,
|
||||||
InvalidOid,
|
InvalidOid,
|
||||||
key->partcollation[i]));
|
key->partcollation[i]));
|
||||||
|
Reference in New Issue
Block a user