18#include "sql/operator/string_list_physical_operator.h"
19#include "event/sql_event.h"
20#include "event/session_event.h"
21#include "sql/executor/sql_result.h"
22#include "session/session.h"
23#include "sql/stmt/set_variable_stmt.h"
38 Session *session = sql_event->session_event()->session();
41 const char *var_name = stmt->var_name();
42 const Value &var_value = stmt->var_value();
43 if (strcasecmp(var_name,
"sql_debug") == 0) {
44 bool bool_value =
false;
45 rc = var_value_to_boolean(var_value, bool_value);
46 if (rc != RC::SUCCESS) {
50 session->set_sql_debug(bool_value);
51 LOG_TRACE(
"set sql_debug to %d", bool_value);
53 rc = RC::VARIABLE_NOT_EXISTS;
60 RC var_value_to_boolean(
const Value &var_value,
bool &bool_value)
const
64 if (var_value.attr_type() == AttrType::BOOLEANS) {
65 bool_value = var_value.get_boolean();
66 }
else if (var_value.attr_type() == AttrType::INTS) {
67 bool_value = var_value.
get_int() != 0;
68 }
else if (var_value.attr_type() == AttrType::FLOATS) {
69 bool_value = var_value.get_float() != 0.0;
70 }
else if (var_value.attr_type() == AttrType::CHARS) {
72 std::string true_strings[] = {
80 std::string false_strings[] = {
88 for (
size_t i = 0; i <
sizeof(true_strings) /
sizeof(true_strings[0]); i++) {
89 if (strcasecmp(var_value.get_string().c_str(), true_strings[i].c_str()) == 0) {
95 for (
size_t i = 0; i <
sizeof(false_strings) /
sizeof(false_strings[0]); i++) {
96 if (strcasecmp(var_value.get_string().c_str(), false_strings[i].c_str()) == 0) {
101 rc = RC::VARIABLE_NOT_VALID;
与SessionEvent类似,也是处理SQL请求的事件,只是用在SQL的不同阶段
Definition: sql_event.h:30
表示会话
Definition: session.h:28
SetVariable语句执行器
Definition: set_variable_executor.h:30
SetVairable 语句,设置变量,当前是会话变量,但是只有会话变量,没有全局变量
Definition: set_variable_stmt.h:27
属性的值
Definition: value.h:40
int get_int() const
Definition: value.cpp:205