You've already forked mariadb-columnstore-engine
mirror of
https://github.com/mariadb-corporation/mariadb-columnstore-engine.git
synced 2025-08-08 14:22:09 +03:00
chore(ci): collect asan ubsan and libc++ build with mtr and regression status ignored (#3672)
* MSan added with fixes for libc++ * libc++ sepatare build * add libc++ to ci * libstdc++ in CI * libcpp and msan to external projects * std::sqrt * awful_hack(ci): install whole llvm instead of libc++ in terrible way for test containers * Adding ddeb packages for teststages and repos * libc++ more for test container * save some money on debug * colored coredumps * revert ci * chore(ci): collect asan ubsan and libc++ build with mtr and regression status ignored
This commit is contained in:
@@ -24,12 +24,11 @@
|
||||
/** @file */
|
||||
/** class FromSubSelect definition */
|
||||
|
||||
//#define NDEBUG
|
||||
// #define NDEBUG
|
||||
#define PREFER_MY_CONFIG_H
|
||||
#include <my_config.h>
|
||||
#include <cassert>
|
||||
#include <map>
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
|
||||
@@ -39,7 +38,7 @@ using namespace std;
|
||||
#include "constantcolumn.h"
|
||||
#include "simplecolumn.h"
|
||||
using namespace execplan;
|
||||
|
||||
using namespace std;
|
||||
#include "ha_subquery.h"
|
||||
|
||||
namespace cal_impl_if
|
||||
|
@@ -27,10 +27,9 @@
|
||||
#define PREFER_MY_CONFIG_H
|
||||
#include <my_config.h>
|
||||
#include <stdint.h>
|
||||
//#define NDEBUG
|
||||
// #define NDEBUG
|
||||
#include <cassert>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
|
||||
@@ -50,6 +49,8 @@ using namespace logging;
|
||||
|
||||
#include "ha_subquery.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
extern void parse_item(Item* item, vector<Item_field*>& field_vec, bool& hasNonSupportItem,
|
||||
|
@@ -585,7 +585,7 @@ extern "C"
|
||||
stmt->serialize(bytestream);
|
||||
ByteStream::byte b = 0;
|
||||
THD* thd = current_thd;
|
||||
string emsg;
|
||||
std::string emsg;
|
||||
mq.write(bytestream);
|
||||
|
||||
try
|
||||
@@ -606,7 +606,7 @@ extern "C"
|
||||
bytestream >> emsg;
|
||||
}
|
||||
}
|
||||
catch (runtime_error&)
|
||||
catch (std::runtime_error&)
|
||||
{
|
||||
thd->get_stmt_da()->set_overwrite_status(true);
|
||||
thd->raise_error_printf(ER_INTERNAL_ERROR, "Lost connection to DDLProc");
|
||||
|
@@ -25,16 +25,14 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <tr1/unordered_map>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cerrno>
|
||||
#include <cstring>
|
||||
#include <regex>
|
||||
#include <tr1/unordered_set>
|
||||
#include <unordered.h>
|
||||
#include <utility>
|
||||
#include <cassert>
|
||||
using namespace std;
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/tokenizer.hpp>
|
||||
@@ -81,6 +79,7 @@ using namespace execplan;
|
||||
|
||||
#include "resourcemanager.h"
|
||||
using namespace joblist;
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
@@ -761,7 +760,7 @@ int ProcessDDLStatement(string& ddlStatement, string& schema, const string& /*ta
|
||||
#ifdef MCS_DEBUG
|
||||
cout << "ProcessDDLStatement: " << schema << "." << table << ":" << ddlStatement << endl;
|
||||
#endif
|
||||
|
||||
|
||||
parser.setDefaultSchema(schema);
|
||||
parser.setDefaultCharset(default_table_charset);
|
||||
int rc = 0;
|
||||
@@ -2203,34 +2202,46 @@ int ProcessDDLStatement(string& ddlStatement, string& schema, const string& /*ta
|
||||
|
||||
if (ddlStatement.find("AUTO_INCREMENT") != string::npos)
|
||||
{
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED, "The syntax auto_increment is not supported in Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.");
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED,
|
||||
"The syntax auto_increment is not supported in Columnstore. Please check the "
|
||||
"Columnstore syntax guide for supported syntax or data types.");
|
||||
}
|
||||
else if(ddlStatement.find("RENAME COLUMN") != string::npos)
|
||||
else if (ddlStatement.find("RENAME COLUMN") != string::npos)
|
||||
{
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED, "The syntax rename column is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.");
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED,
|
||||
"The syntax rename column is not supported by Columnstore. Please check the "
|
||||
"Columnstore syntax guide for supported syntax or data types.");
|
||||
}
|
||||
else if(ddlStatement.find("MAX_ROWS") != string::npos || ddlStatement.find("MIN_ROWS") != string::npos)
|
||||
else if (ddlStatement.find("MAX_ROWS") != string::npos || ddlStatement.find("MIN_ROWS") != string::npos)
|
||||
{
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED, "The syntax min_rows/max_rows is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.");
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED,
|
||||
"The syntax min_rows/max_rows is not supported by Columnstore. Please check "
|
||||
"the Columnstore syntax guide for supported syntax or data types.");
|
||||
}
|
||||
else if(ddlStatement.find("REPLACE TABLE") != string::npos)
|
||||
else if (ddlStatement.find("REPLACE TABLE") != string::npos)
|
||||
{
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED, "The syntax replace table is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.");
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED,
|
||||
"The syntax replace table is not supported by Columnstore. Please check the "
|
||||
"Columnstore syntax guide for supported syntax or data types.");
|
||||
}
|
||||
else if(ddlStatement.find("DROP COLUMN IF EXISTS") != string::npos)
|
||||
else if (ddlStatement.find("DROP COLUMN IF EXISTS") != string::npos)
|
||||
{
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED, "The syntax drop column if exists is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.");
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED,
|
||||
"The syntax drop column if exists is not supported by Columnstore. Please "
|
||||
"check the Columnstore syntax guide for supported syntax or data types.");
|
||||
}
|
||||
else
|
||||
{
|
||||
//@Bug 1888,1885. update error message
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED, "The syntax or the data type(s) is not supported by Columnstore. Please check the Columnstore syntax guide for supported syntax or data types.");
|
||||
thd->raise_error_printf(ER_CHECK_NOT_IMPLEMENTED,
|
||||
"The syntax or the data type(s) is not supported by Columnstore. Please check "
|
||||
"the Columnstore syntax guide for supported syntax or data types.");
|
||||
}
|
||||
|
||||
ci->alterTableState = cal_connection_info::NOT_ALTER;
|
||||
ci->isAlter = false;
|
||||
}
|
||||
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@@ -25,13 +25,11 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <tr1/unordered_map>
|
||||
#include <tr1/unordered_set>
|
||||
#include <unordered.h>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cerrno>
|
||||
#include <cstring>
|
||||
using namespace std;
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
using namespace boost;
|
||||
@@ -75,6 +73,8 @@ using namespace joblist;
|
||||
|
||||
#include "nullstring.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
#define BATCH_INSERT_GROUP_ROWS_FOR_CACHE 100000
|
||||
|
@@ -21,8 +21,7 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <tr1/unordered_map>
|
||||
#include <tr1/unordered_set>
|
||||
#include <unordered.h>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cerrno>
|
||||
@@ -36,8 +35,6 @@
|
||||
|
||||
#include <string.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/algorithm/string/case_conv.hpp>
|
||||
@@ -99,6 +96,8 @@ using namespace funcexp;
|
||||
|
||||
#include "ha_view.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
// This is taken from Item_cond::fix_fields in sql/item_cmpfunc.cc.
|
||||
|
@@ -26,6 +26,8 @@
|
||||
#include "rowcolumn.h"
|
||||
#include "simplefilter.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
// In certain cases, gp_walk is called recursively. When done so,
|
||||
@@ -121,15 +123,15 @@ void gp_walk(const Item* item, void* arg)
|
||||
if (!scp)
|
||||
break;
|
||||
|
||||
string aliasTableName(scp->tableAlias());
|
||||
std::string aliasTableName(scp->tableAlias());
|
||||
scp->tableAlias(aliasTableName);
|
||||
gwip->rcWorkStack.push(scp->clone());
|
||||
boost::shared_ptr<execplan::SimpleColumn> scsp(scp);
|
||||
gwip->scsp = scsp;
|
||||
|
||||
gwip->funcName.clear();
|
||||
gwip->columnMap.insert(
|
||||
execplan::CalpontSelectExecutionPlan::ColumnMap::value_type(string(ifp->field_name.str), scsp));
|
||||
gwip->columnMap.insert(execplan::CalpontSelectExecutionPlan::ColumnMap::value_type(
|
||||
std::string(ifp->field_name.str), scsp));
|
||||
|
||||
//@bug4636 take where clause column as dummy projection column, but only on local column.
|
||||
// varbinary aggregate is not supported yet, so rule it out
|
||||
@@ -138,7 +140,7 @@ void gp_walk(const Item* item, void* arg)
|
||||
{
|
||||
TABLE_LIST* tmp = (ifp->cached_table ? ifp->cached_table : 0);
|
||||
gwip->tableMap[execplan::make_aliastable(scp->schemaName(), scp->tableName(), scp->tableAlias(),
|
||||
scp->isColumnStore())] = make_pair(1, tmp);
|
||||
scp->isColumnStore())] = std::make_pair(1, tmp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +164,8 @@ void gp_walk(const Item* item, void* arg)
|
||||
if (item->type_handler() == &type_handler_hex_hybrid)
|
||||
{
|
||||
Item_hex_hybrid* hip = static_cast<Item_hex_hybrid*>(const_cast<Item*>(item));
|
||||
gwip->rcWorkStack.push(new execplan::ConstantColumn((int64_t)hip->val_int(), execplan::ConstantColumn::NUM));
|
||||
gwip->rcWorkStack.push(
|
||||
new execplan::ConstantColumn((int64_t)hip->val_int(), execplan::ConstantColumn::NUM));
|
||||
execplan::ConstantColumn* cc = dynamic_cast<execplan::ConstantColumn*>(gwip->rcWorkStack.top());
|
||||
cc->timeZone(gwip->timeZone);
|
||||
break;
|
||||
@@ -175,7 +178,7 @@ void gp_walk(const Item* item, void* arg)
|
||||
String val, *str = isp->val_str(&val);
|
||||
if (str)
|
||||
{
|
||||
string cval;
|
||||
std::string cval;
|
||||
|
||||
if (str->ptr())
|
||||
{
|
||||
@@ -218,7 +221,7 @@ void gp_walk(const Item* item, void* arg)
|
||||
break;
|
||||
}
|
||||
|
||||
ostringstream oss;
|
||||
std::ostringstream oss;
|
||||
oss << "Unhandled Item type(): " << item->type();
|
||||
gwip->parseErrorText = oss.str();
|
||||
gwip->fatalParseError = true;
|
||||
@@ -248,7 +251,7 @@ void gp_walk(const Item* item, void* arg)
|
||||
Item* ncitem = const_cast<Item*>(item);
|
||||
Item_func* ifp = static_cast<Item_func*>(ncitem);
|
||||
|
||||
string funcName = ifp->func_name();
|
||||
std::string funcName = ifp->func_name();
|
||||
|
||||
if (!gwip->condPush)
|
||||
{
|
||||
@@ -323,14 +326,14 @@ void gp_walk(const Item* item, void* arg)
|
||||
}
|
||||
|
||||
// try to evaluate const F&E
|
||||
vector<Item_field*> tmpVec;
|
||||
std::vector<Item_field*> tmpVec;
|
||||
uint16_t parseInfo = 0;
|
||||
parse_item(ifp, tmpVec, gwip->fatalParseError, parseInfo, gwip);
|
||||
|
||||
// table mode takes only one table filter
|
||||
if (gwip->condPush)
|
||||
{
|
||||
set<string> tableSet;
|
||||
std::set<std::string> tableSet;
|
||||
|
||||
for (uint32_t i = 0; i < tmpVec.size(); i++)
|
||||
{
|
||||
@@ -389,7 +392,8 @@ void gp_walk(const Item* item, void* arg)
|
||||
{
|
||||
logging::Message::Args args;
|
||||
args.add(funcName);
|
||||
gwip->parseErrorText = logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_NON_SUPPORTED_FUNCTION, args);
|
||||
gwip->parseErrorText =
|
||||
logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_NON_SUPPORTED_FUNCTION, args);
|
||||
}
|
||||
|
||||
return;
|
||||
@@ -463,14 +467,15 @@ void gp_walk(const Item* item, void* arg)
|
||||
//@bug3495, @bug5865 error out non-supported OR with correlated subquery
|
||||
if (isOr)
|
||||
{
|
||||
vector<Item_field*> fieldVec;
|
||||
std::vector<Item_field*> fieldVec;
|
||||
uint16_t parseInfo = 0;
|
||||
parse_item(it, fieldVec, gwip->fatalParseError, parseInfo, gwip);
|
||||
|
||||
if (parseInfo & CORRELATED)
|
||||
{
|
||||
gwip->fatalParseError = true;
|
||||
gwip->parseErrorText = logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_CORRELATED_SUB_OR);
|
||||
gwip->parseErrorText =
|
||||
logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_CORRELATED_SUB_OR);
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -664,7 +669,8 @@ void gp_walk(const Item* item, void* arg)
|
||||
else if (col->type() == Item::FIELD_ITEM && gwip->clauseType == HAVING)
|
||||
{
|
||||
// ReturnedColumn* rc = buildAggFrmTempField(const_cast<Item*>(item), *gwip);
|
||||
execplan::ReturnedColumn* rc = buildReturnedColumn(const_cast<Item*>(item), *gwip, gwip->fatalParseError);
|
||||
execplan::ReturnedColumn* rc =
|
||||
buildReturnedColumn(const_cast<Item*>(item), *gwip, gwip->fatalParseError);
|
||||
if (rc)
|
||||
gwip->rcWorkStack.push(rc);
|
||||
|
||||
@@ -735,7 +741,8 @@ void gp_walk(const Item* item, void* arg)
|
||||
// temp change clause type because the elements of row column are not walked yet
|
||||
gwip->clauseType = SELECT;
|
||||
for (uint32_t i = 0; i < row->cols(); i++)
|
||||
cols.push_back(execplan::SRCP(buildReturnedColumn(row->element_index(i), *gwip, gwip->fatalParseError)));
|
||||
cols.push_back(
|
||||
execplan::SRCP(buildReturnedColumn(row->element_index(i), *gwip, gwip->fatalParseError)));
|
||||
|
||||
gwip->clauseType = WHERE;
|
||||
rowCol->columnVec(cols);
|
||||
@@ -971,7 +978,8 @@ void parse_item(Item* item, vector<Item_field*>& field_vec, bool& hasNonSupportI
|
||||
gwi->fatalParseError = true;
|
||||
// DRRTUY The questionable error text. I've seen
|
||||
// ERR_CORRELATED_SUB_OR
|
||||
string parseErrorText = logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_NON_SUPPORT_SUB_QUERY_TYPE);
|
||||
string parseErrorText =
|
||||
logging::IDBErrorInfo::instance()->errorMsg(logging::ERR_NON_SUPPORT_SUB_QUERY_TYPE);
|
||||
setError(gwi->thd, ER_CHECK_NOT_IMPLEMENTED, parseErrorText);
|
||||
break;
|
||||
}
|
||||
@@ -1633,4 +1641,4 @@ void debug_walk(const Item* item, void* arg)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
} // namespace cal_impl_if
|
@@ -24,8 +24,8 @@
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <stack>
|
||||
#include <tr1/unordered_map>
|
||||
#include <tr1/unordered_set>
|
||||
#include <unordered.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cerrno>
|
||||
@@ -36,7 +36,6 @@
|
||||
#include <map>
|
||||
#include <limits>
|
||||
#include <wait.h> //wait()
|
||||
using namespace std;
|
||||
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/algorithm/string/case_conv.hpp>
|
||||
@@ -132,6 +131,8 @@ using namespace funcexp;
|
||||
#include "ha_subquery.h"
|
||||
#include "statistics_manager/statistics.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
extern bool nonConstFunc(Item_func* ifp);
|
||||
@@ -176,26 +177,26 @@ const string infinidb_autoswitch_warning =
|
||||
"was switched to standard mode with downgraded performance.";
|
||||
|
||||
// copied from item_timefunc.cc
|
||||
static const string interval_names[] = {"year",
|
||||
"quarter",
|
||||
"month",
|
||||
"week",
|
||||
"day",
|
||||
"hour",
|
||||
"minute",
|
||||
"second",
|
||||
"microsecond",
|
||||
"year_month",
|
||||
"day_hour",
|
||||
"day_minute",
|
||||
"day_second",
|
||||
"hour_minute",
|
||||
"hour_second",
|
||||
"minute_second",
|
||||
"day_microsecond",
|
||||
"hour_microsecond",
|
||||
"minute_microsecond",
|
||||
"second_microsecond"};
|
||||
[[maybe_unused]] static const string interval_names[] = {"year",
|
||||
"quarter",
|
||||
"month",
|
||||
"week",
|
||||
"day",
|
||||
"hour",
|
||||
"minute",
|
||||
"second",
|
||||
"microsecond",
|
||||
"year_month",
|
||||
"day_hour",
|
||||
"day_minute",
|
||||
"day_second",
|
||||
"hour_minute",
|
||||
"hour_second",
|
||||
"minute_second",
|
||||
"day_microsecond",
|
||||
"hour_microsecond",
|
||||
"minute_microsecond",
|
||||
"second_microsecond"};
|
||||
|
||||
// HDFS is never used nowadays, so don't bother
|
||||
bool useHdfs = false; // ResourceManager::instance()->useHdfs();
|
||||
@@ -4108,7 +4109,7 @@ int ha_mcs_impl_pushdown_init(mcs_handler_info* handler_info, TABLE* table, bool
|
||||
boost::shared_ptr<CalpontSystemCatalog> csc = CalpontSystemCatalog::makeCalpontSystemCatalog(sessionID);
|
||||
csc->identity(CalpontSystemCatalog::FE);
|
||||
|
||||
if (!get_fe_conn_info_ptr())
|
||||
if (!get_fe_conn_info_ptr())
|
||||
{
|
||||
set_fe_conn_info_ptr((void*)new cal_connection_info());
|
||||
thd_set_ha_data(thd, mcs_hton, get_fe_conn_info_ptr());
|
||||
|
@@ -21,7 +21,7 @@
|
||||
#include <bitset>
|
||||
#include <string>
|
||||
#include <stdint.h>
|
||||
#include <tr1/unordered_map>
|
||||
#include <unordered.h>
|
||||
#include <iosfwd>
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <stack>
|
||||
|
@@ -29,7 +29,6 @@
|
||||
#include <sstream>
|
||||
// #include <unistd.h>
|
||||
#include <iomanip>
|
||||
using namespace std;
|
||||
|
||||
#include <boost/tokenizer.hpp>
|
||||
|
||||
@@ -65,6 +64,7 @@ using namespace logging;
|
||||
|
||||
#include <boost/algorithm/string/case_conv.hpp>
|
||||
using namespace boost;
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@@ -21,7 +21,8 @@
|
||||
*/
|
||||
|
||||
#include <my_config.h>
|
||||
#include <tr1/unordered_map>
|
||||
#include <unordered.h>
|
||||
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
|
@@ -3,7 +3,6 @@
|
||||
// #include <cmath>
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
|
||||
@@ -24,6 +23,7 @@ using namespace execplan;
|
||||
#include "ha_mcs_impl_if.h"
|
||||
#include "ha_mcs_sysvars.h"
|
||||
using namespace cal_impl_if;
|
||||
using namespace std;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
@@ -24,12 +24,11 @@
|
||||
/** @file */
|
||||
/** class ScalarSub definition */
|
||||
|
||||
//#define NDEBUG
|
||||
// #define NDEBUG
|
||||
#define PREFER_MY_CONFIG_H
|
||||
#include <my_config.h>
|
||||
#include <cassert>
|
||||
#include <vector>
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
|
||||
@@ -49,6 +48,8 @@ using namespace logging;
|
||||
|
||||
#include "ha_subquery.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
ScalarSub::ScalarSub(gp_walk_info& gwip) : WhereSubQuery(gwip), fReturnedColPos(0)
|
||||
|
@@ -23,11 +23,10 @@
|
||||
***********************************************************************/
|
||||
/** class SelectSubQuery definition */
|
||||
|
||||
//#define NDEBUG
|
||||
// #define NDEBUG
|
||||
#define PREFER_MY_CONFIG_H
|
||||
#include <my_config.h>
|
||||
#include <cassert>
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
|
||||
@@ -44,6 +43,7 @@ using namespace execplan;
|
||||
using namespace logging;
|
||||
|
||||
#include "ha_subquery.h"
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
|
@@ -25,7 +25,6 @@
|
||||
#include <my_config.h>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
using namespace std;
|
||||
|
||||
#include "idb_mysql.h"
|
||||
#include "ha_mcs_impl_if.h"
|
||||
@@ -53,6 +52,8 @@ using namespace mcsv1sdk;
|
||||
|
||||
#include "vlarray.h"
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace cal_impl_if
|
||||
{
|
||||
ReturnedColumn* nullOnError(gp_walk_info& gwi)
|
||||
@@ -96,7 +97,8 @@ WF_FRAME frame(Window_frame_bound::Bound_precedence_type bound, Item* offset)
|
||||
}
|
||||
ReturnedColumn* buildBoundExp(WF_Boundary& bound, SRCP& order, gp_walk_info& gwi)
|
||||
{
|
||||
if (get_fe_conn_info_ptr() == NULL) {
|
||||
if (get_fe_conn_info_ptr() == NULL)
|
||||
{
|
||||
set_fe_conn_info_ptr((void*)new cal_connection_info());
|
||||
thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr());
|
||||
}
|
||||
@@ -305,7 +307,8 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
|
||||
// String str;
|
||||
// item->print(&str, QT_INFINIDB_NO_QUOTE);
|
||||
// cout << str.c_ptr() << endl;
|
||||
if (get_fe_conn_info_ptr() == NULL) {
|
||||
if (get_fe_conn_info_ptr() == NULL)
|
||||
{
|
||||
set_fe_conn_info_ptr((void*)new cal_connection_info());
|
||||
thd_set_ha_data(current_thd, mcs_hton, get_fe_conn_info_ptr());
|
||||
}
|
||||
@@ -530,8 +533,8 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
|
||||
return nullOnError(gwi);
|
||||
|
||||
srcp->asc(orderCol->direction == ORDER::ORDER_ASC ? true : false);
|
||||
// srcp->nullsFirst(orderCol->nulls); // nulls 2-default, 1-nulls first,
|
||||
//0-nulls last
|
||||
// srcp->nullsFirst(orderCol->nulls); // nulls 2-default, 1-nulls
|
||||
//first, 0-nulls last
|
||||
srcp->nullsFirst(orderCol->direction == ORDER::ORDER_ASC
|
||||
? 1
|
||||
: 0); // WINDOWS TODO: implement NULLS FIRST/LAST in 10.2 front end
|
||||
@@ -881,7 +884,7 @@ ReturnedColumn* buildWindowFunctionColumn(Item* item, gp_walk_info& gwi, bool& n
|
||||
}
|
||||
#if 0
|
||||
if (item_sum->sum_func() != Item_sum::UDF_SUM_FUNC &&
|
||||
item_sum->sum_func() != Item_sum::SUM_FUNC &&
|
||||
item_sum->sum_func() != Item_sum::SUM_FUNC &&
|
||||
item_sum->sum_func() != Item_sum::SUM_DISTINCT_FUNC &&
|
||||
item_sum->sum_func() != Item_sum::AVG_FUNC &&
|
||||
item_sum->sum_func() != Item_sum::AVG_DISTINCT_FUNC)
|
||||
|
Reference in New Issue
Block a user