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

int main(int argc, char *argv[]) {

	MYSQL *mysql;
	MYSQL_STMT *stmt;
	MYSQL_RES *res;
	MYSQL_FIELD *field;
	const char *host;
	unsigned int port;
	const char *user;
	const char *passwd;

	if (argc != 5) {
		printf("Usage: %s host port user passwd\n", argv[0]);
		return 1;
	}

	host = argv[1];
	port = atoi(argv[2]);
	user = argv[3];
	passwd = argv[4];

	if (mysql_library_init(-1, NULL, NULL) != 0) {
		printf("mysql_library_init failed");
		return 1;
	}

	mysql = mysql_init(NULL);
	if (!mysql) {
		printf("mysql_init failed");
		return 1;
	}

	if (!mysql_real_connect(mysql, host, user, passwd, NULL, port, NULL, 0)) {
		printf("mysql_real_connect failed: %s\n", mysql_error(mysql));
		return 1;
	}

	stmt = mysql_stmt_init(mysql);
	if (!stmt) {
		printf("mysql_stmt_init failed: %s\n", mysql_error(mysql));
		return 1;
	}

	if (mysql_stmt_prepare(stmt, "SHOW ENGINES", sizeof("SHOW ENGINES")-1) != 0) {
		printf("mysql_stmt_prepare failed: %s\n", mysql_stmt_error(stmt));
		return 1;
	}

	if (mysql_stmt_execute(stmt) != 0) {
		printf("mysql_stmt_execute failed: %s\n", mysql_stmt_error(stmt));
		return 1;
	}

	res = mysql_stmt_result_metadata(stmt);
	if (!res) {
		printf("mysql_stmt_result_metadata failed: %s\n", mysql_stmt_error(stmt));
		return 1;
	}

	mysql_field_seek(res, 0);
	while ((field = mysql_fetch_field(res)))
		printf("field: name=%s name_length=%u table=%s table_length=%u\n", field->name, field->name_length, field->table, field->table_length);

	mysql_free_result(res);

	if (mysql_stmt_close(stmt) != 0) {
		printf("mysql_stmt_close failed: %s\n", mysql_error(mysql));
		return 1;
	}

	mysql_close(mysql);
	mysql_library_end();

	return 0;

}
