Example #1
0
        private void ResolveEntityCollection(FluentCommandDetails details)
        {
            if (string.IsNullOrEmpty(Details.CollectionName) && string.IsNullOrEmpty(Details.LinkName))
            {
                this.EntityCollection = null;
            }
            else
            {
                EntityCollection entityCollection;
                if (!string.IsNullOrEmpty(Details.LinkName))
                {
                    var parent         = new FluentCommand(Details.Parent).Resolve(_sesson);
                    var collectionName = _sesson.Metadata.GetNavigationPropertyPartnerTypeName(
                        parent.EntityCollection.Name, Details.LinkName);
                    entityCollection = _sesson.Metadata.GetEntityCollection(collectionName);
                }
                else
                {
                    entityCollection = _sesson.Metadata.GetEntityCollection(Details.CollectionName);
                }

                this.EntityCollection =
                    string.IsNullOrEmpty(Details.DerivedCollectionName)
                    ? entityCollection
                    : _sesson.Metadata.GetDerivedEntityCollection(entityCollection, Details.DerivedCollectionName);
            }
        }
Example #2
0
        private void ResolveKeys(FluentCommandDetails details)
        {
            var namedKeyValues =
                details.KeyValues != null && details.KeyValues.Count == 1 &&
                _sesson.TypeCache.IsAnonymousType(details.KeyValues.First().GetType())
                    ? _sesson.TypeCache.ToDictionary(details.KeyValues.First())
                    : details.NamedKeyValues;

            if (namedKeyValues != null)
            {
                if (NamedKeyValuesMatchAnyKey(namedKeyValues, out var matchingKey, out bool isAlternateKey))
                {
                    Details.NamedKeyValues = matchingKey.ToDictionary();
                    Details.IsAlternateKey = isAlternateKey;
                }
                else if (TryExtractKeyFromNamedValues(namedKeyValues, out var containedKey))
                {
                    Details.NamedKeyValues = containedKey.ToDictionary();
                }
                else
                {
                    Details.NamedKeyValues = null;
                }
                Details.KeyValues = null;
            }
Example #3
0
 private void ResolveLinkName(FluentCommandDetails details)
 {
     if (Details.LinkName == null && !ReferenceEquals(details.LinkExpression, null))
     {
         Details.LinkName = details.LinkExpression.AsString(_sesson);
     }
 }
 public FluentCommandDetails(FluentCommandDetails details)
 {
     this.Parent                         = details.Parent;
     this.CollectionName                 = details.CollectionName;
     this.CollectionExpression           = details.CollectionExpression;
     this.DerivedCollectionName          = details.DerivedCollectionName;
     this.DerivedCollectionExpression    = details.DerivedCollectionExpression;
     this.DynamicPropertiesContainerName = details.DynamicPropertiesContainerName;
     this.FunctionName                   = details.FunctionName;
     this.ActionName                     = details.ActionName;
     this.IsAlternateKey                 = details.IsAlternateKey;
     this.KeyValues                      = details.KeyValues;
     this.NamedKeyValues                 = details.NamedKeyValues;
     this.EntryValue                     = details.EntryValue;
     this.EntryData                      = details.EntryData;
     this.Filter                         = details.Filter;
     this.FilterExpression               = details.FilterExpression;
     this.Search                         = details.Search;
     this.SkipCount                      = details.SkipCount;
     this.TopCount                       = details.TopCount;
     this.ExpandAssociations             = details.ExpandAssociations;
     this.SelectColumns                  = details.SelectColumns;
     this.OrderbyColumns                 = details.OrderbyColumns;
     this.ComputeCount                   = details.ComputeCount;
     this.IncludeCount                   = details.IncludeCount;
     this.LinkName                       = details.LinkName;
     this.LinkExpression                 = details.LinkExpression;
     this.MediaName                      = details.MediaName;
     this.MediaProperties                = details.MediaProperties;
     this.QueryOptions                   = details.QueryOptions;
     this.QueryOptionsKeyValues          = details.QueryOptionsKeyValues;
     this.QueryOptionsExpression         = details.QueryOptionsExpression;
     this.BatchEntries                   = details.BatchEntries;
     this.Headers                        = details.Headers;
 }
Example #5
0
 private void ResolveDerivedCollectionName(FluentCommandDetails details)
 {
     if (Details.DerivedCollectionName == null && !ReferenceEquals(details.DerivedCollectionExpression, null))
     {
         var derivedCollectionName = details.DerivedCollectionExpression.AsString(_sesson);
         Details.DerivedCollectionName = derivedCollectionName;
     }
 }
Example #6
0
 public FluentCommandDetails(FluentCommandDetails parent, ConcurrentDictionary <object, IDictionary <string, object> > batchEntries)
 {
     this.Parent             = parent;
     this.SkipCount          = -1;
     this.TopCount           = -1;
     this.ExpandAssociations = new List <KeyValuePair <string, ODataExpandOptions> >();
     this.SelectColumns      = new List <string>();
     this.OrderbyColumns     = new List <KeyValuePair <string, bool> >();
     this.MediaProperties    = new List <string>();
     this.BatchEntries       = batchEntries;
 }
Example #7
0
        internal ResolvedCommand(FluentCommand command, ISession session)
        {
            _sesson = session;
            Details = new FluentCommandDetails(command.Details);

            ResolveCollectionName(command.Details);
            ResolveDerivedCollectionName(command.Details);
            ResolveLinkName(command.Details);
            ResolveEntityCollection(command.Details);
            ResolveKeys(command.Details);
            ResolveFilter(command.Details);
            ResolveEntryData(command.Details);
        }
Example #8
0
 private void ResolveCollectionName(FluentCommandDetails details)
 {
     if (Details.CollectionName == null && !ReferenceEquals(details.CollectionExpression, null))
     {
         var collectionName = details.CollectionExpression.AsString(_sesson);
         var items          = collectionName.Split('/');
         if (items.Count() > 1)
         {
             Details.CollectionName        = items[0];
             Details.DerivedCollectionName = items[1];
         }
         else
         {
             Details.CollectionName = collectionName;
         }
     }
 }
Example #9
0
 internal FluentCommand(ResolvedCommand command)
 {
     Details = new FluentCommandDetails(command.Details);
 }
Example #10
0
 internal FluentCommand(FluentCommandDetails details)
 {
     Details = new FluentCommandDetails(details);
 }
Example #11
0
 internal FluentCommand(FluentCommand parent, ConcurrentDictionary <object, IDictionary <string, object> > batchEntries)
 {
     Details = new FluentCommandDetails(parent?.Details, batchEntries);
 }