Example #1
0
 /// <inheritdoc />
 public override void New()
 {
     if (_typeAccessor.CreateNewSupported)
     {
         Instance = (TTarget)_typeAccessor.CreateNew();
     }
 }
 public void FastMember_Constructor()
 {
     var obj1 = (BenchmarkObject)TypeAccessor.CreateNew();
     var obj2 = (BenchmarkObject2)TypeAccessor2.CreateNew();
     var obj3 = (BenchmarkObject3)TypeAccessor3.CreateNew();
     var obj4 = (BenchmarkObject4)TypeAccessor4.CreateNew();
 }
 /// <summary>
 /// Execute SP that return a result set
 /// </summary>
 /// <param name="items">return result set</param>
 /// <param name="accessor">Type Accessor for a single item value</param>
 /// <param name="command">executive command</param>
 private void ExecuteReaderToList(IList items, TypeAccessor accessor, IDbCommand command)
 {
     command.Prepare();
     _queryTime?.Start();
     using (var reader = command.ExecuteReader())
     {
         _queryTime?.Stop();
         int columns = reader.FieldCount;
         foreach (var record in reader.ToRecord())
         {
             var item = accessor.CreateNew();
             items.Add(item);
             ExtractObject(columns, item, accessor, record);
         }
     }
 }
        public static void AddValues(this SearchResult searchResult, TypeAccessor typeAccessor, DocumentSearchResult <Document> results)
        {
            var members = typeAccessor.GetMembers();

            results.Results.ToList().ForEach(r =>
            {
                var item = typeAccessor.CreateNew();
                foreach (var d in r.Document)
                {
                    PopulateField(typeAccessor, item, members, d);
                }

                searchResult.Values.Add(new SearchResultModel
                {
                    Score = r.Score,
                    Value = item
                });
            });
        }
        public T MapDataRecord <T>(IDataRecord dataRecord)
        {
            if (_typeAccessor == null)
            {
                _typeAccessor = TypeAccessor.Create(typeof(T));
            }
            if (_propertyMappers == null)
            {
                _propertyMappers = CreatePropertyMappers(dataRecord);
            }

            var instance = _typeAccessor.CreateNew();

            foreach (var mapper in _propertyMappers)
            {
                var fieldValue = mapper.MapProperty(dataRecord);
                _typeAccessor[instance, mapper.PropertyName] = fieldValue;
            }
            return((T)instance);
        }
 public object TypeAccessorCreateNew()
 {
     return(_accessor.CreateNew());
 }
