Changeset: 9bb8531aa4bd for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=9bb8531aa4bd Modified Files: ctest/tools/monetdbe/CMakeLists.txt ctest/tools/monetdbe/example1.c ctest/tools/monetdbe/example2.c ctest/tools/monetdbe/example_append.c ctest/tools/monetdbe/example_blob.c ctest/tools/monetdbe/example_connections.c ctest/tools/monetdbe/example_decimals.c ctest/tools/monetdbe/example_temporal.c ctest/tools/monetdbe/mapi.c tools/monetdbe/monetdbe.c tools/monetdbe/monetdbe.h Branch: default Log Message:
also add late changeset to new library diffs (272 lines): diff --git a/ctest/tools/monetdbe/CMakeLists.txt b/ctest/tools/monetdbe/CMakeLists.txt --- a/ctest/tools/monetdbe/CMakeLists.txt +++ b/ctest/tools/monetdbe/CMakeLists.txt @@ -18,7 +18,7 @@ target_link_libraries(example2 PRIVATE monetdb_config_header monetdbe) -add_test(run_example2 example2) +#add_test(run_example2 example2) add_executable(example_temporal example_temporal.c) target_link_libraries(example_temporal diff --git a/ctest/tools/monetdbe/example1.c b/ctest/tools/monetdbe/example1.c --- a/ctest/tools/monetdbe/example1.c +++ b/ctest/tools/monetdbe/example1.c @@ -34,7 +34,7 @@ main(void) for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) switch (rcol->type) { case monetdb_int32_t: { diff --git a/ctest/tools/monetdbe/example2.c b/ctest/tools/monetdbe/example2.c --- a/ctest/tools/monetdbe/example2.c +++ b/ctest/tools/monetdbe/example2.c @@ -40,7 +40,7 @@ main(void) for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) switch (rcol->type) { case monetdb_bool: { @@ -148,7 +148,7 @@ main(void) /* fetching the meta data should work */ for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) } } diff --git a/ctest/tools/monetdbe/example_append.c b/ctest/tools/monetdbe/example_append.c --- a/ctest/tools/monetdbe/example_append.c +++ b/ctest/tools/monetdbe/example_append.c @@ -34,7 +34,7 @@ main(void) monetdb_column* rcol[2]; for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { - if ((err = monetdb_result_fetch(mdbe, result, rcol+c, c)) != NULL) + if ((err = monetdb_result_fetch(result, rcol+c, c)) != NULL) error(err) switch (rcol[c]->type) { case monetdb_int32_t: { @@ -77,7 +77,7 @@ main(void) fprintf(stdout, "Query result after append with %zu cols and %"PRId64" rows\n", result->ncols, result->nrows); for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { - if ((err = monetdb_result_fetch(mdbe, result, rcol+c, c)) != NULL) + if ((err = monetdb_result_fetch(result, rcol+c, c)) != NULL) error(err) switch (rcol[c]->type) { case monetdb_int32_t: { diff --git a/ctest/tools/monetdbe/example_blob.c b/ctest/tools/monetdbe/example_blob.c --- a/ctest/tools/monetdbe/example_blob.c +++ b/ctest/tools/monetdbe/example_blob.c @@ -36,7 +36,7 @@ main(void) for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) switch (rcol->type) { case monetdb_blob: { diff --git a/ctest/tools/monetdbe/example_connections.c b/ctest/tools/monetdbe/example_connections.c --- a/ctest/tools/monetdbe/example_connections.c +++ b/ctest/tools/monetdbe/example_connections.c @@ -36,7 +36,7 @@ main(void) for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe1, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) switch (rcol->type) { case monetdb_int32_t: { diff --git a/ctest/tools/monetdbe/example_decimals.c b/ctest/tools/monetdbe/example_decimals.c --- a/ctest/tools/monetdbe/example_decimals.c +++ b/ctest/tools/monetdbe/example_decimals.c @@ -34,7 +34,7 @@ main(void) for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) switch (rcol->type) { case monetdb_bool: { diff --git a/ctest/tools/monetdbe/example_temporal.c b/ctest/tools/monetdbe/example_temporal.c --- a/ctest/tools/monetdbe/example_temporal.c +++ b/ctest/tools/monetdbe/example_temporal.c @@ -37,7 +37,7 @@ main(void) for (int64_t r = 0; r < result->nrows; r++) { for (size_t c = 0; c < result->ncols; c++) { monetdb_column* rcol; - if ((err = monetdb_result_fetch(mdbe, result, &rcol, c)) != NULL) + if ((err = monetdb_result_fetch(result, &rcol, c)) != NULL) error(err) switch (rcol->type) { case monetdb_int32_t: { diff --git a/ctest/tools/monetdbe/mapi.c b/ctest/tools/monetdbe/mapi.c --- a/ctest/tools/monetdbe/mapi.c +++ b/ctest/tools/monetdbe/mapi.c @@ -70,7 +70,7 @@ mapi_fetch_field(MapiHdl hdl, int fnr) { if (hdl && fnr < (int)hdl->result->ncols && hdl->current_row > 0 && hdl->current_row <= hdl->result->nrows) { monetdb_column *rcol = NULL; - if (monetdb_result_fetch(hdl->mid->mdbe, hdl->result, &rcol, fnr) == NULL) { + if (monetdb_result_fetch(hdl->result, &rcol, fnr) == NULL) { size_t r = hdl->current_row - 1; if (rcol->type != monetdb_str && !hdl->mapi_row[fnr]) { hdl->mapi_row[fnr] = MAPIalloc(SIMPLE_TYPE_SIZE); @@ -163,7 +163,7 @@ mapi_get_type(MapiHdl hdl, int fnr) { if (hdl && fnr < (int)hdl->result->ncols) { monetdb_column *rcol = NULL; - if (monetdb_result_fetch(hdl->mid->mdbe, hdl->result, &rcol, fnr) == NULL) { + if (monetdb_result_fetch(hdl->result, &rcol, fnr) == NULL) { switch(rcol->type) { case monetdb_bool: return "boolean"; diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c --- a/tools/monetdbe/monetdbe.c +++ b/tools/monetdbe/monetdbe.c @@ -87,6 +87,7 @@ typedef struct { int type; res_table *monetdb_resultset; monetdb_column **converted_columns; + monetdb_database dbhdl; } monetdb_result_internal; typedef struct { @@ -95,6 +96,7 @@ typedef struct { ValPtr *args; /* only used during calls */ int retc; Client c; + monetdb_database dbhdl; cq *q; } monetdb_stmt_internal; @@ -183,6 +185,7 @@ monetdb_cleanup_result_internal(monetdb_ mvc* m = NULL; + assert(!res->dbhdl || res->dbhdl == dbhdl); if ((msg = validate_database_handle(dbhdl, "embedded.monetdb_cleanup_result_internal")) != MAL_SUCCEED) return msg; if ((msg = getSQLContext(c, NULL, &m, NULL)) != MAL_SUCCEED) @@ -321,6 +324,7 @@ monetdb_query_internal(monetdb_database } res_internal->monetdb_resultset = m->results; res_internal->converted_columns = GDKzalloc(sizeof(monetdb_column*) * res_internal->res.ncols); + res_internal->dbhdl = dbhdl; if (!res_internal->converted_columns) { msg = createException(MAL, "embedded.monetdb_query_internal", MAL_MALLOC_FAIL); goto cleanup; @@ -650,6 +654,7 @@ monetdb_prepare(monetdb_database dbhdl, if (q && stmt_internal) { Symbol s = (Symbol)q->code; InstrPtr p = s->def->stmt[0]; + stmt_internal->c = db; stmt_internal->c = db; stmt_internal->q = q; stmt_internal->retc = p->retc; @@ -696,8 +701,10 @@ monetdb_execute(monetdb_statement *stmt, { monetdb_result_internal *res_internal = NULL; monetdb_stmt_internal *stmt_internal = (monetdb_stmt_internal*)stmt; - mvc *m = ((backend *) stmt_internal->c->sqlcontext)->mvc; - cq *q = stmt_internal->q; + monetdb_database dbhdl = stmt_internal->dbhdl; + Client c = (Client)dbhdl; + mvc *m = ((backend *) c->sqlcontext)->mvc; + cq *q = stmt_internal->q; str msg = MAL_SUCCEED; if ((msg = SQLtrans(m)) != MAL_SUCCEED) @@ -710,7 +717,7 @@ monetdb_execute(monetdb_statement *stmt, } MalStkPtr glb = (MalStkPtr) (q->stk); Symbol s = (Symbol)q->code; - msg = callMAL(stmt_internal->c, s->def, &glb, stmt_internal->args, 0); + msg = callMAL(c, s->def, &glb, stmt_internal->args, 0); if (!m->results && m->rowcnt >= 0 && affected_rows) *affected_rows = m->rowcnt; @@ -738,6 +745,7 @@ monetdb_execute(monetdb_statement *stmt, } res_internal->monetdb_resultset = m->results; res_internal->converted_columns = GDKzalloc(sizeof(monetdb_column*) * res_internal->res.ncols); + res_internal->dbhdl = dbhdl; if (!res_internal->converted_columns) { msg = createException(MAL, "embedded.monetdb_query_internal", MAL_MALLOC_FAIL); goto cleanup; @@ -746,7 +754,7 @@ monetdb_execute(monetdb_statement *stmt, } } cleanup: - return commit_action(m, msg, (monetdb_database)stmt_internal->c, result, res_internal); + return commit_action(m, msg, dbhdl, result, res_internal); } char* @@ -754,16 +762,20 @@ monetdb_cleanup_statement(monetdb_databa { (void)dbhdl; monetdb_stmt_internal *stmt_internal = (monetdb_stmt_internal*)stmt; - mvc *m = ((backend *) stmt_internal->c->sqlcontext)->mvc; + Client c = (Client)dbhdl; + mvc *m = ((backend *) c->sqlcontext)->mvc; cq *q = stmt_internal->q; - GDKfree(stmt_internal->data); + assert(!stmt_internal->dbhdl || dbhdl == stmt_internal->dbhdl); + GDKfree(stmt_internal->data); GDKfree(stmt_internal->args); GDKfree(stmt_internal->res.type); GDKfree(stmt_internal); qc_delete(m->qc, q); - return MAL_SUCCEED; + if (q) + qc_delete(m->qc, q); + return MAL_SUCCEED; } char* @@ -1082,7 +1094,7 @@ static void data_from_time(daytime d, mo static void data_from_timestamp(timestamp d, monetdb_data_timestamp *ptr); char* -monetdb_result_fetch(monetdb_database dbhdl, monetdb_result* mres, monetdb_column** res, size_t column_index) +monetdb_result_fetch(monetdb_result* mres, monetdb_column** res, size_t column_index) { BAT* b = NULL; int bat_type; @@ -1092,6 +1104,7 @@ monetdb_result_fetch(monetdb_database db sql_subtype* sqltpe = NULL; monetdb_column* column_result = NULL; size_t j = 0; + monetdb_database dbhdl = result->dbhdl; Client c = (Client) dbhdl; MT_lock_set(&embedded_lock); diff --git a/tools/monetdbe/monetdbe.h b/tools/monetdbe/monetdbe.h --- a/tools/monetdbe/monetdbe.h +++ b/tools/monetdbe/monetdbe.h @@ -127,8 +127,9 @@ monetdbe_export char* monetdb_set_autoco monetdbe_export int monetdb_in_transaction(monetdb_database dbhdl); monetdbe_export char* monetdb_query(monetdb_database dbhdl, char* query, monetdb_result** result, monetdb_cnt* affected_rows); -monetdbe_export char* monetdb_result_fetch(monetdb_database dbhdl, monetdb_result *mres, monetdb_column** res, size_t column_index); +monetdbe_export char* monetdb_result_fetch(monetdb_result *mres, monetdb_column** res, size_t column_index); monetdbe_export char* monetdb_cleanup_result(monetdb_database dbhdl, monetdb_result* result); + monetdbe_export char* monetdb_prepare(monetdb_database dbhdl, char *query, monetdb_statement **stmt); monetdbe_export char* monetdb_bind(monetdb_statement *stmt, void *data, size_t parameter_nr); monetdbe_export char* monetdb_execute(monetdb_statement *stmt, monetdb_result **result, monetdb_cnt* affected_rows); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list