1
0
mirror of https://github.com/mariadb-corporation/mariadb-columnstore-engine.git synced 2025-05-28 13:01:26 +03:00

Merge branch 'MCOL-597' into develop

This commit is contained in:
Andrew Hutchings 2017-04-26 15:58:28 +01:00
commit 30d8baf9f7
23 changed files with 1218 additions and 929 deletions

View File

@ -1,326 +1,302 @@
<!DOCTYPE Project SYSTEM "http://www.slickedit.com/dtd/vse/10.0/vpj.dtd"> <!DOCTYPE Project SYSTEM "http://www.slickedit.com/dtd/vse/10.0/vpj.dtd">
<Project <Project
Version="10.0" Version="10.0"
VendorName="SlickEdit" VendorName="SlickEdit"
TemplateName="GNU C/C++" TemplateName="GNU C/C++"
WorkingDir="."> WorkingDir=".">
<Config <Config
Name="Debug" Name="Debug"
Type="gnuc" Type="gnuc"
DebugCallbackName="gdb" DebugCallbackName="gdb"
Version="1" Version="1"
OutputFile="%bdexecplan.so" OutputFile="%bdexecplan.so"
CompilerConfigName="Latest Version" CompilerConfigName="Latest Version"
ObjectDir="/home/dhall/genii/dbcon/execplan/"> ObjectDir="/home/dhall/genii/dbcon/execplan/">
<Menu> <Menu>
<Target <Target
Name="Compile" Name="Compile"
MenuCaption="&amp;Compile" MenuCaption="&amp;Compile"
Dialog="_gnuc_options_form Compile" Dialog="_gnuc_options_form Compile"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
OutputExts="*.o" OutputExts="*.o"
SaveOption="SaveCurrent" SaveOption="SaveCurrent"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine='g++ -c %xup %defd -g -o "%bd%n%oe" %i "%f"'/> <Exec CmdLine='g++ -c %xup %defd -g -o "%bd%n%oe" %i "%f"'/>
</Target> </Target>
<Target <Target
Name="Link" Name="Link"
MenuCaption="&amp;Link" MenuCaption="&amp;Link"
ShowOnMenu="Never" ShowOnMenu="Never"
Dialog="_gnuc_options_form Link" Dialog="_gnuc_options_form Link"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveCurrent" SaveOption="SaveCurrent"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine='g++ %xup -g -o "%o" %f %libs -shared -fPIC'/> <Exec CmdLine='g++ %xup -g -o "%o" %f %libs -shared -fPIC'/>
</Target> </Target>
<Target <Target
Name="Build" Name="Build"
MenuCaption="&amp;Build" MenuCaption="&amp;Build"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveWorkspaceFiles" SaveOption="SaveWorkspaceFiles"
RunFromDir="%rw" RunFromDir="%rw"
ClearProcessBuffer="1"> ClearProcessBuffer="1">
<Exec CmdLine="make install"/> <Exec CmdLine="make install"/>
</Target> </Target>
<Target <Target
Name="Rebuild" Name="Rebuild"
MenuCaption="&amp;Rebuild" MenuCaption="&amp;Rebuild"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveWorkspaceFiles" SaveOption="SaveWorkspaceFiles"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine=""/> <Exec CmdLine=""/>
</Target> </Target>
<Target <Target
Name="Debug" Name="Debug"
MenuCaption="&amp;Debug" MenuCaption="&amp;Debug"
Dialog="_gnuc_options_form Run/Debug" Dialog="_gnuc_options_form Run/Debug"
BuildFirst="1" BuildFirst="1"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveNone" SaveOption="SaveNone"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine=""/> <Exec CmdLine=""/>
</Target> </Target>
<Target <Target
Name="Execute" Name="Execute"
MenuCaption="E&amp;xecute" MenuCaption="E&amp;xecute"
Dialog="_gnuc_options_form Run/Debug" Dialog="_gnuc_options_form Run/Debug"
BuildFirst="1" BuildFirst="1"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveWorkspaceFiles" SaveOption="SaveWorkspaceFiles"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine=""/> <Exec CmdLine=""/>
</Target> </Target>
<Target <Target
Name="dash" Name="dash"
MenuCaption="-" MenuCaption="-"
Deletable="0"> Deletable="0">
<Exec/> <Exec/>
</Target> </Target>
<Target <Target
Name="GNU C Options" Name="GNU C Options"
MenuCaption="GNU C &amp;Options..." MenuCaption="GNU C &amp;Options..."
ShowOnMenu="HideIfNoCmdLine" ShowOnMenu="HideIfNoCmdLine"
Deletable="0" Deletable="0"
SaveOption="SaveNone"> SaveOption="SaveNone">
<Exec <Exec
CmdLine="gnucoptions" CmdLine="gnucoptions"
Type="Slick-C"/> Type="Slick-C"/>
</Target> </Target>
</Menu> </Menu>
<List Name="GNUC Options"> <List Name="GNUC Options">
<Item <Item
Name="LinkerOutputType" Name="LinkerOutputType"
Value="SharedLibrary"/> Value="SharedLibrary"/>
</List> </List>
</Config> </Config>
<Config <Config
Name="Release" Name="Release"
Type="gnuc" Type="gnuc"
DebugCallbackName="gdb" DebugCallbackName="gdb"
Version="1" Version="1"
OutputFile="%bdexecplan.so" OutputFile="%bdexecplan.so"
CompilerConfigName="Latest Version"> CompilerConfigName="Latest Version">
<Menu> <Menu>
<Target <Target
Name="Compile" Name="Compile"
MenuCaption="&amp;Compile" MenuCaption="&amp;Compile"
Dialog="_gnuc_options_form Compile" Dialog="_gnuc_options_form Compile"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
OutputExts="*.o" OutputExts="*.o"
SaveOption="SaveCurrent" SaveOption="SaveCurrent"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine='g++ -c %xup %defd -o "%bd%n%oe" %i "%f"'/> <Exec CmdLine='g++ -c %xup %defd -o "%bd%n%oe" %i "%f"'/>
</Target> </Target>
<Target <Target
Name="Link" Name="Link"
MenuCaption="&amp;Link" MenuCaption="&amp;Link"
ShowOnMenu="Never" ShowOnMenu="Never"
Dialog="_gnuc_options_form Link" Dialog="_gnuc_options_form Link"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveCurrent" SaveOption="SaveCurrent"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine='g++ %xup -o "%o" %f %libs -shared -fPIC'/> <Exec CmdLine='g++ %xup -o "%o" %f %libs -shared -fPIC'/>
</Target> </Target>
<Target <Target
Name="Build" Name="Build"
MenuCaption="&amp;Build" MenuCaption="&amp;Build"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveWorkspaceFiles" SaveOption="SaveWorkspaceFiles"
RunFromDir="%rw" RunFromDir="%rw"
ClearProcessBuffer="1"> ClearProcessBuffer="1">
<Exec CmdLine="make install"/> <Exec CmdLine="make install"/>
</Target> </Target>
<Target <Target
Name="Rebuild" Name="Rebuild"
MenuCaption="&amp;Rebuild" MenuCaption="&amp;Rebuild"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveWorkspaceFiles" SaveOption="SaveWorkspaceFiles"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine=""/> <Exec CmdLine=""/>
</Target> </Target>
<Target <Target
Name="Debug" Name="Debug"
MenuCaption="&amp;Debug" MenuCaption="&amp;Debug"
Dialog="_gnuc_options_form Run/Debug" Dialog="_gnuc_options_form Run/Debug"
BuildFirst="1" BuildFirst="1"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveNone" SaveOption="SaveNone"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine=""/> <Exec CmdLine=""/>
</Target> </Target>
<Target <Target
Name="Execute" Name="Execute"
MenuCaption="E&amp;xecute" MenuCaption="E&amp;xecute"
Dialog="_gnuc_options_form Run/Debug" Dialog="_gnuc_options_form Run/Debug"
BuildFirst="1" BuildFirst="1"
CaptureOutputWith="ProcessBuffer" CaptureOutputWith="ProcessBuffer"
Deletable="0" Deletable="0"
SaveOption="SaveWorkspaceFiles" SaveOption="SaveWorkspaceFiles"
RunFromDir="%rw"> RunFromDir="%rw">
<Exec CmdLine=""/> <Exec CmdLine=""/>
</Target> </Target>
<Target <Target
Name="dash" Name="dash"
MenuCaption="-" MenuCaption="-"
Deletable="0"> Deletable="0">
<Exec/> <Exec/>
</Target> </Target>
<Target <Target
Name="GNU C Options" Name="GNU C Options"
MenuCaption="GNU C &amp;Options..." MenuCaption="GNU C &amp;Options..."
ShowOnMenu="HideIfNoCmdLine" ShowOnMenu="HideIfNoCmdLine"
Deletable="0" Deletable="0"
SaveOption="SaveNone"> SaveOption="SaveNone">
<Exec <Exec
CmdLine="gnucoptions" CmdLine="gnucoptions"
Type="Slick-C"/> Type="Slick-C"/>
</Target> </Target>
</Menu> </Menu>
<List Name="GNUC Options"> <List Name="GNUC Options">
<Item <Item
Name="LinkerOutputType" Name="LinkerOutputType"
Value="SharedLibrary"/> Value="SharedLibrary"/>
</List> </List>
</Config> </Config>
<Files> <Files>
<Folder <Folder
Name="Source Files" Name="Source Files"
Filters="*.c;*.C;*.cc;*.cpp;*.cp;*.cxx;*.c++;*.prg;*.pas;*.dpr;*.asm;*.s;*.bas;*.java;*.cs;*.sc;*.e;*.cob;*.html;*.rc;*.tcl;*.py;*.pl;*.d"> Filters="*.c;*.C;*.cc;*.cpp;*.cp;*.cxx;*.c++;*.prg;*.pas;*.dpr;*.asm;*.s;*.bas;*.java;*.cs;*.sc;*.e;*.cob;*.html;*.rc;*.tcl;*.py;*.pl;*.d">
<F N="aggregatecolumn.cpp"/> <F N="aggregatecolumn.cpp"/>
<F N="arithmeticcolumn.cpp"/> <F N="arithmeticcolumn.cpp"/>
<F N="arithmeticoperator.cpp"/> <F N="arithmeticoperator.cpp"/>
<F N="btdriver.cpp"/> <F N="btdriver.cpp"/>
<F N="calpontexecutionplan.cpp"/> <F N="calpontexecutionplan.cpp"/>
<F N="calpontexecutionplanfactory.cpp"/> <F N="calpontexecutionplanfactory.cpp"/>
<F N="calpontselectexecutionplan.cpp"/> <F N="calpontselectexecutionplan.cpp"/>
<F N="calpontsystemcatalog.cpp"/> <F N="calpontsystemcatalog.cpp"/>
<F N="clientrotator.cpp"/> <F N="clientrotator.cpp"/>
<F N="constantcolumn.cpp"/> <F N="constantcolumn.cpp"/>
<F N="constantfilter.cpp"/> <F N="constantfilter.cpp"/>
<F N="existsfilter.cpp"/> <F N="existsfilter.cpp"/>
<F N="expressionparser.cpp"/> <F N="expressionparser.cpp"/>
<F N="filter.cpp"/> <F N="filter.cpp"/>
<F N="functioncolumn.cpp"/> <F N="functioncolumn.cpp"/>
<F N="groupconcatcolumn.cpp"/> <F N="groupconcatcolumn.cpp"/>
<F N="logicoperator.cpp"/> <F N="logicoperator.cpp"/>
<F N="mysqlexecutionplan.cpp"/> <F N="mysqlexecutionplan.cpp"/>
<F N="objectidmanager.cpp"/> <F N="objectidmanager.cpp"/>
<F N="objectreader.cpp"/> <F N="objectreader.cpp"/>
<F N="operator.cpp"/> <F N="operator.cpp"/>
<F N="oracleexecutionplan.cpp"/> <F N="oracleexecutionplan.cpp"/>
<F N="outerjoinonfilter.cpp"/> <F N="outerjoinonfilter.cpp"/>
<F N="predicateoperator.cpp"/> <F N="predicateoperator.cpp"/>
<F N="range.cpp"/> <F N="range.cpp"/>
<F N="returnedcolumn.cpp"/> <F N="returnedcolumn.cpp"/>
<F N="rowcolumn.cpp"/> <F N="rowcolumn.cpp"/>
<F N="selectfilter.cpp"/> <F N="selectfilter.cpp"/>
<F N="sessionmanager.cpp"/> <F N="sessionmanager.cpp"/>
<F N="sessionmonitor.cpp"/> <F N="sessionmonitor.cpp"/>
<F N="simplecolumn.cpp"/> <F N="simplecolumn.cpp"/>
<F N="simplefilter.cpp"/> <F N="simplefilter.cpp"/>
<F N="simplescalarfilter.cpp"/> <F N="simplescalarfilter.cpp"/>
<F N="tdriver-oid.cpp"/> <F N="treenode.cpp"/>
<F N="tdriver-sm.cpp"/> <F N="treenodeimpl.cpp"/>
<F N="tdriver.cpp"/> <F N="vendorexecutionplan.cpp"/>
<F N="tdriver1.cpp"/> <F N="windowfunctioncolumn.cpp"/>
<F N="tdriver10.cpp"/> </Folder>
<F N="tdriver11.cpp"/> <Folder
<F N="tdriver12.cpp"/> Name="Header Files"
<F N="tdriver13.cpp"/> Filters="*.h;*.H;*.hh;*.hpp;*.hxx;*.inc;*.sh;*.cpy;*.if">
<F N="tdriver14.cpp"/> <F N="aggregatecolumn.h"/>
<F N="tdriver15.cpp"/> <F N="arithmeticcolumn.h"/>
<F N="tdriver16.cpp"/> <F N="arithmeticoperator.h"/>
<F N="tdriver17.cpp"/> <F N="blocksize.h"/>
<F N="tdriver18.cpp"/> <F N="calpontexecutionplan.h"/>
<F N="tdriver19.cpp"/> <F N="calpontexecutionplanfactory.h"/>
<F N="tdriver2.cpp"/> <F N="calpontselectexecutionplan.h"/>
<F N="tdriver20.cpp"/> <F N="calpontsystemcatalog.h"/>
<F N="tdriver21.cpp"/> <F N="clientrotator.h"/>
<F N="tdriver22.cpp"/> <F N="columnresult.h"/>
<F N="tdriver23.cpp"/> <F N="constantcolumn.h"/>
<F N="tdriver3.cpp"/> <F N="constantfilter.h"/>
<F N="tdriver4.cpp"/> <F N="datatypes.h"/>
<F N="tdriver5.cpp"/> <F N="existsfilter.h"/>
<F N="tdriver6.cpp"/> <F N="exp_templates.h"/>
<F N="tdriver7.cpp"/> <F N="expressionparser.h"/>
<F N="tdriver8.cpp"/> <F N="expressiontree.h"/>
<F N="tdriver9.cpp"/> <F N="filter.h"/>
<F N="treenode.cpp"/> <F N="functioncolumn.h"/>
<F N="treenodeimpl.cpp"/> <F N="groupconcatcolumn.h"/>
<F N="vendorexecutionplan.cpp"/> <F N="logicoperator.h"/>
</Folder> <F N="mysqlexecutionplan.h"/>
<Folder <F N="njlcolumnresult.h"/>
Name="Header Files" <F N="objectidmanager.h"/>
Filters="*.h;*.H;*.hh;*.hpp;*.hxx;*.inc;*.sh;*.cpy;*.if"> <F N="objectreader.h"/>
<F N="aggregatecolumn.h"/> <F N="operator.h"/>
<F N="arithmeticcolumn.h"/> <F N="oracleexecutionplan.h"/>
<F N="arithmeticoperator.h"/> <F N="outerjoinonfilter.h"/>
<F N="blocksize.h"/> <F N="parsetree.h"/>
<F N="calpontexecutionplan.h"/> <F N="predicateoperator.h"/>
<F N="calpontexecutionplanfactory.h"/> <F N="range.h"/>
<F N="calpontselectexecutionplan.h"/> <F N="returnedcolumn.h"/>
<F N="calpontsystemcatalog.h"/> <F N="rowcolumn.h"/>
<F N="clientrotator.h"/> <F N="selectfilter.h"/>
<F N="columnresult.h"/> <F N="sessionmanager.h"/>
<F N="constantcolumn.h"/> <F N="sessionmonitor.h"/>
<F N="constantfilter.h"/> <F N="simplecolumn.h"/>
<F N="datatypes.h"/> <F N="simplecolumn_decimal.h"/>
<F N="existsfilter.h"/> <F N="simplecolumn_int.h"/>
<F N="exp_templates.h"/> <F N="simplecolumn_uint.h"/>
<F N="expressionparser.h"/> <F N="simplefilter.h"/>
<F N="expressiontree.h"/> <F N="simplescalarfilter.h"/>
<F N="filter.h"/> <F N="treenode.h"/>
<F N="functioncolumn.h"/> <F N="treenodeimpl.h"/>
<F N="groupconcatcolumn.h"/> <F N="vendorexecutionplan.h"/>
<F N="logicoperator.h"/> <F N="windowfunctioncolumn.h"/>
<F N="mysqlexecutionplan.h"/> </Folder>
<F N="njlcolumnresult.h"/> <Folder
<F N="objectidmanager.h"/> Name="Resource Files"
<F N="objectreader.h"/> Filters="*.ico;*.cur;*.dlg"/>
<F N="operator.h"/> <Folder
<F N="oracleexecutionplan.h"/> Name="Bitmaps"
<F N="outerjoinonfilter.h"/> Filters="*.bmp"/>
<F N="parsetree.h"/> <Folder
<F N="predicateoperator.h"/> Name="Other Files"
<F N="range.h"/> Filters="">
<F N="returnedcolumn.h"/> <F
<F N="rowcolumn.h"/> N="Makefile"
<F N="selectfilter.h"/> Type="Makefile"/>
<F N="sessionmanager.h"/> </Folder>
<F N="sessionmonitor.h"/> </Files>
<F N="simplecolumn.h"/>
<F N="simplecolumn_decimal.h"/>
<F N="simplecolumn_int.h"/>
<F N="simplecolumn_uint.h"/>
<F N="simplefilter.h"/>
<F N="simplescalarfilter.h"/>
<F N="treenode.h"/>
<F N="treenodeimpl.h"/>
<F N="vendorexecutionplan.h"/>
</Folder>
<Folder
Name="Resource Files"
Filters="*.ico;*.cur;*.dlg"/>
<Folder
Name="Bitmaps"
Filters="*.bmp"/>
<Folder
Name="Other Files"
Filters="">
<F
N="Makefile"
Type="Makefile"/>
</Folder>
</Files>
</Project> </Project>

