From fbd3eade83dad67bafe8f32dbe9b29b227ce9d4c Mon Sep 17 00:00:00 2001 From: Miro Stauder Date: Fri, 7 Jan 2022 17:05:24 +0000 Subject: [PATCH 1/5] add -std=c11 flag --- lib/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/Makefile b/lib/Makefile index b2b0aa046..1f7cf906b 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -117,7 +117,7 @@ else ENABLE_EPOLL=-DENABLE_EPOLL endif -MYCFLAGS=$(IDIRS) $(OPTZ) $(DEBUG) -Wall -DGITVERSION=\"$(GIT_VERSION)\" $(NOJEM) $(WGCOV) $(WASAN) +MYCFLAGS=-std=c11 $(IDIRS) $(OPTZ) $(DEBUG) -Wall -DGITVERSION=\"$(GIT_VERSION)\" $(NOJEM) $(WGCOV) $(WASAN) MYCXXFLAGS=-std=c++11 $(MYCFLAGS) $(PSQLCH) $(ENABLE_EPOLL) default: libproxysql.a From 118e58dd7e285d35c6bc04e924b75583b8d16bac Mon Sep 17 00:00:00 2001 From: Miro Stauder Date: Fri, 7 Jan 2022 20:35:18 +0000 Subject: [PATCH 2/5] rename variable --- lib/c_tokenizer.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/c_tokenizer.c b/lib/c_tokenizer.c index da957d4fd..ab83d5bc2 100644 --- a/lib/c_tokenizer.c +++ b/lib/c_tokenizer.c @@ -742,12 +742,12 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme int str_len = p_r - p_r_t + 1; int collapsed = 0; - for (int i = 0; i < str_len; i++) { - char* const c_p_r_t = ((char*)p_r_t + i); - char* const n_p_r_t = ((char*)p_r_t + i + 1); + for (int j = 0; j < str_len; j++) { + char* const c_p_r_t = ((char*)p_r_t + j); + char* const n_p_r_t = ((char*)p_r_t + j + 1); if (is_digit_char(*c_p_r_t) && is_digit_char(*n_p_r_t)) { - memmove(c_p_r_t, c_p_r_t + 1, str_len - i); + memmove(c_p_r_t, c_p_r_t + 1, str_len - j); collapsed += 1; } } @@ -755,8 +755,8 @@ char *mysql_query_digest_and_first_comment(char *s, int _len, char **first_comme p_r -= collapsed; int new_str_len = p_r - p_r_t + 1; - for (int i = 0; i < new_str_len; i++) { - char* const c_p_r_t = ((char*)p_r_t + i); + for (int j = 0; j < new_str_len; j++) { + char* const c_p_r_t = ((char*)p_r_t + j); if (is_digit_char(*c_p_r_t)) { *c_p_r_t = '?'; } From a7d1dc5b5cedf39502e3f1044ef26cd6c604fc26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sat, 8 Jan 2022 13:57:17 +0100 Subject: [PATCH 3/5] Rename c_tokenizer.c to c_tokenizer.cpp Now all code is in C++ files anf only C++ compiler will be used --- lib/Makefile | 9 ++------- lib/{c_tokenizer.c => c_tokenizer.cpp} | 0 2 files changed, 2 insertions(+), 7 deletions(-) rename lib/{c_tokenizer.c => c_tokenizer.cpp} (100%) diff --git a/lib/Makefile b/lib/Makefile index 1f7cf906b..bb28b7ddf 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -117,24 +117,19 @@ else ENABLE_EPOLL=-DENABLE_EPOLL endif -MYCFLAGS=-std=c11 $(IDIRS) $(OPTZ) $(DEBUG) -Wall -DGITVERSION=\"$(GIT_VERSION)\" $(NOJEM) $(WGCOV) $(WASAN) +MYCFLAGS=$(IDIRS) $(OPTZ) $(DEBUG) -Wall -DGITVERSION=\"$(GIT_VERSION)\" $(NOJEM) $(WGCOV) $(WASAN) MYCXXFLAGS=-std=c++11 $(MYCFLAGS) $(PSQLCH) $(ENABLE_EPOLL) default: libproxysql.a .PHONY: default -_OBJ = c_tokenizer.o -OBJ = $(patsubst %,$(ODIR)/%,$(_OBJ)) -_OBJ_CXX = ProxySQL_GloVars.oo network.oo debug.oo configfile.oo Query_Cache.oo SpookyV2.oo MySQL_Authentication.oo gen_utils.oo sqlite3db.oo mysql_connection.oo MySQL_HostGroups_Manager.oo mysql_data_stream.oo MySQL_Thread.oo MySQL_Session.oo MySQL_Protocol.oo mysql_backend.oo Query_Processor.oo ProxySQL_Admin.oo ProxySQL_Config.oo ProxySQL_Restapi.oo MySQL_Monitor.oo MySQL_Logger.oo thread.oo MySQL_PreparedStatement.oo ProxySQL_Cluster.oo ClickHouse_Authentication.oo ClickHouse_Server.oo ProxySQL_Statistics.oo Chart_bundle_js.oo ProxySQL_HTTP_Server.oo ProxySQL_RESTAPI_Server.oo font-awesome.min.css.oo main-bundle.min.css.oo set_parser.oo MySQL_Variables.oo +_OBJ_CXX = ProxySQL_GloVars.oo network.oo debug.oo configfile.oo Query_Cache.oo SpookyV2.oo MySQL_Authentication.oo gen_utils.oo sqlite3db.oo mysql_connection.oo MySQL_HostGroups_Manager.oo mysql_data_stream.oo MySQL_Thread.oo MySQL_Session.oo MySQL_Protocol.oo mysql_backend.oo Query_Processor.oo ProxySQL_Admin.oo ProxySQL_Config.oo ProxySQL_Restapi.oo MySQL_Monitor.oo MySQL_Logger.oo thread.oo MySQL_PreparedStatement.oo ProxySQL_Cluster.oo ClickHouse_Authentication.oo ClickHouse_Server.oo ProxySQL_Statistics.oo Chart_bundle_js.oo ProxySQL_HTTP_Server.oo ProxySQL_RESTAPI_Server.oo font-awesome.min.css.oo main-bundle.min.css.oo set_parser.oo MySQL_Variables.oo c_tokenizer.oo OBJ_CXX = $(patsubst %,$(ODIR)/%,$(_OBJ_CXX)) HEADERS = ../include/*.h ../include/*.hpp %.ko: %.cpp $(HEADERS) $(CXX) -fPIC -c -o $@ $< $(MYCXXFLAGS) $(CXXFLAGS) -$(ODIR)/%.o: %.c $(HEADERS) - $(CC) -fPIC -c -o $@ $< $(MYCFLAGS) $(CFLAGS) - $(ODIR)/%.oo: %.cpp $(HEADERS) $(CXX) -fPIC -c -o $@ $< $(MYCXXFLAGS) $(CXXFLAGS) diff --git a/lib/c_tokenizer.c b/lib/c_tokenizer.cpp similarity index 100% rename from lib/c_tokenizer.c rename to lib/c_tokenizer.cpp From 7824f831634ca142a74a3b79f2103dbcbf04dd2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sat, 8 Jan 2022 14:08:20 +0100 Subject: [PATCH 4/5] In c_tokenizer replace initializer list with simple memset --- lib/c_tokenizer.cpp | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/lib/c_tokenizer.cpp b/lib/c_tokenizer.cpp index ab83d5bc2..5a69049e2 100644 --- a/lib/c_tokenizer.cpp +++ b/lib/c_tokenizer.cpp @@ -2388,10 +2388,12 @@ char* mysql_query_digest_first_stage(const char* const q, int q_len, char** cons get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); init_shared_st(&shared_st, q, q_len, d_max_len, res); struct stage_1_st stage_1_st = { 0 }; + memset(&stage_1_st, 0, sizeof(struct stage_1_st)); init_stage_1_st(&stage_1_st); // perform just the first stage parsing @@ -2422,12 +2424,14 @@ char* mysql_query_digest_second_stage(const char* const q, int q_len, char** con get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; init_shared_st(&shared_st, q, q_len, d_max_len, res); - struct stage_1_st stage_1_st = { 0 }; + struct stage_1_st stage_1_st; + memset(&stage_1_st, 0, sizeof(struct stage_1_st)); init_stage_1_st(&stage_1_st); - struct stage_2_st stage_2_st = { 0 }; + struct stage_2_st stage_2_st; + memset(&stage_2_st, 0, sizeof(struct stage_2_st)); // perform just the first stage parsing stage_1_parsing(&shared_st, &stage_1_st, &opts, fst_cmnt); @@ -2474,15 +2478,20 @@ char* mysql_query_digest_and_first_comment_2(const char* const q, int q_len, cha get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); init_shared_st(&shared_st, q, q_len, d_max_len, res); // individual states for stages - struct stage_1_st stage_1_st = { 0 }; + struct stage_1_st stage_1_st; + memset(&stage_1_st, 0, sizeof(struct stage_1_st)); init_stage_1_st(&stage_1_st); - struct stage_2_st stage_2_st = { 0 }; - struct stage_3_st stage_3_st = { 0 }; - struct stage_4_st stage_4_st = { 0 }; + struct stage_2_st stage_2_st; + struct stage_3_st stage_3_st; + struct stage_4_st stage_4_st; + memset(&stage_2_st, 0, sizeof(struct stage_2_st)); + memset(&stage_3_st, 0, sizeof(struct stage_3_st)); + memset(&stage_4_st, 0, sizeof(struct stage_4_st)); char min_digest_size = 0; @@ -2766,7 +2775,8 @@ char* mysql_query_digest_and_first_comment_one_it(char* q, int q_len, char** fst get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); shared_st.q = q; shared_st.q_len = q_len; shared_st.d_max_len = d_max_len; @@ -2776,9 +2786,12 @@ char* mysql_query_digest_and_first_comment_one_it(char* q, int q_len, char** fst shared_st.res_pre_pos = res; // state required between different iterations of special parsing states - struct cmnt_type_1_st c_t_1_st = { 0 }; - struct literal_string_st literal_str_st = { 0 }; - struct literal_digit_st literal_digit_st = { 0 }; + struct cmnt_type_1_st c_t_1_st; + struct literal_string_st literal_str_st; + struct literal_digit_st literal_digit_st; + memset(&c_t_1_st, 0, sizeof(struct cmnt_type_1_st)); + memset(&literal_str_st, 0, sizeof(struct literal_string_st)); + memset(&literal_digit_st, 0, sizeof(struct literal_digit_st)); enum p_st cur_st = st_no_mark_found; From 8afbadaaef2fa9f8f13abb6923a98e816008c16f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Canna=C3=B2?= Date: Sat, 8 Jan 2022 14:08:20 +0100 Subject: [PATCH 5/5] In c_tokenizer replace initializer list with simple memset --- lib/c_tokenizer.cpp | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/lib/c_tokenizer.cpp b/lib/c_tokenizer.cpp index ab83d5bc2..96ff51f75 100644 --- a/lib/c_tokenizer.cpp +++ b/lib/c_tokenizer.cpp @@ -2388,10 +2388,12 @@ char* mysql_query_digest_first_stage(const char* const q, int q_len, char** cons get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); init_shared_st(&shared_st, q, q_len, d_max_len, res); struct stage_1_st stage_1_st = { 0 }; + memset(&stage_1_st, 0, sizeof(struct stage_1_st)); init_stage_1_st(&stage_1_st); // perform just the first stage parsing @@ -2422,12 +2424,15 @@ char* mysql_query_digest_second_stage(const char* const q, int q_len, char** con get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); init_shared_st(&shared_st, q, q_len, d_max_len, res); - struct stage_1_st stage_1_st = { 0 }; + struct stage_1_st stage_1_st; + memset(&stage_1_st, 0, sizeof(struct stage_1_st)); init_stage_1_st(&stage_1_st); - struct stage_2_st stage_2_st = { 0 }; + struct stage_2_st stage_2_st; + memset(&stage_2_st, 0, sizeof(struct stage_2_st)); // perform just the first stage parsing stage_1_parsing(&shared_st, &stage_1_st, &opts, fst_cmnt); @@ -2474,15 +2479,20 @@ char* mysql_query_digest_and_first_comment_2(const char* const q, int q_len, cha get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); init_shared_st(&shared_st, q, q_len, d_max_len, res); // individual states for stages - struct stage_1_st stage_1_st = { 0 }; + struct stage_1_st stage_1_st; + memset(&stage_1_st, 0, sizeof(struct stage_1_st)); init_stage_1_st(&stage_1_st); - struct stage_2_st stage_2_st = { 0 }; - struct stage_3_st stage_3_st = { 0 }; - struct stage_4_st stage_4_st = { 0 }; + struct stage_2_st stage_2_st; + struct stage_3_st stage_3_st; + struct stage_4_st stage_4_st; + memset(&stage_2_st, 0, sizeof(struct stage_2_st)); + memset(&stage_3_st, 0, sizeof(struct stage_3_st)); + memset(&stage_4_st, 0, sizeof(struct stage_4_st)); char min_digest_size = 0; @@ -2766,7 +2776,8 @@ char* mysql_query_digest_and_first_comment_one_it(char* q, int q_len, char** fst get_options(&opts); // state shared between all the parsing states - struct shared_st shared_st = { 0 }; + struct shared_st shared_st; + memset(&shared_st, 0, sizeof(struct shared_st)); shared_st.q = q; shared_st.q_len = q_len; shared_st.d_max_len = d_max_len; @@ -2776,9 +2787,12 @@ char* mysql_query_digest_and_first_comment_one_it(char* q, int q_len, char** fst shared_st.res_pre_pos = res; // state required between different iterations of special parsing states - struct cmnt_type_1_st c_t_1_st = { 0 }; - struct literal_string_st literal_str_st = { 0 }; - struct literal_digit_st literal_digit_st = { 0 }; + struct cmnt_type_1_st c_t_1_st; + struct literal_string_st literal_str_st; + struct literal_digit_st literal_digit_st; + memset(&c_t_1_st, 0, sizeof(struct cmnt_type_1_st)); + memset(&literal_str_st, 0, sizeof(struct literal_string_st)); + memset(&literal_digit_st, 0, sizeof(struct literal_digit_st)); enum p_st cur_st = st_no_mark_found;