1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-07-30 19:23:07 +03:00

MCOL-1101. PoC for INFINIDB_VTABLE and thd variables migration to plugin sys variables.

This commit is contained in:
Roman Nozdrin
2018-12-27 11:38:56 +03:00
parent 46cc344108
commit 971055a473
7 changed files with 80 additions and 89 deletions

View File

@ -4,6 +4,7 @@ include_directories( ${ENGINE_COMMON_INCLUDES}
SET ( libcalmysql_SRCS
mcs_sysvars.cpp
ha_calpont.cpp
ha_calpont_impl.cpp
ha_calpont_dml.cpp

View File

@ -380,6 +380,7 @@ static int calpont_close_connection ( handlerton* hton, THD* thd )
ha_calpont::ha_calpont(handlerton* hton, TABLE_SHARE* table_arg) :
handler(hton, table_arg),
fe_conn_info(NULL),
int_table_flags(HA_BINLOG_STMT_CAPABLE | HA_BINLOG_ROW_CAPABLE |
HA_TABLE_SCAN_ON_INDEX |
HA_CAN_TABLE_CONDITION_PUSHDOWN)
@ -683,7 +684,11 @@ int ha_calpont::rnd_init(bool scan)
{
DBUG_ENTER("ha_calpont::rnd_init");
int rc = ha_calpont_impl_rnd_init(table);
// Use global THD*
set_original_query(current_thd, current_thd->query_string.str());
mcs_handler_info mhi(static_cast<void*>(this), LEGACY);
int rc = ha_calpont_impl_rnd_init(table, mhi);
DBUG_RETURN(rc);
}
@ -1101,44 +1106,6 @@ struct st_mysql_storage_engine columnstore_storage_engine =
struct st_mysql_storage_engine infinidb_storage_engine =
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
#if 0
static ulong srv_enum_var = 0;
static ulong srv_ulong_var = 0;
const char* enum_var_names[] =
{
"e1", "e2", NullS
};
TYPELIB enum_var_typelib =
{
array_elements(enum_var_names) - 1, "enum_var_typelib",
enum_var_names, NULL
};
static MYSQL_SYSVAR_ENUM(
enum_var, // name
srv_enum_var, // varname
PLUGIN_VAR_RQCMDARG, // opt
"Sample ENUM system variable.", // comment
NULL, // check
NULL, // update
0, // def
&enum_var_typelib); // typelib
static MYSQL_SYSVAR_ULONG(
ulong_var,
srv_ulong_var,
PLUGIN_VAR_RQCMDARG,
"0..1000",
NULL,
NULL,
8,
0,
1000,
0);
#endif
/*@brief check_walk - It traverses filter conditions*/
/************************************************************
* DESCRIPTION:
@ -1367,15 +1334,55 @@ int ha_calpont_group_by_handler::end_scan()
DBUG_RETURN(rc);
}
/*
// compression_type
enum mcs_compression_type_t {
NO_COMPRESSION = 0,
SNAPPY = 2
};
const char* mcs_compression_type_names[] = {
"NO_COMPRESSION",
"SNAPPY",
NullS
};
static struct st_mysql_sys_var* calpont_system_variables[] =
{
// MYSQL_SYSVAR(enum_var),
// MYSQL_SYSVAR(ulong_var),
static TYPELIB mcs_compression_type_names_lib = {
array_elements(mcs_compression_type_names) - 1,
"mcs_compression_type_names",
mcs_compression_type_names,
NULL
};
static MYSQL_THDVAR_ENUM(
compression_type,
PLUGIN_VAR_RQCMDARG,
"Controls compression type for create tables. Possible values are: "
"NO_COMPRESSION segment files aren't compressed; "
"SNAPPY segment files are Snappy compressed (default);",
NULL,
NULL,
SNAPPY,
&mcs_compression_type_names_lib);
// original query
static MYSQL_THDVAR_STR(
original_query,
PLUGIN_VAR_MEMALLOC |
PLUGIN_VAR_RQCMDARG,
"Original query text",
NULL,
NULL,
NULL
);
static struct st_mysql_sys_var* columnstore_system_variables[] =
{
MYSQL_SYSVAR(compression_type),
MYSQL_SYSVAR(original_query),
NULL
};*/
mysql_declare_plugin(columnstore)
{
MYSQL_STORAGE_ENGINE_PLUGIN,
@ -1388,7 +1395,7 @@ mysql_declare_plugin(columnstore)
columnstore_done_func, /* Plugin Deinit */
0x0100 /* 1.0 */,
NULL, /* status variables */
calpont_system_variables, /* system variables */
mcs_system_variables, /* system variables */
NULL, /* reserved */
0 /* config flags */
},
@ -1403,7 +1410,7 @@ mysql_declare_plugin(columnstore)
infinidb_done_func, /* Plugin Deinit */
0x0100 /* 1.0 */,
NULL, /* status variables */
calpont_system_variables, /* system variables */
mcs_system_variables, /* system variables */
NULL, /* reserved */
0 /* config flags */
}
@ -1419,9 +1426,9 @@ maria_declare_plugin(columnstore)
columnstore_init_func,
columnstore_done_func,
0x0100, /* 1.0 */
NULL, /* status variables */
calpont_system_variables, /* system variables */
"1.0", /* string version */
NULL, /* status variables */
mcs_system_variables, /* system variables */
"1.0", /* string version */
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
},
{
@ -1434,10 +1441,10 @@ maria_declare_plugin(columnstore)
infinidb_init_func,
infinidb_done_func,
0x0100, /* 1.0 */
NULL, /* status variables */
calpont_system_variables, /* system variables */
"1.0", /* string version */
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
NULL, /* status variables */
mcs_system_variables, /* system variables */
"1.0", /* string version */
MariaDB_PLUGIN_MATURITY_STABLE /* maturity */
}
maria_declare_plugin_end;

