#include <iostream>
#include <SQLDBC.h>
using namespace SQLDBC;

int
main(int argc, char **argv)
{
	if (argc != 5) {
		std::cout << "usage: " << argv[0] << " <host> <user> <password> <database>\n";
		return 1;
	}
	char err[256];
	SQLDBC_IRuntime *runtime;
	if ((runtime = GetClientRuntime(err, sizeof(err))) == NULL) {
		std::cerr << err << '\n';
		return 1;
	}

	SQLDBC_Environment *env = new SQLDBC_Environment(runtime);
	SQLDBC_Connection *conn;
	conn = env->createConnection();
	if (conn->connect(argv[1], argv[4], argv[2], argv[3]) != SQLDBC_OK) {
		std::cerr << conn->error().getErrorText() << '\n';
		return 1;
	}

	SQLDBC_PreparedStatement *stmt = conn->createPreparedStatement();
	stmt->prepare("SELECT * FROM DUAL WHERE :test = 1");
	SQLDBC_ParameterMetaData *pmd = stmt->getParameterMetaData();
	std::cout << "statement has " << pmd->getParameterCount() << " parameters\n";
	char pname[128];
	SQLDBC_Length psz;
	if (pmd->getParameterName(1, pname, SQLDBC_StringEncodingAscii, sizeof(pname), &psz) != SQLDBC_OK) {
		std::cerr << "could not retrieve parameter name\n";
		return 1;
	}

	std::cout << "parameter name is [" << pname << "], length " << psz << "\n";
}
