MCPcopy Create free account
hub / github.com/apache/cloudberry / transformFromClauseItem

Function transformFromClauseItem

src/backend/parser/parse_clause.c:1268–1762  ·  view source on GitHub ↗

* transformFromClauseItem - * Transform a FROM-clause item, adding any required entries to the * range table list being built in the ParseState, and return the * transformed item ready to include in the joinlist. Also build a * ParseNamespaceItem list describing the names exposed by this item. * This routine can recurse to handle SQL92 JOIN expressions. * * The function return va

Source from the content-addressed store, hash-verified

1266 * are indeterminate and should be explicitly set by the caller before use.)
1267 */
1268static Node *
1269transformFromClauseItem(ParseState *pstate, Node *n,
1270 ParseNamespaceItem **top_nsitem,
1271 List **namespace)
1272{
1273 if (IsA(n, RangeVar))
1274 {
1275 /* Plain relation reference, or perhaps a CTE reference */
1276 RangeVar *rv = (RangeVar *) n;
1277 RangeTblRef *rtr;
1278 ParseNamespaceItem *nsitem;
1279
1280 /* Check if it's a CTE or tuplestore reference */
1281 nsitem = getNSItemForSpecialRelationTypes(pstate, rv);
1282
1283 /* if not found above, must be a table reference */
1284 if (!nsitem)
1285 nsitem = transformTableEntry(pstate, rv);
1286
1287 *top_nsitem = nsitem;
1288 *namespace = list_make1(nsitem);
1289 rtr = makeNode(RangeTblRef);
1290 rtr->rtindex = nsitem->p_rtindex;
1291 return (Node *) rtr;
1292 }
1293 else if (IsA(n, RangeSubselect))
1294 {
1295 /* sub-SELECT is like a plain relation */
1296 RangeTblRef *rtr;
1297 ParseNamespaceItem *nsitem;
1298
1299 nsitem = transformRangeSubselect(pstate, (RangeSubselect *) n);
1300 *top_nsitem = nsitem;
1301 *namespace = list_make1(nsitem);
1302 rtr = makeNode(RangeTblRef);
1303 rtr->rtindex = nsitem->p_rtindex;
1304 return (Node *) rtr;
1305 }
1306 else if (IsA(n, RangeFunction))
1307 {
1308 /* function is like a plain relation */
1309 RangeTblRef *rtr;
1310 ParseNamespaceItem *nsitem;
1311
1312 nsitem = transformRangeFunction(pstate, (RangeFunction *) n);
1313 *top_nsitem = nsitem;
1314 *namespace = list_make1(nsitem);
1315 rtr = makeNode(RangeTblRef);
1316 rtr->rtindex = nsitem->p_rtindex;
1317 return (Node *) rtr;
1318 }
1319 else if (IsA(n, RangeTableFunc))
1320 {
1321 /* table function is like a plain relation */
1322 RangeTblRef *rtr;
1323 ParseNamespaceItem *nsitem;
1324
1325 nsitem = transformRangeTableFunc(pstate, (RangeTableFunc *) n);

Callers 1

transformFromClauseFunction · 0.85

Calls 15

transformTableEntryFunction · 0.85
transformRangeSubselectFunction · 0.85
transformRangeFunctionFunction · 0.85
transformRangeTableFuncFunction · 0.85
parser_errpositionFunction · 0.85
exprLocationFunction · 0.85
setNamespaceLateralStateFunction · 0.85
list_lengthFunction · 0.85
list_concatFunction · 0.85
list_truncateFunction · 0.85

Tested by

no test coverage detected