View File

@ -41,7 +41,7 @@ class ByteStream;
*/ */
namespace execplan { namespace execplan {
// This enum is made consistant with mysql item_func_window // This enum is made consistant with mysql Item_window_func
enum WF_FRAME enum WF_FRAME
{ {
WF_PRECEDING = 0, WF_PRECEDING = 0,

View File

@ -61,7 +61,7 @@ set(joblist_LIB_SRCS
add_library(joblist SHARED ${joblist_LIB_SRCS}) add_library(joblist SHARED ${joblist_LIB_SRCS})
target_link_libraries(joblist ${NETSNMP_LIBRARIES} -L${SERVER_BUILD_INCLUDE_DIR}/../libmysql/ libmysqlclient_r.so) target_link_libraries(joblist -L${SERVER_BUILD_INCLUDE_DIR}/../libmariadb/libmariadb/ libmariadb.so)
set_target_properties(joblist PROPERTIES VERSION 1.0.0 SOVERSION 1) set_target_properties(joblist PROPERTIES VERSION 1.0.0 SOVERSION 1)

View File

@ -25,7 +25,7 @@ set_source_files_properties(ha_calpont.cpp PROPERTIES COMPILE_FLAGS "-fno-rtti -
add_library(calmysql SHARED ${libcalmysql_SRCS}) add_library(calmysql SHARED ${libcalmysql_SRCS})
target_link_libraries(calmysql ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} ${NETSNMP_LIBRARIES} threadpool) target_link_libraries(calmysql ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} ${NETSNMP_LIBRARIES} ${SERVER_BUILD_INCLUDE_DIR}/../libservices/libmysqlservices.a threadpool)
set_target_properties(calmysql PROPERTIES VERSION 1.0.0 SOVERSION 1) set_target_properties(calmysql PROPERTIES VERSION 1.0.0 SOVERSION 1)
@ -34,7 +34,7 @@ SET ( is_columnstore_tables_SRCS
) )
add_library(is_columnstore_tables SHARED ${is_columnstore_tables_SRCS}) add_library(is_columnstore_tables SHARED ${is_columnstore_tables_SRCS})
target_link_libraries(is_columnstore_tables ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} threadpool) target_link_libraries(is_columnstore_tables ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} ${SERVER_BUILD_INCLUDE_DIR}/../libservices/libmysqlservices.a threadpool)
# Don't prepend .so file with 'lib' # Don't prepend .so file with 'lib'
set_target_properties(is_columnstore_tables PROPERTIES PREFIX "") set_target_properties(is_columnstore_tables PROPERTIES PREFIX "")
@ -45,7 +45,7 @@ SET ( is_columnstore_columns_SRCS
) )
add_library(is_columnstore_columns SHARED ${is_columnstore_columns_SRCS}) add_library(is_columnstore_columns SHARED ${is_columnstore_columns_SRCS})
target_link_libraries(is_columnstore_columns ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} threadpool) target_link_libraries(is_columnstore_columns ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} ${SERVER_BUILD_INCLUDE_DIR}/../libservices/libmysqlservices.a threadpool)
# Don't prepend .so file with 'lib' # Don't prepend .so file with 'lib'
set_target_properties(is_columnstore_columns PROPERTIES PREFIX "") set_target_properties(is_columnstore_columns PROPERTIES PREFIX "")
@ -56,7 +56,7 @@ SET ( is_columnstore_extents_SRCS
) )
add_library(is_columnstore_extents SHARED ${is_columnstore_extents_SRCS}) add_library(is_columnstore_extents SHARED ${is_columnstore_extents_SRCS})
target_link_libraries(is_columnstore_extents ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} threadpool) target_link_libraries(is_columnstore_extents ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} ${SERVER_BUILD_INCLUDE_DIR}/../libservices/libmysqlservices.a threadpool)
# Don't prepend .so file with 'lib' # Don't prepend .so file with 'lib'
set_target_properties(is_columnstore_extents PROPERTIES PREFIX "") set_target_properties(is_columnstore_extents PROPERTIES PREFIX "")
@ -67,7 +67,7 @@ SET ( is_columnstore_files_SRCS
) )
add_library(is_columnstore_files SHARED ${is_columnstore_files_SRCS}) add_library(is_columnstore_files SHARED ${is_columnstore_files_SRCS})
target_link_libraries(is_columnstore_files ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} threadpool) target_link_libraries(is_columnstore_files ${ENGINE_LDFLAGS} ${ENGINE_WRITE_LIBS} ${SERVER_BUILD_INCLUDE_DIR}/../libservices/libmysqlservices.a threadpool)
# Don't prepend .so file with 'lib' # Don't prepend .so file with 'lib'
set_target_properties(is_columnstore_files PROPERTIES PREFIX "") set_target_properties(is_columnstore_files PROPERTIES PREFIX "")

View File

@ -121,7 +121,6 @@ static int calpont_commit(handlerton *hton, THD* thd, bool all);
static int calpont_rollback(handlerton *hton, THD* thd, bool all); static int calpont_rollback(handlerton *hton, THD* thd, bool all);
static int calpont_close_connection ( handlerton *hton, THD* thd ); static int calpont_close_connection ( handlerton *hton, THD* thd );
static void calpont_set_error( THD*, uint64_t, LEX_STRING*, uint32_t);
handlerton *calpont_hton; handlerton *calpont_hton;
/* Variables for example share methods */ /* Variables for example share methods */
@ -219,7 +218,6 @@ static int columnstore_init_func(void *p)
calpont_hton->commit= calpont_commit; calpont_hton->commit= calpont_commit;
calpont_hton->rollback= calpont_rollback; calpont_hton->rollback= calpont_rollback;
calpont_hton->close_connection = calpont_close_connection; calpont_hton->close_connection = calpont_close_connection;
calpont_hton->set_error= calpont_set_error;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
@ -248,7 +246,6 @@ static int infinidb_init_func(void *p)
calpont_hton->commit= calpont_commit; calpont_hton->commit= calpont_commit;
calpont_hton->rollback= calpont_rollback; calpont_hton->rollback= calpont_rollback;
calpont_hton->close_connection = calpont_close_connection; calpont_hton->close_connection = calpont_close_connection;
calpont_hton->set_error= calpont_set_error;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
@ -372,11 +369,6 @@ static int calpont_close_connection ( handlerton *hton, THD* thd )
return rc; return rc;
} }
static void calpont_set_error(THD* thd, uint64_t errCode, LEX_STRING* args, uint32_t argCount)
{
return ha_calpont_impl_set_error(thd, errCode, args, argCount);
}
ha_calpont::ha_calpont(handlerton *hton, TABLE_SHARE *table_arg) : ha_calpont::ha_calpont(handlerton *hton, TABLE_SHARE *table_arg) :
handler(hton, table_arg), handler(hton, table_arg),
int_table_flags(HA_BINLOG_STMT_CAPABLE | HA_BINLOG_ROW_CAPABLE | int_table_flags(HA_BINLOG_STMT_CAPABLE | HA_BINLOG_ROW_CAPABLE |

View File

@ -38,7 +38,6 @@
#include <cerrno> #include <cerrno>
#include <cstring> #include <cstring>
#include <time.h> #include <time.h>
//#define NDEBUG
#include <cassert> #include <cassert>
#include <vector> #include <vector>
#include <map> #include <map>
@ -423,7 +422,7 @@ void debug_walk(const Item *item, void *arg)
char* item_name = item->name; char* item_name = item->name;
if (!item_name) if (!item_name)
{ {
item_name = "<NULL>"; item_name = (char*)"<NULL>";
} }
switch (isp->sum_func()) switch (isp->sum_func())
{ {
@ -497,6 +496,11 @@ void debug_walk(const Item *item, void *arg)
'.' << ifp->field_name << endl; '.' << ifp->field_name << endl;
break; break;
} }
else if (field->type() == Item::FUNC_ITEM)
{
Item_func* ifp = (Item_func*)field;
cout << "CACHED REF FUNC_ITEM " << ifp->func_name() << endl;
}
else if (field->type() == Item::REF_ITEM) else if (field->type() == Item::REF_ITEM)
{ {
Item_ref* ifr = (Item_ref*)field; Item_ref* ifr = (Item_ref*)field;
@ -564,7 +568,20 @@ void debug_walk(const Item *item, void *arg)
ifp->field_name << endl; ifp->field_name << endl;
break; break;
} }
cout << "UNKNOWN REF ITEM type " << ref->real_item()->type() << endl; else if (ref->real_item()->type() == Item::FUNC_ITEM)
{
Item_func* ifp = (Item_func*)ref->real_item();
cout << "REF FUNC_ITEM " << ifp->func_name() << endl;
}
else if (ref->real_item()->type() == Item::WINDOW_FUNC_ITEM)
{
Item_window_func* ifp = (Item_window_func*)ref->real_item();
cout << "REF WINDOW_FUNC_ITEM " << ifp->window_func()->func_name() << endl;
}
else
{
cout << "UNKNOWN REF ITEM type " << ref->real_item()->type() << endl;
}
break; break;
} }
case Item::ROW_ITEM: case Item::ROW_ITEM:
@ -701,7 +718,8 @@ void debug_walk(const Item *item, void *arg)
} }
case Item::WINDOW_FUNC_ITEM: case Item::WINDOW_FUNC_ITEM:
{ {
cout << "Window Function Item" << endl; Item_window_func* ifp = (Item_window_func*)item;
cout << "Window Function Item " << ifp->window_func()->func_name() << endl;
break; break;
} }
default: default:
@ -1109,6 +1127,15 @@ bool buildRowColumnFilter(gp_walk_info* gwip, RowColumn* rhs, RowColumn* lhs, It
bool buildPredicateItem(Item_func* ifp, gp_walk_info* gwip) bool buildPredicateItem(Item_func* ifp, gp_walk_info* gwip)
{ {
boost::shared_ptr<Operator> sop(new PredicateOperator(ifp->func_name())); boost::shared_ptr<Operator> sop(new PredicateOperator(ifp->func_name()));
if (ifp->functype() == Item_func::LIKE_FUNC)
{
// Starting with MariaDB 10.2, LIKE uses a negated flag instead of FUNC_NOT
// Further processing is done below as before for LIKE
if (((Item_func_like*)ifp)->negated)
{
sop->reverseOp();
}
}
if (!(gwip->thd->infinidb_vtable.cal_conn_info)) if (!(gwip->thd->infinidb_vtable.cal_conn_info))
gwip->thd->infinidb_vtable.cal_conn_info = (void*)(new cal_connection_info()); gwip->thd->infinidb_vtable.cal_conn_info = (void*)(new cal_connection_info());
cal_connection_info* ci = reinterpret_cast<cal_connection_info*>(gwip->thd->infinidb_vtable.cal_conn_info); cal_connection_info* ci = reinterpret_cast<cal_connection_info*>(gwip->thd->infinidb_vtable.cal_conn_info);
@ -2399,18 +2426,19 @@ ReturnedColumn* buildReturnedColumn(Item* item, gp_walk_info& gwi, bool& nonSupp
case Item::REF_ITEM: case Item::REF_ITEM:
{ {
Item_ref* ref = (Item_ref*)item; Item_ref* ref = (Item_ref*)item;
if ((*(ref->ref))->type() == Item::SUM_FUNC_ITEM) switch ((*(ref->ref))->type())
{ {
case Item::SUM_FUNC_ITEM:
return buildAggregateColumn(*(ref->ref), gwi); return buildAggregateColumn(*(ref->ref), gwi);
} case Item::FIELD_ITEM:
else if ((*(ref->ref))->type() == Item::FIELD_ITEM)
return buildReturnedColumn(*(ref->ref), gwi, nonSupport); return buildReturnedColumn(*(ref->ref), gwi, nonSupport);
else if ((*(ref->ref))->type() == Item::REF_ITEM) case Item::REF_ITEM:
return buildReturnedColumn(*(((Item_ref*)(*(ref->ref)))->ref), gwi, nonSupport); return buildReturnedColumn(*(((Item_ref*)(*(ref->ref)))->ref), gwi, nonSupport);
else if ((*(ref->ref))->type() == Item::FUNC_ITEM) case Item::FUNC_ITEM:
return buildFunctionColumn((Item_func*)(*(ref->ref)), gwi, nonSupport); return buildFunctionColumn((Item_func*)(*(ref->ref)), gwi, nonSupport);
else case Item::WINDOW_FUNC_ITEM:
{ return buildWindowFunctionColumn(*(ref->ref), gwi, nonSupport);
default:
gwi.fatalParseError = true; gwi.fatalParseError = true;
gwi.parseErrorText = "Unknown REF item"; gwi.parseErrorText = "Unknown REF item";
break; break;
@ -2457,6 +2485,7 @@ ReturnedColumn* buildReturnedColumn(Item* item, gp_walk_info& gwi, bool& nonSupp
{ {
return buildWindowFunctionColumn(item, gwi, nonSupport); return buildWindowFunctionColumn(item, gwi, nonSupport);
} }
#if INTERVAL_ITEM
case Item::INTERVAL_ITEM: case Item::INTERVAL_ITEM:
{ {
Item_interval* interval = (Item_interval*)item; Item_interval* interval = (Item_interval*)item;
@ -2469,6 +2498,7 @@ ReturnedColumn* buildReturnedColumn(Item* item, gp_walk_info& gwi, bool& nonSupp
rc->resultType(srcp->resultType()); rc->resultType(srcp->resultType());
break; break;
} }
#endif
case Item::SUBSELECT_ITEM: case Item::SUBSELECT_ITEM:
{ {
gwi.hasSubSelect = true; gwi.hasSubSelect = true;
@ -3500,23 +3530,24 @@ ReturnedColumn* buildAggregateColumn(Item* item, gp_walk_info& gwi)
end=order_item + gc->order_field();order_item < end; end=order_item + gc->order_field();order_item < end;
order_item++) order_item++)
{ {
Item *ord_col= *(*order_item)->item; Item *ord_col= *(*order_item)->item;
if (ord_col->type() == Item::INT_ITEM) if (ord_col->type() == Item::INT_ITEM)
{ {
Item_int* id = (Item_int*)ord_col; Item_int* id = (Item_int*)ord_col;
if (id->val_int() > (int)selCols.size()) if (id->val_int() > (int)selCols.size())
{ {
gwi.fatalParseError = true; gwi.fatalParseError = true;
return NULL; return NULL;
} }
rc = selCols[id->val_int()-1]->clone(); rc = selCols[id->val_int()-1]->clone();
rc->orderPos(id->val_int()-1); rc->orderPos(id->val_int()-1);
} }
else else
{ {
rc = buildReturnedColumn(ord_col, gwi, gwi.fatalParseError); rc = buildReturnedColumn(ord_col, gwi, gwi.fatalParseError);
} }
rc->asc((*order_item)->asc); // 10.2 TODO: direction is now a tri-state flag
rc->asc((*order_item)->direction == ORDER::ORDER_ASC ? true : false);
orderCols.push_back(SRCP(rc)); orderCols.push_back(SRCP(rc));
} }
@ -4379,8 +4410,6 @@ void gp_walk(const Item *item, void *arg)
gwip->subQuery = orig; gwip->subQuery = orig;
gwip->lastSub = existsSub; gwip->lastSub = existsSub;
} }
#if MYSQL_VERSION_ID >= 50172
else if (sub->substype() == Item_subselect::IN_SUBS) else if (sub->substype() == Item_subselect::IN_SUBS)
{ {
if (!((Item_in_subselect*)sub)->getOptimizer() && gwip->thd->derived_tables_processing) if (!((Item_in_subselect*)sub)->getOptimizer() && gwip->thd->derived_tables_processing)
@ -4392,7 +4421,6 @@ void gp_walk(const Item *item, void *arg)
break; break;
} }
} }
#endif
// store a dummy subselect object. the transform is handled in item_func. // store a dummy subselect object. the transform is handled in item_func.
SubSelect *subselect = new SubSelect(); SubSelect *subselect = new SubSelect();
gwip->rcWorkStack.push(subselect); gwip->rcWorkStack.push(subselect);
@ -4426,7 +4454,7 @@ void gp_walk(const Item *item, void *arg)
case Item::WINDOW_FUNC_ITEM: case Item::WINDOW_FUNC_ITEM:
{ {
gwip->hasWindowFunc = true; gwip->hasWindowFunc = true;
Item_func_window* ifa = (Item_func_window*)item; Item_window_func* ifa = (Item_window_func*)item;
ReturnedColumn* af = buildWindowFunctionColumn(ifa, *gwip, gwip->fatalParseError); ReturnedColumn* af = buildWindowFunctionColumn(ifa, *gwip, gwip->fatalParseError);
if (af) if (af)
gwip->rcWorkStack.push(af); gwip->rcWorkStack.push(af);
@ -4584,6 +4612,11 @@ void parse_item (Item *item, vector<Item_field*>& field_vec, bool& hasNonSupport
item = (*(ref->ref)); item = (*(ref->ref));
continue; continue;
} }
else if ((*(ref->ref))->type() == Item::WINDOW_FUNC_ITEM)
{
parseInfo |= AF_BIT;
break;
}
else else
{ {
cout << "UNKNOWN REF Item" << endl; cout << "UNKNOWN REF Item" << endl;
@ -5687,7 +5720,6 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
return ER_CHECK_NOT_IMPLEMENTED; return ER_CHECK_NOT_IMPLEMENTED;
} }
gwi.hasWindowFunc = hasWindowFunc; gwi.hasWindowFunc = hasWindowFunc;
groupcol = reinterpret_cast<ORDER*>(select_lex.group_list.first); groupcol = reinterpret_cast<ORDER*>(select_lex.group_list.first);
for (; groupcol; groupcol= groupcol->next) for (; groupcol; groupcol= groupcol->next)
@ -5938,7 +5970,6 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
if ((*(ordercol->item))->type() == Item::WINDOW_FUNC_ITEM) if ((*(ordercol->item))->type() == Item::WINDOW_FUNC_ITEM)
gwi.hasWindowFunc = true; gwi.hasWindowFunc = true;
} }
// re-visit the first of ordercol list // re-visit the first of ordercol list
ordercol = reinterpret_cast<ORDER*>(order_list.first); ordercol = reinterpret_cast<ORDER*>(order_list.first);
@ -5989,7 +6020,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
return ER_CHECK_NOT_IMPLEMENTED; return ER_CHECK_NOT_IMPLEMENTED;
} }
} }
if (ordercol->asc) if (ordercol->direction == ORDER::ORDER_ASC)
rc->asc(true); rc->asc(true);
else else
rc->asc(false); rc->asc(false);
@ -6022,7 +6053,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
ostringstream oss; ostringstream oss;
oss << ordercol->counter; oss << ordercol->counter;
ord_cols += oss.str(); ord_cols += oss.str();
if (!ordercol->asc) if (ordercol->direction != ORDER::ORDER_ASC)
ord_cols += " desc"; ord_cols += " desc";
continue; continue;
} }
@ -6147,7 +6178,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
gwi.returnedCols.push_back(srcp); gwi.returnedCols.push_back(srcp);
ord_cols += " `" + escapeBackTick(str.c_ptr()) + "`"; ord_cols += " `" + escapeBackTick(str.c_ptr()) + "`";
} }
if (!ordercol->asc) if (ordercol->direction != ORDER::ORDER_ASC)
ord_cols += " desc"; ord_cols += " desc";
continue; continue;
} }
@ -6211,7 +6242,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
ord_item->print(&str, QT_INFINIDB); ord_item->print(&str, QT_INFINIDB);
ord_cols += str.c_ptr(); ord_cols += str.c_ptr();
} }
if (!ordercol->asc) if (ordercol->direction != ORDER::ORDER_ASC)
ord_cols += " desc"; ord_cols += " desc";
} }
} }
@ -6551,7 +6582,7 @@ int getSelectPlan(gp_walk_info& gwi, SELECT_LEX& select_lex, SCSEP& csep, bool i
ord_item->print(&str, QT_INFINIDB_NO_QUOTE); ord_item->print(&str, QT_INFINIDB_NO_QUOTE);
ord_cols += string(str.c_ptr()); ord_cols += string(str.c_ptr());
} }
if (!ordercol->asc) if (ordercol->direction != ORDER::ORDER_ASC)
ord_cols += " desc"; ord_cols += " desc";
} }
} }

