Parse a RecordSourceNode.
| 1267 | |
| 1268 | // Parse a RecordSourceNode. |
| 1269 | RecordSourceNode* PAR_parseRecordSource(thread_db* tdbb, CompilerScratch* csb) |
| 1270 | { |
| 1271 | SET_TDBB(tdbb); |
| 1272 | |
| 1273 | const SSHORT blrOp = csb->csb_blr_reader.getByte(); |
| 1274 | |
| 1275 | switch (blrOp) |
| 1276 | { |
| 1277 | case blr_pid: |
| 1278 | case blr_pid2: |
| 1279 | case blr_procedure: |
| 1280 | case blr_procedure2: |
| 1281 | case blr_procedure3: |
| 1282 | case blr_procedure4: |
| 1283 | case blr_subproc: |
| 1284 | return ProcedureSourceNode::parse(tdbb, csb, blrOp, true); |
| 1285 | |
| 1286 | case blr_rse: |
| 1287 | case blr_lateral_rse: |
| 1288 | case blr_rs_stream: |
| 1289 | return PAR_rse(tdbb, csb, blrOp); |
| 1290 | |
| 1291 | case blr_relation: |
| 1292 | case blr_rid: |
| 1293 | case blr_relation2: |
| 1294 | case blr_rid2: |
| 1295 | return RelationSourceNode::parse(tdbb, csb, blrOp, true); |
| 1296 | |
| 1297 | case blr_local_table_id: |
| 1298 | return LocalTableSourceNode::parse(tdbb, csb, blrOp, true); |
| 1299 | |
| 1300 | case blr_union: |
| 1301 | case blr_recurse: |
| 1302 | return UnionSourceNode::parse(tdbb, csb, blrOp); |
| 1303 | |
| 1304 | case blr_window: |
| 1305 | return WindowSourceNode::parse(tdbb, csb); |
| 1306 | |
| 1307 | case blr_aggregate: |
| 1308 | return AggregateSourceNode::parse(tdbb, csb); |
| 1309 | |
| 1310 | default: |
| 1311 | PAR_syntax_error(csb, "record source"); |
| 1312 | } |
| 1313 | |
| 1314 | return NULL; // silence warning |
| 1315 | } |
| 1316 | |
| 1317 | |
| 1318 | // Parse a record selection expression. |
no test coverage detected