Browse Source

[mormot] upgrade mORMot to version 2.2.7351 + improved memory allocations for fortunes (#8883)

Co-authored-by: pavel.mash <[email protected]>
pavelmash 1 year ago
parent
commit
48fb5780d9
2 changed files with 15 additions and 10 deletions
  1. 2 2
      frameworks/Pascal/mormot/setup_and_build.sh
  2. 13 8
      frameworks/Pascal/mormot/src/raw.pas

+ 2 - 2
frameworks/Pascal/mormot/setup_and_build.sh

@@ -27,7 +27,7 @@ rm -rf ./libs
 mkdir -p ./libs/mORMot/static
 mkdir -p ./libs/mORMot/static
 # echo "Getting the latest pre-release URL..."
 # echo "Getting the latest pre-release URL..."
 # USED_TAG=$(wget -qO- https://api.github.com/repos/synopse/mORMot2/releases/latest | jq -r '.tag_name')
 # USED_TAG=$(wget -qO- https://api.github.com/repos/synopse/mORMot2/releases/latest | jq -r '.tag_name')
-USED_TAG="2.1.stable"
+USED_TAG="2.2.stable"
 
 
 echo "Used release tag $USED_TAG"
 echo "Used release tag $USED_TAG"
 URL="https://github.com/synopse/mORMot2/releases/download/$USED_TAG/mormot2static.tgz"
 URL="https://github.com/synopse/mORMot2/releases/download/$USED_TAG/mormot2static.tgz"
@@ -35,7 +35,7 @@ echo "Download statics from $URL ..."
 wget -qO- "$URL" | tar -xz -C ./libs/mORMot/static
 wget -qO- "$URL" | tar -xz -C ./libs/mORMot/static
 
 
 # uncomment for fixed commit URL
 # uncomment for fixed commit URL
-URL=https://github.com/synopse/mORMot2/tarball/c68d24054ffd3e5d63ecb33a2eea49055948e816
+URL=https://github.com/synopse/mORMot2/tarball/7dc50900266f07454fe60b60e4a2755ce445ddeb
 #URL="https://api.github.com/repos/synopse/mORMot2/tarball/$USED_TAG"
 #URL="https://api.github.com/repos/synopse/mORMot2/tarball/$USED_TAG"
 echo "Download and unpacking mORMot sources from $URL ..."
 echo "Download and unpacking mORMot sources from $URL ..."
 wget -qO- "$URL" | tar -xz -C ./libs/mORMot  --strip-components=1
 wget -qO- "$URL" | tar -xz -C ./libs/mORMot  --strip-components=1

+ 13 - 8
frameworks/Pascal/mormot/src/raw.pas

@@ -46,7 +46,7 @@ uses
 type
 type
   // data structures
   // data structures
   TMessageRec = packed record
   TMessageRec = packed record
-    message: RawUtf8;
+    message: PUtf8Char;
   end;
   end;
   TWorldRec = packed record
   TWorldRec = packed record
     id: integer;
     id: integer;
@@ -55,7 +55,7 @@ type
   TWorlds = array of TWorldRec;
   TWorlds = array of TWorldRec;
   TFortune = packed record
   TFortune = packed record
     id: integer;
     id: integer;
-    message: RawUtf8;
+    message: PUtf8Char;
   end;
   end;
   TFortunes = array of TFortune;
   TFortunes = array of TFortune;
 
 
@@ -277,6 +277,7 @@ var
   arr: TDynArray;
   arr: TDynArray;
   n: integer;
   n: integer;
   f: ^TFortune;
   f: ^TFortune;
+  mus: TSynMustacheContextData;
 begin
 begin
   result := HTTP_BADREQUEST;
   result := HTTP_BADREQUEST;
   if stmt = nil then
   if stmt = nil then
@@ -286,13 +287,16 @@ begin
   begin
   begin
     f := arr.NewPtr;
     f := arr.NewPtr;
     f.id := stmt.ColumnInt(0);
     f.id := stmt.ColumnInt(0);
-    f.message := stmt.ColumnUtf8(1);
+    f.message := stmt.ColumnPUtf8(1);
   end;
   end;
   f := arr.NewPtr;
   f := arr.NewPtr;
   f.id := 0;
   f.id := 0;
   f.message := FORTUNES_MESSAGE;
   f.message := FORTUNES_MESSAGE;
   arr.Sort(FortuneCompareByMessage);
   arr.Sort(FortuneCompareByMessage);
-  ctxt.OutContent := fTemplate.RenderDataArray(arr);
+  mus := stmt.Connection.GetThreadOwned(TSynMustacheContextData);
+  if mus = nil then
+    mus := stmt.Connection.SetThreadOwned(fTemplate.NewMustacheContextData);
+  ctxt.OutContent := mus.RenderArray(arr);
   ctxt.OutContentType := HTML_CONTENT_TYPE;
   ctxt.OutContentType := HTML_CONTENT_TYPE;
   result := HTTP_SUCCESS;
   result := HTTP_SUCCESS;
 end;
 end;
@@ -310,7 +314,7 @@ function TRawAsyncServer.json(ctxt: THttpServerRequest): cardinal;
 var
 var
   msgRec: TMessageRec;
   msgRec: TMessageRec;
 begin
 begin
-  msgRec.message := HELLO_WORLD;
+  msgRec.message := pointer(HELLO_WORLD);
   ctxt.SetOutJson(@msgRec, TypeInfo(TMessageRec));
   ctxt.SetOutJson(@msgRec, TypeInfo(TMessageRec));
   result := HTTP_SUCCESS;
   result := HTTP_SUCCESS;
 end;
 end;
@@ -471,7 +475,8 @@ begin
     W := TTextWriter.CreateOwnedStream(tmp{%H-});
     W := TTextWriter.CreateOwnedStream(tmp{%H-});
     try
     try
       W.AddShort('UPDATE world SET randomNumber = v.randomNumber FROM (VALUES');
       W.AddShort('UPDATE world SET randomNumber = v.randomNumber FROM (VALUES');
-      for i := 1 to cnt do begin
+      for i := 1 to cnt do
+      begin
         W.AddShort('(?::integer, ?::integer)');
         W.AddShort('(?::integer, ?::integer)');
         W.Add(',');
         W.Add(',');
       end;
       end;
@@ -702,9 +707,9 @@ begin
 
 
   // register some RTTI for records JSON serialization
   // register some RTTI for records JSON serialization
   Rtti.RegisterFromText([
   Rtti.RegisterFromText([
-    TypeInfo(TMessageRec), 'message:RawUtf8',
+    TypeInfo(TMessageRec), 'message:PUtf8Char',
     TypeInfo(TWorldRec),   'id,randomNumber:integer',
     TypeInfo(TWorldRec),   'id,randomNumber:integer',
-    TypeInfo(TFortune),    'id:integer message:RawUtf8']);
+    TypeInfo(TFortune),    'id:integer message:PUtf8Char']);
 
 
   // compute default execution context from HW information
   // compute default execution context from HW information
   cpuCount := CurrentCpuSet(cpuMask); // may run from a "taskset" command
   cpuCount := CurrentCpuSet(cpuMask); // may run from a "taskset" command