#include <mysql.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>

static void show_mysql_error(MYSQL *mysql)
{
	printf("\n Error(%d) [%s] \"%s\" \n", mysql_errno(mysql),
		mysql_sqlstate(mysql),
		mysql_error(mysql));
}

static void show_stmt_error(MYSQL_STMT *stmt)
{
	printf("\n Error(%d) [%s] \"%s\" \n", mysql_stmt_errno(stmt),
		mysql_stmt_sqlstate(stmt),
		mysql_stmt_error(stmt));
}

int main(int argc, char *argv[])
{
	MYSQL *mysql;
	MYSQL_STMT *stmt;
	MYSQL_BIND bind;

	/* Data for insert */
	unsigned char *data[] = { "1", "0" };
	unsigned long lengths[] = { 1,1 };
	unsigned int array_size = 2;

	mysql = mysql_init(NULL);

	/* connect to MariaDB server */
	if (!mysql_real_connect(mysql, "localhost", "username", "pwd",
		"dbname", 3306, NULL, 0))
		show_mysql_error(mysql);

	if (mysql_query(mysql, "DROP TABLE IF EXISTS bulk_example1"))
		show_mysql_error(mysql);

	if (mysql_query(mysql, "CREATE TABLE bulk_example1 (COL1 BIT(1))"))
		show_mysql_error(mysql);

	stmt = mysql_stmt_init(mysql);
	if (mysql_stmt_prepare(stmt, "INSERT INTO bulk_example1 VALUES (?)", -1))
		show_stmt_error(stmt);

	memset(&bind, 0, sizeof(MYSQL_BIND));

	bind.buffer_type = MYSQL_TYPE_TINY;
	bind.buffer = data;
	bind.length = lengths;

	mysql_stmt_attr_set(stmt, STMT_ATTR_ARRAY_SIZE, &array_size);

	mysql_stmt_bind_param(stmt, &bind);

	if (mysql_stmt_execute(stmt))
		show_stmt_error(stmt);

	mysql_stmt_close(stmt);

	// Fetch data
	const char query[] = "SELECT * FROM bulk_example1";
	mysql_real_query(mysql, query, (unsigned int)strlen(query));

	MYSQL_RES* resultset;
	resultset= mysql_store_result(mysql);
	MYSQL_FIELD* field;
	field = mysql_fetch_field(resultset);
	size_t rowCount = mysql_num_rows(resultset);
	printf("\n row count: %d \n", rowCount);

	mysql_free_result(resultset);
	mysql_close(mysql);
}