| 283 | |
| 284 | |
| 285 | class LocalTableSourceNode final : public TypedNode<RecordSourceNode, RecordSourceNode::TYPE_LOCAL_TABLE> |
| 286 | { |
| 287 | public: |
| 288 | explicit LocalTableSourceNode(MemoryPool& pool, const MetaName& aDsqlName = NULL) |
| 289 | : TypedNode<RecordSourceNode, RecordSourceNode::TYPE_LOCAL_TABLE>(pool), |
| 290 | alias(pool) |
| 291 | { |
| 292 | } |
| 293 | |
| 294 | static LocalTableSourceNode* parse(thread_db* tdbb, CompilerScratch* csb, const SSHORT blrOp, |
| 295 | bool parseContext); |
| 296 | |
| 297 | Firebird::string internalPrint(NodePrinter& printer) const override; |
| 298 | RecordSourceNode* dsqlPass(DsqlCompilerScratch* dsqlScratch) override; |
| 299 | |
| 300 | bool dsqlSubSelectFinder(SubSelectFinder& /*visitor*/) override |
| 301 | { |
| 302 | return false; |
| 303 | } |
| 304 | |
| 305 | bool dsqlMatch(DsqlCompilerScratch* dsqlScratch, const ExprNode* other, bool ignoreMapCast) const override; |
| 306 | void genBlr(DsqlCompilerScratch* dsqlScratch) override; |
| 307 | |
| 308 | LocalTableSourceNode* copy(thread_db* tdbb, NodeCopier& copier) const override; |
| 309 | |
| 310 | RecordSourceNode* pass1(thread_db* tdbb, CompilerScratch* csb) override |
| 311 | { |
| 312 | return this; |
| 313 | } |
| 314 | |
| 315 | void pass1Source(thread_db* tdbb, CompilerScratch* csb, RseNode* rse, |
| 316 | BoolExprNode** boolean, RecordSourceNodeStack& stack) override; |
| 317 | |
| 318 | RecordSourceNode* pass2(thread_db* /*tdbb*/, CompilerScratch* /*csb*/) override |
| 319 | { |
| 320 | return this; |
| 321 | } |
| 322 | |
| 323 | void pass2Rse(thread_db* tdbb, CompilerScratch* csb) override; |
| 324 | |
| 325 | bool containsStream(StreamType checkStream) const override |
| 326 | { |
| 327 | return checkStream == stream; |
| 328 | } |
| 329 | |
| 330 | void computeDbKeyStreams(StreamList& streamList) const override |
| 331 | { |
| 332 | streamList.add(getStream()); |
| 333 | } |
| 334 | |
| 335 | bool computable(CompilerScratch* /*csb*/, StreamType /*stream*/, |
| 336 | bool /*allowOnlyCurrentStream*/, ValueExprNode* /*value*/) override |
| 337 | { |
| 338 | return true; |
| 339 | } |
| 340 | |
| 341 | void findDependentFromStreams(const CompilerScratch* /*csb*/, |
| 342 | StreamType /*currentStream*/, SortedStreamList* /*streamList*/) override |