Example #7
0
        /// <summary>
        /// Retrieves the specified columns from the SAP table
        /// </summary>
        public List <T> Select(IEnumerable <string> columns)
        {
            var invalidColumns = columns.Where(c => !_memberByAlias.ContainsKey(c));

            if (!invalidColumns.IsEmpty())
            {
                throw new ArgumentException($"The following columns don't exist in the table (did you forget an Alias?): {invalidColumns.Join()}");
            }

            var resultingRows = new List <string[]>();

            var sapWhereClauses = _condition
                                  .ToWhereBatched(_batchSize)
                                  //Split by spaces (SAP doesn't like incomplete words per line!)
                                  .Select(w => w.Split(' '));

            if (sapWhereClauses.IsEmpty())
            {
                //If no conditions are set ensure that we execute once
                sapWhereClauses = new List <string[]>()
                {
                    new string[] { "" }
                };
            }

            //Retrieve records parallely
            Parallel.ForEach(sapWhereClauses, new ParallelOptions()
            {
                MaxDegreeOfParallelism = _peakConnectionsLimit
            }, sapWhereClause =>
            {
                //Source: https://stackoverflow.com/questions/20046390/how-to-get-result-of-a-rfc
                var rfc       = _conn.Repository.CreateFunction("/BODS/RFC_READ_TABLE2");
                var delimeter = 'Æ';

                //Start filling parameters
                rfc.SetValue("QUERY_TABLE", _tableName);
                rfc.SetValue("DELIMITER", delimeter);

                var fields = rfc.GetTable("FIELDS");
                foreach (var column in columns)
                {
                    fields.Append();
                    fields.SetValue("FIELDNAME", column);
                }

                if (sapWhereClause.Count() == 1 && sapWhereClause.First().IsEmpty())
                {
                    //No conditions, derivatively left blank
                }
                else
                {
                    var options = rfc.GetTable("OPTIONS");
                    foreach (var option in sapWhereClause)
                    {
                        options.Append();
                        options.SetValue("TEXT", option);
                    }
                }

                //Get tresults
                try
                {
                    rfc.Invoke(_conn);
                }
                catch (Exception e)
                {
                    if (e.Message == "FIELD_NOT_VALID")
                    {
                        throw new ArgumentException("A selected column isn't valid, check that all the selected columns are correctly written.");
                    }
                    else if (e.Message == "A dynamically specified column name is unknown.")
                    {
                        throw new ArgumentException("A column in the WHERE clause isn't correctly written or doesn't exist.");
                    }
                    else if (e.Message == "A condition specified dynamically has an unexpected format.")
                    {
                        throw new ArgumentException("There's a syntax error in the WHERE clause, please check.");
                    }

                    throw;
                }


                var rows = Enumerable.Empty <IRfcDataContainer>()
                           .Concat(rfc.GetTable("TBLOUT128"))
                           .Concat(rfc.GetTable("TBLOUT512"))
                           .Concat(rfc.GetTable("TBLOUT2048"))
                           .Concat(rfc.GetTable("TBLOUT8192"))
                           .Concat(rfc.GetTable("TBLOUT30000"))
                           .Select(r => r.GetString("WA").Split(delimeter))
                           .ToList();

                lock (resultingRows)
                {
                    resultingRows.AddRange(rows);
                }
            });

            return(resultingRows
                   .Select(r =>
            {
                var parsedRowInstance = _accesor.CreateNew() as T;

                var i = 0;
                foreach (var column in columns)
                {
                    var member = _memberByAlias[column];
                    var value = Convert.ChangeType(r[i].Trim(), member.Type);    //Everything is trimmed!
                    _accesor[parsedRowInstance, member.Name] = value;

                    i++;
                }

                return parsedRowInstance;
            })
                   .ToList());
        }
 public BenchmarkObject FastMember_Constructor()
 {
     return((BenchmarkObject)TypeAccessor.CreateNew());
 }
Example #9
0
        public async Task <IEnumerable <T> > QueryAsync <T>(IEnumerable <QueryParameter> queryParameters, Type type, IGraphRequestContext graphRequestContext) where T : class
        {
            var searchResultModels = new List <SearchResultModel>();

            var client = InternalGetInfo(type.Name, graphRequestContext).SearchIndexClient;

            var searchParameters = new SearchParameters();

            var searchTextParam = queryParameters.Single(x => x.MemberModel.Name == "searchtext");

            var results = await client.Documents.SearchAsync((string)searchTextParam.ContextValue.GetFirstValue(), searchParameters);

            TypeAccessor accessor = TypeAccessor.Create(type);
            var          members  = accessor.GetMembers();

            results.Results.ToList().ForEach(r =>
            {
                var item = accessor.CreateNew();

                r.Document.ToList().ForEach(d =>
                {
                    var field = members.Single(x => x.Name == d.Key);

                    object value = d.Value;

                    if (field.Type == typeof(Guid) && value is string strValue)
                    {
                        value = Guid.Parse(strValue);
                    }

                    if (field.Type == typeof(decimal) && value is double dobValue)
                    {
                        value = Convert.ToDecimal(dobValue);
                    }

                    if (field.Type == typeof(DateTime) && value is DateTimeOffset dtmValue)
                    {
                        value = dtmValue.DateTime;
                    }

                    if (field.Type == typeof(int))
                    {
                        value = Convert.ToInt32(value);
                    }

                    if (field.Type == typeof(long))
                    {
                        value = Convert.ToInt64(value);
                    }

                    accessor[item, d.Key] = value;
                });

                var searchResultModel = new SearchResultModel
                {
                    Score = r.Score,
                    Value = item
                };
                searchResultModels.Add(searchResultModel);
            });

            return(searchResultModels.Select(x => x as T).ToList());
        }