MCPcopy Create free account
hub / github.com/FirebirdSQL/firebird / createRseNode

Method createRseNode

src/dsql/BoolNodes.cpp:1139–1183  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1137}
1138
1139BoolExprNode* ComparativeBoolNode::createRseNode(DsqlCompilerScratch* dsqlScratch, UCHAR rseBlrOp)
1140{
1141 MemoryPool& pool = dsqlScratch->getPool();
1142
1143 // Create a derived table representing our subquery.
1144 SelectExprNode* dt = FB_NEW_POOL(pool) SelectExprNode(pool);
1145 // Ignore validation for column names that must exist for "user" derived tables.
1146 dt->dsqlFlags = RecordSourceNode::DFLAG_DT_IGNORE_COLUMN_CHECK | RecordSourceNode::DFLAG_DERIVED;
1147 dt->querySpec = static_cast<RecordSourceNode*>(dsqlSpecialArg.getObject());
1148
1149 RseNode* querySpec = FB_NEW_POOL(pool) RseNode(pool);
1150 querySpec->dsqlFrom = FB_NEW_POOL(pool) RecSourceListNode(pool, 1);
1151 querySpec->dsqlFrom->items[0] = dt;
1152
1153 SelectExprNode* select_expr = FB_NEW_POOL(pool) SelectExprNode(pool);
1154 select_expr->querySpec = querySpec;
1155
1156 const DsqlContextStack::iterator base(*dsqlScratch->context);
1157 const DsqlContextStack::iterator baseDT(dsqlScratch->derivedContext);
1158 const DsqlContextStack::iterator baseUnion(dsqlScratch->unionContext);
1159
1160 RseNode* rse = PASS1_rse(dsqlScratch, select_expr);
1161 rse->flags |= RseNode::FLAG_DSQL_COMPARATIVE;
1162
1163 // Create a conjunct to be injected.
1164
1165 ComparativeBoolNode* cmpNode = FB_NEW_POOL(pool) ComparativeBoolNode(pool, blrOp,
1166 doDsqlPass(dsqlScratch, arg1, false), rse->dsqlSelectList->items[0]);
1167
1168 PASS1_set_parameter_type(dsqlScratch, cmpNode->arg1, cmpNode->arg2, false);
1169
1170 rse->dsqlWhere = cmpNode;
1171
1172 // Create output node.
1173 RseBoolNode* rseBoolNode = FB_NEW_POOL(pool) RseBoolNode(pool, rseBlrOp, rse);
1174 rseBoolNode->line = line;
1175 rseBoolNode->column = column;
1176
1177 // Finish off by cleaning up contexts
1178 dsqlScratch->unionContext.clear(baseUnion);
1179 dsqlScratch->derivedContext.clear(baseDT);
1180 dsqlScratch->context->clear(base);
1181
1182 return rseBoolNode;
1183}
1184
1185
1186//--------------------

Callers

nothing calls this directly

Calls 9

PASS1_rseFunction · 0.85
PASS1_set_parameter_typeFunction · 0.85
RseBoolNodeClass · 0.85
SelectExprNodeClass · 0.70
RseNodeClass · 0.70
RecSourceListNodeClass · 0.70
ComparativeBoolNodeClass · 0.70
getObjectMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected