@@ -58,6 +58,8 @@ def make_parent_field(parent, relation):
5858 field ["flags" ] = ["cmp" , "serial" , "diff" , "no-set" , "get" ] + relation .get (
5959 "flags" , []
6060 )
61+ if "page_size" in relation :
62+ field ["page_size" ] = relation ["page_size" ]
6163 if "schema" in relation :
6264 field ["schema" ] = relation ["schema" ]
6365
@@ -261,6 +263,30 @@ def generate_relations(schema):
261263 make_parent_hash_field (parent , relation , parent_field )
262264 make_child_next_field (child , relation )
263265
266+ def preprocess_klass (klass ):
267+ # Insert at the beginning to guarantee position 0
268+ klass ["declared_classes" ].insert (0 , "dbIStream" )
269+ klass ["declared_classes" ].insert (1 , "dbOStream" )
270+ if klass ["name" ] != "dbDatabase" :
271+ klass ["declared_classes" ].insert (2 , "_dbDatabase" )
272+ klass ["cpp_includes" ].append ("dbDatabase.h" )
273+ klass ["h_includes" ].insert (0 , "dbCore.h" )
274+ klass ["h_includes" ].insert (1 , "odb/odb.h" )
275+ name = klass ["name" ]
276+ klass ["cpp_includes" ].extend (["dbTable.h" , "dbTable.hpp" , "odb/db.h" , f"{ name } .h" ])
277+ if klass ['hasBitFields' ]:
278+ klass ['cpp_sys_includes' ].extend (["cstdint" , "cstring" ])
279+ for field in klass ["fields" ]:
280+ if field .get ('table' , False ):
281+ page_size_part = f", { field ['page_size' ]} " if 'page_size' in field else ""
282+ # setting default value for table fields
283+ this_or_db = "this" if klass ["name" ] == "dbDatabase" else "db"
284+ field ['default' ] = f"new dbTable<_{ field ['type' ]} { page_size_part } >({ this_or_db } , this, (GetObjTbl_t) &_{ klass ['name' ]} ::getObjectTable, { field ['type' ]} Obj)"
285+ # setting table identifier for table fields
286+ field ['table_base_type' ] = field ['type' ]
287+ field ['type' ] = f"dbTable<_{ field ['type' ]} { page_size_part } >*"
288+
289+
264290
265291def generate (schema , env , includeDir , srcDir , keep_empty ):
266292 """Generate generate code based on the schema and templates"""
@@ -326,7 +352,7 @@ def generate(schema, env, includeDir, srcDir, keep_empty):
326352 )
327353 hash_dict [hash_value ] = klass ["name" ]
328354 klass ["hash" ] = f"0x{ hash_value :08X} "
329-
355+ preprocess_klass ( klass )
330356 # Generating files
331357 for template_file in ["impl.h" , "impl.cpp" ]:
332358 template = env .get_template (template_file )
0 commit comments