1
0
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:
Peter Eisentraut
2017-03-28 21:55:58 -04:00
parent 4cb824699e
commit e0eb5e0aea

View File

@ -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]));