Skip to content

Commit 3264006

Browse files
Fix summary issues
1 parent b08b190 commit 3264006

File tree

1 file changed

+68
-7
lines changed

1 file changed

+68
-7
lines changed

ODataDataProvider/ODataVirtualDataSourceDataProviderWorker.cs

Lines changed: 68 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,11 @@ protected override void ProcessCompletedTask(AsyncDataSourcePageTaskHolder compl
241241
if (schema == null)
242242
{
243243
schema = ResolveSchema();
244+
245+
lock (SyncLock)
246+
{
247+
ActualSchema = schema;
248+
}
244249
}
245250
if (isAggregationSupportedByServer)
246251
{
@@ -375,7 +380,7 @@ private ISectionInformation[] ResolveGroupInformation()
375380
}
376381
}
377382

378-
if (_summaryScope == DataSourceSummaryScope.Both || _summaryScope == DataSourceSummaryScope.Sections)
383+
if (_summaryScope == DataSourceSummaryScope.Both || _summaryScope == DataSourceSummaryScope.Groups)
379384
{
380385
var summaryQuery = GetSummaryQueryParameters(true);
381386
if (!string.IsNullOrEmpty(summaryQuery))
@@ -455,7 +460,7 @@ private void AddGroup(List<ISectionInformation> groupInformation, List<string> g
455460
}
456461

457462
ISummaryResult[] summaryResults = null;
458-
if (_summaryScope == DataSourceSummaryScope.Both || _summaryScope == DataSourceSummaryScope.Sections)
463+
if (_summaryScope == DataSourceSummaryScope.Both || _summaryScope == DataSourceSummaryScope.Groups)
459464
{
460465
summaryResults = CreateSummaryResults(group);
461466
}
@@ -477,7 +482,7 @@ private ISummaryResult[] ResolveSummaryInformation()
477482
{
478483
if (_summaryDescriptions == null ||
479484
_summaryDescriptions.Count == 0 ||
480-
_summaryScope == DataSourceSummaryScope.Sections ||
485+
_summaryScope == DataSourceSummaryScope.Groups ||
481486
_summaryScope == DataSourceSummaryScope.None)
482487
{
483488
return null;
@@ -489,7 +494,7 @@ private ISummaryResult[] ResolveSummaryInformation()
489494
summary = GetSummaryQueryParameters(false);
490495
}
491496

492-
var commandText = _entitySet + "&$apply=";
497+
var commandText = _entitySet + "?$apply=";
493498
if (!String.IsNullOrEmpty(filter))
494499
{
495500
commandText += "filter(" + filter + ")/";
@@ -572,7 +577,8 @@ private ISummaryResult[] CreateSummaryResults(IDictionary<string, object> data)
572577
for (var i = 0; i < _summaryDescriptions.Count; i++)
573578
{
574579
var summary = _summaryDescriptions[i];
575-
var summaryName = _summaryDescriptions[i].PropertyName;
580+
var propertyName = _summaryDescriptions[i].PropertyName;
581+
var summaryName = propertyName;
576582
switch (summary.Operand)
577583
{
578584
case SummaryOperand.Average:
@@ -588,7 +594,7 @@ private ISummaryResult[] CreateSummaryResults(IDictionary<string, object> data)
588594
summaryName += "Sum";
589595
break;
590596
case SummaryOperand.Count:
591-
summaryName += "$__count";
597+
summaryName = "$__count";
592598
break;
593599
}
594600

@@ -597,13 +603,68 @@ private ISummaryResult[] CreateSummaryResults(IDictionary<string, object> data)
597603
break;
598604
}
599605

600-
var summaryValue = data[summaryName];
606+
object summaryValue = data[summaryName];
607+
// odata is returning strings to us so we need to convert it to the appropriate
608+
// type.
609+
if (summary.Operand == SummaryOperand.Count)
610+
{
611+
summaryValue = Convert.ToInt32(data[summaryName]);
612+
}
613+
else
614+
{
615+
switch (ResolvePropertyType(propertyName))
616+
{
617+
case DataSourceSchemaPropertyType.BooleanValue:
618+
summaryValue = Convert.ToBoolean(summaryValue);
619+
break;
620+
case DataSourceSchemaPropertyType.ByteValue:
621+
summaryValue = Convert.ToByte(summaryValue);
622+
break;
623+
case DataSourceSchemaPropertyType.DateTimeValue:
624+
summaryValue = Convert.ToDateTime(summaryValue);
625+
break;
626+
case DataSourceSchemaPropertyType.DecimalValue:
627+
summaryValue = Convert.ToDecimal(summaryValue);
628+
break;
629+
case DataSourceSchemaPropertyType.DoubleValue:
630+
summaryValue = Convert.ToDouble(summaryValue);
631+
break;
632+
case DataSourceSchemaPropertyType.IntValue:
633+
summaryValue = (int)Convert.ToDouble(summaryValue);
634+
break;
635+
case DataSourceSchemaPropertyType.LongValue:
636+
summaryValue = Convert.ToInt64(summaryValue);
637+
break;
638+
case DataSourceSchemaPropertyType.ShortValue:
639+
summaryValue = Convert.ToInt16(summaryValue);
640+
break;
641+
case DataSourceSchemaPropertyType.SingleValue:
642+
summaryValue = Convert.ToSingle(summaryValue);
643+
break;
644+
case DataSourceSchemaPropertyType.StringValue:
645+
summaryValue = Convert.ToString(summaryValue);
646+
break;
647+
}
648+
}
601649
summaryResults.Add(new DefaultSummaryResult(summary.PropertyName, summary.Operand, summaryValue));
602650
}
603651

604652
return summaryResults.ToArray();
605653
}
606654

655+
private DataSourceSchemaPropertyType ResolvePropertyType(string propertyName)
656+
{
657+
var valueType = DataSourceSchemaPropertyType.ObjectValue;
658+
for (var j = 0; j < this.ActualSchema.PropertyNames.Length; j++)
659+
{
660+
if (this.ActualSchema.PropertyNames[j] == propertyName)
661+
{
662+
valueType = this.ActualSchema.PropertyTypes[j];
663+
}
664+
}
665+
return valueType;
666+
}
667+
607668
private string _filterString = null;
608669
private string _selectedString = null;
609670
public const int SchemaRequestIndex = -1;

0 commit comments

Comments
 (0)