
- remove SetObjectPos() from generic interface


- multithreading
  - mutexes:
    - tables:
      - SetReadersTablePtrListObjects:()
        - lowlevel/io_table:createTableForObjects()
        - lowlevel/io_table:_readTablePtrList()
        - lowlevel/io_table:AQDB_DbFile_IoLowlevel_EndEditTable().

      - GetReadersTablePtrListObjects():
        - lowlevel/io_table:AQDB_DbFile_IoLowlevel_BeginEditTable()

      - SetWritersTablePtrListObjects():
        - lowlevel/io_table:AQDB_DbFile_IoLowlevel_BeginEditTable()
        - lowlevel/io_table:AQDB_DbFile_IoLowlevel_EndEditTable().

      - GetWritersTablePtrListObjects():
        - lowlevel/io_table:AQDB_DbFile_IoLowlevel_BeginEditTable()
        - lowlevel/io_table:AQDB_DbFile_IoLowlevel_EndEditTable().

      - AQDB_DbFile_Table_SetObjectPos()
        - logged/io_session:_undoSession()
        - lowlevel/AQDB_DbFile_IoLowlevel_DeleteObject()
        - lowlevel/AQDB_DbFile_IoLowlevel_SetObjectPos()
        - lowlevel/AQDB_DbFile_IoLowlevel_WriteObject().

      - AQDB_DbFile_Table_GetObjectPos()
        - AQDB_DbFile_IoLowlevel_GetObjectPos()
        - AQDB_DbFile_IoLowlevel_ReadObject().

    - cached: handling of cache entries
    - lowlevel: 
      - handling of AQFS_File operations (esp. readObject, writeObject)
      - gathering source ids in QuerySubmit

- AQFS_File_AppendData
- AQFS_File_AppendTable
- AQFS_File_ReadDataAt
- AQFS_File_WriteDataAt
- AQFS_File_AddTableEntry
- AQFS_File_new
- AQFS_File_Open
- AQFS_File_free
- AQFS_File_Create
- AQFS_File_Close
- AQFS_File_GetFirstItemOffset
- AQFS_File_ReadTableList
- AQFS_File_GetTableEntry
- AQFS_File_SetTableEntry
- AQFS_File_WriteDirtyTables
- AQFS_File_Sync
- AQFS_File_AppendNewTablesFromPtrListToFile
- AQFS_File_WritDirtyTablesFromPtrList
- AQFS_File_ReadTablePtrList

- dbTypeTables -> ioLayer
- ioLayer::getTableById()


- Object:
  - dont store typed fields (only used ones per object lifetime, doesn't justify the complexity)
  - when reading objects:
    - if object is small enough or bits in selector are all set read the full object
    - try to avoid copying field data
- DBFile:
  - create a virtual class for DBLayer and stack those instead of directly calling sub-layer functions directly
    by name (e.g. AQDB_DbFile_Lowlevel_ReadObjectAt)
  - determine where locks are needed for multithreading


Next:
- AQDB_DbFile_CloseTable()




Concepts
========

BeginEdit/EndEdit
-----------------

On beginEdit() the current table->tablePtrListObjects is copied to table->writersTablePtrListObjects,
only the latter one is modified by the writer client, all other clients see the unmodified table->tablePtrListObjects.

Upon endEdit() newly created tables in table->writersTablePtrListObjects are written to file, then modified tables of that
list are written to file.
After that table->writersTablePtrListObjects is moved to table->tablePtrListObjects, effectively applying all changes
for every client to see.

