diff --git a/src/mysql_filter_pushdown.cpp b/src/mysql_filter_pushdown.cpp index 1990997..c200a0b 100644 --- a/src/mysql_filter_pushdown.cpp +++ b/src/mysql_filter_pushdown.cpp @@ -8,7 +8,14 @@ namespace duckdb { string MySQLFilterPushdown::CreateExpression(string &column_name, vector> &filters, string op) { vector filter_entries; for (auto &filter : filters) { - filter_entries.push_back(TransformFilter(column_name, *filter)); + auto new_filter = TransformFilter(column_name, *filter); + if (new_filter.empty()) { + continue; + } + filter_entries.push_back(std::move(new_filter)); + } + if (filter_entries.empty()) { + return string(); } return "(" + StringUtil::Join(filter_entries, " " + op + " ") + ")"; } @@ -109,12 +116,16 @@ string MySQLFilterPushdown::TransformFilters(const vector &column_ids, } string result; for (auto &entry : filters->filters) { + auto column_name = MySQLUtils::WriteIdentifier(names[column_ids[entry.first]]); + auto &filter = *entry.second; + auto new_filter = TransformFilter(column_name, filter); + if (new_filter.empty()) { + continue; + } if (!result.empty()) { result += " AND "; } - auto column_name = MySQLUtils::WriteIdentifier(names[column_ids[entry.first]]); - auto &filter = *entry.second; - result += TransformFilter(column_name, filter); + result += new_filter; } return result; } diff --git a/test/sql/attach_filter_pushdown.test b/test/sql/attach_filter_pushdown.test index b81425c..eb8588b 100644 --- a/test/sql/attach_filter_pushdown.test +++ b/test/sql/attach_filter_pushdown.test @@ -34,6 +34,20 @@ SELECT * FROM s1.filter_pushdown_string WHERE i='52525' ---- 52525 +query I +select * from s1.filter_pushdown_string where i > '10' order by i limit 10 +---- +100 +1000 +10000 +10001 +10002 +10003 +10004 +10005 +10006 +10007 + # timestamp pushdown query I SELECT COUNT(*) FROM s1.datetime_tbl WHERE d >= DATE '2000-01-01'