View File

@ -15,35 +15,16 @@
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA. */
/** @file ha_example.h
@brief
The ha_example engine is a stubbed storage engine for example purposes only;
it does nothing at this point. Its purpose is to provide a source
code illustration of how to begin writing new storage engines; see also
/storage/example/ha_example.cc.
@note
Please read ha_example.cc before reading this file.
Reminder: The example storage engine implements all methods that are *required*
to be implemented. For a full list of all methods that you can implement, see
handler.h.
@see
/sql/handler.h and /storage/example/ha_example.cc
*/
// $Id: ha_calpont.h 9210 2013-01-21 14:10:42Z rdempsey $
#ifndef HA_CALPONT_H__
#define HA_CALPONT_H__
#include <my_config.h>
#include "idb_mysql.h"
#include "mcs_sysvars.h"
extern handlerton* calpont_hton;
/** @brief
EXAMPLE_SHARE is a structure that will be shared among all open handlers.
This structure will be shared among all open handlers.
This example implements the minimum of what you will probably need.
*/
typedef struct st_calpont_share
@ -62,6 +43,7 @@ class ha_calpont: public handler
THR_LOCK_DATA lock; ///< MySQL lock
INFINIDB_SHARE* share; ///< Shared lock info
ulonglong int_table_flags;
void* fe_conn_info;
public:
ha_calpont(handlerton* hton, TABLE_SHARE* table_arg);

View File

