summaryrefslogtreecommitdiff
path: root/sql/ha_ndbcluster_cond.cc
diff options
context:
space:
mode:
authorunknown <pekka@sama.ndb.mysql.com>2007-10-04 11:32:49 +0200
committerunknown <pekka@sama.ndb.mysql.com>2007-10-04 11:32:49 +0200
commitd0d6fb96a634fcb894522d13a366edf073f1e67f (patch)
treed927d05ec3a4162ed1cb6cc44bb5e83748eddba1 /sql/ha_ndbcluster_cond.cc
parent085eac750219572e65bc6d600f6dcd7cfb133663 (diff)
downloadmariadb-git-d0d6fb96a634fcb894522d13a366edf073f1e67f.tar.gz
ndb - bug#29390: if ScanFilter is too large, abort or optionally discard it
mysql-test/r/ndb_condition_pushdown.result: if ScanFilter is too large, abort or optionaly discard it mysql-test/t/ndb_condition_pushdown.test: if ScanFilter is too large, abort or optionaly discard it ndb/include/kernel/signaldata/ScanTab.hpp: if ScanFilter is too large, abort or optionaly discard it ndb/include/ndbapi/Ndb.hpp: if ScanFilter is too large, abort or optionaly discard it ndb/include/ndbapi/NdbScanFilter.hpp: if ScanFilter is too large, abort or optionaly discard it ndb/include/ndbapi/ndbapi_limits.h: if ScanFilter is too large, abort or optionaly discard it ndb/src/ndbapi/NdbScanFilter.cpp: if ScanFilter is too large, abort or optionaly discard it ndb/src/ndbapi/NdbScanOperation.cpp: if ScanFilter is too large, abort or optionaly discard it ndb/src/ndbapi/ndberror.c: if ScanFilter is too large, abort or optionaly discard it sql/ha_ndbcluster_cond.cc: if ScanFilter is too large, abort or optionaly discard it
Diffstat (limited to 'sql/ha_ndbcluster_cond.cc')
-rw-r--r--sql/ha_ndbcluster_cond.cc20
1 files changed, 17 insertions, 3 deletions
diff --git a/sql/ha_ndbcluster_cond.cc b/sql/ha_ndbcluster_cond.cc
index ea3f8a7683a..c7b185a92f0 100644
--- a/sql/ha_ndbcluster_cond.cc
+++ b/sql/ha_ndbcluster_cond.cc
@@ -1338,9 +1338,23 @@ ha_ndbcluster_cond::generate_scan_filter(NdbScanOperation *op)
if (m_cond_stack)
{
- NdbScanFilter filter(op);
+ NdbScanFilter filter(op, false); // don't abort on too large
- DBUG_RETURN(generate_scan_filter_from_cond(filter));
+ int ret=generate_scan_filter_from_cond(filter);
+ if (ret != 0)
+ {
+ const NdbError& err=filter.getNdbError();
+ if (err.code == NdbScanFilter::FilterTooLarge)
+ {
+ // err.message has static storage
+ DBUG_PRINT("info", ("%s", err.message));
+ push_warning(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
+ err.code, err.message);
+ ret=0;
+ }
+ }
+ if (ret != 0)
+ DBUG_RETURN(ret);
}
else
{
@@ -1391,7 +1405,7 @@ int ha_ndbcluster_cond::generate_scan_filter_from_key(NdbScanOperation *op,
{
KEY_PART_INFO* key_part= key_info->key_part;
KEY_PART_INFO* end= key_part+key_info->key_parts;
- NdbScanFilter filter(op);
+ NdbScanFilter filter(op, true); // abort on too large
int res;
DBUG_ENTER("generate_scan_filter_from_key");