Skip to content
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 26 additions & 28 deletions hybridse/src/node/sql_node.cc
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
*/

#include "node/sql_node.h"

#include <absl/strings/str_cat.h>

#include <numeric>
Expand All @@ -37,7 +38,7 @@ using common::kTypeError;
static const std::unordered_map<std::string, DataType const> type_map = {
{"bool", kBool}, {"in1", kBool}, {"i16", kInt16}, {"int16", kInt16}, {"smallint", kInt16},
{"i32", kInt32}, {"int32", kInt32}, {"int", kInt32}, {"integer", kInt32}, {"i64", kInt64},
{"int64", kInt64}, {"bigint", kInt64}, {"string", kVarchar}, {"varchar", kVarchar}, {"float32", kFloat},
{"int64", kInt64}, {"bigint", kInt64}, {"string", kVarchar}, {"varchar", kVarchar}, {"float32", kFloat},
{"float", kFloat}, {"double", kDouble}, {"float64", kDouble}, {"timestamp", kTimestamp}, {"date", kDate},
};

Expand Down Expand Up @@ -170,8 +171,8 @@ void PrintValue(std::ostream &output, const std::string &org_tab, const std::vec
output << org_tab << SPACE_ST << item_name << ": " << ss.str();
}

void PrintValue(std::ostream &output, const std::string &org_tab, const OptionsMap &value,
const std::string &item_name, bool last_child) {
void PrintValue(std::ostream &output, const std::string &org_tab, const OptionsMap &value, const std::string &item_name,
bool last_child) {
output << org_tab << SPACE_ST << item_name << ":";
if (value.empty()) {
output << " <nil>";
Expand Down Expand Up @@ -264,12 +265,10 @@ bool ParameterExpr::Equals(const ExprNode *node) const {
if (nullptr == node || expr_type_ != node->expr_type_) {
return false;
}
const ParameterExpr *that = dynamic_cast<const ParameterExpr *>(node);
const auto *that = dynamic_cast<const ParameterExpr *>(node);
return this->position_ == that->position_;
}
const std::string ParameterExpr::GetExprString() const {
return "?" + std::to_string(position_);
}
const std::string ParameterExpr::GetExprString() const { return "?" + std::to_string(position_); }
void ConstNode::Print(std::ostream &output, const std::string &org_tab) const {
ExprNode::Print(output, org_tab);
output << "\n";
Expand All @@ -281,39 +280,40 @@ void ConstNode::Print(std::ostream &output, const std::string &org_tab) const {

const std::string ConstNode::GetExprString() const {
switch (data_type_) {
case hybridse::node::kBool:
return GetBool() ? "true" : "false";
case hybridse::node::kInt16:
return std::to_string(val_.vsmallint);
case hybridse::node::kInt32:
return std::to_string(val_.vint);
case hybridse::node::kInt64:
return std::to_string(val_.vlong);
case hybridse::node::kVarchar:
return val_.vstr;
case hybridse::node::kFloat:
return std::to_string(val_.vfloat);
case hybridse::node::kDouble:
return std::to_string(val_.vdouble);
case hybridse::node::kDay:
return std::to_string(val_.vlong).append("d");
return std::to_string(val_.vlong);
case hybridse::node::kVarchar:
return val_.vstr;
case hybridse::node::kDate:
return "Date(" + std::to_string(val_.vlong) + ")";
case hybridse::node::kTimestamp:
return "Timestamp(" + std::to_string(val_.vlong) + ")";
case hybridse::node::kHour:
return std::to_string(val_.vlong).append("h");
case hybridse::node::kMinute:
return std::to_string(val_.vlong).append("m");
case hybridse::node::kSecond:
return std::to_string(val_.vlong).append("s");
case hybridse::node::kDate:
return "Date(" + std::to_string(val_.vlong) + ")";
case hybridse::node::kTimestamp:
return "Timestamp(" + std::to_string(val_.vlong) + ")";
case hybridse::node::kNull:
return "null";
break;
case hybridse::node::kDay:
return std::to_string(val_.vlong).append("d");
case hybridse::node::kVoid:
return "void";
case hybridse::node::kNull:
return "null";
case hybridse::node::kPlaceholder:
return "?";
default:
return "unknow";
return "unknown";
}
}
bool ConstNode::Equals(const ExprNode *node) const {
Expand All @@ -323,7 +323,7 @@ bool ConstNode::Equals(const ExprNode *node) const {
if (nullptr == node || expr_type_ != node->expr_type_) {
return false;
}
const ConstNode *that = dynamic_cast<const ConstNode *>(node);
const auto *that = dynamic_cast<const ConstNode *>(node);
return this->data_type_ == that->data_type_ && GetExprString() == that->GetExprString() && ExprNode::Equals(node);
}

Expand Down Expand Up @@ -1120,7 +1120,7 @@ void ColumnOfExpression(const ExprNode *node_ptr, std::vector<const node::ExprNo
}
}
// Check if given expression is or based on an aggregation expression.
bool IsAggregationExpression(const udf::UdfLibrary* lib, const ExprNode* node_ptr) {
bool IsAggregationExpression(const udf::UdfLibrary *lib, const ExprNode *node_ptr) {
if (kExprCall == node_ptr->GetExprType()) {
const CallExprNode *func_node_ptr = dynamic_cast<const CallExprNode *>(node_ptr);
if (lib->IsUdaf(func_node_ptr->GetFnDef()->GetName(), func_node_ptr->GetChildNum())) {
Expand All @@ -1134,7 +1134,7 @@ bool IsAggregationExpression(const udf::UdfLibrary* lib, const ExprNode* node_pt
}
return false;
}
bool WindowOfExpression(const std::map<std::string, const WindowDefNode *>& windows, ExprNode *node_ptr,
bool WindowOfExpression(const std::map<std::string, const WindowDefNode *> &windows, ExprNode *node_ptr,
const WindowDefNode **output) {
// try to resolved window ptr from expression like: call(args...) over
// window
Expand Down Expand Up @@ -1330,7 +1330,7 @@ void ExplainNode::Print(std::ostream &output, const std::string &org_tab) const
PrintSqlNode(output, tab, query_, "query", true);
}

void DeployNode::Print(std::ostream& output, const std::string& org_tab) const {
void DeployNode::Print(std::ostream &output, const std::string &org_tab) const {
SqlNode::Print(output, org_tab);

const std::string tab = org_tab + INDENT + SPACE_ED;
Expand Down Expand Up @@ -1867,7 +1867,7 @@ bool InExpr::Equals(const ExprNode *node) const {
if (!ExprNode::Equals(node)) {
return false;
}
const InExpr* in_expr = dynamic_cast<const InExpr*>(node);
const InExpr *in_expr = dynamic_cast<const InExpr *>(node);
return in_expr != nullptr && IsNot() == in_expr->IsNot();
}

Expand Down Expand Up @@ -2292,9 +2292,7 @@ std::string DeleteTargetString(DeleteTarget target) {
return "unknown";
}

std::string DeleteNode::GetTargetString() const {
return DeleteTargetString(target_);
}
std::string DeleteNode::GetTargetString() const { return DeleteTargetString(target_); }

Status StringToDataType(const std::string identifier, DataType *type) {
CHECK_TRUE(nullptr != type, common::kNullPointer, "Can't convert type string, output datatype is nullptr")
Expand Down
32 changes: 27 additions & 5 deletions src/cmd/sql_cmd.h
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,8 @@ const std::string VERSION = std::to_string(OPENMLDB_VERSION_MAJOR) + "." + // N
std::string db = ""; // NOLINT
::openmldb::sdk::DBSDK* cs = nullptr;
::openmldb::sdk::SQLClusterRouter* sr = nullptr;
using VariableMap = std::map<std::string, std::string>;
VariableMap session_variables = {VariableMap::value_type("execute_mode", "online")};

void SaveResultSet(::hybridse::sdk::ResultSet* result_set, const std::string& file_path,
const std::shared_ptr<hybridse::node::OptionsMap>& options_map, ::openmldb::base::Status* status) {
Expand Down Expand Up @@ -607,6 +609,18 @@ void HandleCmd(const hybridse::node::CmdPlanNode* cmd_node) {
}
break;
}
case hybridse::node::kCmdShowSessionVariables: {
std::vector<std::vector<std::string>> items;
for (auto& pair : session_variables) {
items.push_back({pair.first, pair.second});
}
PrintItemTable(std::cout, {"Variable_name", "Value"}, items);
break;
}
case hybridse::node::kCmdShowGlobalVariables: {
std::cout << "ERROR: global variable is unsupported now" << std::endl;
break;
}
case hybridse::node::kCmdExit: {
exit(0);
}
Expand Down Expand Up @@ -829,9 +843,18 @@ base::Status HandleDeploy(const hybridse::node::DeployPlanNode* deploy_node) {
return ns->CreateProcedure(sp_info, FLAGS_request_timeout_ms);
}

void SetVariable(const std::string& key, const hybridse::node::ConstNode* value) {
auto lower_key = boost::to_lower_copy(key);
printf("ERROR: The variable key %s is not supported\n", key.c_str());
void HandleSet(hybridse::node::SetPlanNode* node) {
if (node->Scope() == hybridse::node::VariableScope::kGlobalSystemVariable) {
printf("ERROR: global system variable is unsupported\n");
return;
}
auto it = session_variables.find(node->Key());
if (it == session_variables.end()) {
printf("ERROR: no session variable %s\n", node->Key().c_str());
return;
}
session_variables[node->Key()] = node->Value()->GetExprString();
printf("SUCCEED: OK\n");
}

template <typename T>
Expand Down Expand Up @@ -1150,8 +1173,7 @@ void HandleSQL(const std::string& sql) {
return;
}
case hybridse::node::kPlanTypeSet: {
auto* set_node = dynamic_cast<hybridse::node::SetPlanNode*>(node);
SetVariable(set_node->Key(), set_node->Value());
HandleSet(dynamic_cast<hybridse::node::SetPlanNode*>(node));
return;
}
case hybridse::node::kPlanTypeLoadData: {
Expand Down
10 changes: 5 additions & 5 deletions src/sdk/sql_cluster_router.cc
Original file line number Diff line number Diff line change
Expand Up @@ -678,7 +678,7 @@ std::shared_ptr<::openmldb::client::TabletClient> SQLClusterRouter::GetTabletCli
auto column = parameter_schema_raw.Add();
hybridse::type::Type hybridse_type;
if (!openmldb::schema::SchemaAdapter::ConvertType(parameter->GetSchema()->GetColumnType(i),
&hybridse_type)) {
&hybridse_type)) {
LOG(WARNING) << "Invalid parameter type ";
return {};
}
Expand Down Expand Up @@ -1177,7 +1177,7 @@ std::shared_ptr<hybridse::sdk::ProcedureInfo> SQLClusterRouter::ShowProcedure(co
base::Status SQLClusterRouter::HandleSQLCmd(const hybridse::node::CmdPlanNode* cmd_node, const std::string& db,
std::shared_ptr<::openmldb::client::NsClient> ns_ptr) {
if (cmd_node == nullptr || ns_ptr == nullptr) {
return base::Status(base::ReturnCode::kSQLCmdRunError, "null pointer");
return {base::ReturnCode::kSQLCmdRunError, "null pointer"};
}
bool ret = true;
std::string msg;
Expand All @@ -1199,11 +1199,11 @@ base::Status SQLClusterRouter::HandleSQLCmd(const hybridse::node::CmdPlanNode* c
break;
}
default: {
return base::Status(base::ReturnCode::kSQLCmdRunError, "fail to execute script with unsupported type");
return {base::ReturnCode::kSQLCmdRunError, "fail to execute script with unsupported type"};
}
}
if (!ret) {
return base::Status(base::ReturnCode::kSQLCmdRunError, msg);
return {base::ReturnCode::kSQLCmdRunError, msg};
}
return {};
}
Expand Down Expand Up @@ -1465,7 +1465,7 @@ std::vector<std::string> SQLClusterRouter::GetTableNames(const std::string& db)

::openmldb::nameserver::TableInfo SQLClusterRouter::GetTableInfo(const std::string& db, const std::string& table) {
auto table_infos = cluster_sdk_->GetTableInfo(db, table);
if(!table_infos){
if (!table_infos) {
return {};
}
return *table_infos;
Expand Down