@@ -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
@@ -262,6 +264,31 @@ def generate_relations(schema):
262264 make_child_next_field (child , relation )
263265
264266
267+ def preprocess_klass (klass ):
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" ] = (
285+ f"new dbTable<_{ field ['type' ]} { page_size_part } >({ this_or_db } , this, (GetObjTbl_t) &_{ klass ['name' ]} ::getObjectTable, { field ['type' ]} Obj)"
286+ )
287+ # setting table identifier for table fields
288+ field ["table_base_type" ] = field ["type" ]
289+ field ["type" ] = f"dbTable<_{ field ['type' ]} { page_size_part } >*"
290+
291+
265292def generate (schema , env , includeDir , srcDir , keep_empty ):
266293 """Generate generate code based on the schema and templates"""
267294 print ("###################Code Generation Begin###################" )
@@ -326,7 +353,7 @@ def generate(schema, env, includeDir, srcDir, keep_empty):
326353 )
327354 hash_dict [hash_value ] = klass ["name" ]
328355 klass ["hash" ] = f"0x{ hash_value :08X} "
329-
356+ preprocess_klass ( klass )
330357 # Generating files
331358 for template_file in ["impl.h" , "impl.cpp" ]:
332359 template = env .get_template (template_file )
0 commit comments