#include "my_global.h"
#include "mysql.h"

#define SELECT123 "SELECT * FROM bad_cursor_read"

#define MHOST "10.10.10.10"
#define MUSER "root"
#define MPASS "supersecret"
#define MDBASE "test"

void dump_table(MYSQL *conn, int expect)
{
	MYSQL_STMT *prep_stmt = NULL;
	MYSQL_BIND *bind_out;
	int row_data;
	int res, i=0;
	const ulong type= (ulong)CURSOR_TYPE_READ_ONLY;
	
	prep_stmt= mysql_stmt_init(conn);
	mysql_stmt_attr_set(prep_stmt, STMT_ATTR_CURSOR_TYPE, (const void *)&type);

	res= mysql_stmt_prepare(prep_stmt, SELECT123 , strlen(SELECT123));	
        res= mysql_stmt_execute(prep_stmt);
	printf("reading\n");
      	do {
      	      	res= mysql_stmt_fetch(prep_stmt);
		if (res) break;
		printf("\trow has been read\n");
		i++;
	} while (1);
	printf("read %d expected %d %s\n", i, expect, i!=expect? "PROBLEM":"");
	mysql_stmt_close(prep_stmt);
}

int main(int argc, char **argv)
{
	MYSQL *conn;
	
	mysql_library_init(argc, argv, NULL);
	conn = mysql_init(NULL);
	conn = mysql_real_connect(conn, MHOST, MUSER, MPASS, MDBASE, 0, NULL, 0);
	if (!conn)
		exit(1);
	mysql_query(conn, "CREATE TABLE bad_cursor_read(a int) ENGINE=INNODB;");
	mysql_query(conn, "SET AUTOCOMMIT=0");
	mysql_query(conn, "INSERT INTO bad_cursor_read VALUES (1), (2)");
	dump_table(conn, 2);
	mysql_query(conn, "DELETE FROM bad_cursor_read WHERE a=1;");
	dump_table(conn, 2);
	mysql_query(conn, "DROP TABLE bad_cursor_read;");
}
