Skip to content

Commit 7c8eb9e

Browse files
author
Paolo Tranquilli
committed
Codegen: implement db_table_name in cppgen
1 parent 9639d6c commit 7c8eb9e

File tree

2 files changed

+33
-6
lines changed

2 files changed

+33
-6
lines changed

misc/codegen/generators/cppgen.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,20 +37,27 @@ def _get_type(t: str, add_or_none_except: typing.Optional[str] = None) -> str:
3737
return t
3838

3939

40+
def _get_trap_name(cls: schema.Class, p: schema.Property) -> str | None:
41+
if p.is_single:
42+
return None
43+
overridden_trap_name = p.pragmas.get("ql_db_table_name")
44+
if overridden_trap_name:
45+
return inflection.camelize(overridden_trap_name)
46+
trap_name = inflection.camelize(f"{cls.name}_{p.name}")
47+
if p.is_predicate:
48+
return trap_name
49+
return inflection.pluralize(trap_name)
50+
51+
4052
def _get_field(cls: schema.Class, p: schema.Property, add_or_none_except: typing.Optional[str] = None) -> cpp.Field:
41-
trap_name = None
42-
if not p.is_single:
43-
trap_name = inflection.camelize(f"{cls.name}_{p.name}")
44-
if not p.is_predicate:
45-
trap_name = inflection.pluralize(trap_name)
4653
args = dict(
4754
field_name=p.name + ("_" if p.name in cpp.cpp_keywords else ""),
4855
base_type=_get_type(p.type, add_or_none_except),
4956
is_optional=p.is_optional,
5057
is_repeated=p.is_repeated,
5158
is_predicate=p.is_predicate,
5259
is_unordered=p.is_unordered,
53-
trap_name=trap_name,
60+
trap_name=_get_trap_name(cls, p),
5461
)
5562
args.update(cpp.get_field_override(p.name))
5663
return cpp.Field(**args)

misc/codegen/test/test_cppgen.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,5 +225,25 @@ def test_synth_properties_ignored(generate):
225225
]
226226

227227

228+
def test_properties_with_custom_db_table_names(generate):
229+
assert generate([
230+
schema.Class("Obj", properties=[
231+
schema.OptionalProperty("x", "a", pragmas={"ql_db_table_name": "foo"}),
232+
schema.RepeatedProperty("y", "b", pragmas={"ql_db_table_name": "bar"}),
233+
schema.RepeatedOptionalProperty("z", "c", pragmas={"ql_db_table_name": "baz"}),
234+
schema.PredicateProperty("p", pragmas={"ql_db_table_name": "hello"}),
235+
schema.RepeatedUnorderedProperty("q", "d", pragmas={"ql_db_table_name": "world"}),
236+
]),
237+
]) == [
238+
cpp.Class(name="Obj", final=True, trap_name="Objs", fields=[
239+
cpp.Field("x", "a", is_optional=True, trap_name="Foo"),
240+
cpp.Field("y", "b", is_repeated=True, trap_name="Bar"),
241+
cpp.Field("z", "c", is_repeated=True, is_optional=True, trap_name="Baz"),
242+
cpp.Field("p", "bool", is_predicate=True, trap_name="Hello"),
243+
cpp.Field("q", "d", is_repeated=True, is_unordered=True, trap_name="World"),
244+
]),
245+
]
246+
247+
228248
if __name__ == '__main__':
229249
sys.exit(pytest.main([__file__] + sys.argv[1:]))

0 commit comments

Comments
 (0)