[Asterisk-code-review] func odbc: NODATA if SQLNumResultCols returned 0 columns on ... (asterisk[15])

George Joseph asteriskteam at digium.com
Tue Jun 12 08:07:01 CDT 2018


George Joseph has submitted this change and it was merged. ( https://gerrit.asterisk.org/9133 )

Change subject: func_odbc: NODATA if SQLNumResultCols returned 0 columns on readsql
......................................................................

func_odbc: NODATA if SQLNumResultCols returned 0 columns on readsql

The functions acf_odbc_read/cli_odbc_read ignore a number of columns
returned by the SQLNumResultCols.
If the number of columns is zero it means no data.
In this case, a SQLFetch function has to be not called,
because it will cause an error.

ASTERISK-27888 #close

Change-Id: Ie0f7bdac6c405aa5bbd38932c7b831f90729ee19
---
M funcs/func_odbc.c
1 file changed, 24 insertions(+), 0 deletions(-)

Approvals:
  Kevin Harwell: Looks good to me, but someone else must approve
  Joshua Colp: Looks good to me, approved
  George Joseph: Approved for Submit



diff --git a/funcs/func_odbc.c b/funcs/func_odbc.c
index 0d053f6..66722df 100644
--- a/funcs/func_odbc.c
+++ b/funcs/func_odbc.c
@@ -857,6 +857,21 @@
 		return -1;
 	}
 
+	if (colcount <= 0) {
+		ast_verb(4, "Returned %d columns [%s]\n", colcount, ast_str_buffer(sql));
+		buf[0] = '\0';
+		SQLCloseCursor(stmt);
+		SQLFreeHandle (SQL_HANDLE_STMT, stmt);
+		release_obj_or_dsn (&obj, &dsn);
+		if (!bogus_chan) {
+			pbx_builtin_setvar_helper(chan, "ODBCROWS", "0");
+			pbx_builtin_setvar_helper(chan, "ODBCSTATUS", "NODATA");
+			ast_autoservice_stop(chan);
+		}
+		odbc_datastore_free(resultset);
+		return 0;
+	}
+
 	res = SQLFetch(stmt);
 	if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
 		int res1 = -1;
@@ -1520,6 +1535,15 @@
 				return CLI_SUCCESS;
 			}
 
+			if (colcount <= 0) {
+				SQLCloseCursor(stmt);
+				SQLFreeHandle (SQL_HANDLE_STMT, stmt);
+				release_obj_or_dsn (&obj, &dsn);
+				ast_cli(a->fd, "Returned %d columns.  Query executed on handle %d:%s [%s]\n", colcount, dsn_num, query->readhandle[dsn_num], ast_str_buffer(sql));
+				AST_RWLIST_UNLOCK(&queries);
+				return CLI_SUCCESS;
+			}
+
 			res = SQLFetch(stmt);
 			if ((res != SQL_SUCCESS) && (res != SQL_SUCCESS_WITH_INFO)) {
 				SQLCloseCursor(stmt);

-- 
To view, visit https://gerrit.asterisk.org/9133
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: asterisk
Gerrit-Branch: 15
Gerrit-MessageType: merged
Gerrit-Change-Id: Ie0f7bdac6c405aa5bbd38932c7b831f90729ee19
Gerrit-Change-Number: 9133
Gerrit-PatchSet: 1
Gerrit-Owner: Alexei Gradinari <alex2grad at gmail.com>
Gerrit-Reviewer: George Joseph <gjoseph at digium.com>
Gerrit-Reviewer: Jenkins2
Gerrit-Reviewer: Joshua Colp <jcolp at digium.com>
Gerrit-Reviewer: Kevin Harwell <kharwell at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20180612/db3ff0a0/attachment-0001.html>


More information about the asterisk-code-review mailing list