diff --git a/server/modules/filter/dbfwfilter/dbfwfilter.c b/server/modules/filter/dbfwfilter/dbfwfilter.c index 9e4ce22b8..13da00544 100644 --- a/server/modules/filter/dbfwfilter/dbfwfilter.c +++ b/server/modules/filter/dbfwfilter/dbfwfilter.c @@ -2193,6 +2193,13 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue) int rval = 0; ss_dassert(dcb && dcb->session); + uint32_t type = 0; + + if (modutil_is_SQL(queue) || modutil_is_SQL_prepare(queue)) + { + type = qc_get_type(queue); + } + if (modutil_is_SQL(queue) && modutil_count_statements(queue) > 1) { GWBUF* err = gen_dummy_error(my_session, "This filter does not support " @@ -2202,6 +2209,17 @@ routeQuery(FILTER *instance, void *session, GWBUF *queue) my_session->errmsg = NULL; rval = dcb->func.write(dcb, err); } + else if (QUERY_IS_TYPE(type, QUERY_TYPE_PREPARE_STMT) || + QUERY_IS_TYPE(type, QUERY_TYPE_PREPARE_NAMED_STMT) || + modutil_is_SQL_prepare(queue)) + { + GWBUF* err = gen_dummy_error(my_session, "This filter does not support " + "prepared statements."); + gwbuf_free(queue); + free(my_session->errmsg); + my_session->errmsg = NULL; + rval = dcb->func.write(dcb, err); + } else { USER *user = find_user_data(my_instance->htable, dcb->user, dcb->remote);