int main(int argc, char **argv) { Mapi dbh; MapiHdl hdl = NULL; int i, port, n = 20000; char buf[40]; int lang = 1; char *l = "sql"; /* char *line; */ if (argc != 2 && argc != 3) { printf("usage:smack00 <port> [<language>]\n"); exit(-1); } if (argc == 3) { l = argv[2]; if (strcmp(argv[2], "sql") == 0) lang = 1; else if (strcmp(argv[2], "mal") == 0) lang = 3; } port = atol(argv[1]); dbh = mapi_connect("localhost", port, "monetdb", "monetdb", l, NULL); if (dbh == NULL || mapi_error(dbh)) die(dbh, hdl); /* switch of autocommit */ if (lang==1 && (mapi_setAutocommit(dbh, 0) != MOK || mapi_error(dbh))) die(dbh,NULL); for (i = 0; i < n; i++) { if (lang==1) snprintf(buf, 40, "select %d;", i); else snprintf(buf, 40, "io.print(%d);", i); if ((hdl = mapi_query(dbh, buf)) == NULL || mapi_error(dbh)) die(dbh, hdl); while ( (/*line= */ mapi_fetch_line(hdl)) != NULL) { /*printf("%s \n", line); */ } if (mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); } mapi_destroy(dbh); return 0; }
int main(int argc, char **argv) { Mapi dbh; MapiHdl hdl = NULL; mapi_int64 rows; if (argc != 4) { printf("usage:%s <host> <port> <language>\n", argv[0]); exit(-1); } dbh = mapi_connect(argv[1], atoi(argv[2]), "monetdb", "monetdb", argv[3], NULL); if (dbh == NULL || mapi_error(dbh)) die(dbh, hdl); mapi_cache_limit(dbh, 2); /* mapi_trace_log(dbh, "/tmp/mapilog"); */ /* mapi_trace(dbh, 1); */ if (strcmp(argv[3], "sql") == 0) { /* switch of autocommit */ if (mapi_setAutocommit(dbh, 0) != MOK || mapi_error(dbh)) die(dbh,NULL); if ((hdl = mapi_query(dbh, "create table emp(name varchar(20), age int)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "insert into emp values('John', 23)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "insert into emp values('Mary', 22)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "select * from emp")) == NULL || mapi_error(dbh)) die(dbh, hdl); rows = mapi_fetch_all_rows(hdl); if (mapi_error(dbh)) die(dbh, hdl); printf("rows received " LLFMT "\n", rows); while (mapi_fetch_row(hdl)) { char *nme = mapi_fetch_field(hdl, 0); char *age = mapi_fetch_field(hdl, 1); printf("%s is %s\n", nme, age); } } else if (strcmp(argv[3], "mal") == 0) { if ((hdl = mapi_query(dbh, "emp := bat.new(:oid,:str);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query(dbh, "age := bat.new(:oid,:int);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "bat.append(emp, \"John\");")) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query(dbh, "bat.append(age, 23);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "bat.append(emp, \"Mary\");")) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query(dbh, "bat.append(age, 22);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "io.print(emp,age);")) == NULL || mapi_error(dbh)) die(dbh, hdl); rows = mapi_fetch_all_rows(hdl); if (mapi_error(dbh)) die(dbh, hdl); printf("rows received " LLFMT "\n", rows); while (mapi_fetch_row(hdl)) { char *nme = mapi_fetch_field(hdl, 1); char *age = mapi_fetch_field(hdl, 2); printf("%s is %s\n", nme, age); } } else { fprintf(stderr, "%s: unknown language, only mal and sql supported\n", argv[0]); exit(1); } if (mapi_error(dbh)) die(dbh, hdl); /* mapi_stat(dbh); printf("mapi_ping %d\n",mapi_ping(dbh)); */ if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); mapi_destroy(dbh); return 0; }
int main(int argc, char **argv) { /* a parameter binding test */ char *nme = 0; int age = 0; char *parm[] = { "peter", 0 }; char *parm2[] = { "25", 0 }; char *parm3[] = { "peter", "25", 0 }; Mapi dbh= NULL; MapiHdl hdl = NULL; if (argc != 4) { printf("usage:%s <host> <port> <language>\n", argv[0]); exit(-1); } dbh = mapi_connect(argv[1], atoi(argv[2]), "monetdb", "monetdb", argv[3], NULL); if (dbh == NULL || mapi_error(dbh)) die(dbh, hdl); /* mapi_trace(dbh,1); */ if (strcmp(argv[3], "sql") == 0) { /* switch of autocommit */ if (mapi_setAutocommit(dbh, 0) != MOK || mapi_error(dbh)) die(dbh,NULL); if ((hdl = mapi_query(dbh, "create table emp(name varchar(20), age int)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query_array(dbh, "insert into emp values('?', ?)", parm3)) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "select * from emp")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_bind(hdl, 0, &nme)) die(dbh, hdl); if (mapi_bind_var(hdl, 1, MAPI_INT, &age)) die(dbh, hdl); while (mapi_fetch_row(hdl)) { printf("%s is %d\n", nme, age); } } else if (strcmp(argv[3], "mal") == 0) { if ((hdl = mapi_query(dbh, "emp := bat.new(:oid,:str);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query(dbh, "age := bat.new(:oid,:int);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query_array(dbh, "bat.append(emp,\"?\");", parm)) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query_array(dbh, "bat.append(age,?);", parm2)) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "io.print(emp,age);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_bind(hdl, 1, &nme)) die(dbh, hdl); if (mapi_bind_var(hdl, 2, MAPI_INT, &age)) die(dbh, hdl); while (mapi_fetch_row(hdl)) { printf("%s is %d\n", nme, age); } } else { fprintf(stderr, "%s: unknown language, only mal and sql supported\n", argv[0]); exit(1); } if (mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); mapi_destroy(dbh); return 0; }
SQLRETURN MNDBSetConnectAttr(ODBCDbc *dbc, SQLINTEGER Attribute, SQLPOINTER ValuePtr, SQLINTEGER StringLength) { (void) StringLength; /* Stefan: unused!? */ switch (Attribute) { case SQL_ATTR_AUTOCOMMIT: /* SQLUINTEGER */ switch ((SQLUINTEGER) (uintptr_t) ValuePtr) { case SQL_AUTOCOMMIT_ON: case SQL_AUTOCOMMIT_OFF: dbc->sql_attr_autocommit = (SQLUINTEGER) (uintptr_t) ValuePtr; #ifdef ODBCDEBUG ODBCLOG("SQLSetConnectAttr set autocommit %s\n", dbc->sql_attr_autocommit == SQL_AUTOCOMMIT_ON ? "on" : "off"); #endif if (dbc->mid) mapi_setAutocommit(dbc->mid, dbc->sql_attr_autocommit == SQL_AUTOCOMMIT_ON); break; default: /* Invalid attribute value */ addDbcError(dbc, "HY024", NULL, 0); return SQL_ERROR; } return SQL_SUCCESS; case SQL_ATTR_CURRENT_CATALOG: /* SQLCHAR* */ fixODBCstring(ValuePtr, StringLength, SQLINTEGER, addDbcError, dbc, return SQL_ERROR); if (dbc->Connected) { /* Driver does not support this functions */ addDbcError(dbc, "IM001", NULL, 0); return SQL_ERROR; } if (dbc->dbname) free(dbc->dbname); dbc->dbname = dupODBCstring(ValuePtr, StringLength); if (dbc->dbname == NULL) { /* Memory allocation error */ addDbcError(dbc, "HY001", NULL, 0); return SQL_ERROR; } break; case SQL_ATTR_CONNECTION_TIMEOUT: /* SQLUINTEGER */ dbc->sql_attr_connection_timeout = (SQLUINTEGER) (uintptr_t) ValuePtr; if (dbc->mid) mapi_timeout(dbc->mid, dbc->sql_attr_connection_timeout * 1000); break; case SQL_ATTR_METADATA_ID: /* SQLUINTEGER */ switch ((SQLUINTEGER) (uintptr_t) ValuePtr) { case SQL_TRUE: case SQL_FALSE: dbc->sql_attr_metadata_id = (SQLUINTEGER) (uintptr_t) ValuePtr; #ifdef ODBCDEBUG ODBCLOG("SQLSetConnectAttr set metadata_id %s\n", dbc->sql_attr_metadata_id == SQL_TRUE ? "true" : "false"); #endif break; default: /* Invalid attribute value */ addDbcError(dbc, "HY024", NULL, 0); return SQL_ERROR; } return SQL_SUCCESS; case SQL_ATTR_TXN_ISOLATION: /* SQLUINTEGER */ /* nothing to change, we only do the highest level */ break; /* TODO: implement connection attribute behavior */ case SQL_ATTR_ACCESS_MODE: /* SQLUINTEGER */ #ifdef SQL_ATTR_ASYNC_DBC_EVENT case SQL_ATTR_ASYNC_DBC_EVENT: /* SQLPOINTER */ #endif #ifdef SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE case SQL_ATTR_ASYNC_DBC_FUNCTIONS_ENABLE: /* SQLUINTEGER */ #endif #ifdef SQL_ATTR_ASYNC_DBC_PCALLBACK case SQL_ATTR_ASYNC_DBC_PCALLBACK: /* SQLPOINTER */ #endif #ifdef SQL_ATTR_ASYNC_DBC_PCONTEXT case SQL_ATTR_ASYNC_DBC_PCONTEXT: /* SQLPOINTER */ #endif case SQL_ATTR_ASYNC_ENABLE: /* SQLULEN */ #ifdef SQL_ATTR_DBC_INFO_TOKEN case SQL_ATTR_DBC_INFO_TOKEN: /* SQLPOINTER */ #endif case SQL_ATTR_ENLIST_IN_DTC: /* SQLPOINTER */ case SQL_ATTR_LOGIN_TIMEOUT: /* SQLUINTEGER */ case SQL_ATTR_ODBC_CURSORS: /* SQLULEN */ case SQL_ATTR_PACKET_SIZE: /* SQLUINTEGER */ case SQL_ATTR_QUIET_MODE: /* HWND (SQLPOINTER) */ case SQL_ATTR_TRACE: /* SQLUINTEGER */ case SQL_ATTR_TRACEFILE: /* SQLCHAR* */ case SQL_ATTR_TRANSLATE_LIB: /* SQLCHAR* */ case SQL_ATTR_TRANSLATE_OPTION: /* SQLUINTEGER */ /* Optional feature not implemented */ addDbcError(dbc, "HYC00", NULL, 0); return SQL_ERROR; case SQL_ATTR_AUTO_IPD: /* SQLUINTEGER */ case SQL_ATTR_CONNECTION_DEAD: /* SQLUINTEGER */ /* read-only attribute */ default: /* Invalid attribute/option identifier */ addDbcError(dbc, "HY092", NULL, 0); break; } return SQL_SUCCESS; }
int main(int argc, char **argv) { Mapi dbh; MapiHdl hdl = NULL; mapi_int64 rows, i; char *parm[] = { "peter", 0 }; char *parm2[] = { "25", 0 }; int j; if (argc != 4) { printf("usage:%s <host> <port> <language>\n", argv[0]); exit(-1); } dbh = mapi_connect(argv[1], atoi(argv[2]), "monetdb", "monetdb", argv[3], NULL); if (dbh == NULL || mapi_error(dbh)) die(dbh, hdl); /* mapi_trace(dbh, 1); */ if (strcmp(argv[3], "sql") == 0) { /* switch of autocommit */ if (mapi_setAutocommit(dbh, 0) != MOK || mapi_error(dbh)) die(dbh,NULL); if ((hdl = mapi_query(dbh, "create table emp(name varchar(20), age int)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "insert into emp values('John', 23)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "insert into emp values('Mary', 22)")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "select * from emp")) == NULL || mapi_error(dbh)) die(dbh, hdl); } else if (strcmp(argv[3], "mal") == 0) { if ((hdl = mapi_query(dbh, "emp := bat.new(:oid,:str);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query(dbh, "age := bat.new(:oid,:int);")) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query_array(dbh, "bat.append(emp,\"?\");", parm)) == NULL || mapi_error(dbh)) die(dbh, hdl); if ((hdl = mapi_query_array(dbh, "bat.append(age,?);", parm2)) == NULL || mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); if ((hdl = mapi_query(dbh, "io.print(emp,age);")) == NULL || mapi_error(dbh)) die(dbh, hdl); } else { fprintf(stderr, "%s: unknown language, only mal and sql supported\n", argv[0]); exit(1); } /* Retrieve all tuples in the client cache first */ rows = mapi_fetch_all_rows(hdl); if (mapi_error(dbh)) die(dbh, hdl); printf("rows received " LLFMT " with %d fields\n", rows, mapi_get_field_count(hdl)); /* Interpret the cache as a two-dimensional array */ for (i = 0; i < rows; i++) { if (mapi_seek_row(hdl, i, MAPI_SEEK_SET) || mapi_fetch_row(hdl) == 0) break; for (j = 0; j < mapi_get_field_count(hdl); j++) { printf("%s=%s ", mapi_get_name(hdl, j), mapi_fetch_field(hdl, j)); } printf("\n"); } if (mapi_error(dbh)) die(dbh, hdl); if (mapi_close_handle(hdl) != MOK) die(dbh, hdl); mapi_destroy(dbh); return 0; }