Exemplo n.º 1
0
void
print_result_meta_series(HSTMT hstmt,
						 SQLSMALLINT *colids,
						 SQLSMALLINT numcols)
{
	int i;

	printf("Result set metadata:\n");

	for (i = 0; i < numcols; i++)
	{
		SQLRETURN rc;
		SQLCHAR colname[50];
		SQLSMALLINT colnamelen;
		SQLSMALLINT datatype;
		SQLULEN colsize;
		SQLSMALLINT decdigits;
		SQLSMALLINT nullable;

		rc = SQLDescribeCol(hstmt, colids[i],
							colname, sizeof(colname),
							&colnamelen,
							&datatype,
							&colsize,
							&decdigits,
							&nullable);
		if (!SQL_SUCCEEDED(rc))
		{
			print_diag("SQLDescribeCol failed", SQL_HANDLE_STMT, hstmt);
			return;
		}
		printf("%s: %s(%u) digits: %d, %s\n",
			   colname, datatype_str(datatype), (unsigned int) colsize,
			   decdigits, nullable_str(nullable));
	}
}
Exemplo n.º 2
0
int main(int argc, char **argv)
{
	SQLRETURN rc;
	HSTMT hstmt = SQL_NULL_HSTMT;
	char param1[20] = { 1, 2, 3, 4, 5, 6, 7, 8 };
	SQLLEN cbParam1;
	SQLSMALLINT colcount;
	SQLSMALLINT dataType;
	SQLULEN paramSize;
	SQLSMALLINT decDigits;
	SQLSMALLINT nullable;

	test_connect();

	rc = SQLAllocHandle(SQL_HANDLE_STMT, conn, &hstmt);
	if (!SQL_SUCCEEDED(rc))
	{
		print_diag("failed to allocate stmt handle", SQL_HANDLE_DBC, conn);
		exit(1);
	}

	/**** Query with a bytea param ****/

	/* Prepare a statement */
	rc = SQLPrepare(hstmt, (SQLCHAR *) "SELECT id, t FROM byteatab WHERE t = ?", SQL_NTS);
	CHECK_STMT_RESULT(rc, "SQLPrepare failed", hstmt);

	/* bind param  */
	cbParam1 = 8;
	rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
						  SQL_C_BINARY,	/* value type */
						  SQL_BINARY,	/* param type */
						  20,			/* column size */
						  0,			/* dec digits */
						  param1,		/* param value ptr */
						  0,			/* buffer len */
						  &cbParam1		/* StrLen_or_IndPtr */);
	CHECK_STMT_RESULT(rc, "SQLBindParameter failed", hstmt);

	/* Test SQLNumResultCols, called before SQLExecute() */
	rc = SQLNumResultCols(hstmt, &colcount);
	CHECK_STMT_RESULT(rc, "SQLNumResultCols failed", hstmt);
	printf("# of result cols: %d\n", colcount);

	/* Execute */
	rc = SQLExecute(hstmt);
	CHECK_STMT_RESULT(rc, "SQLExecute failed", hstmt);

	/* Fetch result */
	print_result(hstmt);

	rc = SQLFreeStmt(hstmt, SQL_CLOSE);
	CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);

	/*** Test SQLBindParameter with SQLExecDirect ***/
	printf("\nTesting SQLBindParameter with SQLExecDirect...\n");

	/* bind param  */
	strcpy(param1, "bar");
	cbParam1 = SQL_NTS;
	rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
						  SQL_C_CHAR,	/* value type */
						  SQL_CHAR,		/* param type */
						  20,			/* column size */
						  0,			/* dec digits */
						  param1,		/* param value ptr */
						  0,			/* buffer len */
						  &cbParam1		/* StrLen_or_IndPtr */);
	CHECK_STMT_RESULT(rc, "SQLBindParameter failed", hstmt);

	rc = SQLExecDirect(hstmt, (SQLCHAR *) "SELECT 'foo' UNION ALL SELECT ?", SQL_NTS);
	CHECK_STMT_RESULT(rc, "SQLExecDirect failed", hstmt);
	print_result(hstmt);

	rc = SQLFreeStmt(hstmt, SQL_CLOSE);
	CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);

	/*** Test SQLDescribeParam ***/
	printf("\nTesting SQLDescribeParam...\n");

	rc = SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
	CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);

	/* Prepare a statement */
	rc = SQLPrepare(hstmt, (SQLCHAR *) "SELECT id, t FROM testtab1 WHERE id = ?", SQL_NTS);
	CHECK_STMT_RESULT(rc, "SQLPrepare failed", hstmt);

	rc = SQLDescribeParam(hstmt, 1, &dataType, &paramSize, &decDigits, &nullable);
	CHECK_STMT_RESULT(rc, "SQLDescribeParams failed", hstmt);
	printf("Param 1: type %s; size %u; dec digits %d; %s\n",
		   datatype_str(dataType), (unsigned int) paramSize, decDigits, nullable_str(nullable));
	/* bind param  */
	strcpy(param1, "3");
	cbParam1 = SQL_NTS;
	rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT,
						  SQL_C_CHAR,	/* value type */
						  SQL_CHAR,		/* param type */
						  20,			/* column size */
						  0,			/* dec digits */
						  param1,		/* param value ptr */
						  0,			/* buffer len */
						  &cbParam1		/* StrLen_or_IndPtr */);
	CHECK_STMT_RESULT(rc, "SQLBindParameter failed", hstmt);

	/* Test SQLNumResultCols, called before SQLExecute() */
	rc = SQLNumResultCols(hstmt, &colcount);
	CHECK_STMT_RESULT(rc, "SQLNumResultCols failed", hstmt);
	printf("# of result cols: %d\n", colcount);

	/* Execute */
	rc = SQLExecute(hstmt);
	CHECK_STMT_RESULT(rc, "SQLExecute failed", hstmt);

	/* Fetch result */
	print_result(hstmt);

	rc = SQLFreeStmt(hstmt, SQL_CLOSE);
	CHECK_STMT_RESULT(rc, "SQLFreeStmt failed", hstmt);

	/* Clean up */
	test_disconnect();

	return 0;
}
Exemplo n.º 3
0
static void generate_case(int op, int type, int match, uint64_t match_bits,
						  datatype_t din,
						  datatype_t dout,
						  datatype_t tgt,
						  datatype_t z,
						  int length,
						  int fetch)
{
	FILE *f;
	char *ptl_op;
	char *me_opt;

	if (to_files) {
		char fname[1000];
		
		casenum ++;		
		sprintf(fname, "temp/test_atomic_all-%03d.xml", casenum);
		f = fopen(fname, "w");
		if (f == NULL) {
			fprintf(stderr, "Cannot create file %s - aborting!\n", fname);
			exit(1);
		}
	} else {
		f = stdout;
	}

	fprintf(f, "<?xml version=\"1.0\"?>\n");

	fprintf(f, "<!--\n");
	fprintf(f, "		seed = %d\n", seed);
	fprintf(f, "		max_length = %d\n", max_length);
	fprintf(f, "-->\n");

	fprintf(f, "<test>\n");

	ptl_op = fetch ? "fetch" : "atomic";
	me_opt = fetch ? "OP_GET OP_PUT" : "OP_PUT";

	fprintf(f, "  <desc>Test %s %s/%s length=%d</desc>\n",
		   ptl_op, atom_op_name[op], atom_type[type].name, length);
	fprintf(f, "  <ptl>\n");

	fprintf(f, "    <ptl_ni ni_opt=\"%s %s\">\n",
		   match ? "MATCH" : "NO_MATCH",
		   "PHYSICAL");
	fprintf(f, "      <ptl_pt>\n");

	/* setup me/le */
	if (match)
		fprintf(f, "        <ptl_me me_opt=\"%s\" me_match=\"0x%" PRIu64 "\" type=\"%s\" me_data=\"%s\">\n",
			   me_opt, match_bits, atom_type[type].name, datatype_str(type, tgt));
	else
		fprintf(f, "        <ptl_le le_opt=\"%s\" type=\"%s\" le_data=\"%s\">\n",
			   me_opt, atom_type[type].name, datatype_str(type, tgt));

	/* setup md(s) */
	fprintf(f, "          <ptl_md type=\"%s\" md_data=\"%s\">\n",
		   atom_type[type].name, datatype_str(type, dout));
	if (fetch)
		fprintf(f, "            <ptl_md type=\"%s\" md_data=\"%s\">\n",
			   atom_type[type].name, datatype_str(type, din));

	if (match)
		fprintf(f, "            <ptl_%s atom_op=\"%s\" atom_type=\"%s\" length=\"%d\" match=\"0x%" PRIu64 "\" target_id=\"SELF\"/>\n",
			   ptl_op, atom_op_name[op], atom_type[type].name, length, match_bits);
	else
		fprintf(f, "            <ptl_%s atom_op=\"%s\" atom_type=\"%s\" length=\"%d\" target_id=\"SELF\"/>\n",
			   ptl_op, atom_op_name[op], atom_type[type].name, length);

	/* TODO replace with an event */
	fprintf(f, "            <msleep count=\"10\"/>\n");

	if (fetch) {
		/* check to see that din data has changed */
		fprintf(f, "            <check length=\"%d\" type=\"%s\" md_data=\"%s\"/>\n",
			   length, atom_type[type].name, datatype_str(type, tgt));
		fprintf(f, "            <check length=\"%d\" type=\"%s\" offset=\"%d\" md_data=\"%s\"/>\n",
			   atom_type[type].size, atom_type[type].name, length, datatype_str(type, din));

		fprintf(f, "            </ptl_md>\n");
	}

	/* check to see that dout data has not changed */
	fprintf(f, "            <check length=\"%d\" type=\"%s\" md_data=\"%s\"/>\n",
		   length, atom_type[type].name, datatype_str(type, dout));
	fprintf(f, "            <check length=\"%d\" type=\"%s\" offset=\"%d\" md_data=\"%s\"/>\n",
		   atom_type[type].size, atom_type[type].name, length, datatype_str(type, dout));

	fprintf(f, "          </ptl_md>\n");

	/* check to see that target data has changed */
	if (match) {
		fprintf(f, "          <check length=\"%d\" type=\"%s\" me_data=\"%s\"/>\n",
			   length, atom_type[type].name, datatype_str(type, z));
		fprintf(f, "          <check length=\"%d\" type=\"%s\" offset=\"%d\" me_data=\"%s\"/>\n",
			   atom_type[type].size, atom_type[type].name, length, datatype_str(type, tgt));
	} else {
		fprintf(f, "          <check length=\"%d\" type=\"%s\" le_data=\"%s\"/>\n",
			   length, atom_type[type].name, datatype_str(type, z));
		fprintf(f, "          <check length=\"%d\" type=\"%s\" offset=\"%d\" le_data=\"%s\"/>\n",
			   atom_type[type].size, atom_type[type].name, length, datatype_str(type, tgt));
	}

	if (match)
		fprintf(f, "        </ptl_me>\n");
	else
		fprintf(f, "        </ptl_le>\n");

	fprintf(f, "      </ptl_pt>\n");
	fprintf(f, "    </ptl_ni>\n");
	fprintf(f, "  </ptl>\n");

	fprintf(f, "</test>\n");

	if (to_files) {
		fclose(f);
	}
}