You've already forked mariadb-columnstore-engine
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:
@ -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
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Reference in New Issue
Block a user