コード例 #1
0
        private static Expression GetOrAddParameterRefToCompilationContext(ParsedRequest parsedRequest, PqlCompilerState compilerState, int parameterOrdinal)
        {
            Tuple <ParameterExpression, Expression> refTuple;

            if (compilerState.ParamRefs.TryGetValue(parameterOrdinal, out refTuple))
            {
                return(refTuple.Item1);
            }

            ParameterExpression paramRef;
            Expression          paramExtractor;
            var localOrdinal = parsedRequest.Params.OrdinalToLocalOrdinal[parameterOrdinal];
            var dbType       = parsedRequest.Params.DataTypes[parameterOrdinal];

            if (BitVector.Get(compilerState.RequestParameters.IsCollectionFlags, parameterOrdinal))
            {
                var rowData     = Expression.Field(compilerState.Context, "InputParametersCollections");
                var hashsetType = typeof(HashSet <>).MakeGenericType(DriverRowData.DeriveSystemType(dbType));
                paramExtractor = Expression.Convert(Expression.ArrayIndex(rowData, Expression.Constant(localOrdinal, typeof(int))), hashsetType);
                paramRef       = Expression.Variable(paramExtractor.Type);
            }
            else
            {
                var rowData = Expression.Field(compilerState.Context, "InputParametersRow");
                paramExtractor = DriverRowData.CreateReadAccessor(rowData, dbType, localOrdinal);
                paramRef       = Expression.Variable(paramExtractor.Type);
            }

            compilerState.ParamRefs.Add(
                parameterOrdinal, new Tuple <ParameterExpression, Expression>(paramRef, paramExtractor));
            return(paramRef);
        }
コード例 #2
0
        public static Expression CompileFieldValueExtractorClause(PqlCompilerState compilerState, FieldMetadata field, DataContainerDescriptor containerDescriptor, RequestExecutionContextCacheInfo cacheInfo, Type returnType)
        {
            var ordinal = GetFieldOrdinalInDriverFetchFields(cacheInfo.ParsedRequest, field);
            var rowData = Expression.Field(compilerState.Context, "InputRow");

            return(s_expressionRuntime.AdjustReturnType(DriverRowData.CreateReadAccessor(rowData, field.DbType, ordinal), returnType));
        }
コード例 #3
0
        private static Expression GetOrAddFieldRefToCompilationContext(ParsedRequest parsedRequest, PqlCompilerState compilerState, FieldMetadata field)
        {
            Tuple <ParameterExpression, Expression> refTuple;

            if (compilerState.FieldRefs.TryGetValue(field.FieldId, out refTuple))
            {
                return(refTuple.Item1);
            }

            var ordinal = GetFieldOrdinalInDriverFetchFields(parsedRequest, field);
            var rowData = Expression.Field(compilerState.Context, "InputRow");

            var fieldAccessor = DriverRowData.CreateReadAccessor(rowData, field.DbType, ordinal);
            var fieldRef      = Expression.Variable(fieldAccessor.Type);

            compilerState.FieldRefs.Add(
                field.FieldId, new Tuple <ParameterExpression, Expression>(fieldRef, fieldAccessor));
            return(fieldRef);
        }