Browse Source

Lithium: Update framework and some fixes. (#5377)

* Lithium: Update framework and some fixes.

* Lithium: Fix postgres syntax error.

* Lithium: Fix postgres syntax error.

* Lithium: Update Transaction only for mysql.

* Lithium: Remove special case for N == 20.
Matthieu Garrigues 5 years ago
parent
commit
1e9ad34e5a

+ 1 - 1
frameworks/C++/lithium/lithium-mysql.dockerfile

@@ -5,7 +5,7 @@ RUN apt install -yqq libboost-dev libmariadb-dev wget  libboost-context-dev g++-
 
 COPY ./ ./
 
-ENV COMMIT=0a02d05e4c9eab883d9031aabee01017027db8de
+ENV COMMIT=8594076a151ddaca03f8ce60189f97ecd69e1b88
 
 RUN wget https://raw.githubusercontent.com/matt-42/lithium/$COMMIT/single_headers/lithium_mysql.hh
 RUN wget https://raw.githubusercontent.com/matt-42/lithium/$COMMIT/single_headers/lithium_http_backend.hh

+ 1 - 1
frameworks/C++/lithium/lithium-postgres.dockerfile

@@ -5,7 +5,7 @@ RUN apt install -yqq g++-9 libboost-dev postgresql-server-dev-all libpq-dev wget
 
 COPY ./ ./
 
-ENV COMMIT=0a02d05e4c9eab883d9031aabee01017027db8de
+ENV COMMIT=8594076a151ddaca03f8ce60189f97ecd69e1b88
 
 RUN wget https://raw.githubusercontent.com/matt-42/lithium/$COMMIT/single_headers/lithium_pgsql.hh
 RUN wget https://raw.githubusercontent.com/matt-42/lithium/$COMMIT/single_headers/lithium_http_backend.hh

+ 13 - 7
frameworks/C++/lithium/lithium.cc

@@ -99,7 +99,9 @@ int main(int argc, char* argv[]) {
 
     std::vector<decltype(random_numbers.all_fields())> numbers(N);
     
+#if TFB_MYSQL
     raw_c("START TRANSACTION");
+#endif
     for (int i = 0; i < N; i++)
     {
       numbers[i] = c.find_one(s::id = 1 + rand() % 9999).value();
@@ -111,16 +113,20 @@ int main(int argc, char* argv[]) {
 #if TFB_MYSQL
     for (int i = 0; i < N; i++)
       c.update(numbers[i]);
+    raw_c("COMMIT");
 #elif TFB_PGSQL
-    std::ostringstream ss;
-    ss << "UPDATE World SET randomNumber=tmp.randomNumber FROM (VALUES ";
-    for (int i = 0; i < N; i++)
-      ss << "(" << numbers[i].id << ", " << numbers[i].randomNumber << ") "<< (i == N-1 ? "": ",");
-    ss << ") AS tmp(id, randomNumber) WHERE tmp.id = World.id";
-    raw_c(ss.str());
+    raw_c.cached_statement
+      ([N] {
+         std::ostringstream ss;
+         ss << "UPDATE World SET randomNumber=tmp.randomNumber FROM (VALUES ";
+         for (int i = 0; i < N; i++)
+           ss << "($" << i*2+1 << "::integer, $" << i*2+2 << "::integer) "<< (i == N-1 ? "": ",");
+         ss << ") AS tmp(id, randomNumber) WHERE tmp.id = World.id";
+         return ss.str();
+       }, N)(numbers);
+    
 #endif
     
-    raw_c("COMMIT");
 
     response.write_json(numbers);
   };