#include <mariadb/mysql.h>
#include <string.h>
#include <stdio.h>

int main(void) {
	MYSQL sql;
	mysql_init(&sql);

	mysql_options(&sql, MYSQL_SET_CHARSET_NAME, "utf8mb4");
	mysql_real_connect(&sql, NULL, "<user>", NULL, "<password>", 0, NULL, 0);

	MYSQL_STMT *stmt_a = mysql_stmt_init(&sql);
	mysql_stmt_prepare(stmt_a, "SHOW TABLES;", -1);

	MYSQL_STMT *stmt_b = mysql_stmt_init(&sql);
	mysql_stmt_prepare(stmt_b, "SELECT 'testing';", -1);

	mysql_stmt_execute(stmt_a);

	/* Problematic lines (either is enough to cause a crash): */
	mysql_stmt_free_result(stmt_b);
	mysql_stmt_reset(stmt_b);

	printf("After reset!\n");

	MYSQL_BIND column;
	char col_buffer[100];
	unsigned long col_length = 0;
	my_bool col_error = 0;
	my_bool col_null = 0;

	memset(&column, 0, sizeof(column));
	column.buffer_type = MYSQL_TYPE_STRING;
	column.buffer = col_buffer;
	column.buffer_length = sizeof(col_buffer);
	column.length = &col_length;
	column.error = &col_error;
	column.is_null = &col_null;

	MYSQL_RES *metadata = mysql_stmt_result_metadata(stmt_a);
	mysql_fetch_fields(metadata);
	mysql_free_result(metadata);

	mysql_stmt_bind_result(stmt_a, &column);

	printf("About to fetch!\n");
	while (mysql_stmt_fetch(stmt_a) == 0) {
		col_buffer[col_length] = 0;
		printf("Table %s\n", col_buffer);
	}

	return 0;
}
