diff options
author | unknown <pekka@sama.ndb.mysql.com> | 2007-10-04 11:32:49 +0200 |
---|---|---|
committer | unknown <pekka@sama.ndb.mysql.com> | 2007-10-04 11:32:49 +0200 |
commit | d0d6fb96a634fcb894522d13a366edf073f1e67f (patch) | |
tree | d927d05ec3a4162ed1cb6cc44bb5e83748eddba1 /sql/ha_ndbcluster_cond.cc | |
parent | 085eac750219572e65bc6d600f6dcd7cfb133663 (diff) | |
download | mariadb-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.cc | 20 |
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"); |