Github user nonstop-qfchen commented on a diff in the pull request:
https://github.com/apache/incubator-trafodion/pull/132#discussion_r42519468
--- Diff: core/sql/optimizer/ItemExpr.cpp ---
@@ -14906,3 +14906,80 @@ NABoolean LOBoper::isCovered
return FALSE;
}
+// Compute the exprssion at compile time. Assume all operands are
constants.
+// Return NULL if the computation fails and CmpCommon::diags() may be
side-affected.
+ConstValue* ItemExpr::compute(CollHeap* heap)
+{
+ ValueIdList exprs;
+ exprs.insert(getValueId());
+
+ const NAType& dataType = getValueId().getType();
+
+ Lng32 decodedValueLen = dataType.getNominalSize() +
dataType.getSQLnullHdrSize();
+
+ char staticDecodeBuf[200];
+ Lng32 staticDecodeBufLen = 200;
+
+ char* decodeBuf = staticDecodeBuf;
+ Lng32 decodeBufLen = staticDecodeBufLen;
+
+ // For character types, multiplying by 8 to deal with conversions between
--- End diff --
Yes, it looks like multiplying by 8 (or 6 after change) is generic. I think
it is safe to multiplying by 6 because the max # of bytes in UTF8 is 6
which can encode code points up to 7FFFFFFF.
On Tue, Oct 20, 2015 at 10:41 AM, Hans Zeller <[email protected]>
wrote:
> In core/sql/optimizer/ItemExpr.cpp
>
<https://github.com/apache/incubator-trafodion/pull/132#discussion_r42512787>
> :
>
> > +ConstValue* ItemExpr::compute(CollHeap* heap)
> > +{
> > + ValueIdList exprs;
> > + exprs.insert(getValueId());
> > +
> > + const NAType& dataType = getValueId().getType();
> > +
> > + Lng32 decodedValueLen = dataType.getNominalSize() +
dataType.getSQLnullHdrSize();
> > +
> > + char staticDecodeBuf[200];
> > + Lng32 staticDecodeBufLen = 200;
> > +
> > + char* decodeBuf = staticDecodeBuf;
> > + Lng32 decodeBufLen = staticDecodeBufLen;
> > +
> > + // For character types, multiplying by 8 to deal with conversions
between
>
> There is actually a method to compute this length,
> CharInfo::getMaxConvertedLenInBytes() (file common/charinfo.h) but it may
> be inconvenient and overkill in this situation.
>
> â
> Reply to this email directly or view it on GitHub
> <https://github.com/apache/incubator-trafodion/pull/132/files#r42512787>.
>
--
Regards, --Qifan
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---