Files
MaxScale/server/modules/routing/cat/cat.cc
Markus Mäkelä 7e54cb8132 Fix crash in cat
The router used the wrong capabilities and results weren't delivered as
complete and contiguous packets.
2018-11-12 10:13:22 +02:00

95 lines
2.0 KiB
C++

/*
* Copyright (c) 2016 MariaDB Corporation Ab
*
* Use of this software is governed by the Business Source License included
* in the LICENSE.TXT file and at www.mariadb.com/bsl11.
*
* Change Date: 2022-01-01
*
* On the date above, in accordance with the Business Source License, use
* of this software will be governed by version 2 or later of the General
* Public License.
*/
#include "cat.hh"
#include "catsession.hh"
using namespace maxscale;
Cat::Cat(SERVICE* pService)
: Router<Cat, CatSession>(pService)
{
}
Cat::~Cat()
{
}
Cat* Cat::create(SERVICE* pService, MXS_CONFIG_PARAMETER* params)
{
return new Cat(pService);
}
CatSession* Cat::newSession(MXS_SESSION* pSession)
{
auto backends = RWBackend::from_servers(pSession->service->dbref);
bool connected = false;
for (auto a = backends.begin(); a != backends.end(); a++)
{
if ((*a)->can_connect() && (*a)->connect(pSession))
{
connected = true;
}
}
return connected ? new CatSession(pSession, this, backends) : NULL;
}
void Cat::diagnostics(DCB* dcb)
{
}
json_t* Cat::diagnostics_json() const
{
return NULL;
}
const uint64_t caps = RCAP_TYPE_PACKET_OUTPUT | RCAP_TYPE_CONTIGUOUS_OUTPUT | RCAP_TYPE_STMT_INPUT;
uint64_t Cat::getCapabilities()
{
return caps;
}
/**
* The module entry point routine. It is this routine that
* must populate the structure that is referred to as the
* "module object", this is a structure with the set of
* external entry points for this module.
*
* @return The module object
*/
extern "C" MXS_MODULE* MXS_CREATE_MODULE()
{
static MXS_MODULE info =
{
MXS_MODULE_API_ROUTER,
MXS_MODULE_ALPHA_RELEASE,
MXS_ROUTER_VERSION,
"Resultset concatenation router",
"V1.0.0",
caps,
&Cat::s_object,
NULL, /* Process init. */
NULL, /* Process finish. */
NULL, /* Thread init. */
NULL, /* Thread finish. */
{
{MXS_END_MODULE_PARAMS}
}
};
return &info;
}