hqlcppc.hpp 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. /*##############################################################################
  2. Copyright (C) 2011 HPCC Systems.
  3. All rights reserved. This program is free software: you can redistribute it and/or modify
  4. it under the terms of the GNU Affero General Public License as
  5. published by the Free Software Foundation, either version 3 of the
  6. License, or (at your option) any later version.
  7. This program is distributed in the hope that it will be useful,
  8. but WITHOUT ANY WARRANTY; without even the implied warranty of
  9. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  10. GNU Affero General Public License for more details.
  11. You should have received a copy of the GNU Affero General Public License
  12. along with this program. If not, see <http://www.gnu.org/licenses/>.
  13. ############################################################################## */
  14. #ifndef __HQLCPPC_HPP_
  15. #define __HQLCPPC_HPP_
  16. #include "eclhelper.hpp"
  17. //---------------------------------------------------------------------------
  18. class HqlCppTranslator;
  19. class BoundRow;
  20. class CHqlBoundExpr;
  21. class CHqlBoundTarget;
  22. class SizeStruct;
  23. interface IReferenceSelector;
  24. interface IHqlDelayedCodeGenerator;
  25. struct ReadAheadState;
  26. //external public interface into the members of a record...
  27. class HQLCPP_API AColumnInfo : public MappingBase
  28. {
  29. public:
  30. virtual void buildAddress(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, CHqlBoundExpr & bound) = 0;
  31. virtual void buildAssign(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, const CHqlBoundTarget & target) = 0;
  32. virtual void buildSizeOf(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, CHqlBoundExpr & bound) = 0;
  33. virtual void buildOffset(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, CHqlBoundExpr & bound) = 0;
  34. virtual void buildClear(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, int direction) = 0;
  35. // virtual bool buildCount(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, CHqlBoundExpr & bound) = 0;
  36. virtual void buildExpr(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, CHqlBoundExpr & bound) = 0;
  37. virtual size32_t getContainerTrailingFixed() = 0;
  38. virtual bool hasFixedOffset() = 0;
  39. virtual bool isConditional() = 0;
  40. virtual bool isFixedSize() = 0;
  41. virtual AColumnInfo * lookupColumn(IHqlExpression * search) = 0;
  42. virtual ITypeInfo * queryType() const = 0;
  43. virtual bool requiresTemp() = 0;
  44. virtual bool modifyColumn(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * value, node_operator op) = 0;
  45. virtual void setColumn(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * value) = 0;
  46. virtual void setRow(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IReferenceSelector * value) = 0;
  47. virtual void buildDeserialize(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * helper) = 0;
  48. virtual void buildSerialize(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * helper) = 0;
  49. virtual bool prepareReadAhead(HqlCppTranslator & translator, ReadAheadState & state) = 0;
  50. virtual bool buildReadAhead(HqlCppTranslator & translator, BuildCtx & ctx, ReadAheadState & state) = 0;
  51. };
  52. class HQLCPP_API ABoundActivity : public CInterface, public IInterface
  53. {
  54. public:
  55. ABoundActivity(IHqlExpression * _dataset, IHqlExpression * _bound, unsigned _activityid, unsigned _containerid, unsigned _graphId, ThorActivityKind _kind)
  56. : represents(_dataset), bound(_bound), activityId(_activityid), containerId(_containerid), graphId(_graphId)
  57. {
  58. outputCount = 0;
  59. kind = _kind;
  60. }
  61. IMPLEMENT_IINTERFACE
  62. inline IHqlExpression * queryBound() const { return bound; }
  63. inline IHqlExpression * queryDataset() const { return represents; }
  64. inline unsigned queryActivityId() const { return activityId; }
  65. inline ThorActivityKind queryActivityKind() const { return kind; }
  66. inline unsigned queryContainerId() const { return containerId; }
  67. inline unsigned queryGraphId() const { return graphId; }
  68. inline unsigned nextOutputCount() { return outputCount++; }
  69. IHqlDelayedCodeGenerator * createOutputCountCallback();
  70. void updateActivityKind(ThorActivityKind newKind) { kind = newKind; }
  71. private:
  72. HqlExprAttr represents;
  73. HqlExprAttr bound;
  74. unsigned activityId;
  75. unsigned containerId;
  76. unsigned graphId;
  77. unsigned outputCount;
  78. ThorActivityKind kind;
  79. };
  80. class HQLCPP_API ActivityAssociation : public HqlExprAssociation
  81. {
  82. public:
  83. ActivityAssociation(IHqlExpression * _dataset, ABoundActivity * _activity) : HqlExprAssociation(_dataset) { activity.set(_activity); }
  84. virtual AssocKind getKind() { return AssocActivity; }
  85. public:
  86. Linked<ABoundActivity> activity;
  87. };
  88. interface IGenDatasetIterator : public IInterface
  89. {
  90. public:
  91. virtual void buildDeclare(HqlCppTranslator & translator, BuildCtx & ctx) = 0;
  92. virtual void buildFirst(HqlCppTranslator & translator, BuildCtx & ctx) = 0;
  93. virtual void buildIsValid(HqlCppTranslator & translator, BuildCtx & ctx, CHqlBoundExpr & bound) = 0;
  94. virtual void buildIterateLoop(HqlCppTranslator & translator, BuildCtx & ctx) = 0;
  95. virtual void buildNext(HqlCppTranslator & translator, BuildCtx & ctx) = 0;
  96. };
  97. extern HQLCPP_API IHqlExpression * convertAddressToValue(IHqlExpression * address, ITypeInfo * columnType);
  98. #endif