예제 #1
0
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
예제 #2
0
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