def body_find_by_id(struct: Struct, func: FunctionTemplate): func.add_macro_def( MacroDefinition("QUERY", '"{}"'.format(find_by_id_sql_string(struct)))) func.add_macro_def(MacroDefinition("PARAM_COUNT", "1")) func.add_block('\tif (conn == NULL) {\n\t\tconn = db_init();\n\t}\n') func.add_block("{}* out;".format(struct.typedef_name)) func.add_block(""" SQL_RESULT* res; struct {name} {name}; {name}.{pk_name} = id; struct {name}* {name}T = &{name}; """.format(name=struct.name, pk_name=struct.get_pk().name)) func.add_block(struct.get_col_param_buffer(["id_{}".format(struct.name)])) func.add_block( "res = {}_execute_find(conn, QUERY, param, PARAM_COUNT);".format( struct.name)) func.add_block(struct.col_param_buffer_free(1)) func.add_block("\tif (res->results == NULL) { return NULL; }") func.add_block("""out = res->results->data; if (res->count == 1) {{ free(res->results); free(res); return out; }} else {{ fprintf(stderr, "{name}_execute_find(), failed - multiple results (%d)\\n", res->count); mysql_res_free(&res); return NULL; }}""".format(name=struct.name)) return func
def body_delete(struct: Struct, func: FunctionTemplate): func.add_macro_def( MacroDefinition("QUERY", '"{}"'.format(delete_sql_string(struct)))) func.add_macro_def(MacroDefinition("PARAM_COUNT", str(1))) if struct.get_pk() is not None: func.add_block("assert({name}T->{pk_name} != 0);".format( name=struct.name, pk_name=struct.get_pk().name)) func.add_block('\tif (conn == NULL) {\n\t\tconn = db_init();\n\t}\n') func.add_block("""int retval;""") func.add_block(struct.get_col_param_buffer(["id_{}".format(struct.name)])) func.add_block( "retval = {}_execute(conn, QUERY, param, PARAM_COUNT);".format( struct.name)) func.add_block(struct.col_param_buffer_free(1)) func.add_block("return retval;") return func