mORMot and Open Source friends
Check-in [e1c3c95b95]
Not logged in

Many hyperlinks are disabled.
Use anonymous login to enable hyperlinks.

Overview
Comment:fixed issue when retrieving a TSQLRecord containing TSQLRecordMany properties with external tables (like 'no such column DestList' error) via SQLite3 virtual tables (e.g. for a JOINed query like FillPrepareMany)
Timelines: family | ancestors | descendants | both | trunk
Files: files | file ages | folders
SHA1: e1c3c95b95e940b1d2141a6ff544072a9430e49a
User & Date: abouchez 2013-10-30 14:47:15
Context
2013-10-31
08:29
enhanced FillPrepareMany() regression tests check-in: f4f9bdf93a user: abouchez tags: trunk
2013-10-30
14:47
fixed issue when retrieving a TSQLRecord containing TSQLRecordMany properties with external tables (like 'no such column DestList' error) via SQLite3 virtual tables (e.g. for a JOINed query like FillPrepareMany) check-in: e1c3c95b95 user: abouchez tags: trunk
2013-10-29
16:44
also fix TSQLRestRoutingJSON_RPC from the same unexpected GPF issue check-in: 8acac4fc09 user: abouchez tags: trunk
Changes
Hide Diffs Unified Diffs Ignore Whitespace Patch

Changes to SQLite3/mORMot.pas.

750
751
752
753
754
755
756



757
758
759
760
761
762
763
.....
20175
20176
20177
20178
20179
20180
20181
20182

20183
20184
20185
20186
20187
20188
20189
    - added TTypeInfo.ClassCreate() method to create a TObject instance from RTTI
    - TEnumType.GetEnumNameValue() will now recognize both 'sllWarning' and
      'Warning' text as a sllWarning item (will enhance JSONToObject() process)
    - added ClassInstanceCreate() function calling any known virtual constructor
    - added TPropInfo.ClassFromJSON() to properly unserialize TObject properties
    - added TSQLPropInfo.SQLFieldTypeName property
    - fixed [f96cf0fc5d] and [221ee9c767] about TSQLRecordMany JSON serialization



    - fixed TInterfacedCollection.GetClass to be defined as a class function
    - TSQLRestClientURINamedPipe and TSQLRestClientURIMessage are now thread-safe
      (i.e. protected by a system mutex) therefore can be called from a
      multi-threaded process, e.g. TSQLRestServer instances as proxies
    - modified named pipe client side to avoid unexpected file not found errors
    - TInterfaceFactory instances are now shared among all interface-based
      features (e.g. services, callbacks or mocks/stubs), in a thread-safe cache
................................................................................
var f: integer;
begin
  fModel := aModel;
  fProps := aTable.RecordProps;
  SetKind(aKind);
  with Props do
  for f := 0 to Fields.Count-1 do
  with Fields.List[f] do begin

    // pre-computation of SQL statements
    SQL.UpdateSet[true] := SQL.UpdateSet[true]+Name+'=?,';
    SQL.InsertSet := SQL.InsertSet+Name+',';
    if f in SimpleFieldsBits[soUpdate] then
      SQL.UpdateSet[false] := SQL.UpdateSet[false]+Name+'=?,';
    // filter + validation of unique fields, i.e. if marked as "stored false"
    if f in IsUniqueFieldsBits then begin






>
>
>







 







|
>







750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
.....
20178
20179
20180
20181
20182
20183
20184
20185
20186
20187
20188
20189
20190
20191
20192
20193
    - added TTypeInfo.ClassCreate() method to create a TObject instance from RTTI
    - TEnumType.GetEnumNameValue() will now recognize both 'sllWarning' and
      'Warning' text as a sllWarning item (will enhance JSONToObject() process)
    - added ClassInstanceCreate() function calling any known virtual constructor
    - added TPropInfo.ClassFromJSON() to properly unserialize TObject properties
    - added TSQLPropInfo.SQLFieldTypeName property
    - fixed [f96cf0fc5d] and [221ee9c767] about TSQLRecordMany JSON serialization
    - fixed issue when retrieving a TSQLRecord containing TSQLRecordMany
      properties with external tables (like 'no such column DestList' error)
      via SQLite3 virtual tables (e.g. for a JOINed query like FillPrepareMany)
    - fixed TInterfacedCollection.GetClass to be defined as a class function
    - TSQLRestClientURINamedPipe and TSQLRestClientURIMessage are now thread-safe
      (i.e. protected by a system mutex) therefore can be called from a
      multi-threaded process, e.g. TSQLRestServer instances as proxies
    - modified named pipe client side to avoid unexpected file not found errors
    - TInterfaceFactory instances are now shared among all interface-based
      features (e.g. services, callbacks or mocks/stubs), in a thread-safe cache
................................................................................
var f: integer;
begin
  fModel := aModel;
  fProps := aTable.RecordProps;
  SetKind(aKind);
  with Props do
  for f := 0 to Fields.Count-1 do
  with Fields.List[f] do
  if SQLFieldType in COPIABLE_FIELDS then begin // sftMany fields do not exist
    // pre-computation of SQL statements
    SQL.UpdateSet[true] := SQL.UpdateSet[true]+Name+'=?,';
    SQL.InsertSet := SQL.InsertSet+Name+',';
    if f in SimpleFieldsBits[soUpdate] then
      SQL.UpdateSet[false] := SQL.UpdateSet[false]+Name+'=?,';
    // filter + validation of unique fields, i.e. if marked as "stored false"
    if f in IsUniqueFieldsBits then begin