Exemplo n.º 1
0
bool ScopeConsistencyChecker::isActive(IHqlExpression * ds)
{
    switch (ds->getOperator())
    {
    case no_self:
    case no_selfref:
    case no_activetable:
        return true;
    }
    
    if (activeTables.find(*ds) != NotFound)
        return true;

    ForEachItemIn(i, scopeStack)
    {
        ScopeInfo & cur = scopeStack.item(i);
        
        switch (ds->getOperator())
        {
        case no_left:
            if (cur.left && recordTypesMatch(cur.left, ds))
                return true;
            break;
        case no_right:
            if (cur.right && recordTypesMatch(cur.right, ds))
                return true;
            break;
        default:
            if (cur.dataset && cur.dataset->queryNormalizedSelector() == ds)
                return true;
            break;
        }
    }
Exemplo n.º 2
0
bool CChildLinkedDatasetColumnInfo::modifyColumn(HqlCppTranslator & translator, BuildCtx & ctx, IReferenceSelector * selector, IHqlExpression * value, node_operator op)
{
    if (hasDatasetLimits() || (op != no_assign_addfiles))
        return false;

    OwnedHqlExpr addressSize = getColumnAddress(translator, ctx, selector, sizetType, 0);
    OwnedHqlExpr addressData = getColumnAddress(translator, ctx, selector, queryType(), sizeof(size32_t));

    ITypeInfo * resultType = queryType();
    ITypeInfo * valueType = value->queryType();
    assertex(recordTypesMatch(valueType, resultType));

    CHqlBoundTarget boundTarget;
    boundTarget.count.setown(convertAddressToValue(addressSize, sizetType));
    boundTarget.expr.setown(convertAddressToValue(addressData, queryType()));

    HqlExprArray args;
    args.append(*LINK(value));
    OwnedHqlExpr call = translator.bindFunctionCall(appendRowsToRowsetId, args, resultType);
    translator.buildDatasetAssign(ctx, boundTarget, call);
    return true;
}