
The setting up and the initialization of the query classifier has now been separated. The gateway explicitly sets up the query classifier (i.e. chooses which one to use and what arguments to provide), but the actual initialization is performed as part of the general module initialization.
67 lines
1.8 KiB
C
67 lines
1.8 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/bsl.
|
|
*
|
|
* Change Date: 2019-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 <stdio.h>
|
|
#include <maxscale/buffer.h>
|
|
#include <maxscale/gwdirs.h>
|
|
#include <maxscale/query_classifier.h>
|
|
|
|
#define MYSQL_HEADER_LEN 4
|
|
|
|
GWBUF* create_gwbuf(const char* s, size_t len)
|
|
{
|
|
size_t payload_len = len + 1;
|
|
size_t gwbuf_len = MYSQL_HEADER_LEN + payload_len;
|
|
|
|
GWBUF* gwbuf = gwbuf_alloc(gwbuf_len);
|
|
|
|
*((unsigned char*)((char*)GWBUF_DATA(gwbuf))) = payload_len;
|
|
*((unsigned char*)((char*)GWBUF_DATA(gwbuf) + 1)) = (payload_len >> 8);
|
|
*((unsigned char*)((char*)GWBUF_DATA(gwbuf) + 2)) = (payload_len >> 16);
|
|
*((unsigned char*)((char*)GWBUF_DATA(gwbuf) + 3)) = 0x00;
|
|
*((unsigned char*)((char*)GWBUF_DATA(gwbuf) + 4)) = 0x03;
|
|
memcpy((char*)GWBUF_DATA(gwbuf) + 5, s, len);
|
|
|
|
return gwbuf;
|
|
}
|
|
|
|
int main()
|
|
{
|
|
int rv = EXIT_FAILURE;
|
|
|
|
set_libdir(strdup("../qc_sqlite"));
|
|
|
|
if (qc_setup("qc_sqlite", NULL) && qc_process_init())
|
|
{
|
|
const char s[] = "SELECT @@global.max_allowed_packet";
|
|
|
|
GWBUF *stmt = create_gwbuf(s, sizeof(s)); // Include superfluous NULL.
|
|
|
|
// In 2.0.1 this crashed due to is_submitted_query() in qc_sqlite.c
|
|
// being of the opinion that the statement was not the one to be
|
|
// classified and hence an alien parse-tree being passed to sqlite3's
|
|
// code generator.
|
|
qc_parse(stmt);
|
|
|
|
qc_process_end();
|
|
|
|
rv = EXIT_SUCCESS;
|
|
}
|
|
else
|
|
{
|
|
fprintf(stderr, "error: Could not load query classifier.");
|
|
}
|
|
|
|
return rv;
|
|
}
|