IHqlExpression * convertAddressToValue(IHqlExpression * address, ITypeInfo * columnType) { if (isTypePassedByAddress(columnType) && !columnType->isReference()) { Owned<ITypeInfo> refType = makeReferenceModifier(LINK(columnType)); assertex(address->getOperator() == no_externalcall || refType == address->queryType()); return createValue(no_implicitcast, LINK(refType), LINK(address)); } Owned<ITypeInfo> pointerType = makePointerType(LINK(columnType)); assertex(address->getOperator() == no_externalcall || pointerType == address->queryType()); IHqlExpression * temp = createValue(no_implicitcast, LINK(pointerType), LINK(address)); return createValue(no_deref, LINK(columnType), temp); }
ITypeInfo * makeRowReferenceType(IHqlExpression * ds) { ITypeInfo * recordType = ds ? LINK(ds->queryRecordType()) : NULL; ITypeInfo * rowType = makeReferenceModifier(makeRowType(recordType)); if (ds) { ITypeInfo * dsType = ds->queryType(); if (hasLinkedRow(dsType)) rowType = makeAttributeModifier(rowType, getLinkCountedAttr()); if (hasOutOfLineModifier(dsType)) rowType = makeOutOfLineModifier(rowType); } return rowType; }