Changeset: 394bce144c31 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/394bce144c31
Modified Files:
monetdb5/modules/mal/remote.c
sql/backends/monet5/sql_result.c
tools/monetdbe/monetdbe.c
Branch: default
Log Message:
Merged with Jul2021
diffs (140 lines):
diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c
--- a/monetdb5/modules/mal/remote.c
+++ b/monetdb5/modules/mal/remote.c
@@ -248,8 +248,11 @@ static str RMTconnectScen(
if (columnar && *columnar) {
char set_protocol_query_buf[50];
snprintf(set_protocol_query_buf, 50,
"sql.set_protocol(%d:int);", PROTOCOL_COLUMNAR);
- if ((msg = RMTquery(&hdl, "remote.connect", m,
set_protocol_query_buf)))
+ if ((msg = RMTquery(&hdl, "remote.connect", m,
set_protocol_query_buf))) {
+ mapi_destroy(m);
+ MT_lock_unset(&mal_remoteLock);
return msg;
+ }
}
/* connection established, add to list */
@@ -1396,17 +1399,16 @@ static str RMTexec(Client cntxt, MalBlkP
results[i].scale = mapi_get_scale(mhdl, i);
}
- if (tmp == MAL_SUCCEED) {
- assert(rcb->context);
- tmp = rcb->call(rcb->context,
mapi_get_table(mhdl, 0), results, fields);
- }
-
if (tmp != MAL_SUCCEED) {
for (int j = 0; j < i; j++)
BBPunfix(results[j].id);
} else {
for (int j = 0; j < i; j++)
BBPkeepref(results[j].id);
+ assert(rcb->context);
+ tmp = rcb->call(rcb->context,
mapi_get_table(mhdl, 0), results, fields);
+ for (int j = 0; j < i; j++)
+ BBPrelease(results[j].id);
}
GDKfree(results);
}
diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c
--- a/sql/backends/monet5/sql_result.c
+++ b/sql/backends/monet5/sql_result.c
@@ -1738,7 +1738,8 @@ mvc_export_head(backend *b, stream *s, i
return -4;
/* row count, min(count, reply_size) */
- if (mvc_send_int(s, (m->reply_size >= 0 && (BUN) m->reply_size < count)
? m->reply_size : (int) count) != 1)
+ /* the columnar protocol ignores the reply size by fetching the entire
resultset at once, so don't set it */
+ if (mvc_send_int(s, (b->client->protocol != PROTOCOL_COLUMNAR &&
m->reply_size >= 0 && (BUN) m->reply_size < count) ? m->reply_size : (int)
count) != 1)
return -4;
// export query id
diff --git a/tools/monetdbe/monetdbe.c b/tools/monetdbe/monetdbe.c
--- a/tools/monetdbe/monetdbe.c
+++ b/tools/monetdbe/monetdbe.c
@@ -1063,19 +1063,24 @@ monetdbe_set_remote_results(backend *be,
}
BAT* order = BATdense(0, 0, BATcount(b_0));
- if (mvc_result_table(be, 0, (int) nr_results, Q_TABLE, order) < 0) {
- BBPreclaim(order);
+ if (!order) {
+ BBPunfix(b_0->batCacheid);
+ error =
createException(MAL,"monetdbe.monetdbe_set_remote_results",SQLSTATE(HY005)
MAL_MALLOC_FAIL);
+ return error;
+ }
+
+ int res = mvc_result_table(be, 0, (int) nr_results, Q_TABLE, order);
+ BBPunfix(order->batCacheid);
+ if (res < 0) {
BBPunfix(b_0->batCacheid);
error =
createException(MAL,"monetdbe.monetdbe_set_remote_results",SQLSTATE(HY005)
"Cannot create result table");
return error;
}
- unsigned i = 0;
- for (i = 0; i < nr_results; i++) {
+ for (size_t i = 0; i < nr_results; i++) {
BAT *b = NULL;
- if (i > 0) {
+ if (i > 0)
b = BATdescriptor(results[i].id);
- }
else
b = b_0; // We already fetched this first column
@@ -1084,26 +1089,22 @@ monetdbe_set_remote_results(backend *be,
int digits = results[i].digits;
int scale = results[i].scale;
- if ( b == NULL) {
- error=
createException(MAL,"monetdbe.monetdbe_set_remote_results",SQLSTATE(HY005)
"Cannot access column descriptor ");
- break;
- }
- else if (mvc_result_column(be, tblname, colname, tpename,
digits, scale, b)) {
- error = createException(SQL,
"monetdbe.monetdbe_set_remote_results", SQLSTATE(42000) "Cannot access column
descriptor %s.%s",tblname,colname);
- BBPunfix(b->batCacheid);
+ if (b == NULL) {
+ error =
createException(MAL,"monetdbe.monetdbe_result_cb",SQLSTATE(HY005) "Cannot
access column descriptor");
break;
}
+
+ int res = mvc_result_column(be, tblname, colname, tpename,
digits, scale, b);
BBPunfix(b->batCacheid);
+ if (res) {
+ error =
createException(MAL,"monetdbe.monetdbe_result_cb", SQLSTATE(42000) "Cannot
access column descriptor %s.%s",tblname,colname);
+ break;
+ }
}
- BBPunfix(order->batCacheid);
-
- if (error) {
+ if (error)
res_tables_destroy(be->results);
- return error;
- }
-
- return MAL_SUCCEED;
+ return error;
}
static str
@@ -1172,7 +1173,7 @@ monetdbe_prepare_cb(void* context, char*
!(bcolumn = BATdescriptor(results[5].id)) ||
!(bimpl = BATdescriptor(results[6].id)))
{
- msg = createException(SQL, "monetdbe.monetdbe_prepare_cb",
SQLSTATE(42000) "Cannot access prepare result");
+ msg = createException(SQL, "monetdbe.monetdbe_prepare_cb",
SQLSTATE(HY005) "Cannot access column descriptor");
goto cleanup;
}
@@ -1185,7 +1186,7 @@ monetdbe_prepare_cb(void* context, char*
nparams != BATcount(btable) ||
nparams != BATcount(bcolumn))
{
- msg = createException(SQL, "monetdbe.monetdbe_prepare_cb",
SQLSTATE(42000) "prepare results are incorrect.");
+ msg = createException(SQL, "monetdbe.monetdbe_prepare_cb",
SQLSTATE(42000) "Prepare results are incorrect");
goto cleanup;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list