@ -49,6 +49,7 @@ using namespace std;
#include <boost/tokenizer.hpp>
using namespace boost;
#include "mcs_sysvars.h"
#include "idb_mysql.h"
#include "ha_calpont_impl_if.h"
@ -2128,7 +2129,7 @@ int ha_calpont_impl_create_(const char* name, TABLE* table_arg, HA_CREATE_INFO*
return 1;
}
int compressiontype = thd->variables.infinidb_compression_type;
int compressiontype = get_compression_type(thd);
if (compressiontype == 1) compressiontype = 2;
@ -2140,7 +2141,7 @@ int ha_calpont_impl_create_(const char* name, TABLE* table_arg, HA_CREATE_INFO*
}
if ( compressiontype == MAX_INT )
compressiontype = thd->variables.infinidb_compression_type;
compressiontype = get_compression_type(thd);
else if ( compressiontype < 0 )
{
string emsg = IDBErrorInfo::instance()->errorMsg(ERR_INVALID_COMPRESSION_TYPE);
@ -2473,12 +2474,12 @@ extern "C"
if ( thd->db.length )
db = thd->db.str;
int compressiontype = thd->variables.infinidb_compression_type;
int compressiontype = get_compression_type(thd);
if (compressiontype == 1) compressiontype = 2;
if ( compressiontype == MAX_INT )
compressiontype = thd->variables.infinidb_compression_type;
compressiontype = get_compression_type(thd);
//hdfs
if ((compressiontype == 0) && (useHdfs))

View File

@ -142,6 +142,7 @@ using namespace funcexp;
#include "installdir.h"
#include "columnstoreversion.h"
#include "mcs_sysvars.h"
namespace cal_impl_if
{
@ -2767,8 +2768,14 @@ int ha_calpont_impl_discover_existence(const char* schema, const char* name)
return 0;
}
int ha_calpont_impl_rnd_init(TABLE* table)
int ha_calpont_impl_rnd_init(TABLE* table, mcs_handler_info hndtl_ptr)
{
ha_calpont* handler;
if ( hndtl_ptr.hndl_type == LEGACY )
{
handler = reinterpret_cast<ha_calpont*>(hndtl_ptr.hndl_ptr);
}
#ifdef DEBUG_SETENV
string home(getenv("HOME"));
@ -3092,8 +3099,9 @@ int ha_calpont_impl_rnd_init(TABLE* table)
return 0;
string query;
query.assign(thd->infinidb_vtable.original_query.ptr(),
thd->infinidb_vtable.original_query.length());
const char *original_query = get_original_query(current_thd);
query.assign(original_query,
strlen(original_query));
csep->data(query);
try

View File

@ -16,12 +16,6 @@
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
MA 02110-1301, USA. */
/*
* $Id: ha_calpont_impl.h 9413 2013-04-22 22:03:42Z zzhu $
*/
/** @file */
#ifndef HA_CALPONT_IMPL_H__
#define HA_CALPONT_IMPL_H__
@ -33,7 +27,7 @@ extern int ha_calpont_impl_create(const char* name, TABLE* table_arg, HA_CREATE_
extern int ha_calpont_impl_delete_table(const char* name);
extern int ha_calpont_impl_open(const char* name, int mode, uint32_t test_if_locked);
extern int ha_calpont_impl_close(void);
extern int ha_calpont_impl_rnd_init(TABLE* table);
extern int ha_calpont_impl_rnd_init(TABLE* table, mcs_handler_info hndtl_ptr);
extern int ha_calpont_impl_rnd_next(uchar* buf, TABLE* table);
extern int ha_calpont_impl_rnd_end(TABLE* table);
extern int ha_calpont_impl_write_row(uchar* buf, TABLE* table);

View File

@ -321,8 +321,6 @@ struct cal_connection_info
std::vector <execplan::CalpontSystemCatalog::ColType> columnTypes;
};
typedef std::tr1::unordered_map<int, cal_connection_info> CalConnMap;
const std::string infinidb_err_msg = "\nThe query includes syntax that is not supported by MariaDB Columnstore. Use 'show warnings;' to get more information. Review the MariaDB Columnstore Syntax guide for additional information on supported distributed syntax or consider changing the MariaDB Columnstore Operating Mode (infinidb_vtable_mode).";
int cp_get_plan(THD* thd, execplan::SCSEP& csep);