@@ -38,10 +38,12 @@ static ID intern_brackets, intern_merge, intern_merge_bang, intern_new_with_args
38
38
#define CONNECTED (wrapper ) (wrapper->client->net.pvio != NULL && wrapper->client->net.fd != -1 && VIO_IS_CONNECTED(wrapper))
39
39
#endif
40
40
41
+ #define MYSQL_CLIENT_NOT_CONNECTED_STR "MySQL client is not connected"
42
+
41
43
#define REQUIRE_CONNECTED (wrapper ) \
42
44
REQUIRE_INITIALIZED(wrapper) \
43
45
if (!CONNECTED(wrapper) && !wrapper->reconnect_enabled) { \
44
- rb_raise(cMysql2Error, "MySQL client is not connected" ); \
46
+ rb_raise(cMysql2Error, MYSQL_CLIENT_NOT_CONNECTED_STR ); \
45
47
}
46
48
47
49
#define REQUIRE_NOT_CONNECTED (wrapper ) \
@@ -50,6 +52,17 @@ static ID intern_brackets, intern_merge, intern_merge_bang, intern_new_with_args
50
52
rb_raise(cMysql2Error, "MySQL connection is already open"); \
51
53
}
52
54
55
+ /*
56
+ * assert that we've connected at least once by using
57
+ * `client->server_version`, which is a string that is initialized to the char*
58
+ * server name once the client has connected
59
+ */
60
+ #define REQUIRE_CONNECTED_ONCE (wrapper ) \
61
+ REQUIRE_INITIALIZED(wrapper) \
62
+ if (!wrapper->client->server_version) { \
63
+ rb_raise(cMysql2Error, MYSQL_CLIENT_NOT_CONNECTED_STR); \
64
+ }
65
+
53
66
/*
54
67
* compatability with mysql-connector-c, where LIBMYSQL_VERSION is the correct
55
68
* variable to use, but MYSQL_SERVER_VERSION gives the correct numbers when
@@ -819,7 +832,7 @@ static VALUE rb_mysql_client_real_escape(VALUE self, VALUE str) {
819
832
rb_encoding * conn_enc ;
820
833
GET_CLIENT (self );
821
834
822
- REQUIRE_CONNECTED (wrapper );
835
+ REQUIRE_CONNECTED_ONCE (wrapper );
823
836
Check_Type (str , T_STRING );
824
837
default_internal_enc = rb_default_internal_encoding ();
825
838
conn_enc = rb_to_encoding (wrapper -> encoding );
0 commit comments