From: <asf...@us...> - 2010-08-09 15:49:01
|
Revision: 51418 http://firebird.svn.sourceforge.net/firebird/?rev=51418&view=rev Author: asfernandes Date: 2010-08-09 15:48:51 +0000 (Mon, 09 Aug 2010) Log Message: ----------- Const correction for EVL, EXE and they subsystems. Adjustments to CMP and OPT. Modified Paths: -------------- firebird/trunk/builds/win32/msvc10/common.vcxproj firebird/trunk/builds/win32/msvc10/common.vcxproj.filters firebird/trunk/builds/win32/msvc10/common_classic.vcxproj firebird/trunk/builds/win32/msvc10/common_classic.vcxproj.filters firebird/trunk/builds/win32/msvc10/common_static.vcxproj firebird/trunk/builds/win32/msvc10/common_static.vcxproj.filters firebird/trunk/builds/win32/msvc8/common.vcproj firebird/trunk/builds/win32/msvc8/common_classic.vcproj firebird/trunk/builds/win32/msvc8/common_static.vcproj firebird/trunk/builds/win32/msvc9/common.vcproj firebird/trunk/builds/win32/msvc9/common_classic.vcproj firebird/trunk/builds/win32/msvc9/common_static.vcproj firebird/trunk/src/dsql/AggNodes.cpp firebird/trunk/src/dsql/AggNodes.h firebird/trunk/src/dsql/ExprNodes.cpp firebird/trunk/src/dsql/ExprNodes.h firebird/trunk/src/dsql/Nodes.h firebird/trunk/src/dsql/StmtNodes.cpp firebird/trunk/src/dsql/StmtNodes.h firebird/trunk/src/dsql/WinNodes.cpp firebird/trunk/src/dsql/WinNodes.h firebird/trunk/src/jrd/ExtEngineManager.cpp firebird/trunk/src/jrd/ExtEngineManager.h firebird/trunk/src/jrd/Function.epp firebird/trunk/src/jrd/Function.h firebird/trunk/src/jrd/Optimizer.cpp firebird/trunk/src/jrd/Optimizer.h firebird/trunk/src/jrd/SysFunction.cpp firebird/trunk/src/jrd/SysFunction.h firebird/trunk/src/jrd/blb.cpp firebird/trunk/src/jrd/blb_proto.h firebird/trunk/src/jrd/btr.cpp firebird/trunk/src/jrd/btr_proto.h firebird/trunk/src/jrd/cmp.cpp firebird/trunk/src/jrd/evl.cpp firebird/trunk/src/jrd/evl_proto.h firebird/trunk/src/jrd/exe.cpp firebird/trunk/src/jrd/exe.h firebird/trunk/src/jrd/exe_proto.h firebird/trunk/src/jrd/execute_statement.cpp firebird/trunk/src/jrd/execute_statement.h firebird/trunk/src/jrd/extds/ExtDS.cpp firebird/trunk/src/jrd/extds/ExtDS.h firebird/trunk/src/jrd/fun.epp firebird/trunk/src/jrd/fun_proto.h firebird/trunk/src/jrd/met.epp firebird/trunk/src/jrd/opt.cpp firebird/trunk/src/jrd/par.cpp firebird/trunk/src/jrd/recsrc/AggregatedStream.cpp firebird/trunk/src/jrd/recsrc/Cursor.cpp firebird/trunk/src/jrd/recsrc/Cursor.h firebird/trunk/src/jrd/recsrc/FilteredStream.cpp firebird/trunk/src/jrd/recsrc/HashJoin.cpp firebird/trunk/src/jrd/recsrc/MergeJoin.cpp firebird/trunk/src/jrd/recsrc/ProcedureScan.cpp firebird/trunk/src/jrd/recsrc/RecordSource.h firebird/trunk/src/jrd/recsrc/RecursiveStream.cpp firebird/trunk/src/jrd/recsrc/SortedStream.cpp firebird/trunk/src/jrd/recsrc/Union.cpp firebird/trunk/src/jrd/recsrc/WindowedStream.cpp firebird/trunk/src/jrd/req.h firebird/trunk/src/jrd/trace/TraceJrdHelpers.h Added Paths: ----------- firebird/trunk/src/common/classes/NestConst.h Modified: firebird/trunk/builds/win32/msvc10/common.vcxproj =================================================================== --- firebird/trunk/builds/win32/msvc10/common.vcxproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc10/common.vcxproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -199,6 +199,7 @@ <ClInclude Include="..\..\..\src\common\classes\GenericMap.h" /> <ClInclude Include="..\..\..\src\common\classes\MetaName.h" /> <ClInclude Include="..\..\..\src\common\classes\MsgPrint.h" /> + <ClInclude Include="..\..\..\src\common\classes\NestConst.h" /> <ClInclude Include="..\..\..\src\common\classes\SafeArg.h" /> <ClInclude Include="..\..\..\src\common\StatusArg.h" /> <ClInclude Include="..\..\..\src\common\StatusHolder.h" /> Modified: firebird/trunk/builds/win32/msvc10/common.vcxproj.filters =================================================================== --- firebird/trunk/builds/win32/msvc10/common.vcxproj.filters 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc10/common.vcxproj.filters 2010-08-09 15:48:51 UTC (rev 51418) @@ -180,6 +180,9 @@ <ClInclude Include="..\..\..\src\common\classes\MsgPrint.h"> <Filter>Header files</Filter> </ClInclude> + <ClInclude Include="..\..\..\src\common\classes\NestConst.h"> + <Filter>Header files</Filter> + </ClInclude> <ClInclude Include="..\..\..\src\common\classes\SafeArg.h"> <Filter>Header files</Filter> </ClInclude> Modified: firebird/trunk/builds/win32/msvc10/common_classic.vcxproj =================================================================== --- firebird/trunk/builds/win32/msvc10/common_classic.vcxproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc10/common_classic.vcxproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -198,6 +198,7 @@ <ClInclude Include="..\..\..\src\common\classes\GenericMap.h" /> <ClInclude Include="..\..\..\src\common\classes\MetaName.h" /> <ClInclude Include="..\..\..\src\common\classes\MsgPrint.h" /> + <ClInclude Include="..\..\..\src\common\classes\NestConst.h" /> <ClInclude Include="..\..\..\src\common\classes\SafeArg.h" /> <ClInclude Include="..\..\..\src\common\StatusArg.h" /> <ClInclude Include="..\..\..\src\common\StatusHolder.h" /> Modified: firebird/trunk/builds/win32/msvc10/common_classic.vcxproj.filters =================================================================== --- firebird/trunk/builds/win32/msvc10/common_classic.vcxproj.filters 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc10/common_classic.vcxproj.filters 2010-08-09 15:48:51 UTC (rev 51418) @@ -177,6 +177,9 @@ <ClInclude Include="..\..\..\src\common\classes\MsgPrint.h"> <Filter>Header files</Filter> </ClInclude> + <ClInclude Include="..\..\..\src\common\classes\NestConst.h"> + <Filter>Header files</Filter> + </ClInclude> <ClInclude Include="..\..\..\src\common\classes\SafeArg.h"> <Filter>Header files</Filter> </ClInclude> Modified: firebird/trunk/builds/win32/msvc10/common_static.vcxproj =================================================================== --- firebird/trunk/builds/win32/msvc10/common_static.vcxproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc10/common_static.vcxproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -193,6 +193,7 @@ <ClInclude Include="..\..\..\src\common\classes\init.h" /> <ClInclude Include="..\..\..\src\common\classes\MetaName.h" /> <ClInclude Include="..\..\..\src\common\classes\MsgPrint.h" /> + <ClInclude Include="..\..\..\src\common\classes\NestConst.h" /> <ClInclude Include="..\..\..\src\common\classes\SafeArg.h" /> <ClInclude Include="..\..\..\src\common\StatusArg.h" /> <ClInclude Include="..\..\..\src\common\StatusHolder.h" /> Modified: firebird/trunk/builds/win32/msvc10/common_static.vcxproj.filters =================================================================== --- firebird/trunk/builds/win32/msvc10/common_static.vcxproj.filters 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc10/common_static.vcxproj.filters 2010-08-09 15:48:51 UTC (rev 51418) @@ -156,6 +156,9 @@ <ClInclude Include="..\..\..\src\common\classes\MsgPrint.h"> <Filter>Header files</Filter> </ClInclude> + <ClInclude Include="..\..\..\src\common\classes\NestConst.h"> + <Filter>Header files</Filter> + </ClInclude> <ClInclude Include="..\..\..\src\common\classes\SafeArg.h"> <Filter>Header files</Filter> </ClInclude> Modified: firebird/trunk/builds/win32/msvc8/common.vcproj =================================================================== --- firebird/trunk/builds/win32/msvc8/common.vcproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc8/common.vcproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -501,6 +501,10 @@ > </File> <File + RelativePath="..\..\..\src\common\classes\NestConst.h" + > + </File> + <File RelativePath="..\..\..\src\common\classes\SafeArg.h" > </File> Modified: firebird/trunk/builds/win32/msvc8/common_classic.vcproj =================================================================== --- firebird/trunk/builds/win32/msvc8/common_classic.vcproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc8/common_classic.vcproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -497,6 +497,10 @@ > </File> <File + RelativePath="..\..\..\src\common\classes\NestConst.h" + > + </File> + <File RelativePath="..\..\..\src\common\classes\SafeArg.h" > </File> Modified: firebird/trunk/builds/win32/msvc8/common_static.vcproj =================================================================== --- firebird/trunk/builds/win32/msvc8/common_static.vcproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc8/common_static.vcproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -470,6 +470,10 @@ > </File> <File + RelativePath="..\..\..\src\common\classes\NestConst.h" + > + </File> + <File RelativePath="..\..\..\src\common\classes\SafeArg.h" > </File> Modified: firebird/trunk/builds/win32/msvc9/common.vcproj =================================================================== --- firebird/trunk/builds/win32/msvc9/common.vcproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc9/common.vcproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -502,6 +502,10 @@ > </File> <File + RelativePath="..\..\..\src\common\classes\NestConst.h" + > + </File> + <File RelativePath="..\..\..\src\common\classes\SafeArg.h" > </File> Modified: firebird/trunk/builds/win32/msvc9/common_classic.vcproj =================================================================== --- firebird/trunk/builds/win32/msvc9/common_classic.vcproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc9/common_classic.vcproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -498,6 +498,10 @@ > </File> <File + RelativePath="..\..\..\src\common\classes\NestConst.h" + > + </File> + <File RelativePath="..\..\..\src\common\classes\SafeArg.h" > </File> Modified: firebird/trunk/builds/win32/msvc9/common_static.vcproj =================================================================== --- firebird/trunk/builds/win32/msvc9/common_static.vcproj 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/builds/win32/msvc9/common_static.vcproj 2010-08-09 15:48:51 UTC (rev 51418) @@ -471,6 +471,10 @@ > </File> <File + RelativePath="..\..\..\src\common\classes\NestConst.h" + > + </File> + <File RelativePath="..\..\..\src\common\classes\SafeArg.h" > </File> Added: firebird/trunk/src/common/classes/NestConst.h =================================================================== --- firebird/trunk/src/common/classes/NestConst.h (rev 0) +++ firebird/trunk/src/common/classes/NestConst.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -0,0 +1,52 @@ +/* + * The contents of this file are subject to the Initial + * Developer's Public License Version 1.0 (the "License"); + * you may not use this file except in compliance with the + * License. You may obtain a copy of the License at + * http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_idpl. + * + * Software distributed under the License is distributed AS IS, + * WITHOUT WARRANTY OF ANY KIND, either express or implied. + * See the License for the specific language governing rights + * and limitations under the License. + * + * The Original Code was created by Adriano dos Santos Fernandes + * for the Firebird Open Source RDBMS project. + * + * Copyright (c) 2010 Adriano dos Santos Fernandes <adr...@gm...> + * and all contributors signed below. + * + * All Rights Reserved. + * Contributor(s): ______________________________________. + */ + +#ifndef COMMON_NEST_CONST_H +#define COMMON_NEST_CONST_H + +// Encloses a pointer to cascade parent object constness. +template <typename T> +class NestConst +{ +public: + NestConst(T* aPtr = NULL) + : ptr(aPtr) + { + } + + NestConst<T>& operator =(T* aPtr) + { + ptr = aPtr; + return *this; + } + + operator T*() { return ptr; } + operator const T*() const { return ptr; } + + T* operator ->() { return ptr; } + const T* operator ->() const { return ptr; } + +private: + T* ptr; +}; + +#endif // COMMON_NEST_CONST_H Property changes on: firebird/trunk/src/common/classes/NestConst.h ___________________________________________________________________ Added: svn:mime-type + text/plain Added: svn:eol-style + native Modified: firebird/trunk/src/dsql/AggNodes.cpp =================================================================== --- firebird/trunk/src/dsql/AggNodes.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/AggNodes.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -553,7 +553,7 @@ } } -ExprNode* AvgAggNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* AvgAggNode::copy(thread_db* tdbb, NodeCopier& copier) { AvgAggNode* node = FB_NEW(*tdbb->getDefaultPool()) AvgAggNode(*tdbb->getDefaultPool(), distinct, dialect1); @@ -679,7 +679,7 @@ desc->makeBlob(desc->getBlobSubType(), desc->getTextType()); } -ExprNode* ListAggNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* ListAggNode::copy(thread_db* tdbb, NodeCopier& copier) { ListAggNode* node = FB_NEW(*tdbb->getDefaultPool()) ListAggNode(*tdbb->getDefaultPool(), distinct); @@ -805,7 +805,7 @@ desc->dsc_flags = 0; } -ExprNode* CountAggNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* CountAggNode::copy(thread_db* tdbb, NodeCopier& copier) { CountAggNode* node = FB_NEW(*tdbb->getDefaultPool()) CountAggNode(*tdbb->getDefaultPool(), distinct); @@ -1040,7 +1040,7 @@ ERR_post(Arg::Gds(isc_datype_notsup)); // data type not supported for arithmetic } -ExprNode* SumAggNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* SumAggNode::copy(thread_db* tdbb, NodeCopier& copier) { SumAggNode* node = FB_NEW(*tdbb->getDefaultPool()) SumAggNode(*tdbb->getDefaultPool(), distinct, dialect1); @@ -1123,7 +1123,7 @@ CMP_get_desc(tdbb, csb, arg, desc); } -ExprNode* MaxMinAggNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* MaxMinAggNode::copy(thread_db* tdbb, NodeCopier& copier) { MaxMinAggNode* node = FB_NEW(*tdbb->getDefaultPool()) MaxMinAggNode(*tdbb->getDefaultPool(), type); Modified: firebird/trunk/src/dsql/AggNodes.h =================================================================== --- firebird/trunk/src/dsql/AggNodes.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/AggNodes.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -39,7 +39,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual ExprNode* pass2(thread_db* tdbb, CompilerScratch* csb); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; @@ -65,7 +65,7 @@ virtual bool setParameterType(DsqlCompilerScratch* dsqlScratch, dsql_nod* node, bool forceVarChar) const; virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual void checkOrderedWindowCapable() const { @@ -84,7 +84,7 @@ private: dsql_nod* dsqlDelimiter; - jrd_nod* delimiter; + NestConst<jrd_nod> delimiter; }; class CountAggNode : public AggNode @@ -97,7 +97,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void genBlr(); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; virtual void aggPass(thread_db* tdbb, jrd_req* request, dsc* desc) const; @@ -116,7 +116,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; virtual void aggPass(thread_db* tdbb, jrd_req* request, dsc* desc) const; @@ -141,7 +141,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; virtual void aggPass(thread_db* tdbb, jrd_req* request, dsc* desc) const; Modified: firebird/trunk/src/dsql/ExprNodes.cpp =================================================================== --- firebird/trunk/src/dsql/ExprNodes.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/ExprNodes.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -57,9 +57,15 @@ reinterpret_cast<ExprNode*>(node->nod_arg[0]) : NULL; } -ExprNode* ExprNode::fromLegacy(const jrd_nod* node) +const ExprNode* ExprNode::fromLegacy(const jrd_nod* node) { return node->nod_type == nod_class_exprnode_jrd ? + reinterpret_cast<const ExprNode*>(node->nod_arg[0]) : NULL; +} + +ExprNode* ExprNode::fromLegacy(jrd_nod* node) +{ + return node->nod_type == nod_class_exprnode_jrd ? reinterpret_cast<ExprNode*>(node->nod_arg[0]) : NULL; } @@ -111,14 +117,14 @@ ExprNode* ExprNode::pass1(thread_db* tdbb, CompilerScratch* csb) { - for (jrd_nod*** i = jrdChildNodes.begin(); i != jrdChildNodes.end(); ++i) + for (NestConst<jrd_nod>** i = jrdChildNodes.begin(); i != jrdChildNodes.end(); ++i) **i = CMP_pass1(tdbb, csb, **i); return this; } ExprNode* ExprNode::pass2(thread_db* tdbb, CompilerScratch* csb) { - for (jrd_nod*** i = jrdChildNodes.begin(); i != jrdChildNodes.end(); ++i) + for (NestConst<jrd_nod>** i = jrdChildNodes.begin(); i != jrdChildNodes.end(); ++i) **i = CMP_pass2(tdbb, csb, **i, node); return this; } @@ -127,7 +133,7 @@ { bool ret = false; - for (jrd_nod*** i = jrdChildNodes.begin(); i != jrdChildNodes.end(); ++i) + for (NestConst<jrd_nod>** i = jrdChildNodes.begin(); i != jrdChildNodes.end(); ++i) ret |= visitor.visit(**i); return ret; @@ -203,7 +209,7 @@ DataTypeUtil(tdbb).makeConcatenate(desc, &desc1, &desc2); } -ExprNode* ConcatenateNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* ConcatenateNode::copy(thread_db* tdbb, NodeCopier& copier) { ConcatenateNode* node = FB_NEW(*tdbb->getDefaultPool()) ConcatenateNode(*tdbb->getDefaultPool()); node->arg1 = copier.copy(tdbb, arg1); @@ -591,7 +597,7 @@ fb_assert(false); } -ExprNode* OverNode::copy(thread_db* /*tdbb*/, NodeCopier& /*copier*/) const +ExprNode* OverNode::copy(thread_db* /*tdbb*/, NodeCopier& /*copier*/) { fb_assert(false); return NULL; @@ -687,7 +693,7 @@ CMP_get_desc(tdbb, csb, escape, &tempDesc); } -ExprNode* SubstringSimilarNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* SubstringSimilarNode::copy(thread_db* tdbb, NodeCopier& copier) { SubstringSimilarNode* node = FB_NEW(*tdbb->getDefaultPool()) SubstringSimilarNode( *tdbb->getDefaultPool()); @@ -947,7 +953,7 @@ delete *pArgs; } -ExprNode* SysFuncCallNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* SysFuncCallNode::copy(thread_db* tdbb, NodeCopier& copier) { SysFuncCallNode* node = FB_NEW(*tdbb->getDefaultPool()) SysFuncCallNode( *tdbb->getDefaultPool(), name); @@ -1169,7 +1175,7 @@ desc->clear(); } -ExprNode* UdfCallNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* UdfCallNode::copy(thread_db* tdbb, NodeCopier& copier) { UdfCallNode* node = FB_NEW(*tdbb->getDefaultPool()) UdfCallNode(*tdbb->getDefaultPool(), name); node->args = copier.copy(tdbb, args); Modified: firebird/trunk/src/dsql/ExprNodes.h =================================================================== --- firebird/trunk/src/dsql/ExprNodes.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/ExprNodes.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -47,7 +47,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual ExprNode* pass2(thread_db* tdbb, CompilerScratch* csb); virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; @@ -57,8 +57,8 @@ public: dsql_nod* dsqlArg1; dsql_nod* dsqlArg2; - jrd_nod* arg1; - jrd_nod* arg2; + NestConst<jrd_nod> arg1; + NestConst<jrd_nod> arg2; }; @@ -83,7 +83,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; protected: @@ -112,7 +112,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual ExprNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual ExprNode* pass2(thread_db* tdbb, CompilerScratch* csb); virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; @@ -124,9 +124,9 @@ dsql_nod* dsqlExpr; dsql_nod* dsqlPattern; dsql_nod* dsqlEscape; - jrd_nod* expr; - jrd_nod* pattern; - jrd_nod* escape; + NestConst<jrd_nod> expr; + NestConst<jrd_nod> pattern; + NestConst<jrd_nod> escape; }; @@ -144,7 +144,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual bool dsqlMatch(const ExprNode* other, bool ignoreMapCast) const; virtual ExprNode* pass2(thread_db* tdbb, CompilerScratch* csb); virtual dsc* execute(thread_db* tdbb, jrd_req* request) const; @@ -156,7 +156,7 @@ Firebird::MetaName name; dsql_nod* dsqlArgs; bool dsqlSpecialSyntax; - jrd_nod* args; + NestConst<jrd_nod> args; const SysFunction* function; }; @@ -175,7 +175,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual bool dsqlMatch(const ExprNode* other, bool ignoreMapCast) const; virtual ExprNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual ExprNode* pass2(thread_db* tdbb, CompilerScratch* csb); @@ -187,7 +187,7 @@ public: Firebird::QualifiedName name; dsql_nod* dsqlArgs; - jrd_nod* args; + NestConst<jrd_nod> args; /*const*/ Function* function; private: Modified: firebird/trunk/src/dsql/Nodes.h =================================================================== --- firebird/trunk/src/dsql/Nodes.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/Nodes.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -28,7 +28,7 @@ #include "../dsql/node.h" #include "../dsql/Visitors.h" #include "../common/classes/array.h" -//#include "../common/classes/ByteChunk.h" +#include "../common/classes/NestConst.h" namespace Jrd { @@ -199,7 +199,7 @@ virtual DmlNode* pass2(thread_db* tdbb, CompilerScratch* csb) = 0; protected: - jrd_nod* node; + NestConst<jrd_nod> node; }; @@ -273,7 +273,8 @@ } static ExprNode* fromLegacy(const dsql_nod* node); - static ExprNode* fromLegacy(const jrd_nod* node); + static const ExprNode* fromLegacy(const jrd_nod* node); + static ExprNode* fromLegacy(jrd_nod* node); virtual bool dsqlAggregateFinder(AggregateFinder& visitor) { @@ -341,7 +342,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement) = 0; virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc) = 0; - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const = 0; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) = 0; virtual dsc* execute(thread_db* tdbb, jrd_req* request) const = 0; protected: @@ -349,7 +350,7 @@ virtual bool dsqlVisit(NonConstDsqlNodeVisitor& visitor); virtual bool jrdVisit(JrdNodeVisitor& visitor); - void addChildNode(dsql_nod*& dsqlNode, jrd_nod*& jrdNode) + void addChildNode(dsql_nod*& dsqlNode, NestConst<jrd_nod>& jrdNode) { dsqlChildNodes.add(&dsqlNode); jrdChildNodes.add(&jrdNode); @@ -364,7 +365,7 @@ const Type type; const char* dsqlCompatDialectVerb; Firebird::Array<dsql_nod**> dsqlChildNodes; - Firebird::Array<jrd_nod**> jrdChildNodes; + Firebird::Array<NestConst<jrd_nod>*> jrdChildNodes; }; class AggNode : public TypedNode<ExprNode, ExprNode::TYPE_AGGREGATE> @@ -487,7 +488,7 @@ bool distinct; bool dialect1; dsql_nod* dsqlArg; - jrd_nod* arg; + NestConst<jrd_nod> arg; const AggregateSort* asb; bool indexed; }; @@ -553,7 +554,7 @@ { } - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const = 0; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const = 0; }; @@ -580,7 +581,7 @@ return this; } - jrd_nod* execute(thread_db* /*tdbb*/, jrd_req* /*request*/) const + const jrd_nod* execute(thread_db* /*tdbb*/, jrd_req* /*request*/) const { fb_assert(false); return NULL; Modified: firebird/trunk/src/dsql/StmtNodes.cpp =================================================================== --- firebird/trunk/src/dsql/StmtNodes.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/StmtNodes.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -441,7 +441,7 @@ } -jrd_nod* IfNode::execute(thread_db* tdbb, jrd_req* request) const +const jrd_nod* IfNode::execute(thread_db* tdbb, jrd_req* request) const { if (request->req_operation == jrd_req::req_evaluate) { @@ -530,7 +530,7 @@ } -jrd_nod* InAutonomousTransactionNode::execute(thread_db* tdbb, jrd_req* request) const +const jrd_nod* InAutonomousTransactionNode::execute(thread_db* tdbb, jrd_req* request) const { Jrd::Attachment* attachment = request->req_attachment; SLONG* savNumber = request->getImpure<SLONG>(savNumberOffset); @@ -1090,7 +1090,7 @@ } -jrd_nod* ExceptionNode::execute(thread_db* tdbb, jrd_req* request) const +const jrd_nod* ExceptionNode::execute(thread_db* tdbb, jrd_req* request) const { if (request->req_operation == jrd_req::req_evaluate) { @@ -1428,7 +1428,7 @@ return this; } -jrd_nod* ForNode::execute(thread_db* tdbb, jrd_req* request) const +const jrd_nod* ForNode::execute(thread_db* tdbb, jrd_req* request) const { switch (request->req_operation) { @@ -1453,7 +1453,7 @@ case jrd_req::req_unwind: { - jrd_nod* parent = node->nod_parent; + const jrd_nod* parent = node->nod_parent; if (parent && parent->nod_type == nod_label && request->req_label == (USHORT)(IPTR) parent->nod_arg[e_lbl_label] && @@ -1549,7 +1549,7 @@ } -jrd_nod* PostEventNode::execute(thread_db* tdbb, jrd_req* request) const +const jrd_nod* PostEventNode::execute(thread_db* tdbb, jrd_req* request) const { jrd_tra* transaction = request->req_transaction; @@ -1654,7 +1654,7 @@ } -jrd_nod* SavepointNode::execute(thread_db* tdbb, jrd_req* request) const +const jrd_nod* SavepointNode::execute(thread_db* tdbb, jrd_req* request) const { jrd_tra* transaction = request->req_transaction; @@ -1833,7 +1833,7 @@ // Execute a SEND statement. -jrd_nod* SuspendNode::execute(thread_db* /*tdbb*/, jrd_req* request) const +const jrd_nod* SuspendNode::execute(thread_db* /*tdbb*/, jrd_req* request) const { switch (request->req_operation) { Modified: firebird/trunk/src/dsql/StmtNodes.h =================================================================== --- firebird/trunk/src/dsql/StmtNodes.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/StmtNodes.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -60,15 +60,15 @@ virtual void genBlr(); virtual IfNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual IfNode* pass2(thread_db* tdbb, CompilerScratch* csb); - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; public: dsql_nod* dsqlCondition; dsql_nod* dsqlTrueAction; dsql_nod* dsqlFalseAction; - jrd_nod* condition; - jrd_nod* trueAction; - jrd_nod* falseAction; + NestConst<jrd_nod> condition; + NestConst<jrd_nod> trueAction; + NestConst<jrd_nod> falseAction; }; @@ -94,11 +94,11 @@ virtual void genBlr(); virtual InAutonomousTransactionNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual InAutonomousTransactionNode* pass2(thread_db* tdbb, CompilerScratch* csb); - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; public: dsql_nod* dsqlAction; - jrd_nod* action; + NestConst<jrd_nod> action; SLONG savNumberOffset; }; @@ -160,7 +160,7 @@ virtual void genBlr(); virtual ExceptionNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual ExceptionNode* pass2(thread_db* tdbb, CompilerScratch* csb); - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; private: void setError(thread_db* tdbb) const; @@ -169,8 +169,8 @@ Firebird::MetaName name; dsql_nod* dsqlMessageExpr; dsql_nod* dsqlParameters; - jrd_nod* messageExpr; - jrd_nod* parameters; + NestConst<jrd_nod> messageExpr; + NestConst<jrd_nod> parameters; PsqlException* exception; }; @@ -222,11 +222,11 @@ virtual void pass2Cursor(RecordSelExpr*& rsePtr, Cursor**& cursorPtr) { - rsePtr = (RecordSelExpr*) rse; + rsePtr = (RecordSelExpr*)(jrd_nod*) rse; cursorPtr = &cursor; } - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; public: dsql_nod* dsqlSelect; @@ -235,9 +235,9 @@ dsql_nod* dsqlAction; dsql_nod* dsqlLabel; bool dsqlForceSingular; - jrd_nod* stall; - jrd_nod* rse; - jrd_nod* statement; + NestConst<jrd_nod> stall; + NestConst<jrd_nod> rse; + NestConst<jrd_nod> statement; Cursor* cursor; }; @@ -265,13 +265,13 @@ virtual void genBlr(); virtual PostEventNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual PostEventNode* pass2(thread_db* tdbb, CompilerScratch* csb); - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; public: dsql_nod* dsqlEvent; dsql_nod* dsqlArgument; - jrd_nod* event; - jrd_nod* argument; + NestConst<jrd_nod> event; + NestConst<jrd_nod> argument; }; @@ -306,7 +306,7 @@ virtual void genBlr(); virtual SavepointNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual SavepointNode* pass2(thread_db* tdbb, CompilerScratch* csb); - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; public: Command command; @@ -336,12 +336,12 @@ virtual void genBlr(); virtual SuspendNode* pass1(thread_db* tdbb, CompilerScratch* csb); virtual SuspendNode* pass2(thread_db* tdbb, CompilerScratch* csb); - virtual jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; + virtual const jrd_nod* execute(thread_db* tdbb, jrd_req* request) const; public: BlockNode* blockNode; - jrd_nod* message; - jrd_nod* statement; + NestConst<jrd_nod> message; + NestConst<jrd_nod> statement; }; Modified: firebird/trunk/src/dsql/WinNodes.cpp =================================================================== --- firebird/trunk/src/dsql/WinNodes.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/WinNodes.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -74,7 +74,7 @@ if (count != 0) { - jrd_nod*** arg = node->jrdChildNodes.begin(); + NestConst<jrd_nod>** arg = node->jrdChildNodes.begin(); do { **arg++ = PAR_parse_node(tdbb, csb, VALUE); @@ -108,7 +108,7 @@ desc->makeInt64(0); } -ExprNode* DenseRankWinNode::copy(thread_db* tdbb, NodeCopier& /*copier*/) const +ExprNode* DenseRankWinNode::copy(thread_db* tdbb, NodeCopier& /*copier*/) { DenseRankWinNode* node = FB_NEW(*tdbb->getDefaultPool()) DenseRankWinNode(*tdbb->getDefaultPool()); return node; @@ -163,7 +163,7 @@ desc->makeInt64(0); } -ExprNode* RankWinNode::copy(thread_db* tdbb, NodeCopier& /*copier*/) const +ExprNode* RankWinNode::copy(thread_db* tdbb, NodeCopier& /*copier*/) { RankWinNode* node = FB_NEW(*tdbb->getDefaultPool()) RankWinNode(*tdbb->getDefaultPool()); return node; @@ -235,7 +235,7 @@ desc->makeInt64(0); } -ExprNode* RowNumberWinNode::copy(thread_db* tdbb, NodeCopier& /*copier*/) const +ExprNode* RowNumberWinNode::copy(thread_db* tdbb, NodeCopier& /*copier*/) { RowNumberWinNode* node = FB_NEW(*tdbb->getDefaultPool()) RowNumberWinNode(*tdbb->getDefaultPool()); return node; @@ -359,7 +359,7 @@ { } -ExprNode* LagWinNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* LagWinNode::copy(thread_db* tdbb, NodeCopier& copier) { LagWinNode* node = FB_NEW(*tdbb->getDefaultPool()) LagWinNode(*tdbb->getDefaultPool()); node->arg = copier.copy(tdbb, arg); @@ -387,7 +387,7 @@ { } -ExprNode* LeadWinNode::copy(thread_db* tdbb, NodeCopier& copier) const +ExprNode* LeadWinNode::copy(thread_db* tdbb, NodeCopier& copier) { LeadWinNode* node = FB_NEW(*tdbb->getDefaultPool()) LeadWinNode(*tdbb->getDefaultPool()); node->arg = copier.copy(tdbb, arg); Modified: firebird/trunk/src/dsql/WinNodes.h =================================================================== --- firebird/trunk/src/dsql/WinNodes.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/dsql/WinNodes.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -38,7 +38,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; virtual void aggPass(thread_db* tdbb, jrd_req* request, dsc* desc) const; @@ -56,7 +56,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual ExprNode* pass2(thread_db* tdbb, CompilerScratch* csb); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; @@ -78,7 +78,7 @@ virtual void make(dsc* desc, dsql_nod* nullReplacement); virtual void getDesc(thread_db* tdbb, CompilerScratch* csb, dsc* desc); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); virtual void aggInit(thread_db* tdbb, jrd_req* request) const; virtual void aggPass(thread_db* tdbb, jrd_req* request, dsc* desc) const; @@ -120,8 +120,8 @@ const int direction; dsql_nod* dsqlRows; dsql_nod* dsqlOutExpr; - jrd_nod* rows; - jrd_nod* outExpr; + NestConst<jrd_nod> rows; + NestConst<jrd_nod> outExpr; }; // LAG function. @@ -131,7 +131,7 @@ explicit LagWinNode(MemoryPool& pool, dsql_nod* aArg = NULL, dsql_nod* aRows = NULL, dsql_nod* aOutExpr = NULL); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); protected: virtual AggNode* dsqlCopy() const; @@ -144,7 +144,7 @@ explicit LeadWinNode(MemoryPool& pool, dsql_nod* aArg = NULL, dsql_nod* aRows = NULL, dsql_nod* aOutExpr = NULL); - virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier) const; + virtual ExprNode* copy(thread_db* tdbb, NodeCopier& copier); protected: virtual AggNode* dsqlCopy() const; Modified: firebird/trunk/src/jrd/ExtEngineManager.cpp =================================================================== --- firebird/trunk/src/jrd/ExtEngineManager.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/ExtEngineManager.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -388,7 +388,7 @@ } -void ExtEngineManager::Function::execute(thread_db* tdbb, jrd_nod* args, impure_value* impure) +void ExtEngineManager::Function::execute(thread_db* tdbb, const jrd_nod* args, impure_value* impure) { EngineAttachmentInfo* attInfo = extManager->getEngineAttachment(tdbb, engine); ContextManager<ExternalFunction> ctxManager(tdbb, attInfo, function, Modified: firebird/trunk/src/jrd/ExtEngineManager.h =================================================================== --- firebird/trunk/src/jrd/ExtEngineManager.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/ExtEngineManager.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -130,7 +130,7 @@ const Jrd::Function* aUdf); ~Function(); - void execute(thread_db* tdbb, jrd_nod* args, impure_value* impure); + void execute(thread_db* tdbb, const jrd_nod* args, impure_value* impure); private: ExtEngineManager* extManager; Modified: firebird/trunk/src/jrd/Function.epp =================================================================== --- firebird/trunk/src/jrd/Function.epp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/Function.epp 2010-08-09 15:48:51 UTC (rev 51418) @@ -657,7 +657,7 @@ } } -dsc* Function::execute(thread_db* tdbb, jrd_nod* args, impure_value* value) const +dsc* Function::execute(thread_db* tdbb, const jrd_nod* args, impure_value* value) const { if (isUndefined()) { Modified: firebird/trunk/src/jrd/Function.h =================================================================== --- firebird/trunk/src/jrd/Function.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/Function.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -52,7 +52,7 @@ USHORT incrementAlterCount(); - dsc* execute(thread_db* tdbb, jrd_nod* args, impure_value* value) const; + dsc* execute(thread_db* tdbb, const jrd_nod* args, impure_value* value) const; void releaseLocks(thread_db* tdbb); void remove(thread_db* tdbb); ULONG allocateImpure(CompilerScratch* csb); Modified: firebird/trunk/src/jrd/Optimizer.cpp =================================================================== --- firebird/trunk/src/jrd/Optimizer.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/Optimizer.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -55,7 +55,7 @@ namespace Jrd { -bool OPT_computable(CompilerScratch* csb, const jrd_nod* node, SSHORT stream, +bool OPT_computable(CompilerScratch* csb, jrd_nod* node, SSHORT stream, const bool idx_use, const bool allowOnlyCurrentStream) { /************************************** @@ -99,11 +99,11 @@ { case nod_procedure: { - const jrd_nod* const inputs = node->nod_arg[e_prc_inputs]; + jrd_nod* inputs = node->nod_arg[e_prc_inputs]; if (inputs) { fb_assert(inputs->nod_type == nod_asn_list); - const jrd_nod* const* ptr = inputs->nod_arg; + jrd_nod* const* ptr = inputs->nod_arg; for (const jrd_nod* const* const end = ptr + inputs->nod_count; ptr < end; ptr++) { if (!OPT_computable(csb, *ptr, stream, idx_use, allowOnlyCurrentStream)) { @@ -116,8 +116,8 @@ case nod_union: { - const jrd_nod* const clauses = node->nod_arg[e_uni_clauses]; - const jrd_nod* const* ptr = clauses->nod_arg; + jrd_nod* clauses = node->nod_arg[e_uni_clauses]; + jrd_nod* const* ptr = clauses->nod_arg; for (const jrd_nod* const* const end = ptr + clauses->nod_count; ptr < end; ptr += 2) { if (!OPT_computable(csb, *ptr, stream, idx_use, allowOnlyCurrentStream)) { @@ -129,9 +129,9 @@ case nod_class_exprnode_jrd: { - const ExprNode* exprNode = reinterpret_cast<const ExprNode*>(node->nod_arg[0]); + ExprNode* exprNode = reinterpret_cast<ExprNode*>(node->nod_arg[0]); - for (const jrd_nod* const* const* i = exprNode->jrdChildNodes.begin(); + for (NestConst<jrd_nod>** i = exprNode->jrdChildNodes.begin(); i != exprNode->jrdChildNodes.end(); ++i) { if (!OPT_computable(csb, **i, stream, idx_use, allowOnlyCurrentStream)) @@ -143,7 +143,7 @@ default: { - const jrd_nod* const* ptr = node->nod_arg; + jrd_nod* const* ptr = node->nod_arg; for (const jrd_nod* const* const end = ptr + node->nod_count; ptr < end; ptr++) { if (!OPT_computable(csb, *ptr, stream, idx_use, allowOnlyCurrentStream)) { @@ -155,8 +155,8 @@ } RecordSelExpr* rse; - const jrd_nod* sub; - const jrd_nod* value; + jrd_nod* sub; + jrd_nod* value; USHORT n; switch (node->nod_type) @@ -266,7 +266,7 @@ } // Set sub-streams of rse active - const jrd_nod* const* ptr; + jrd_nod* const* ptr; const jrd_nod* const* end; for (ptr = rse->rse_relation, end = ptr + rse->rse_count; ptr < end; ptr++) @@ -430,8 +430,8 @@ { ExprNode* exprNode1 = reinterpret_cast<ExprNode*>(node1->nod_arg[0]); ExprNode* exprNode2 = reinterpret_cast<ExprNode*>(node2->nod_arg[0]); - Array<jrd_nod**>& children1 = exprNode1->jrdChildNodes; - Array<jrd_nod**>& children2 = exprNode2->jrdChildNodes; + Array<NestConst<jrd_nod>*>& children1 = exprNode1->jrdChildNodes; + Array<NestConst<jrd_nod>*>& children2 = exprNode2->jrdChildNodes; if (exprNode1->type != exprNode2->type || children1.getCount() != children2.getCount()) return false; @@ -462,7 +462,7 @@ case ExprNode::TYPE_CONCATENATE: case ExprNode::TYPE_SUBSTRING_SIMILAR: - for (jrd_nod*** i = children1.begin(), ***j = children2.begin(); + for (NestConst<jrd_nod>* const* i = children1.begin(), * const* j = children2.begin(); i != children1.end(); ++i, ++j) { if (!OPT_expression_equal2(tdbb, csb, **i, **j, stream)) @@ -640,8 +640,8 @@ case nod_list: { - jrd_nod** ptr1 = node1->nod_arg; - jrd_nod** ptr2 = node2->nod_arg; + jrd_nod* const* ptr1 = node1->nod_arg; + jrd_nod* const* ptr2 = node2->nod_arg; if (node1->nod_count != node2->nod_count) { @@ -1067,8 +1067,7 @@ return OPT_make_binary_node(node_type, node1, node2, false); } -void OptimizerRetrieval::findDependentFromStreams(const jrd_nod* node, - SortedStreamList* streamList) const +void OptimizerRetrieval::findDependentFromStreams(jrd_nod* node, SortedStreamList* streamList) const { /************************************** * @@ -1084,11 +1083,11 @@ if (node->nod_type == nod_procedure) { - const jrd_nod* const inputs = node->nod_arg[e_prc_inputs]; + jrd_nod* const inputs = node->nod_arg[e_prc_inputs]; if (inputs) { fb_assert(inputs->nod_type == nod_asn_list); - const jrd_nod* const* ptr = inputs->nod_arg; + jrd_nod* const* ptr = inputs->nod_arg; for (const jrd_nod* const* const end = ptr + inputs->nod_count; ptr < end; ptr++) { findDependentFromStreams(*ptr, streamList); @@ -1097,8 +1096,8 @@ } else if (node->nod_type == nod_union) { - const jrd_nod* const clauses = node->nod_arg[e_uni_clauses]; - const jrd_nod* const* ptr = clauses->nod_arg; + jrd_nod* const clauses = node->nod_arg[e_uni_clauses]; + jrd_nod* const* ptr = clauses->nod_arg; for (const jrd_nod* const* const end = ptr + clauses->nod_count; ptr < end; ptr += 2) { findDependentFromStreams(*ptr, streamList); @@ -1106,9 +1105,9 @@ } else if (node->nod_type == nod_class_exprnode_jrd) { - const ExprNode* exprNode = reinterpret_cast<const ExprNode*>(node->nod_arg[0]); + ExprNode* exprNode = reinterpret_cast<ExprNode*>(node->nod_arg[0]); - for (const jrd_nod* const* const* i = exprNode->jrdChildNodes.begin(); + for (NestConst<jrd_nod>* const* i = exprNode->jrdChildNodes.begin(); i != exprNode->jrdChildNodes.end(); ++i) { findDependentFromStreams(**i, streamList); @@ -1116,7 +1115,7 @@ } else { - const jrd_nod* const* ptr = node->nod_arg; + jrd_nod* const* ptr = node->nod_arg; for (const jrd_nod* const* const end = ptr + node->nod_count; ptr < end; ptr++) { findDependentFromStreams(*ptr, streamList); @@ -1229,7 +1228,7 @@ findDependentFromStreams(sub, streamList); } - const jrd_nod* const* ptr; + jrd_nod* const* ptr; const jrd_nod* const* end; for (ptr = rse->rse_relation, end = ptr + rse->rse_count; ptr < end; ptr++) { @@ -1480,7 +1479,7 @@ bool usableIndex = true; index_desc::idx_repeat* idx_tail = idx->idx_rpt; - jrd_nod** ptr = sortPtr->nod_arg; + jrd_nod* const* ptr = sortPtr->nod_arg; for (const jrd_nod* const* const end = ptr + sortPtr->nod_count; ptr < end; ptr++, idx_tail++) { jrd_nod* node = *ptr; Modified: firebird/trunk/src/jrd/Optimizer.h =================================================================== --- firebird/trunk/src/jrd/Optimizer.h 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/Optimizer.h 2010-08-09 15:48:51 UTC (rev 51418) @@ -73,7 +73,7 @@ class IndexTableScan; class River; -bool OPT_computable(CompilerScratch*, const jrd_nod*, SSHORT, const bool, const bool); +bool OPT_computable(CompilerScratch*, jrd_nod*, SSHORT, const bool, const bool); bool OPT_expression_equal(thread_db*, CompilerScratch*, const index_desc*, jrd_nod*, USHORT); bool OPT_expression_equal2(thread_db*, CompilerScratch*, jrd_nod*, jrd_nod*, USHORT); double OPT_getRelationCardinality(thread_db*, jrd_rel*, const Format*); @@ -184,7 +184,7 @@ protected: jrd_nod* composeInversion(jrd_nod* node1, jrd_nod* node2, nod_t node_type) const; - void findDependentFromStreams(const jrd_nod* node, SortedStreamList* streamList) const; + void findDependentFromStreams(jrd_nod* node, SortedStreamList* streamList) const; const Firebird::string& getAlias(); InversionCandidate* generateInversion(IndexTableScan** rsb); IndexTableScan* generateNavigation(); Modified: firebird/trunk/src/jrd/SysFunction.cpp =================================================================== --- firebird/trunk/src/jrd/SysFunction.cpp 2010-08-09 14:50:11 UTC (rev 51417) +++ firebird/trunk/src/jrd/SysFunction.cpp 2010-08-09 15:48:51 UTC (rev 51418) @@ -147,44 +147,44 @@ void makeUuidToChar(DataTypeUtilBase* dataTypeUtil, const SysFunction* function, dsc* result, int argsCount, const dsc** args); // generic stdmath function -dsc* evlStdMath(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); +dsc* evlStdMath(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); // specific evl functions -dsc* evlAbs(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlAsciiChar(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlAsciiVal(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlAtan2(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlBin(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlBinShift(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlCeil(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlCharToUuid(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlDateAdd(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlDateDiff(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlExp(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlFloor(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlGenUuid(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlGetContext(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlSetContext(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlHash(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlLeft(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlLnLog10(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlLog(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlMod(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlOverlay(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlPad(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlPi(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlPosition(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlPower(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlRand(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlReplace(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlReverse(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlRight(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlRound(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlSign(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlSqrt(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlTrunc(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); -dsc* evlUuidToChar(thread_db* tdbb, const SysFunction* function, jrd_nod* args, impure_value* impure); +dsc* evlAbs(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlAsciiChar(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlAsciiVal(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlAtan2(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlBin(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlBinShift(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlCeil(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlCharToUuid(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlDateAdd(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlDateDiff(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlExp(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlFloor(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlGenUuid(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlGetContext(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlSetContext(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlHash(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlLeft(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlLnLog10(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlLog(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlMod(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlOverlay(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlPad(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlPi(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlPosition(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlPower(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlRand(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlReplace(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlReverse(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlRight(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlRound(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlSign(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlSqrt(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlTrunc(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); +dsc* evlUuidToChar(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure); const char @@ -1038,7 +1038,7 @@ } -dsc* evlStdMath(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlStdMath(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1139,7 +1139,7 @@ } -dsc* evlAbs(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlAbs(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1185,7 +1185,7 @@ } -dsc* evlAsciiChar(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlAsciiChar(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1207,7 +1207,7 @@ } -dsc* evlAsciiVal(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlAsciiVal(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1233,7 +1233,7 @@ } -dsc* evlAtan2(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlAtan2(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 2); @@ -1255,7 +1255,7 @@ } -dsc* evlBin(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlBin(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count >= 1); @@ -1304,7 +1304,7 @@ } -dsc* evlBinShift(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlBinShift(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 2); @@ -1362,7 +1362,7 @@ } -dsc* evlCeil(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlCeil(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1425,7 +1425,7 @@ } -dsc* evlCharToUuid(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlCharToUuid(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1530,7 +1530,7 @@ } -dsc* evlDateAdd(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlDateAdd(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 3); @@ -1727,7 +1727,7 @@ } -dsc* evlDateDiff(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlDateDiff(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 3); @@ -1940,7 +1940,7 @@ } -dsc* evlExp(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlExp(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -1964,7 +1964,7 @@ } -dsc* evlFloor(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlFloor(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -2019,7 +2019,7 @@ } -dsc* evlGenUuid(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlGenUuid(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 0); @@ -2037,7 +2037,7 @@ } -dsc* evlGetContext(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlGetContext(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 2); @@ -2183,7 +2183,7 @@ } -dsc* evlSetContext(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlSetContext(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 3); @@ -2284,7 +2284,7 @@ } -dsc* evlHash(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlHash(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -2346,7 +2346,7 @@ } -dsc* evlLeft(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlLeft(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 2); @@ -2369,7 +2369,7 @@ } -dsc* evlLnLog10(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlLnLog10(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 1); @@ -2411,7 +2411,7 @@ } -dsc* evlLog(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlLog(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 2); @@ -2450,7 +2450,7 @@ } -dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlMaxMinValue(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value*) { fb_assert(args->nod_count >= 1); @@ -2491,7 +2491,7 @@ } -dsc* evlMod(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evlMod(thread_db* tdbb, const SysFunction*, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count == 2); @@ -2540,7 +2540,7 @@ } -dsc* evlOverlay(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlOverlay(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count >= 3); @@ -2724,7 +2724,7 @@ } -dsc* evlPad(thread_db* tdbb, const SysFunction* function, jrd_nod* args, +dsc* evlPad(thread_db* tdbb, const SysFunction* function, const jrd_nod* args, impure_value* impure) { fb_assert(args->nod_count >= 2); @@ -2887,7 +2887,7 @@ } -dsc* evlPi(thread_db* tdbb, const SysFunction*, jrd_nod* args, +dsc* evl... [truncated message content] |