aboutsummaryrefslogtreecommitdiff
path: root/contrib/native/client/src
diff options
context:
space:
mode:
authorLaurent Goujon <laurent@dremio.com>2016-12-28 17:03:37 -0800
committerJinfeng Ni <jni@apache.org>2017-03-01 23:15:33 -0800
commitc81f58884e2cef279a7d60ea611b6a422a2eb56e (patch)
treee04f386dcb7ea121c2bbbbc211c33a91bbcdc840 /contrib/native/client/src
parentd3238b1b2270533285025d69b35906506212f492 (diff)
DRILL-5167: Send escape character for metadata queries
Escape character was not sent when doing metadata queries, which caused the server to return incorrect results as the pattern is interpreted differently form what the user asked for. close #712
Diffstat (limited to 'contrib/native/client/src')
-rw-r--r--contrib/native/client/src/clientlib/drillClientImpl.cpp27
1 files changed, 16 insertions, 11 deletions
diff --git a/contrib/native/client/src/clientlib/drillClientImpl.cpp b/contrib/native/client/src/clientlib/drillClientImpl.cpp
index 808595cc1..417fe8039 100644
--- a/contrib/native/client/src/clientlib/drillClientImpl.cpp
+++ b/contrib/native/client/src/clientlib/drillClientImpl.cpp
@@ -661,12 +661,16 @@ DrillClientQueryResult* DrillClientImpl::ExecuteQuery(const PreparedStatement& p
return sendMsg(factory, ::exec::user::RUN_QUERY, query);
}
+static void updateLikeFilter(exec::user::LikeFilter& likeFilter, const std::string& pattern) {
+ likeFilter.set_pattern(pattern);
+ likeFilter.set_escape(meta::DrillMetadata::s_searchEscapeString);
+}
+
DrillClientCatalogResult* DrillClientImpl::getCatalogs(const std::string& catalogPattern,
Metadata::pfnCatalogMetadataListener listener,
void* listenerCtx) {
exec::user::GetCatalogsReq query;
- exec::user::LikeFilter* catalogFilter(query.mutable_catalog_name_filter());
- catalogFilter->set_pattern(catalogPattern);
+ updateLikeFilter(*query.mutable_catalog_name_filter(), catalogPattern);
boost::function<DrillClientCatalogResult*(int32_t)> factory = boost::bind(
boost::factory<DrillClientCatalogResult*>(),
@@ -682,8 +686,8 @@ DrillClientSchemaResult* DrillClientImpl::getSchemas(const std::string& catalogP
Metadata::pfnSchemaMetadataListener listener,
void* listenerCtx) {
exec::user::GetSchemasReq query;
- query.mutable_catalog_name_filter()->set_pattern(catalogPattern);
- query.mutable_schema_name_filter()->set_pattern(schemaPattern);
+ updateLikeFilter(*query.mutable_catalog_name_filter(), catalogPattern);
+ updateLikeFilter(*query.mutable_schema_name_filter(), schemaPattern);
boost::function<DrillClientSchemaResult*(int32_t)> factory = boost::bind(
boost::factory<DrillClientSchemaResult*>(),
@@ -701,9 +705,10 @@ DrillClientTableResult* DrillClientImpl::getTables(const std::string& catalogPat
Metadata::pfnTableMetadataListener listener,
void* listenerCtx) {
exec::user::GetTablesReq query;
- query.mutable_catalog_name_filter()->set_pattern(catalogPattern);
- query.mutable_schema_name_filter()->set_pattern(schemaPattern);
- query.mutable_table_name_filter()->set_pattern(tablePattern);
+ updateLikeFilter(*query.mutable_catalog_name_filter(), catalogPattern);
+ updateLikeFilter(*query.mutable_schema_name_filter(), schemaPattern);
+ updateLikeFilter(*query.mutable_table_name_filter(), tablePattern);
+
if (tableTypes) {
std::copy(tableTypes->begin(), tableTypes->end(),
google::protobuf::RepeatedFieldBackInserter(query.mutable_table_type_filter()));
@@ -725,10 +730,10 @@ DrillClientColumnResult* DrillClientImpl::getColumns(const std::string& catalogP
Metadata::pfnColumnMetadataListener listener,
void* listenerCtx) {
exec::user::GetColumnsReq query;
- query.mutable_catalog_name_filter()->set_pattern(catalogPattern);
- query.mutable_schema_name_filter()->set_pattern(schemaPattern);
- query.mutable_table_name_filter()->set_pattern(tablePattern);
- query.mutable_column_name_filter()->set_pattern(columnsPattern);
+ updateLikeFilter(*query.mutable_catalog_name_filter(), catalogPattern);
+ updateLikeFilter(*query.mutable_schema_name_filter(), schemaPattern);
+ updateLikeFilter(*query.mutable_table_name_filter(), tablePattern);
+ updateLikeFilter(*query.mutable_column_name_filter(), columnsPattern);
boost::function<DrillClientColumnResult*(int32_t)> factory = boost::bind(
boost::factory<DrillClientColumnResult*>(),