| 334 | |
| 335 | |
| 336 | class DeclareLocalTableNode final : public TypedNode<StmtNode, StmtNode::TYPE_DECLARE_LOCAL_TABLE> |
| 337 | { |
| 338 | public: |
| 339 | struct Impure |
| 340 | { |
| 341 | RecordBuffer* recordBuffer; |
| 342 | }; |
| 343 | |
| 344 | public: |
| 345 | explicit DeclareLocalTableNode(MemoryPool& pool) |
| 346 | : TypedNode<StmtNode, StmtNode::TYPE_DECLARE_LOCAL_TABLE>(pool) |
| 347 | { |
| 348 | } |
| 349 | |
| 350 | public: |
| 351 | static DmlNode* parse(thread_db* tdbb, MemoryPool& pool, CompilerScratch* csb, const UCHAR blrOp); |
| 352 | |
| 353 | Firebird::string internalPrint(NodePrinter& printer) const override; |
| 354 | DeclareLocalTableNode* dsqlPass(DsqlCompilerScratch* dsqlScratch) override; |
| 355 | void genBlr(DsqlCompilerScratch* dsqlScratch) override; |
| 356 | DeclareLocalTableNode* copy(thread_db* tdbb, NodeCopier& copier) const override; |
| 357 | |
| 358 | DeclareLocalTableNode* pass1(thread_db* tdbb, CompilerScratch* csb) override |
| 359 | { |
| 360 | return this; |
| 361 | } |
| 362 | |
| 363 | DeclareLocalTableNode* pass2(thread_db* tdbb, CompilerScratch* csb) override; |
| 364 | const StmtNode* execute(thread_db* tdbb, Request* request, ExeState* exeState) const override; |
| 365 | |
| 366 | public: |
| 367 | Impure* getImpure(thread_db* tdbb, Request* request, bool createWhenDead = true) const; |
| 368 | |
| 369 | public: |
| 370 | NestConst<Format> format; |
| 371 | USHORT tableNumber = 0; |
| 372 | }; |
| 373 | |
| 374 | |
| 375 | class DeclareSubFuncNode final : public TypedNode<StmtNode, StmtNode::TYPE_DECLARE_SUBFUNC> |