View File

@ -1171,7 +1171,7 @@ uint32_t doUpdateDelete(THD *thd)
{ {
multi_delete* deleteTable = (multi_delete*)((thd->lex->select_lex.join)->result); multi_delete* deleteTable = (multi_delete*)((thd->lex->select_lex.join)->result);
first_table= (TABLE_LIST*) deleteTable->get_tables(); first_table= (TABLE_LIST*) deleteTable->get_tables();
if (deleteTable->num_of_tables == 1) if (deleteTable->get_num_of_tables() == 1)
{ {
schemaName = first_table->db; schemaName = first_table->db;
tableName = first_table->table_name; tableName = first_table->table_name;
@ -3018,7 +3018,7 @@ int ha_calpont_impl_rnd_next(uchar *buf, TABLE* table)
rc = fetchNextRow(buf, ti, ci); rc = fetchNextRow(buf, ti, ci);
} catch (std::exception& e) } catch (std::exception& e)
{ {
string emsg = string("Lost connection to ExeMgr while fetching: ") + e.what(); string emsg = string("Error while fetching from ExeMgr: ") + e.what();
setError(thd, ER_INTERNAL_ERROR, emsg); setError(thd, ER_INTERNAL_ERROR, emsg);
CalpontSystemCatalog::removeCalpontSystemCatalog(tid2sid(thd->thread_id)); CalpontSystemCatalog::removeCalpontSystemCatalog(tid2sid(thd->thread_id));
return ER_INTERNAL_ERROR; return ER_INTERNAL_ERROR;
@ -4391,10 +4391,11 @@ int ha_calpont_impl_external_lock(THD *thd, TABLE* table, int lock_type)
// table mode // table mode
if (thd->infinidb_vtable.vtable_state == THD::INFINIDB_DISABLE_VTABLE) if (thd->infinidb_vtable.vtable_state == THD::INFINIDB_DISABLE_VTABLE)
{ {
if (ci->traceFlags & 1)
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, 9999, mapiter->second.conn_hndl->queryStats.c_str());
if (mapiter->second.conn_hndl) if (mapiter->second.conn_hndl)
{ {
if (ci->traceFlags & 1)
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, 9999, mapiter->second.conn_hndl->queryStats.c_str());
ci->queryStats = mapiter->second.conn_hndl->queryStats; ci->queryStats = mapiter->second.conn_hndl->queryStats;
ci->extendedStats = mapiter->second.conn_hndl->extendedStats; ci->extendedStats = mapiter->second.conn_hndl->extendedStats;
ci->miniStats = mapiter->second.conn_hndl->miniStats; ci->miniStats = mapiter->second.conn_hndl->miniStats;
@ -4418,11 +4419,12 @@ int ha_calpont_impl_external_lock(THD *thd, TABLE* table, int lock_type)
{ {
if (thd->infinidb_vtable.vtable_state == THD::INFINIDB_SELECT_VTABLE) if (thd->infinidb_vtable.vtable_state == THD::INFINIDB_SELECT_VTABLE)
{ {
if (!ci->cal_conn_hndl)
return 0;
if (ci->traceFlags & 1) if (ci->traceFlags & 1)
push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, 9999, ci->cal_conn_hndl->queryStats.c_str()); push_warning(thd, Sql_condition::WARN_LEVEL_NOTE, 9999, ci->cal_conn_hndl->queryStats.c_str());
if (!ci->cal_conn_hndl)
return 0;
ci->queryStats = ci->cal_conn_hndl->queryStats; ci->queryStats = ci->cal_conn_hndl->queryStats;
ci->extendedStats = ci->cal_conn_hndl->extendedStats; ci->extendedStats = ci->cal_conn_hndl->extendedStats;
ci->miniStats = ci->cal_conn_hndl->miniStats; ci->miniStats = ci->cal_conn_hndl->miniStats;
@ -4445,15 +4447,5 @@ int ha_calpont_impl_rnd_pos(uchar *buf, uchar *pos)
return ER_INTERNAL_ERROR; return ER_INTERNAL_ERROR;
} }
// Called from mysql parser to set IDB error for window functions
void ha_calpont_impl_set_error(THD* thd, uint64_t errCode, LEX_STRING* args, uint32_t argCount)
{
IDEBUG( cout << "ha_calpont_impl_ser_error" << endl);
Message::Args arguments;
for (uint32_t i = 0; i < argCount; i++)
arguments.add(args[i].str);
string emsg = logging::IDBErrorInfo::instance()->errorMsg(errCode, arguments);
setError(thd, ER_INTERNAL_ERROR, emsg);
}
// vim:sw=4 ts=4: // vim:sw=4 ts=4:

View File

@ -48,7 +48,6 @@ extern int ha_calpont_impl_external_lock(THD *thd, TABLE* table, int lock_type);
extern int ha_calpont_impl_update_row(); extern int ha_calpont_impl_update_row();
extern int ha_calpont_impl_delete_row(); extern int ha_calpont_impl_delete_row();
extern int ha_calpont_impl_rnd_pos(uchar *buf, uchar *pos); extern int ha_calpont_impl_rnd_pos(uchar *buf, uchar *pos);
extern void ha_calpont_impl_set_error(THD* thd, uint64_t errCode, LEX_STRING* args, uint32_t argCount);
#endif #endif
#ifdef NEED_CALPONT_INTERFACE #ifdef NEED_CALPONT_INTERFACE

View File

@ -63,25 +63,26 @@ ReturnedColumn* nullOnError(gp_walk_info& gwi)
return NULL; return NULL;
} }
WF_FRAME frame(BOUND& bound) WF_FRAME frame(Window_frame_bound::Bound_precedence_type bound, Item* offset)
{ {
switch (bound) switch (bound)
{ {
case PRECEDING: case Window_frame_bound::PRECEDING:
return WF_PRECEDING; if (offset)
case FOLLOWING: return WF_PRECEDING;
return WF_FOLLOWING; else
case UNBOUNDED_PRECEDING: return WF_UNBOUNDED_PRECEDING;
return WF_UNBOUNDED_PRECEDING; case Window_frame_bound::FOLLOWING:
case UNBOUNDED_FOLLOWING: if (offset)
return WF_UNBOUNDED_FOLLOWING; return WF_FOLLOWING;
case CURRENT_ROW: else
return WF_UNBOUNDED_FOLLOWING;
case Window_frame_bound::CURRENT: // Offset is meaningless
return WF_CURRENT_ROW; return WF_CURRENT_ROW;
default: default:
return WF_UNKNOWN; return WF_UNKNOWN;
} }
} }
ReturnedColumn* buildBoundExp(WF_Boundary& bound, SRCP& order, gp_walk_info& gwi) ReturnedColumn* buildBoundExp(WF_Boundary& bound, SRCP& order, gp_walk_info& gwi)
{ {
if (!(gwi.thd->infinidb_vtable.cal_conn_info)) if (!(gwi.thd->infinidb_vtable.cal_conn_info))
@ -177,6 +178,102 @@ ReturnedColumn* buildBoundExp(WF_Boundary& bound, SRCP& order, gp_walk_info& gwi
return rc; return rc;
} }
// Since columnstore implemented Windows Functions before MariaDB, we need
// map from the enum MariaDB uses to the string that columnstore uses to
// identify the function type.
string ConvertFuncName(Item_sum* item)
{
switch (item->sum_func())
{
case Item_sum::COUNT_FUNC:
if (!item->arguments()[0]->name)
return "COUNT(*)";
return "COUNT";
break;
case Item_sum::COUNT_DISTINCT_FUNC:
return "COUNT_DISTINCT";
break;
case Item_sum::SUM_FUNC:
return "SUM";
break;
case Item_sum::SUM_DISTINCT_FUNC:
return "SUM_DISTINCT";
break;
case Item_sum::AVG_FUNC:
return "AVG";
break;
case Item_sum::AVG_DISTINCT_FUNC:
return "AVG_DISTINCT";
break;
case Item_sum::MIN_FUNC:
return "MIN";
break;
case Item_sum::MAX_FUNC:
return "MAX";
break;
case Item_sum::STD_FUNC:
if (((Item_sum_variance*)item)->sample)
return "STDDEV_SAMP";
else
return "STDDEV_POP";
break;
case Item_sum::VARIANCE_FUNC:
if (((Item_sum_variance*)item)->sample)
return "VAR_SAMP";
else
return "VAR_POP";
break;
case Item_sum::SUM_BIT_FUNC:
if (strcmp(item->func_name(), "bit_or(") == 0)
return "BIT_OR";
if (strcmp(item->func_name(), "bit_and(") == 0)
return "BIT_AND";
if (strcmp(item->func_name(), "bit_xor(") == 0)
return "BIT_XOR";
break;
case Item_sum::UDF_SUM_FUNC:
return "UDF_SUM_FUNC"; // Not supported
break;
case Item_sum::GROUP_CONCAT_FUNC:
return "GROUP_CONCAT"; // Not supported
break;
case Item_sum::ROW_NUMBER_FUNC:
return "ROW_NUMBER";
break;
case Item_sum::RANK_FUNC:
return "RANK";
break;
case Item_sum::DENSE_RANK_FUNC:
return "DENSE_RANK";
break;
case Item_sum::PERCENT_RANK_FUNC:
return "PERCENT_RANK";
break;
case Item_sum::CUME_DIST_FUNC:
return "CUME_DIST";
break;
case Item_sum::NTILE_FUNC:
return "NTILE";
break;
case Item_sum::FIRST_VALUE_FUNC:
return "FIRST_VALUE";
break;
case Item_sum::LAST_VALUE_FUNC:
return "LAST_VALUE";
break;
case Item_sum::NTH_VALUE_FUNC:
return "NTH_VALUE";
break;
case Item_sum::LEAD_FUNC:
return "LEAD";
break;
case Item_sum::LAG_FUNC:
return "LAG";
break;
};
return "";
}
ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& nonSupport) ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& nonSupport)
{ {
//@todo fix print for create view //@todo fix print for create view
@ -188,33 +285,79 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
cal_connection_info* ci = reinterpret_cast<cal_connection_info*>(gwi.thd->infinidb_vtable.cal_conn_info); cal_connection_info* ci = reinterpret_cast<cal_connection_info*>(gwi.thd->infinidb_vtable.cal_conn_info);
gwi.hasWindowFunc = true; gwi.hasWindowFunc = true;
Item_func_window* wf = (Item_func_window*)item; Item_window_func* wf = (Item_window_func*)item;
string funcName = wf->func_name(); string funcName = ConvertFuncName(wf->window_func());
WindowFunctionColumn* ac = new WindowFunctionColumn(funcName); WindowFunctionColumn* ac = new WindowFunctionColumn(funcName);
ac->distinct(wf->isDistinct()); ac->distinct(wf->window_func()->has_with_distinct());
Window_context *wf_ctx = wf->window_ctx(); Window_spec *win_spec = wf->window_spec;
SRCP srcp; SRCP srcp;
// arguments
vector<SRCP> funcParms;
Item_sum* item_sum = (Item_sum*)wf->arguments()[0];
for (uint32_t i = 0; i < item_sum->argument_count(); i++)
{
srcp.reset(buildReturnedColumn((item_sum->arguments()[i]), gwi, nonSupport));
if (!srcp)
return nullOnError(gwi);
funcParms.push_back(srcp);
if (gwi.clauseType == WHERE && !gwi.rcWorkStack.empty())
gwi.rcWorkStack.pop();
}
// Some functions, such as LEAD/LAG don't have all parameters implemented in the
// front end. Add dummies here to make the backend use defaults.
// Some of these will be temporary until they are implemented in the front end.
// Others need to stay because the back end expects them, but the front end
// no longer sends them.
// This case is kept in enum order in hopes the compiler can optimize
switch (wf->window_func()->sum_func())
{
case Item_sum::COUNT_FUNC:
case Item_sum::COUNT_DISTINCT_FUNC:
break;
case Item_sum::FIRST_VALUE_FUNC:
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // OFFSET (always one)
funcParms.push_back(srcp);
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // FROM_FIRST
funcParms.push_back(srcp);
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // IGNORE/RESPECT NULLS. 1 => RESPECT
funcParms.push_back(srcp);
break;
case Item_sum::LAST_VALUE_FUNC:
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // OFFSET (always one)
funcParms.push_back(srcp);
srcp.reset(new ConstantColumn("0", (uint64_t)0, ConstantColumn::NUM)); // FROM_LAST
funcParms.push_back(srcp);
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // IGNORE/RESPECT NULLS. 1 => RESPECT
funcParms.push_back(srcp);
break;
case Item_sum::NTH_VALUE_FUNC:
// When the front end supports these paramters, this needs modification
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // FROM FIRST/LAST 1 => FIRST
funcParms.push_back(srcp);
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // IGNORE/RESPECT NULLS. 1 => RESPECT
funcParms.push_back(srcp);
break;
case Item_sum::LEAD_FUNC:
case Item_sum::LAG_FUNC:
// When the front end supports these paramters, this needs modification
srcp.reset(new ConstantColumn("", ConstantColumn::NULLDATA)); // Default to fill in for NULL values
funcParms.push_back(srcp);
srcp.reset(new ConstantColumn("1", (uint64_t)1, ConstantColumn::NUM)); // IGNORE/RESPECT NULLS. 1 => RESPECT
funcParms.push_back(srcp);
break;
default:
break;
};
// arguments ac->functionParms(funcParms);
vector<SRCP> funcParms;
for (uint32_t i = 0; i < wf->argument_count(); i++)
{
srcp.reset(buildReturnedColumn(wf->arguments()[i], gwi, nonSupport));
if (!srcp)
return nullOnError(gwi);
funcParms.push_back(srcp);
if (gwi.clauseType == WHERE && !gwi.rcWorkStack.empty())
gwi.rcWorkStack.pop();
}
ac->functionParms(funcParms);
// Partition by // Partition by
if (wf_ctx) if (win_spec)
{ {
vector<SRCP> partitions; vector<SRCP> partitions;
for (uint32_t i = 0; i < wf_ctx->partition_count; i++) for (ORDER *ord= win_spec->partition_list->first; ord; ord=ord->next)
{ {
srcp.reset(buildReturnedColumn(wf_ctx->partitions[i], gwi, nonSupport)); srcp.reset(buildReturnedColumn(*ord->item, gwi, nonSupport));
if (!srcp) if (!srcp)
return nullOnError(gwi); return nullOnError(gwi);
partitions.push_back(srcp); partitions.push_back(srcp);
@ -222,40 +365,42 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
ac->partitions(partitions); ac->partitions(partitions);
// Order by // Order by
if (wf_ctx->ordering) if (win_spec->order_list)
{ {
WF_OrderBy orderBy; WF_OrderBy orderBy;
// order columns // order columns
if (wf_ctx->ordering->orders) if (win_spec->order_list)
{ {
vector<SRCP> orders; vector<SRCP> orders;
ORDER* orderCol = reinterpret_cast<ORDER*>(wf_ctx->ordering->orders->first); ORDER* orderCol = reinterpret_cast<ORDER*>(win_spec->order_list->first);
for (; orderCol; orderCol= orderCol->next) for (; orderCol; orderCol= orderCol->next)
{ {
Item* orderItem = *(orderCol->item); Item* orderItem = *(orderCol->item);
srcp.reset(buildReturnedColumn(orderItem, gwi, nonSupport)); srcp.reset(buildReturnedColumn(orderItem, gwi, nonSupport));
if (!srcp) if (!srcp)
return nullOnError(gwi); return nullOnError(gwi);
srcp->asc(orderCol->asc); srcp->asc(orderCol->direction == ORDER::ORDER_ASC ? true : false);
srcp->nullsFirst(orderCol->nulls); // nulls 1-nulls first 0-nulls last // srcp->nullsFirst(orderCol->nulls); // nulls 2-default, 1-nulls first, 0-nulls last
orders.push_back(srcp); srcp->nullsFirst(orderCol->direction == ORDER::ORDER_ASC ? 1 : 0); // WINDOWS TODO: implement NULLS FIRST/LAST in 10.2 front end
orders.push_back(srcp);
} }
orderBy.fOrders = orders; orderBy.fOrders = orders;
} }
// window frame // window frame
WF_Frame frm; WF_Frame frm;
if (wf_ctx->ordering->frame) if (win_spec->window_frame)
{ {
frm.fIsRange = wf_ctx->ordering->frame->isRange; frm.fIsRange = win_spec->window_frame->units == Window_frame::UNITS_RANGE;
// start // start
if (wf_ctx->ordering->frame->start) if (win_spec->window_frame->top_bound)
{ {
frm.fStart.fFrame = frame(wf_ctx->ordering->frame->start->bound); frm.fStart.fFrame = frame(win_spec->window_frame->top_bound->precedence_type,
win_spec->window_frame->top_bound->offset); // offset NULL means UNBOUNDED
if (wf_ctx->ordering->frame->start->item) if (win_spec->window_frame->top_bound->offset)
{ {
frm.fStart.fVal.reset(buildReturnedColumn(wf_ctx->ordering->frame->start->item, gwi, nonSupport)); frm.fStart.fVal.reset(buildReturnedColumn(win_spec->window_frame->top_bound->offset, gwi, nonSupport));
if (!frm.fStart.fVal) if (!frm.fStart.fVal)
return nullOnError(gwi); return nullOnError(gwi);
@ -293,12 +438,13 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
} }
// end // end
if (wf_ctx->ordering->frame->end) if (win_spec->window_frame->bottom_bound)
{ {
frm.fEnd.fFrame = frame(wf_ctx->ordering->frame->end->bound); frm.fEnd.fFrame = frame(win_spec->window_frame->bottom_bound->precedence_type,
if (wf_ctx->ordering->frame->end->item) win_spec->window_frame->bottom_bound->offset);
if (win_spec->window_frame->bottom_bound->offset)
{ {
frm.fEnd.fVal.reset(buildReturnedColumn(wf_ctx->ordering->frame->end->item, gwi, nonSupport)); frm.fEnd.fVal.reset(buildReturnedColumn(win_spec->window_frame->bottom_bound->offset, gwi, nonSupport));
if (!frm.fEnd.fVal) if (!frm.fEnd.fVal)
return nullOnError(gwi); return nullOnError(gwi);
@ -407,8 +553,58 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
} }
else else
{ {
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING; // Certain function types have different default boundaries
frm.fEnd.fFrame = WF_CURRENT_ROW; // This case is kept in enum order in hopes the compiler can optimize
switch (wf->window_func()->sum_func())
{
case Item_sum::COUNT_FUNC:
case Item_sum::COUNT_DISTINCT_FUNC:
case Item_sum::SUM_FUNC:
case Item_sum::SUM_DISTINCT_FUNC:
case Item_sum::AVG_FUNC:
case Item_sum::AVG_DISTINCT_FUNC:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
frm.fEnd.fFrame = WF_CURRENT_ROW;
break;
case Item_sum::MIN_FUNC:
case Item_sum::MAX_FUNC:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
// frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
frm.fEnd.fFrame = WF_CURRENT_ROW;
break;
case Item_sum::STD_FUNC:
case Item_sum::VARIANCE_FUNC:
case Item_sum::SUM_BIT_FUNC:
case Item_sum::UDF_SUM_FUNC:
case Item_sum::GROUP_CONCAT_FUNC:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
frm.fEnd.fFrame = WF_CURRENT_ROW;
break;
case Item_sum::ROW_NUMBER_FUNC:
case Item_sum::RANK_FUNC:
case Item_sum::DENSE_RANK_FUNC:
case Item_sum::PERCENT_RANK_FUNC:
case Item_sum::CUME_DIST_FUNC:
case Item_sum::NTILE_FUNC:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
break;
case Item_sum::FIRST_VALUE_FUNC:
case Item_sum::LAST_VALUE_FUNC:
case Item_sum::NTH_VALUE_FUNC:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
frm.fEnd.fFrame = WF_CURRENT_ROW;
break;
case Item_sum::LEAD_FUNC:
case Item_sum::LAG_FUNC:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
frm.fEnd.fFrame = WF_UNBOUNDED_FOLLOWING;
break;
default:
frm.fStart.fFrame = WF_UNBOUNDED_PRECEDING;
frm.fEnd.fFrame = WF_CURRENT_ROW;
break;
};
} }
orderBy.fFrame = frm; orderBy.fFrame = frm;
@ -424,8 +620,7 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
return NULL; return NULL;
} }
ac->resultType(colType_MysqlToIDB(wf)); ac->resultType(colType_MysqlToIDB(wf->arguments()[0]));
// bug5736. Make the result type double for some window functions when // bug5736. Make the result type double for some window functions when
// infinidb_double_for_decimal_math is set. // infinidb_double_for_decimal_math is set.
ac->adjustResultType(); ac->adjustResultType();

View File

@ -65,6 +65,8 @@ template <class T> bool isnan(T);
#include "sql_table.h" #include "sql_table.h"
#include "sql_select.h" #include "sql_select.h"
#include "mysqld_error.h"
#include "item_windowfunc.h"
// Now clean up the pollution as best we can... // Now clean up the pollution as best we can...
#undef min #undef min

View File

@ -99,7 +99,7 @@ CREATE TABLE IF NOT EXISTS infinidb_querystats.querystats
query varchar(8000), query varchar(8000),
startTime timestamp NOT NULL, startTime timestamp NOT NULL,
endTime timestamp NOT NULL, endTime timestamp NOT NULL,
rows bigint, `rows` bigint,
errno int, errno int,
phyIO bigint, phyIO bigint,
cacheIO bigint, cacheIO bigint,

View File

@ -44,6 +44,7 @@ query_cache_size = 0
thread_stack = 512K thread_stack = 512K
lower_case_table_names=1 lower_case_table_names=1
group_concat_max_len=512 group_concat_max_len=512
sql_mode="ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# Enable compression by default on create, set to 0 to turn off # Enable compression by default on create, set to 0 to turn off
infinidb_compression_type=2 infinidb_compression_type=2

View File

@ -197,6 +197,198 @@
<Folder <Folder
Name="Source Files" Name="Source Files"
Filters="*.c;*.C;*.cc;*.cpp;*.cp;*.cxx;*.c++;*.prg;*.pas;*.dpr;*.asm;*.s;*.bas;*.java;*.cs;*.sc;*.e;*.cob;*.html;*.rc;*.tcl;*.py;*.pl;*.d"> Filters="*.c;*.C;*.cc;*.cpp;*.cp;*.cxx;*.c++;*.prg;*.pas;*.dpr;*.asm;*.s;*.bas;*.java;*.cs;*.sc;*.e;*.cob;*.html;*.rc;*.tcl;*.py;*.pl;*.d">
<Folder
Name="mysql.sql source"
Filters="">
<F N="../../../sql/compat56.cc"/>
<F N="../../../sql/create_options.cc"/>
<F N="../../../sql/datadict.cc"/>
<F N="../../../sql/debug_sync.cc"/>
<F N="../../../sql/derror.cc"/>
<F N="../../../sql/des_key_file.cc"/>
<F N="../../../sql/discover.cc"/>
<F N="../../../sql/encryption.cc"/>
<F N="../../../sql/event_data_objects.cc"/>
<F N="../../../sql/event_db_repository.cc"/>
<F N="../../../sql/event_parse_data.cc"/>
<F N="../../../sql/event_queue.cc"/>
<F N="../../../sql/event_scheduler.cc"/>
<F N="../../../sql/events.cc"/>
<F N="../../../sql/field.cc"/>
<F N="../../../sql/field_conv.cc"/>
<F N="../../../sql/filesort.cc"/>
<F N="../../../sql/filesort_utils.cc"/>
<F N="../../../sql/gcalc_slicescan.cc"/>
<F N="../../../sql/gcalc_tools.cc"/>
<F N="../../../sql/gen_lex_hash.cc"/>
<F N="../../../sql/gen_lex_token.cc"/>
<F N="../../../sql/group_by_handler.cc"/>
<F N="../../../sql/gstream.cc"/>
<F N="../../../sql/ha_partition.cc"/>
<F N="../../../sql/handler.cc"/>
<F N="../../../sql/hash_filo.cc"/>
<F N="../../../sql/hostname.cc"/>
<F N="../../../sql/init.cc"/>
<F N="../../../sql/item.cc"/>
<F N="../../../sql/item_buff.cc"/>
<F N="../../../sql/item_cmpfunc.cc"/>
<F N="../../../sql/item_create.cc"/>
<F N="../../../sql/item_func.cc"/>
<F N="../../../sql/item_geofunc.cc"/>
<F N="../../../sql/item_inetfunc.cc"/>
<F N="../../../sql/item_jsonfunc.cc"/>
<F N="../../../sql/item_row.cc"/>
<F N="../../../sql/item_strfunc.cc"/>
<F N="../../../sql/item_subselect.cc"/>
<F N="../../../sql/item_sum.cc"/>
<F N="../../../sql/item_timefunc.cc"/>
<F N="../../../sql/item_windowfunc.cc"/>
<F N="../../../sql/item_xmlfunc.cc"/>
<F N="../../../sql/key.cc"/>
<F N="../../../sql/keycaches.cc"/>
<F N="../../../sql/lock.cc"/>
<F N="../../../sql/log.cc"/>
<F N="../../../sql/log_event.cc"/>
<F N="../../../sql/log_event_old.cc"/>
<F N="../../../sql/main.cc"/>
<F N="../../../sql/mdl.cc"/>
<F N="../../../sql/mf_iocache.cc"/>
<F N="../../../sql/mf_iocache_encr.cc"/>
<F N="../../../sql/multi_range_read.cc"/>
<F N="../../../sql/my_apc.cc"/>
<F N="../../../sql/my_decimal.cc"/>
<F N="../../../sql/my_json_writer.cc"/>
<F N="../../../sql/mysql_install_db.cc"/>
<F N="../../../sql/mysql_upgrade_service.cc"/>
<F N="../../../sql/mysqld.cc"/>
<F N="../../../sql/net_serv.cc"/>
<F N="../../../sql/nt_servc.cc"/>
<F N="../../../sql/opt_index_cond_pushdown.cc"/>
<F N="../../../sql/opt_range.cc"/>
<F N="../../../sql/opt_range_mrr.cc"/>
<F N="../../../sql/opt_subselect.cc"/>
<F N="../../../sql/opt_sum.cc"/>
<F N="../../../sql/opt_table_elimination.cc"/>
<F N="../../../sql/parse_file.cc"/>
<F N="../../../sql/partition_info.cc"/>
<F N="../../../sql/procedure.cc"/>
<F N="../../../sql/protocol.cc"/>
<F N="../../../sql/records.cc"/>
<F N="../../../sql/repl_failsafe.cc"/>
<F N="../../../sql/rpl_filter.cc"/>
<F N="../../../sql/rpl_gtid.cc"/>
<F N="../../../sql/rpl_handler.cc"/>
<F N="../../../sql/rpl_injector.cc"/>
<F N="../../../sql/rpl_mi.cc"/>
<F N="../../../sql/rpl_parallel.cc"/>
<F N="../../../sql/rpl_record.cc"/>
<F N="../../../sql/rpl_record_old.cc"/>
<F N="../../../sql/rpl_reporting.cc"/>
<F N="../../../sql/rpl_rli.cc"/>
<F N="../../../sql/rpl_tblmap.cc"/>
<F N="../../../sql/rpl_utility.cc"/>
<F N="../../../sql/scheduler.cc"/>
<F N="../../../sql/session_tracker.cc"/>
<F N="../../../sql/set_var.cc"/>
<F N="../../../sql/sha2.cc"/>
<F N="../../../sql/signal_handler.cc"/>
<F N="../../../sql/slave.cc"/>
<F N="../../../sql/sp.cc"/>
<F N="../../../sql/sp_cache.cc"/>
<F N="../../../sql/sp_head.cc"/>
<F N="../../../sql/sp_pcontext.cc"/>
<F N="../../../sql/sp_rcontext.cc"/>
<F N="../../../sql/spatial.cc"/>
<F N="../../../sql/sql_acl.cc"/>
<F N="../../../sql/sql_admin.cc"/>
<F N="../../../sql/sql_alter.cc"/>
<F N="../../../sql/sql_analyse.cc"/>
<F N="../../../sql/sql_analyze_stmt.cc"/>
<F N="../../../sql/sql_audit.cc"/>
<F N="../../../sql/sql_base.cc"/>
<F N="../../../sql/sql_binlog.cc"/>
<F N="../../../sql/sql_bootstrap.cc"/>
<F N="../../../sql/sql_builtin.cc"/>
<F N="../../../sql/sql_cache.cc"/>
<F N="../../../sql/sql_class.cc"/>
<F N="../../../sql/sql_client.cc"/>
<F N="../../../sql/sql_connect.cc"/>
<F N="../../../sql/sql_crypt.cc"/>
<F N="../../../sql/sql_cte.cc"/>
<F N="../../../sql/sql_cursor.cc"/>
<F N="../../../sql/sql_db.cc"/>
<F N="../../../sql/sql_delete.cc"/>
<F N="../../../sql/sql_derived.cc"/>
<F N="../../../sql/sql_digest.cc"/>
<F N="../../../sql/sql_do.cc"/>
<F N="../../../sql/sql_error.cc"/>
<F N="../../../sql/sql_explain.cc"/>
<F N="../../../sql/sql_expression_cache.cc"/>
<F N="../../../sql/sql_get_diagnostics.cc"/>
<F N="../../../sql/sql_handler.cc"/>
<F N="../../../sql/sql_help.cc"/>
<F N="../../../sql/sql_insert.cc"/>
<F N="../../../sql/sql_join_cache.cc"/>
<F N="../../../sql/sql_lex.cc"/>
<F N="../../../sql/sql_list.cc"/>
<F N="../../../sql/sql_load.cc"/>
<F N="../../../sql/sql_locale.cc"/>
<F N="../../../sql/sql_manager.cc"/>
<F N="../../../sql/sql_parse.cc"/>
<F N="../../../sql/sql_partition.cc"/>
<F N="../../../sql/sql_partition_admin.cc"/>
<F N="../../../sql/sql_plugin.cc"/>
<F N="../../../sql/sql_prepare.cc"/>
<F N="../../../sql/sql_profile.cc"/>
<F N="../../../sql/sql_reload.cc"/>
<F N="../../../sql/sql_rename.cc"/>
<F N="../../../sql/sql_repl.cc"/>
<F N="../../../sql/sql_select.cc"/>
<F N="../../../sql/sql_servers.cc"/>
<F N="../../../sql/sql_show.cc"/>
<F N="../../../sql/sql_signal.cc"/>
<F N="../../../sql/sql_statistics.cc"/>
<F N="../../../sql/sql_string.cc"/>
<F N="../../../sql/sql_table.cc"/>
<F N="../../../sql/sql_tablespace.cc"/>
<F N="../../../sql/sql_test.cc"/>
<F N="../../../sql/sql_time.cc"/>
<F N="../../../sql/sql_trigger.cc"/>
<F N="../../../sql/sql_truncate.cc"/>
<F N="../../../sql/sql_type.cc"/>
<F N="../../../sql/sql_udf.cc"/>
<F N="../../../sql/sql_union.cc"/>
<F N="../../../sql/sql_update.cc"/>
<F N="../../../sql/sql_view.cc"/>
<F N="../../../sql/sql_window.cc"/>
<F N="../../../sql/sql_yacc.cc"/>
<F N="../../../sql/sql_yacc.yy"/>
<F N="../../../sql/strfunc.cc"/>
<F N="../../../sql/sys_vars.cc"/>
<F N="../../../sql/table.cc"/>
<F N="../../../sql/table_cache.cc"/>
<F N="../../../sql/temporary_tables.cc"/>
<F N="../../../sql/thr_malloc.cc"/>
<F N="../../../sql/threadpool_common.cc"/>
<F N="../../../sql/threadpool_generic.cc"/>
<F N="../../../sql/threadpool_win.cc"/>
<F N="../../../sql/transaction.cc"/>
<F N="../../../sql/tztime.cc"/>
<F N="../../../sql/uniques.cc"/>
<F N="../../../sql/unireg.cc"/>
<F N="../../../sql/wsrep_applier.cc"/>
<F N="../../../sql/wsrep_binlog.cc"/>
<F N="../../../sql/wsrep_check_opts.cc"/>
<F N="../../../sql/wsrep_dummy.cc"/>
<F N="../../../sql/wsrep_hton.cc"/>
<F N="../../../sql/wsrep_mysqld.cc"/>
<F N="../../../sql/wsrep_notify.cc"/>
<F N="../../../sql/wsrep_sst.cc"/>
<F N="../../../sql/wsrep_thd.cc"/>
<F N="../../../sql/wsrep_utils.cc"/>
<F N="../../../sql/wsrep_var.cc"/>
<F N="../../../sql/wsrep_xid.cc"/>
</Folder>
<F N="ha_autoi.cpp"/> <F N="ha_autoi.cpp"/>
<F N="ha_calpont.cpp"/> <F N="ha_calpont.cpp"/>
<F N="ha_calpont_ddl.cpp"/> <F N="ha_calpont_ddl.cpp"/>
@ -218,204 +410,210 @@
<Folder <Folder
Name="Header Files" Name="Header Files"
Filters="*.h;*.H;*.hh;*.hpp;*.hxx;*.inc;*.sh;*.cpy;*.if"> Filters="*.h;*.H;*.hh;*.hpp;*.hxx;*.inc;*.sh;*.cpy;*.if">
<F N="../../../mariadb/sql/authors.h"/> <Folder
<F N="../../../mariadb/sql/bounded_queue.h"/> Name="mysql.sql headers"
<F N="../../../mariadb/sql/client_settings.h"/> Filters="">
<F N="../../../mariadb/sql/compat56.h"/> <F N="../../../sql/bounded_queue.h"/>
<F N="../../../mariadb/sql/contributors.h"/> <F N="../../../sql/client_settings.h"/>
<F N="../../../mariadb/sql/create_options.h"/> <F N="../../../sql/compat56.h"/>
<F N="../../../mariadb/sql/custom_conf.h"/> <F N="../../../sql/contributors.h"/>
<F N="../../../mariadb/sql/datadict.h"/> <F N="../../../sql/create_options.h"/>
<F N="../../../mariadb/sql/debug_sync.h"/> <F N="../../../sql/custom_conf.h"/>
<F N="../../../mariadb/sql/derror.h"/> <F N="../../../sql/datadict.h"/>
<F N="../../../mariadb/sql/des_key_file.h"/> <F N="../../../sql/debug_sync.h"/>
<F N="../../../mariadb/sql/discover.h"/> <F N="../../../sql/derror.h"/>
<F N="../../../mariadb/sql/errorids.h"/> <F N="../../../sql/des_key_file.h"/>
<F N="../../../mariadb/sql/event_data_objects.h"/> <F N="../../../sql/discover.h"/>
<F N="../../../mariadb/sql/event_db_repository.h"/> <F N="../../../sql/event_data_objects.h"/>
<F N="../../../mariadb/sql/event_parse_data.h"/> <F N="../../../sql/event_db_repository.h"/>
<F N="../../../mariadb/sql/event_queue.h"/> <F N="../../../sql/event_parse_data.h"/>
<F N="../../../mariadb/sql/event_scheduler.h"/> <F N="../../../sql/event_queue.h"/>
<F N="../../../mariadb/sql/events.h"/> <F N="../../../sql/event_scheduler.h"/>
<F N="../../../mariadb/sql/field.h"/> <F N="../../../sql/events.h"/>
<F N="../../../mariadb/sql/filesort.h"/> <F N="../../../sql/field.h"/>
<F N="../../../mariadb/sql/filesort_utils.h"/> <F N="../../../sql/filesort.h"/>
<F N="../../../mariadb/sql/gcalc_slicescan.h"/> <F N="../../../sql/filesort_utils.h"/>
<F N="../../../mariadb/sql/gcalc_tools.h"/> <F N="../../../sql/gcalc_slicescan.h"/>
<F N="../../../mariadb/sql/group_by_handler.h"/> <F N="../../../sql/gcalc_tools.h"/>
<F N="../../../mariadb/sql/gstream.h"/> <F N="../../../sql/group_by_handler.h"/>
<F N="../../../sql/gstream.h"/>
<F N="../../../sql/ha_partition.h"/>
<F N="../../../sql/handler.h"/>
<F N="../../../sql/hash_filo.h"/>
<F N="../../../sql/hostname.h"/>
<F N="../../../sql/init.h"/>
<F N="../../../sql/innodb_priv.h"/>
<F N="../../../sql/item.h"/>
<F N="../../../sql/item_cmpfunc.h"/>
<F N="../../../sql/item_create.h"/>
<F N="../../../sql/item_func.h"/>
<F N="../../../sql/item_geofunc.h"/>
<F N="../../../sql/item_inetfunc.h"/>
<F N="../../../sql/item_jsonfunc.h"/>
<F N="../../../sql/item_row.h"/>
<F N="../../../sql/item_strfunc.h"/>
<F N="../../../sql/item_subselect.h"/>
<F N="../../../sql/item_sum.h"/>
<F N="../../../sql/item_timefunc.h"/>
<F N="../../../sql/item_windowfunc.h"/>
<F N="../../../sql/item_xmlfunc.h"/>
<F N="../../../sql/key.h"/>
<F N="../../../sql/keycaches.h"/>
<F N="../../../sql/lex.h"/>
<F N="../../../sql/lex_hash.h"/>
<F N="../../../sql/lex_symbol.h"/>
<F N="../../../sql/lex_token.h"/>
<F N="../../../sql/lock.h"/>
<F N="../../../sql/log.h"/>
<F N="../../../sql/log_event.h"/>
<F N="../../../sql/log_event_old.h"/>
<F N="../../../sql/log_slow.h"/>
<F N="../../../sql/mdl.h"/>
<F N="../../../sql/mem_root_array.h"/>
<F N="../../../sql/message.h"/>
<F N="../../../sql/multi_range_read.h"/>
<F N="../../../sql/my_apc.h"/>
<F N="../../../sql/my_decimal.h"/>
<F N="../../../sql/my_json_writer.h"/>
<F N="../../../sql/mysqld.h"/>
<F N="../../../sql/mysqld_suffix.h"/>
<F N="../../../sql/nt_servc.h"/>
<F N="../../../sql/opt_range.h"/>
<F N="../../../sql/opt_subselect.h"/>
<F N="../../../sql/parse_file.h"/>
<F N="../../../sql/partition_element.h"/>
<F N="../../../sql/partition_info.h"/>
<F N="../../../sql/procedure.h"/>
<F N="../../../sql/protocol.h"/>
<F N="../../../sql/records.h"/>
<F N="../../../sql/repl_failsafe.h"/>
<F N="../../../sql/replication.h"/>
<F N="../../../sql/rpl_constants.h"/>
<F N="../../../sql/rpl_filter.h"/>
<F N="../../../sql/rpl_gtid.h"/>
<F N="../../../sql/rpl_handler.h"/>
<F N="../../../sql/rpl_injector.h"/>
<F N="../../../sql/rpl_mi.h"/>
<F N="../../../sql/rpl_parallel.h"/>
<F N="../../../sql/rpl_record.h"/>
<F N="../../../sql/rpl_record_old.h"/>
<F N="../../../sql/rpl_reporting.h"/>
<F N="../../../sql/rpl_rli.h"/>
<F N="../../../sql/rpl_tblmap.h"/>
<F N="../../../sql/rpl_utility.h"/>
<F N="../../../sql/scheduler.h"/>
<F N="../../../sql/session_tracker.h"/>
<F N="../../../sql/set_var.h"/>
<F N="../../../sql/slave.h"/>
<F N="../../../sql/sp.h"/>
<F N="../../../sql/sp_cache.h"/>
<F N="../../../sql/sp_head.h"/>
<F N="../../../sql/sp_pcontext.h"/>
<F N="../../../sql/sp_rcontext.h"/>
<F N="../../../sql/spatial.h"/>
<F N="../../../sql/sql_acl.h"/>
<F N="../../../sql/sql_admin.h"/>
<F N="../../../sql/sql_alter.h"/>
<F N="../../../sql/sql_analyse.h"/>
<F N="../../../sql/sql_analyze_stmt.h"/>
<F N="../../../sql/sql_array.h"/>
<F N="../../../sql/sql_audit.h"/>
<F N="../../../sql/sql_base.h"/>
<F N="../../../sql/sql_basic_types.h"/>
<F N="../../../sql/sql_binlog.h"/>
<F N="../../../sql/sql_bitmap.h"/>
<F N="../../../sql/sql_bootstrap.h"/>
<F N="../../../sql/sql_cache.h"/>
<F N="../../../sql/sql_callback.h"/>
<F N="../../../sql/sql_class.h"/>
<F N="../../../sql/sql_cmd.h"/>
<F N="../../../sql/sql_connect.h"/>
<F N="../../../sql/sql_const.h"/>
<F N="../../../sql/sql_crypt.h"/>
<F N="../../../sql/sql_cte.h"/>
<F N="../../../sql/sql_cursor.h"/>
<F N="../../../sql/sql_db.h"/>
<F N="../../../sql/sql_delete.h"/>
<F N="../../../sql/sql_derived.h"/>
<F N="../../../sql/sql_digest.h"/>
<F N="../../../sql/sql_digest_stream.h"/>
<F N="../../../sql/sql_do.h"/>
<F N="../../../sql/sql_error.h"/>
<F N="../../../sql/sql_explain.h"/>
<F N="../../../sql/sql_expression_cache.h"/>
<F N="../../../sql/sql_get_diagnostics.h"/>
<F N="../../../sql/sql_handler.h"/>
<F N="../../../sql/sql_help.h"/>
<F N="../../../sql/sql_hset.h"/>
<F N="../../../sql/sql_insert.h"/>
<F N="../../../sql/sql_join_cache.h"/>
<F N="../../../sql/sql_lex.h"/>
<F N="../../../sql/sql_lifo_buffer.h"/>
<F N="../../../sql/sql_list.h"/>
<F N="../../../sql/sql_load.h"/>
<F N="../../../sql/sql_locale.h"/>
<F N="../../../sql/sql_manager.h"/>
<F N="../../../sql/sql_parse.h"/>
<F N="../../../sql/sql_partition.h"/>
<F N="../../../sql/sql_partition_admin.h"/>
<F N="../../../sql/sql_plist.h"/>
<F N="../../../sql/sql_plugin.h"/>
<F N="../../../sql/sql_plugin_compat.h"/>
<F N="../../../sql/sql_prepare.h"/>
<F N="../../../sql/sql_priv.h"/>
<F N="../../../sql/sql_profile.h"/>
<F N="../../../sql/sql_reload.h"/>
<F N="../../../sql/sql_rename.h"/>
<F N="../../../sql/sql_repl.h"/>
<F N="../../../sql/sql_select.h"/>
<F N="../../../sql/sql_servers.h"/>
<F N="../../../sql/sql_show.h"/>
<F N="../../../sql/sql_signal.h"/>
<F N="../../../sql/sql_sort.h"/>
<F N="../../../sql/sql_statistics.h"/>
<F N="../../../sql/sql_string.h"/>
<F N="../../../sql/sql_table.h"/>
<F N="../../../sql/sql_tablespace.h"/>
<F N="../../../sql/sql_test.h"/>
<F N="../../../sql/sql_time.h"/>
<F N="../../../sql/sql_trigger.h"/>
<F N="../../../sql/sql_truncate.h"/>
<F N="../../../sql/sql_type.h"/>
<F N="../../../sql/sql_udf.h"/>
<F N="../../../sql/sql_union.h"/>
<F N="../../../sql/sql_update.h"/>
<F N="../../../sql/sql_view.h"/>
<F N="../../../sql/sql_window.h"/>
<F N="../../../sql/sql_yacc.h"/>
<F N="../../../sql/strfunc.h"/>
<F N="../../../sql/structs.h"/>
<F N="../../../sql/sys_vars_shared.h"/>
<F N="../../../sql/table.h"/>
<F N="../../../sql/table_cache.h"/>
<F N="../../../sql/thr_malloc.h"/>
<F N="../../../sql/threadpool.h"/>
<F N="../../../sql/transaction.h"/>
<F N="../../../sql/tzfile.h"/>
<F N="../../../sql/tztime.h"/>
<F N="../../../sql/uniques.h"/>
<F N="../../../sql/unireg.h"/>
<F N="../../../sql/winservice.h"/>
<F N="../../../sql/wsrep_applier.h"/>
<F N="../../../sql/wsrep_binlog.h"/>
<F N="../../../sql/wsrep_mysqld.h"/>
<F N="../../../sql/wsrep_priv.h"/>
<F N="../../../sql/wsrep_sst.h"/>
<F N="../../../sql/wsrep_thd.h"/>
<F N="../../../sql/wsrep_utils.h"/>
<F N="../../../sql/wsrep_var.h"/>
<F N="../../../sql/wsrep_xid.h"/>
</Folder>
<F N="ha_calpont.h"/> <F N="ha_calpont.h"/>
<F N="ha_calpont_impl.h"/> <F N="ha_calpont_impl.h"/>
<F N="ha_calpont_impl_if.h"/> <F N="ha_calpont_impl_if.h"/>
<F N="../../../mariadb/sql/ha_partition.h"/> <F N="../../../mariadb/sql/ha_partition.h"/>
<F N="ha_subquery.h"/> <F N="ha_subquery.h"/>
<F N="ha_view.h"/> <F N="ha_view.h"/>
<F N="../../../mariadb/sql/handler.h"/>
<F N="../../../mariadb/sql/hash_filo.h"/>
<F N="../../../mariadb/sql/hostname.h"/>
<F N="idb_mysql.h"/>
<F N="../../../mariadb/sql/init.h"/>
<F N="../../../mariadb/sql/innodb_priv.h"/>
<F N="../../../mariadb/sql/item.h"/>
<F N="../../../mariadb/sql/item_cmpfunc.h"/>
<F N="../../../mariadb/sql/item_create.h"/>
<F N="../../../mariadb/sql/item_create_window_function.h"/>
<F N="../../../mariadb/sql/item_func.h"/>
<F N="../../../mariadb/sql/item_geofunc.h"/>
<F N="../../../mariadb/sql/item_inetfunc.h"/>
<F N="../../../mariadb/sql/item_row.h"/>
<F N="../../../mariadb/sql/item_strfunc.h"/>
<F N="../../../mariadb/sql/item_subselect.h"/>
<F N="../../../mariadb/sql/item_sum.h"/>
<F N="../../../mariadb/sql/item_timefunc.h"/>
<F N="../../../mariadb/sql/item_window_function.h"/>
<F N="../../../mariadb/sql/item_xmlfunc.h"/>
<F N="../../../mariadb/sql/key.h"/>
<F N="../../../mariadb/sql/keycaches.h"/>
<F N="../../../mariadb/sql/lex.h"/>
<F N="../../../mariadb/sql/lex_hash.h"/>
<F N="../../../mariadb/sql/lex_symbol.h"/>
<F N="../../../mariadb/sql/lex_token.h"/>
<F N="../../../mariadb/sql/lock.h"/>
<F N="../../../mariadb/sql/log.h"/>
<F N="../../../mariadb/sql/log_event.h"/>
<F N="../../../mariadb/sql/log_event_old.h"/>
<F N="../../../mariadb/sql/log_slow.h"/>
<F N="../../../mariadb/sql/mdl.h"/>
<F N="../../../mariadb/sql/mem_root_array.h"/>
<F N="../../../mariadb/sql/message.h"/>
<F N="../../../mariadb/sql/multi_range_read.h"/>
<F N="../../../mariadb/sql/my_apc.h"/>
<F N="../../../mariadb/sql/my_decimal.h"/>
<F N="../../../mariadb/sql/my_json_writer.h"/>
<F N="../../../mariadb/sql/mysqld.h"/>
<F N="../../../mariadb/sql/mysqld_suffix.h"/>
<F N="../../../mariadb/sql/nt_servc.h"/>
<F N="../../../mariadb/sql/opt_range.h"/>
<F N="../../../mariadb/sql/opt_subselect.h"/>
<F N="../../../mariadb/sql/parse_file.h"/>
<F N="../../../mariadb/sql/partition_element.h"/>
<F N="../../../mariadb/sql/partition_info.h"/>
<F N="../../../mariadb/sql/procedure.h"/>
<F N="../../../mariadb/sql/protocol.h"/>
<F N="../../../mariadb/sql/records.h"/>
<F N="../../../mariadb/sql/repl_failsafe.h"/>
<F N="../../../mariadb/sql/replication.h"/>
<F N="../../../mariadb/sql/rpl_constants.h"/>
<F N="../../../mariadb/sql/rpl_filter.h"/>
<F N="../../../mariadb/sql/rpl_gtid.h"/>
<F N="../../../mariadb/sql/rpl_handler.h"/>
<F N="../../../mariadb/sql/rpl_injector.h"/>
<F N="../../../mariadb/sql/rpl_mi.h"/>
<F N="../../../mariadb/sql/rpl_parallel.h"/>
<F N="../../../mariadb/sql/rpl_record.h"/>
<F N="../../../mariadb/sql/rpl_record_old.h"/>
<F N="../../../mariadb/sql/rpl_reporting.h"/>
<F N="../../../mariadb/sql/rpl_rli.h"/>
<F N="../../../mariadb/sql/rpl_tblmap.h"/>
<F N="../../../mariadb/sql/rpl_utility.h"/>
<F N="../../../mariadb/sql/scheduler.h"/>
<F N="../../../mariadb/sql/set_var.h"/>
<F N="../../../mariadb/sql/slave.h"/>
<F N="sm.h"/>
<F N="../../../mariadb/sql/sp.h"/>
<F N="../../../mariadb/sql/sp_cache.h"/>
<F N="../../../mariadb/sql/sp_head.h"/>
<F N="../../../mariadb/sql/sp_pcontext.h"/>
<F N="../../../mariadb/sql/sp_rcontext.h"/>
<F N="../../../mariadb/sql/spatial.h"/>
<F N="../../../mariadb/sql/sql_acl.h"/>
<F N="../../../mariadb/sql/sql_admin.h"/>
<F N="../../../mariadb/sql/sql_alter.h"/>
<F N="../../../mariadb/sql/sql_analyse.h"/>
<F N="../../../mariadb/sql/sql_analyze_stmt.h"/>
<F N="../../../mariadb/sql/sql_array.h"/>
<F N="../../../mariadb/sql/sql_audit.h"/>
<F N="../../../mariadb/sql/sql_base.h"/>
<F N="../../../mariadb/sql/sql_binlog.h"/>
<F N="../../../mariadb/sql/sql_bitmap.h"/>
<F N="../../../mariadb/sql/sql_bootstrap.h"/>
<F N="../../../mariadb/sql/sql_cache.h"/>
<F N="../../../mariadb/sql/sql_callback.h"/>
<F N="../../../mariadb/sql/sql_class.h"/>
<F N="../../../mariadb/sql/sql_cmd.h"/>
<F N="../../../mariadb/sql/sql_connect.h"/>
<F N="../../../mariadb/sql/sql_const.h"/>
<F N="../../../mariadb/sql/sql_crypt.h"/>
<F N="../../../mariadb/sql/sql_cursor.h"/>
<F N="../../../mariadb/sql/sql_db.h"/>
<F N="../../../mariadb/sql/sql_delete.h"/>
<F N="../../../mariadb/sql/sql_derived.h"/>
<F N="../../../mariadb/sql/sql_digest.h"/>
<F N="../../../mariadb/sql/sql_digest_stream.h"/>
<F N="../../../mariadb/sql/sql_do.h"/>
<F N="../../../mariadb/sql/sql_error.h"/>
<F N="../../../mariadb/sql/sql_explain.h"/>
<F N="../../../mariadb/sql/sql_expression_cache.h"/>
<F N="../../../mariadb/sql/sql_get_diagnostics.h"/>
<F N="../../../mariadb/sql/sql_handler.h"/>
<F N="../../../mariadb/sql/sql_help.h"/>
<F N="../../../mariadb/sql/sql_hset.h"/>
<F N="../../../mariadb/sql/sql_insert.h"/>
<F N="../../../mariadb/sql/sql_join_cache.h"/>
<F N="../../../mariadb/sql/sql_lex.h"/>
<F N="../../../mariadb/sql/sql_lifo_buffer.h"/>
<F N="../../../mariadb/sql/sql_list.h"/>
<F N="../../../mariadb/sql/sql_load.h"/>
<F N="../../../mariadb/sql/sql_locale.h"/>
<F N="../../../mariadb/sql/sql_manager.h"/>
<F N="../../../mariadb/sql/sql_parse.h"/>
<F N="../../../mariadb/sql/sql_partition.h"/>
<F N="../../../mariadb/sql/sql_partition_admin.h"/>
<F N="../../../mariadb/sql/sql_plist.h"/>
<F N="../../../mariadb/sql/sql_plugin.h"/>
<F N="../../../mariadb/sql/sql_plugin_compat.h"/>
<F N="../../../mariadb/sql/sql_prepare.h"/>
<F N="../../../mariadb/sql/sql_priv.h"/>
<F N="../../../mariadb/sql/sql_profile.h"/>
<F N="../../../mariadb/sql/sql_reload.h"/>
<F N="../../../mariadb/sql/sql_rename.h"/>
<F N="../../../mariadb/sql/sql_repl.h"/>
<F N="../../../mariadb/sql/sql_select.h"/>
<F N="../../../mariadb/sql/sql_servers.h"/>
<F N="../../../mariadb/sql/sql_show.h"/>
<F N="../../../mariadb/sql/sql_signal.h"/>
<F N="../../../mariadb/sql/sql_sort.h"/>
<F N="../../../mariadb/sql/sql_statistics.h"/>
<F N="../../../mariadb/sql/sql_string.h"/>
<F N="../../../mariadb/sql/sql_table.h"/>
<F N="../../../mariadb/sql/sql_tablespace.h"/>
<F N="../../../mariadb/sql/sql_test.h"/>
<F N="../../../mariadb/sql/sql_time.h"/>
<F N="../../../mariadb/sql/sql_trigger.h"/>
<F N="../../../mariadb/sql/sql_truncate.h"/>
<F N="../../../mariadb/sql/sql_type.h"/>
<F N="../../../mariadb/sql/sql_udf.h"/>
<F N="../../../mariadb/sql/sql_union.h"/>
<F N="../../../mariadb/sql/sql_update.h"/>
<F N="../../../mariadb/sql/sql_view.h"/>
<F N="../../../mariadb/sql/sql_yacc.h"/>
<F N="../../../mariadb/sql/strfunc.h"/>
<F N="../../../mariadb/sql/structs.h"/>
<F N="../../../mariadb/sql/sys_vars_shared.h"/>
<F N="../../../mariadb/sql/table.h"/>
<F N="../../../mariadb/sql/table_cache.h"/>
<F N="../../../mariadb/sql/thr_malloc.h"/>
<F N="../../../mariadb/sql/threadpool.h"/>
<F N="../../../mariadb/sql/transaction.h"/>
<F N="../../../mariadb/sql/tzfile.h"/>
<F N="../../../mariadb/sql/tztime.h"/>
<F N="../../../mariadb/sql/unireg.h"/>
<F N="../../../mariadb/sql/winservice.h"/>
<F N="../../../mariadb/sql/wsrep_applier.h"/>
<F N="../../../mariadb/sql/wsrep_binlog.h"/>
<F N="../../../mariadb/sql/wsrep_mysqld.h"/>
<F N="../../../mariadb/sql/wsrep_priv.h"/>
<F N="../../../mariadb/sql/wsrep_sst.h"/>
<F N="../../../mariadb/sql/wsrep_thd.h"/>
<F N="../../../mariadb/sql/wsrep_utils.h"/>
<F N="../../../mariadb/sql/wsrep_var.h"/>
<F N="../../../mariadb/sql/wsrep_xid.h"/>
</Folder> </Folder>
<Folder <Folder
Name="Resource Files" Name="Resource Files"

View File

@ -29,9 +29,9 @@
<Name>redistributeData</Name> <Name>redistributeData</Name>
<Desc1>Redistribute table data accross all dbroots to balance disk usage</Desc1> <Desc1>Redistribute table data accross all dbroots to balance disk usage</Desc1>
<Arg1>START to begin a redistribution</Arg1> <Arg1>START to begin a redistribution</Arg1>
<Arg2>START REMOVE n to being a redistribution where data is removed from dbroot 'n'</Arg2> <Arg2>STOP to stop redistribution before completion</Arg2>
<Arg3>STOP to stop redistribution before completion</Arg3> <Arg3>STATUS to to view statistics and progress</Arg3>
<Arg4>STATUS to to view statistics and progress</Arg4> <Arg4>START REMOVE to redistribute and move data off the given dbroot to other dbroots</Arg4>
</Cmd4> </Cmd4>
<Cmd5> <Cmd5>
<Name>findObjectFile</Name> <Name>findObjectFile</Name>

View File

@ -28,11 +28,11 @@ for arg in "$@"; do
fi fi
done done
cd $installdir/mysql/lib #cd $installdir/mysql/lib
for file in libmysqlclient libmysqlclient_r; do #for file in libmysqlclient libmysqlclient_r; do
ln -sf $file.so.18.0.0 $file.so # ln -sf $file.so.18.0.0 $file.so
ln -sf $file.so.18.0.0 $file.so.18 # ln -sf $file.so.18.0.0 $file.so.18
done #done
cd $installdir/mysql/lib/plugin cd $installdir/mysql/lib/plugin
for file in ha_archive ha_blackhole ha_federated ha_innodb; do for file in ha_archive ha_blackhole ha_federated ha_innodb; do
ln -sf $file.so $file.so.0 ln -sf $file.so $file.so.0

View File

@ -52,17 +52,6 @@
#include <cstring> #include <cstring>
#include <glob.h> #include <glob.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <ifaddrs.h>
#include <stdio.h>
#include <string.h> /* for strncpy */
#include <sys/types.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
#include <readline/readline.h> #include <readline/readline.h>
#include <readline/history.h> #include <readline/history.h>
#include "boost/filesystem/operations.hpp" #include "boost/filesystem/operations.hpp"
@ -109,7 +98,7 @@ bool updateProcessConfig(int serverTypeInstall);
bool uncommentCalpontXml( string entry); bool uncommentCalpontXml( string entry);
bool makeRClocal(string moduleType, string moduleName, int IserverTypeInstall); bool makeRClocal(string moduleType, string moduleName, int IserverTypeInstall);
bool createDbrootDirs(string DBRootStorageType); bool createDbrootDirs(string DBRootStorageType);
bool pkgCheck(std::string columnstorePackage); bool pkgCheck();
bool storageSetup(bool amazonInstall); bool storageSetup(bool amazonInstall);
void setSystemName(); void setSystemName();
bool singleServerDBrootSetup(); bool singleServerDBrootSetup();
@ -126,7 +115,7 @@ typedef struct ModuleIP_struct
std::string launchInstance(ModuleIP moduleip); std::string launchInstance(ModuleIP moduleip);
string columnstorePackage; string calpontPackage1;
//string calpontPackage2; //string calpontPackage2;
//string calpontPackage3; //string calpontPackage3;
//string mysqlPackage; //string mysqlPackage;
@ -408,7 +397,7 @@ int main(int argc, char *argv[])
//check if MariaDB ColumnStore is up and running //check if MariaDB ColumnStore is up and running
if (oam.checkSystemRunning()) { if (oam.checkSystemRunning()) {
cout << "MariaDB ColumnStore is running, can't run postConfigure while MariaDB ColumnStore is running. Exiting.." << endl; cout << "MariaDB ColumnStore is running, can't run postConfigure while MariaDB ColumnStore is running. Exiting.." << endl;
exit (1); exit (0);
} }
//if InitialInstallFlag is set, then an install has been done //if InitialInstallFlag is set, then an install has been done
@ -434,60 +423,6 @@ int main(int argc, char *argv[])
exit(1); exit(1);
} }
//check for local ip address as pm1
ModuleConfig moduleconfig;
try
{
oam.getSystemConfig("pm1", moduleconfig);
if (moduleconfig.hostConfigList.size() > 0 )
{
HostConfigList::iterator pt1 = moduleconfig.hostConfigList.begin();
string PM1ipAdd = (*pt1).IPAddr;
//cout << PM1ipAdd << endl;
if ( PM1ipAdd != "127.0.0.1" && PM1ipAdd != "0.0.0.0")
{
struct ifaddrs *ifap, *ifa;
struct sockaddr_in *sa;
char *addr;
bool found = false;
getifaddrs (&ifap);
for (ifa = ifap; ifa; ifa = ifa->ifa_next) {
if (ifa->ifa_addr->sa_family==AF_INET) {
sa = (struct sockaddr_in *) ifa->ifa_addr;
addr = inet_ntoa(sa->sin_addr);
//printf("Interface: %s\tAddress: %s\n", ifa->ifa_name, addr);
if ( PM1ipAdd == addr )
{
//match
found = true;
}
}
if (found)
break;
}
freeifaddrs(ifap);
if (!found)
{
cout << endl;
cout << "ERROR: postConfigure install can only be done on the PM1" << endl;
cout << "designated node. The configured PM1 IP address doesn't match the local" << endl;
cout << "IP Address. exiting..." << endl;
exit(1);
}
}
}
}
catch(...)
{}
// run my.cnf upgrade script // run my.cnf upgrade script
if ( reuseConfig == "y" ) if ( reuseConfig == "y" )
{ {
@ -731,6 +666,64 @@ int main(int argc, char *argv[])
exit(1); exit(1);
} }
cout << "NOTE: The MariaDB ColumnStore Schema Sync feature will replicate all of the" << endl;
cout << " schemas and InnoDB tables across the User Module nodes. This feature can be enabled" << endl;
cout << " or disabled, for example, if you wish to configure your own replication post installation." << endl << endl;
try {
MySQLRep = sysConfig->getConfig(InstallSection, "MySQLRep");
}
catch(...)
{}
if ( MySQLRep == "y" )
mysqlRep = true;
string answer = "y";
while(true) {
if ( mysqlRep )
prompt = "MariaDB ColumnStore Schema Sync feature is Enabled, do you want to leave enabled? [y,n] (y) > ";
else
prompt = "MariaDB ColumnStore Schema Sync feature, do you want to enable? [y,n] (y) > ";
pcommand = callReadline(prompt.c_str());
if (pcommand) {
if (strlen(pcommand) > 0) answer = pcommand;
callFree(pcommand);
}
if ( answer == "y" || answer == "n" ) {
cout << endl;
break;
}
else
cout << "Invalid Entry, please enter 'y' for yes or 'n' for no" << endl;
if ( noPrompting )
exit(1);
}
if ( answer == "y" ) {
mysqlRep = true;
MySQLRep = "y";
}
else
{
mysqlRep = false;
MySQLRep = "n";
}
try {
sysConfig->setConfig(InstallSection, "MySQLRep", MySQLRep);
}
catch(...)
{}
if ( !writeConfig(sysConfig) ) {
cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl;
exit(1);
}
switch ( IserverTypeInstall ) { switch ( IserverTypeInstall ) {
case (oam::INSTALL_COMBINE_DM_UM_PM): // combined #1 - dm/um/pm on a single server case (oam::INSTALL_COMBINE_DM_UM_PM): // combined #1 - dm/um/pm on a single server
{ {
@ -820,75 +813,6 @@ int main(int argc, char *argv[])
break; break;
} }
// check for Schema Schema is Local Query wasnt selected
if (!pmwithum)
{
cout << "NOTE: The MariaDB ColumnStore Schema Sync feature will replicate all of the" << endl;
cout << " schemas and InnoDB tables across the User Module nodes. This feature can be enabled" << endl;
cout << " or disabled, for example, if you wish to configure your own replication post installation." << endl << endl;
try {
MySQLRep = sysConfig->getConfig(InstallSection, "MySQLRep");
}
catch(...)
{}
if ( MySQLRep == "y" )
mysqlRep = true;
string answer = "y";
while(true) {
if ( mysqlRep )
prompt = "MariaDB ColumnStore Schema Sync feature is Enabled, do you want to leave enabled? [y,n] (y) > ";
else
prompt = "MariaDB ColumnStore Schema Sync feature, do you want to enable? [y,n] (y) > ";
pcommand = callReadline(prompt.c_str());
if (pcommand) {
if (strlen(pcommand) > 0) answer = pcommand;
callFree(pcommand);
}
if ( answer == "y" || answer == "n" ) {
cout << endl;
break;
}
else
cout << "Invalid Entry, please enter 'y' for yes or 'n' for no" << endl;
if ( noPrompting )
exit(1);
}
if ( answer == "y" ) {
mysqlRep = true;
MySQLRep = "y";
}
else
{
mysqlRep = false;
MySQLRep = "n";
}
try {
sysConfig->setConfig(InstallSection, "MySQLRep", MySQLRep);
}
catch(...)
{}
}
else
{ //Schema Sync is default as on when Local Query is Selected
mysqlRep = true;
MySQLRep = "y";
try {
sysConfig->setConfig(InstallSection, "MySQLRep", MySQLRep);
}
catch(...)
{}
}
if ( !writeConfig(sysConfig) ) { if ( !writeConfig(sysConfig) ) {
cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl; cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl;
exit(1); exit(1);
@ -2676,42 +2600,7 @@ int main(int argc, char *argv[])
/* create a thread_data_t argument array */ /* create a thread_data_t argument array */
thread_data_t thr_data[childmodulelist.size()]; thread_data_t thr_data[childmodulelist.size()];
// determine package type
string EEPackageType;
if (!rootUser)
EEPackageType = "binary";
else
{
int rtnCode = system("rpm -qi mariadb-columnstore-platform > /tmp/columnstore.txt 2>&1");
if (WEXITSTATUS(rtnCode) == 0)
EEPackageType = "rpm";
else {
rtnCode = system("dpkg -s mariadb-columnstore-platform > /tmp/columnstore.txt 2>&1");
if (WEXITSTATUS(rtnCode) == 0)
EEPackageType = "deb";
else
EEPackageType = "binary";
}
}
try {
sysConfig->setConfig(InstallSection, "EEPackageType", EEPackageType);
}
catch(...)
{
cout << "ERROR: Problem setting EEPackageType from the MariaDB ColumnStore System Configuration file" << endl;
exit(1);
}
if ( !writeConfig(sysConfig) ) {
cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl;
exit(1);
}
string install = "y"; string install = "y";
if ( IserverTypeInstall != oam::INSTALL_COMBINE_DM_UM_PM || if ( IserverTypeInstall != oam::INSTALL_COMBINE_DM_UM_PM ||
pmNumber > 1 ) { pmNumber > 1 ) {
// //
@ -2754,6 +2643,39 @@ int main(int argc, char *argv[])
cout << endl; cout << endl;
//Write out Updated System Configuration File
string EEPackageType;
if ( rootUser )
{
try {
EEPackageType = sysConfig->getConfig(InstallSection, "EEPackageType");
}
catch(...)
{
cout << "ERROR: Problem getting EEPackageType from the MariaDB ColumnStore System Configuration file" << endl;
exit(1);
}
}
else //nonroot, default to binary
EEPackageType = "binary";
while(true) {
prompt = "Enter the Package Type being installed to other servers [rpm,deb,binary] (" + EEPackageType + ") > ";
pcommand = callReadline(prompt);
if (pcommand) {
if (strlen(pcommand) > 0) EEPackageType = pcommand;
callFree(pcommand);
}
if ( EEPackageType == "rpm" || EEPackageType == "deb" || EEPackageType == "binary" ) {
break;
}
cout << "Invalid Package Type, please re-enter" << endl;
EEPackageType = "rpm";
if ( noPrompting )
exit(1);
}
if ( EEPackageType == "rpm" ) if ( EEPackageType == "rpm" )
{ {
cout << "Performing an MariaDB ColumnStore System install using RPM packages" << endl; cout << "Performing an MariaDB ColumnStore System install using RPM packages" << endl;
@ -2773,20 +2695,76 @@ int main(int argc, char *argv[])
} }
} }
//Write out Updated System Configuration File
try {
sysConfig->setConfig(InstallSection, "EEPackageType", EEPackageType);
}
catch(...)
{
cout << "ERROR: Problem setting EEPackageType from the MariaDB ColumnStore System Configuration file" << endl;
exit(1);
}
if ( !writeConfig(sysConfig) ) {
cout << "ERROR: Failed trying to update MariaDB ColumnStore System Configuration file" << endl;
exit(1);
}
//check if pkgs are located in $HOME directory //check if pkgs are located in $HOME directory
string version = systemsoftware.Version + "-" + systemsoftware.Release; string version = systemsoftware.Version + "-" + systemsoftware.Release;
if ( EEPackageType == "rpm") if ( EEPackageType != "binary") {
columnstorePackage = HOME + "/" + "mariadb-columnstore-" + version + "*.rpm.tar.gz"; string separator = "-";
else calpontPackage1 = "mariadb-columnstore-*" + separator + version;
if ( EEPackageType == "deb") //calpontPackage2 = "mariadb-columnstore-libs" + separator + version;
columnstorePackage = HOME + "/" + "mariadb-columnstore-" + version + "*.deb.tar.gz"; //calpontPackage3 = "mariadb-columnstore-enterprise" + separator + version;
//mysqlPackage = "mariadb-columnstore-storage-engine" + separator + version;
//mysqldPackage = "mariadb-columnstore-mysql" + separator + version;
if( !pkgCheck() ) {
exit(1);
}
else else
columnstorePackage = HOME + "/" + "mariadb-columnstore-" + version + "*.bin.tar.gz"; {
//mariadb
calpontPackage1 = "mariadb-columnstore-*" + separator + version;
calpontPackage1 = HOME + "/" + calpontPackage1 + "*." + EEPackageType;
//calpontPackage2 = HOME + "/" + calpontPackage2 + "*." + EEPackageType;
//calpontPackage3 = HOME + "/" + calpontPackage3 + "*." + EEPackageType;
//mysqlPackage = HOME + "/" + mysqlPackage + "*." + EEPackageType;
//mysqldPackage = HOME + "/" + mysqldPackage + "*." + EEPackageType;
}
}
else
{
// binary
//string fileName = installDir + "/bin/healthcheck";
//ifstream file (fileName.c_str());
//if (!file) // CE
calpontPackage1 = "mariadb-columnstore-" + version;
//else // EE
//calpontPackage1 = "mariadb-columnstore-ent-" + version;
//calpontPackage2 = "dummy";
//calpontPackage3 = "dummy";
//mysqlPackage = calpontPackage1;
//mysqldPackage = calpontPackage1;
if( !pkgCheck() )
exit(1);
calpontPackage1 = HOME + "/" + calpontPackage1 + "*.bin.tar.gz";
//calpontPackage2 = "dummy";
//calpontPackage3 = "dummy";
}
//If ent pkg is not there, mark it as such
//{
// glob_t gt;
// memset(&gt, 0, sizeof(gt));
// if (glob(calpontPackage3.c_str(), 0, 0, &gt) != 0)
// calpontPackage3 = "dummy.rpm";
// globfree(&gt);
//}
if( !pkgCheck(columnstorePackage) )
exit(1);
if ( password.empty() ) if ( password.empty() )
{ {
cout << endl; cout << endl;
@ -2996,7 +2974,7 @@ int main(int argc, char *argv[])
// checkRemoteMysqlPort(remoteModuleIP, remoteModuleName, USER, password, mysqlPort, sysConfig); // checkRemoteMysqlPort(remoteModuleIP, remoteModuleName, USER, password, mysqlPort, sysConfig);
cmd = installDir + "/bin/binary_installer.sh " + remoteModuleName + " " + cmd = installDir + "/bin/binary_installer.sh " + remoteModuleName + " " +
remoteModuleIP + " " + password + " " + columnstorePackage + " " + remoteModuleType + remoteModuleIP + " " + password + " " + calpontPackage1 + " " + remoteModuleType +
" initial " + binservertype + " " + mysqlPort + " " + remote_installer_debug + " initial " + binservertype + " " + mysqlPort + " " + remote_installer_debug +
" " + installDir + " " + debug_logfile; " " + installDir + " " + debug_logfile;
@ -3066,7 +3044,7 @@ int main(int argc, char *argv[])
if ( pmwithum ) if ( pmwithum )
binservertype = "pmwithum"; binservertype = "pmwithum";
cmd = installDir + "/bin/binary_installer.sh " + remoteModuleName + " " + remoteModuleIP + cmd = installDir + "/bin/binary_installer.sh " + remoteModuleName + " " + remoteModuleIP +
" " + password + " " + columnstorePackage + " " + remoteModuleType + " initial " + " " + password + " " + calpontPackage1 + " " + remoteModuleType + " initial " +
binservertype + " " + mysqlPort + " " + remote_installer_debug + " " + installDir + " " + binservertype + " " + mysqlPort + " " + remote_installer_debug + " " + installDir + " " +
debug_logfile; debug_logfile;
@ -3683,14 +3661,6 @@ bool setOSFiles(string parentOAMModuleName, int serverTypeInstall)
system(cmd.c_str()); system(cmd.c_str());
} }
//check and do the amazon credentials file
string fileName = HOME + "/.aws/credentials";
ifstream oldFile (fileName.c_str());
if (!oldFile)
return allfound;
string cmd = "cp " + fileName + " " + installDir + "/local/etc/. > /dev/null 2>&1";
system(cmd.c_str());
return allfound; return allfound;
} }
@ -3987,14 +3957,14 @@ bool createDbrootDirs(string DBRootStorageType)
/* /*
* pkgCheck * pkgCheck
*/ */
bool pkgCheck(string columnstorePackage) bool pkgCheck()
{ {
while(true) while(true)
{ {
string cmd = "ls " + columnstorePackage + " > /tmp/calpontpkgs"; string cmd = "ls " + HOME + " | grep " + calpontPackage1 + " > /tmp/calpontpkgs";
system(cmd.c_str()); system(cmd.c_str());
string pkg = columnstorePackage; string pkg = calpontPackage1;
string fileName = "/tmp/calpontpkgs"; string fileName = "/tmp/calpontpkgs";
ifstream oldFile (fileName.c_str()); ifstream oldFile (fileName.c_str());
if (oldFile) { if (oldFile) {
@ -4858,7 +4828,6 @@ bool storageSetup(bool amazonInstall)
void setSystemName() void setSystemName()
{ {
Oam oam;
//setup System Name //setup System Name
try { try {
systemName = sysConfig->getConfig(SystemSection, "SystemName"); systemName = sysConfig->getConfig(SystemSection, "SystemName");
@ -4881,7 +4850,6 @@ void setSystemName()
try { try {
sysConfig->setConfig(SystemSection, "SystemName", systemName); sysConfig->setConfig(SystemSection, "SystemName", systemName);
oam.changeMyCnf( "server_audit_syslog_info", systemName );
} }
catch(...) catch(...)
{ {

View File

@ -4835,6 +4835,11 @@ int ProcessMonitor::changeMyCnf(std::string type)
} }
} }
pos = buf.find("slave-skip-errors=all",0);
if ( pos != string::npos ) {
buf = "# slave-skip-errors=all";
}
//output to temp file //output to temp file
lines.push_back(buf); lines.push_back(buf);
} }
@ -5266,8 +5271,6 @@ int ProcessMonitor::runMasterDist(std::string& password, std::string& slaveModul
string cmd = startup::StartUp::installDir() + "/bin/rsync.sh " + ipAddr + " " + password + " " + startup::StartUp::installDir() + " 1 > /tmp/master-dist_" + slaveModule + ".log"; string cmd = startup::StartUp::installDir() + "/bin/rsync.sh " + ipAddr + " " + password + " " + startup::StartUp::installDir() + " 1 > /tmp/master-dist_" + slaveModule + ".log";
system(cmd.c_str()); system(cmd.c_str());
log.writeLog(__LINE__, "cmd = " + cmd, LOG_TYPE_DEBUG);
string logFile = "/tmp/master-dist_" + slaveModule + ".log"; string logFile = "/tmp/master-dist_" + slaveModule + ".log";
if (!oam.checkLogStatus(logFile, "FAILED")) if (!oam.checkLogStatus(logFile, "FAILED"))
@ -5500,47 +5503,15 @@ bool ProcessMonitor::amazonVolumeCheck(int dbrootID)
if ( status == "attached" ) { if ( status == "attached" ) {
string cmd; string cmd;
if ( rootUser) if ( rootUser)
cmd = "mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o noatime,nodiratime,noauto > /tmp/um_mount.log"; cmd = "mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o defaults > /tmp/um_mount.log";
else else
cmd = "sudo mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o noatime,nodiratime,noauto,user > /tmp/um_mount.log"; cmd = "sudo mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o defaults > /tmp/um_mount.log";
system(cmd.c_str()); system(cmd.c_str());
log.writeLog(__LINE__, "mount cmd: " + cmd, LOG_TYPE_DEBUG); log.writeLog(__LINE__, "mount cmd: " + cmd, LOG_TYPE_DEBUG);
if ( rootUser) cmd = "chown mysql:mysql -R " + startup::StartUp::installDir() + "/mysql/db";
cmd = "chown -R mysql:mysql " + startup::StartUp::installDir() + "/mysql/db";
else
cmd = "sudo chown -R " + USER + ":" + USER + " " + startup::StartUp::installDir() + "/mysql/db";
system(cmd.c_str()); system(cmd.c_str());
log.writeLog(__LINE__, "chown cmd: " + cmd, LOG_TYPE_DEBUG);
//check for setup files in mysq/db, if not, create them for a new install
string file = startup::StartUp::installDir() + "/mysql/db/mysql";
ifstream new_file (file.c_str());
if (!new_file) {
string cmd;
cmd = startup::StartUp::installDir() + "/bin/post-mysqld-install --installdir=" + startup::StartUp::installDir() + " > /tmp/post-mysqld-install.log 2>&1";
log.writeLog(__LINE__, "cmd: " + cmd, LOG_TYPE_DEBUG);
int rtnCode = system(cmd.c_str());
if (WEXITSTATUS(rtnCode) != 0) {
log.writeLog(__LINE__, "amazonVolumeCheck function failed, post-mysqld-install error" , LOG_TYPE_ERROR);
return false;
}
else
log.writeLog(__LINE__, "amazonVolumeCheck function, post-mysqld-install passed" , LOG_TYPE_DEBUG);
cmd = startup::StartUp::installDir() + "/bin/post-mysql-install --installdir=" + startup::StartUp::installDir() + " > /tmp/post-mysql-install.log";;
log.writeLog(__LINE__, "cmd: " + cmd, LOG_TYPE_DEBUG);
rtnCode = system(cmd.c_str());
if (WEXITSTATUS(rtnCode) != 0) {
log.writeLog(__LINE__, "amazonVolumeCheck function failed, post-mysql-install error" , LOG_TYPE_ERROR);
return false;
}
else
log.writeLog(__LINE__, "amazonVolumeCheck function, post-mysql-install passed" , LOG_TYPE_DEBUG);
}
log.writeLog(__LINE__, "amazonVolumeCheck function successfully completed, volume attached: " + volumeName, LOG_TYPE_DEBUG); log.writeLog(__LINE__, "amazonVolumeCheck function successfully completed, volume attached: " + volumeName, LOG_TYPE_DEBUG);
return true; return true;
@ -5565,49 +5536,12 @@ bool ProcessMonitor::amazonVolumeCheck(int dbrootID)
{} {}
if (oam.attachEC2Volume(volumeName, deviceName, instanceName)) { if (oam.attachEC2Volume(volumeName, deviceName, instanceName)) {
string cmd; string cmd = "mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o defaults > /dev/null";
if ( rootUser)
cmd = "mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o noatime,nodiratime,noauto > /tmp/um_mount.log";
else
cmd = "sudo mount " + deviceName + " " + startup::StartUp::installDir() + "/mysql/db -t ext2 -o noatime,nodiratime,noauto,user > /tmp/um_mount.log";
system(cmd.c_str()); system(cmd.c_str());
log.writeLog(__LINE__, "mount cmd: " + cmd, LOG_TYPE_DEBUG); log.writeLog(__LINE__, "mount cmd: " + cmd, LOG_TYPE_DEBUG);
if ( rootUser) cmd = "chown mysql:mysql -R " + startup::StartUp::installDir() + "/mysql/db";
cmd = "chown -R mysql:mysql " + startup::StartUp::installDir() + "/mysql/db";
else
cmd = "sudo chown -R " + USER + ":" + USER + " " + startup::StartUp::installDir() + "/mysql/db";
system(cmd.c_str()); system(cmd.c_str());
log.writeLog(__LINE__, "chown cmd: " + cmd, LOG_TYPE_DEBUG);
//check for setup files in mysq/db, if not, create them for a new install
string file = startup::StartUp::installDir() + "/mysql/db/mysql";
ifstream new_file (file.c_str());
if (!new_file) {
string cmd;
cmd = startup::StartUp::installDir() + "/bin/post-mysqld-install --installdir=" + startup::StartUp::installDir() + " > /tmp/post-mysqld-install.log 2>&1";
log.writeLog(__LINE__, "cmd: " + cmd, LOG_TYPE_DEBUG);
int rtnCode = system(cmd.c_str());
if (WEXITSTATUS(rtnCode) != 0) {
log.writeLog(__LINE__, "amazonVolumeCheck function failed, post-mysqld-install error" , LOG_TYPE_ERROR);
return false;
}
else
log.writeLog(__LINE__, "amazonVolumeCheck function, post-mysqld-install passed" , LOG_TYPE_DEBUG);
cmd = startup::StartUp::installDir() + "/bin/post-mysql-install --installdir=" + startup::StartUp::installDir() + " > /tmp/post-mysql-install.log";;
log.writeLog(__LINE__, "cmd: " + cmd, LOG_TYPE_DEBUG);
rtnCode = system(cmd.c_str());
if (WEXITSTATUS(rtnCode) != 0) {
log.writeLog(__LINE__, "amazonVolumeCheck function failed, post-mysql-install error" , LOG_TYPE_ERROR);
return false;
}
else
log.writeLog(__LINE__, "amazonVolumeCheck function, post-mysql-install passed" , LOG_TYPE_DEBUG);
}
return true; return true;
} }

View File

@ -55,7 +55,7 @@ int64_t Func_div::getIntVal(rowgroup::Row& row,
if (int_val2 == 0) if (int_val2 == 0)
{ {
isNull = true; isNull = true;
return NULL; return 0;
} }
int64_t int_val1 = (int64_t)(val1 > 0 ? val1 + 0.5 : val1 - 0.5); int64_t int_val1 = (int64_t)(val1 > 0 ? val1 + 0.5 : val1 - 0.5);
// MCOL-176 If abs(int_val2) is small enough (like -1), then, this may cause overflow. // MCOL-176 If abs(int_val2) is small enough (like -1), then, this may cause overflow.
@ -78,7 +78,7 @@ uint64_t Func_div::getUintVal(rowgroup::Row& row,
if (val2 == 0) if (val2 == 0)
{ {
isNull = true; isNull = true;
return NULL; return 0;
} }
return val1 / val2; return val1 / val2;
} }

View File

@ -27,7 +27,7 @@
1008 ERR_CREATE_DATATYPE_NOT_SUPPORT The syntax or the data type(s) is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types. 1008 ERR_CREATE_DATATYPE_NOT_SUPPORT The syntax or the data type(s) is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.
1010 ERR_AGGREGATE_TYPE_NOT_SUPPORT '%1%' for column type '%2%' isn't supported. 1010 ERR_AGGREGATE_TYPE_NOT_SUPPORT '%1%' for column type '%2%' isn't supported.
1011 ERR_DML_VIEW %1% on VIEW is currently not supported. 1011 ERR_DML_VIEW %1% on VIEW is currently not supported.
#1012 ERR_UPDATE_NOT_SUPPORT_FEATURE This version of Columstore supports update of only one table at a time. 1012 ERR_UPDATE_NOT_SUPPORT_FEATURE This version of Columnstore supports update of only one table at a time.
1014 ERR_ROLLUP_NOT_SUPPORT Rollup is currently not supported. 1014 ERR_ROLLUP_NOT_SUPPORT Rollup is currently not supported.
1015 ERR_OUTER_JOIN_SUBSELECT Subquery on OUTER JOIN ON clause is currently not supported. 1015 ERR_OUTER_JOIN_SUBSELECT Subquery on OUTER JOIN ON clause is currently not supported.
1016 ERR_PARTITION_BY_RANGE The column type %1% is currently not supported in %2% function. 1016 ERR_PARTITION_BY_RANGE The column type %1% is currently not supported in %2% function.

View File

@ -8,8 +8,6 @@ set(querystats_LIB_SRCS querystats.cpp)
add_library(querystats SHARED ${querystats_LIB_SRCS}) add_library(querystats SHARED ${querystats_LIB_SRCS})
target_link_libraries(querystats -L${SERVER_BUILD_INCLUDE_DIR}/../libmysql/ libmysqlclient_r.so)
set_target_properties(querystats PROPERTIES VERSION 1.0.0 SOVERSION 1) set_target_properties(querystats PROPERTIES VERSION 1.0.0 SOVERSION 1)
install(TARGETS querystats DESTINATION ${ENGINE_LIBDIR} COMPONENT libs) install(TARGETS querystats DESTINATION ${ENGINE_LIBDIR} COMPONENT libs)

View File

@ -121,6 +121,11 @@ void WF_lead_lag<T>::parseParms(const std::vector<execplan::SRCP>& parms)
{ {
// lead | lag // lead | lag
fLead = 1; fLead = 1;
fRespectNulls = true;
fDefNull = false;
fDefault = (T)0;
fOffsetNull = false;
fOffset = 0;
if (fFunctionId == WF__LAG) if (fFunctionId == WF__LAG)
fLead = -1; fLead = -1;

View File

@ -32,8 +32,6 @@ set(brm_LIB_SRCS
add_library(brm SHARED ${brm_LIB_SRCS}) add_library(brm SHARED ${brm_LIB_SRCS})
target_link_libraries(brm ${NETSNMP_LIBRARIES})
set_target_properties(brm PROPERTIES VERSION 1.0.0 SOVERSION 1) set_target_properties(brm PROPERTIES VERSION 1.0.0 SOVERSION 1)
install(TARGETS brm DESTINATION ${ENGINE_LIBDIR} COMPONENT libs) install(TARGETS brm DESTINATION ${ENGINE_LIBDIR} COMPONENT libs)
@ -45,7 +43,7 @@ set(controllernode_SRCS masternode.cpp masterdbrmnode.cpp)
add_executable(controllernode ${controllernode_SRCS}) add_executable(controllernode ${controllernode_SRCS})
target_link_libraries(controllernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} ${NETSNMP_LIBRARIES}) target_link_libraries(controllernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} )
install(TARGETS controllernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform) install(TARGETS controllernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
@ -56,7 +54,7 @@ set(workernode_SRCS slavenode.cpp)
add_executable(workernode ${workernode_SRCS}) add_executable(workernode ${workernode_SRCS})
target_link_libraries(workernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} ${NETSNMP_LIBRARIES}) target_link_libraries(workernode ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS})
install(TARGETS workernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform) install(TARGETS workernode DESTINATION ${ENGINE_BINDIR} COMPONENT platform)
@ -67,7 +65,7 @@ set(dbrmctl_SRCS dbrmctl.cpp)
add_executable(dbrmctl ${dbrmctl_SRCS}) add_executable(dbrmctl ${dbrmctl_SRCS})
target_link_libraries(dbrmctl ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS} ${NETSNMP_LIBRARIES}) target_link_libraries(dbrmctl ${ENGINE_LDFLAGS} ${ENGINE_OAM_LIBS} ${ENGINE_EXEC_LIBS})
install(TARGETS dbrmctl DESTINATION ${ENGINE_BINDIR} COMPONENT platform) install(TARGETS dbrmctl DESTINATION ${ENGINE_BINDIR} COMPONENT platform)

View File

@ -501,7 +501,7 @@ void RedistributeControlThread::displayPlan()
if (!fControl->fPlanFilePtr) if (!fControl->fPlanFilePtr)
{ {
ostringstream oss; ostringstream oss;
oss << "No data is scheduled to be moved" << endl; oss << "No data is schefuled to be moved" << endl;
fControl->logMessage(oss.str()); fControl->logMessage(oss.str());
return; return;
} }