浏览代码

Fixed QueryMultiple running even when no queries, and fixed client save callback not called when no entities.

Kenric Nugteren 1 年之前
父节点
当前提交
f41aa9ecca
共有 3 个文件被更改,包括 31 次插入2 次删除
  1. 9 2
      InABox.Core/Client/BaseClient.cs
  2. 9 0
      InABox.Core/Client/Client.cs
  3. 13 0
      InABox.Core/MultiQuery/QueryDef.cs

+ 9 - 2
InABox.Core/Client/BaseClient.cs

@@ -281,7 +281,14 @@ namespace InABox.Clients
 
         public Dictionary<string, CoreTable> QueryMultiple(Dictionary<string, IQueryDef> queries)
         {
-            return DoQueryMultiple(queries);
+            if(queries.Count == 0)
+            {
+                return new Dictionary<string, CoreTable>();
+            }
+            else
+            {
+                return DoQueryMultiple(queries);
+            }
         }
 
         protected abstract Dictionary<string, CoreTable> DoQueryMultiple(Dictionary<string, IQueryDef> queries);
@@ -294,7 +301,7 @@ namespace InABox.Clients
                 Dictionary<string, CoreTable>? result = null;
                 try
                 {
-                    result = DoQueryMultiple(queries);
+                    result = QueryMultiple(queries);
                 }
                 catch (Exception e)
                 {

+ 9 - 0
InABox.Core/Client/Client.cs

@@ -36,6 +36,8 @@ namespace InABox.Clients
             => Results[typeof(T).Name].ToObjects<T>();
 
         public CoreTable Get(string name) => Results[name];
+
+        public CoreTable GetOrDefault(string name) => Results.GetValueOrDefault(name);
     }
 
     public abstract class Client
@@ -519,11 +521,18 @@ namespace InABox.Clients
                 CheckSupported();
                 var items = entities.AsArray();
                 if (items.Any())
+                {
                     _client.Save(items, auditnote, (i, e) =>
                     {
                         timer.Dispose(i.Count());
                         callback?.Invoke(i, e);
                     });
+                }
+                else
+                {
+                    timer.Dispose(0);
+                    callback?.Invoke(items, null);
+                }
             }
             catch (RequestException e)
             {

+ 13 - 0
InABox.Core/MultiQuery/QueryDef.cs

@@ -37,6 +37,19 @@ namespace InABox.Clients
         public ISortOrder? SortOrder { get; }
     }
 
+    public class KeyedQueryDef : QueryDef, IKeyedQueryDef
+    {
+        public string Key { get; }
+
+        public KeyedQueryDef(string key, Type type, IFilter? filter = null, IColumns? columns = null, ISortOrder? sortOrder = null) : base(type)
+        {
+            Key = key;
+            Filter = filter;
+            Columns = columns;
+            SortOrder = sortOrder;
+        }
+    }
+
     public class KeyedQueryDef<T> : QueryDef<T>, IKeyedQueryDef where T : Entity, IRemotable, IPersistent, new()
     {
         public string Key { get; }