mirror of
https://github.com/github/codeql.git
synced 2025-12-16 16:53:25 +01:00
Codegen: implement db_table_name in cppgen
This commit is contained in:
@@ -37,12 +37,19 @@ def _get_type(t: str, add_or_none_except: typing.Optional[str] = None) -> str:
|
||||
return t
|
||||
|
||||
|
||||
def _get_trap_name(cls: schema.Class, p: schema.Property) -> str | None:
|
||||
if p.is_single:
|
||||
return None
|
||||
overridden_trap_name = p.pragmas.get("ql_db_table_name")
|
||||
if overridden_trap_name:
|
||||
return inflection.camelize(overridden_trap_name)
|
||||
trap_name = inflection.camelize(f"{cls.name}_{p.name}")
|
||||
if p.is_predicate:
|
||||
return trap_name
|
||||
return inflection.pluralize(trap_name)
|
||||
|
||||
|
||||
def _get_field(cls: schema.Class, p: schema.Property, add_or_none_except: typing.Optional[str] = None) -> cpp.Field:
|
||||
trap_name = None
|
||||
if not p.is_single:
|
||||
trap_name = inflection.camelize(f"{cls.name}_{p.name}")
|
||||
if not p.is_predicate:
|
||||
trap_name = inflection.pluralize(trap_name)
|
||||
args = dict(
|
||||
field_name=p.name + ("_" if p.name in cpp.cpp_keywords else ""),
|
||||
base_type=_get_type(p.type, add_or_none_except),
|
||||
@@ -50,7 +57,7 @@ def _get_field(cls: schema.Class, p: schema.Property, add_or_none_except: typing
|
||||
is_repeated=p.is_repeated,
|
||||
is_predicate=p.is_predicate,
|
||||
is_unordered=p.is_unordered,
|
||||
trap_name=trap_name,
|
||||
trap_name=_get_trap_name(cls, p),
|
||||
)
|
||||
args.update(cpp.get_field_override(p.name))
|
||||
return cpp.Field(**args)
|
||||
|
||||
@@ -225,5 +225,25 @@ def test_synth_properties_ignored(generate):
|
||||
]
|
||||
|
||||
|
||||
def test_properties_with_custom_db_table_names(generate):
|
||||
assert generate([
|
||||
schema.Class("Obj", properties=[
|
||||
schema.OptionalProperty("x", "a", pragmas={"ql_db_table_name": "foo"}),
|
||||
schema.RepeatedProperty("y", "b", pragmas={"ql_db_table_name": "bar"}),
|
||||
schema.RepeatedOptionalProperty("z", "c", pragmas={"ql_db_table_name": "baz"}),
|
||||
schema.PredicateProperty("p", pragmas={"ql_db_table_name": "hello"}),
|
||||
schema.RepeatedUnorderedProperty("q", "d", pragmas={"ql_db_table_name": "world"}),
|
||||
]),
|
||||
]) == [
|
||||
cpp.Class(name="Obj", final=True, trap_name="Objs", fields=[
|
||||
cpp.Field("x", "a", is_optional=True, trap_name="Foo"),
|
||||
cpp.Field("y", "b", is_repeated=True, trap_name="Bar"),
|
||||
cpp.Field("z", "c", is_repeated=True, is_optional=True, trap_name="Baz"),
|
||||
cpp.Field("p", "bool", is_predicate=True, trap_name="Hello"),
|
||||
cpp.Field("q", "d", is_repeated=True, is_unordered=True, trap_name="World"),
|
||||
]),
|
||||
]
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(pytest.main([__file__] + sys.argv[1:]))
|
||||
|
||||
Reference in New Issue
Block a user