Explorar o código

aspnetcore: pg single update statement (#4662)

* aspcore: add platform multiple queries

* Add missing console output

* tweak postgresql connectionstring

* aspnetcore: pg single update statement
n-stefan %!s(int64=6) %!d(string=hai) anos
pai
achega
025fc6fa02

+ 15 - 4
frameworks/CSharp/aspnetcore/PlatformBenchmarks/Data/BatchUpdateString.cs

@@ -11,6 +11,7 @@ namespace PlatformBenchmarks
     {
         private const int MaxBatch = 500;
         private static string[] _queries = new string[MaxBatch];
+        private static DatabaseServer _databaseServer;
 
         public static IList<BatchUpdateString> Strings { get; } =
             Enumerable.Range(0, MaxBatch)
@@ -30,18 +31,28 @@ namespace PlatformBenchmarks
         private string CreateQuery(int batchSize)
         {
             var sb = StringBuilderCache.Acquire();
-            foreach (var q in Enumerable.Range(0, batchSize + 1)
-                .Select(i => $"UPDATE world SET randomnumber = @Random_{i} WHERE id = @Id_{i};"))
+            if (_databaseServer == DatabaseServer.PostgreSql)
             {
-                sb.Append(q);
+                sb.Append("UPDATE world SET randomNumber = temp.randomNumber FROM (VALUES ");
+                Enumerable.Range(0, batchSize).Select(i => sb.Append($"(@Id_{i}, @Random_{i}), ")).ToList();
+                sb.Append($"(@Id_{batchSize}, @Random_{batchSize}) ORDER BY 1) AS temp(id, randomNumber) WHERE temp.id = world.id");
+            }
+            else
+            {
+                foreach (var q in Enumerable.Range(0, batchSize + 1)
+                    .Select(i => $"UPDATE world SET randomnumber = @Random_{i} WHERE id = @Id_{i};"))
+                {
+                    sb.Append(q);
+                }
             }
             var query = sb.ToString();
             _queries[batchSize] = query;
             return query;
         }
 
-        public static void Initalize()
+        public static void Initialize(DatabaseServer databaseServer)
         {
+            _databaseServer = databaseServer;
             Observe(Strings[0].UpdateQuery);
             Observe(Strings[4].UpdateQuery);
             Observe(Strings[9].UpdateQuery);

+ 4 - 2
frameworks/CSharp/aspnetcore/PlatformBenchmarks/Program.cs

@@ -27,9 +27,11 @@ namespace PlatformBenchmarks
             Console.WriteLine(BenchmarkApplication.Paths.Updates);
             Console.WriteLine(BenchmarkApplication.Paths.MultipleQueries);
             DateHeader.SyncDateTimer();
-            BatchUpdateString.Initalize();
 
-            BuildWebHost(args).Run();
+            var host = BuildWebHost(args);
+            var config = (IConfiguration)host.Services.GetService(typeof(IConfiguration));
+            BatchUpdateString.Initialize(config.Get<AppSettings>().Database);
+            host.Run();
         }
 
         public static IWebHost BuildWebHost(string[] args)