Merge commit 'a78f0fbe2537542dc7f3f0dd8b19b93ac8d9d7f8' into develop

This commit is contained in:
Markus Mäkelä
2019-03-28 13:53:40 +02:00
22 changed files with 535 additions and 194 deletions

View File

@ -342,14 +342,6 @@ int32_t SchemaRouterSession::routeQuery(GWBUF* pPacket)
gwbuf_free(pPacket);
return 1;
}
else if (qc_query_is_type(type, QUERY_TYPE_SHOW_TABLES))
{
if (send_tables(pPacket))
{
gwbuf_free(pPacket);
return 1;
}
}
else if (detect_show_shards(pPacket))
{
if (send_shards())
@ -1576,69 +1568,6 @@ void SchemaRouterSession::send_databases()
set->write(m_client);
}
bool SchemaRouterSession::send_tables(GWBUF* pPacket)
{
char* query = modutil_get_SQL(pPacket);
char* tmp;
std::string database;
if ((tmp = strcasestr(query, "from")))
{
const char* delim = "` \n\t;";
char* saved, * tok = strtok_r(tmp, delim, &saved);
tok = strtok_r(NULL, delim, &saved);
database = tok;
}
if (database.empty())
{
// Was not a "show tables from x". If a current database is selected, use that as target.
if (!m_current_db.empty())
{
database = m_current_db;
}
else
{
// No current db, route the query to a server, likely getting "No database selected"
MXS_FREE(query);
return false;
}
}
ServerMap tablelist;
std::list<std::string> table_names;
m_shard.get_content(tablelist);
for (ServerMap::iterator it = tablelist.begin(); it != tablelist.end(); it++)
{
std::size_t pos = it->first.find(".");
// If the database is empty ignore it
if (pos == std::string::npos)
{
continue;
}
std::string db = it->first.substr(0, pos);
if (db.compare(database) == 0)
{
std::string table = it->first.substr(pos + 1);
table_names.push_back(table);
}
}
std::unique_ptr<ResultSet> set = ResultSet::create({"Table"});
for (const auto& name : table_names)
{
set->add_row({name});
}
set->write(m_client);
MXS_FREE(query);
return true;
}
bool SchemaRouterSession::handle_statement(GWBUF* querybuf, SSRBackend& bref, uint8_t command, uint32_t type)
{
bool succp = false;

View File

@ -144,7 +144,6 @@ private:
/** Shard mapping functions */
void send_databases();
bool send_shards();
bool send_tables(GWBUF* pPacket);
void query_databases();
int inspect_mapping_states(SSRBackend& bref, GWBUF** wbuf);
enum showdb_response parse_mapping_response(SSRBackend& bref, GWBUF** buffer);