mysql 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/COPYING +56 -0
- data/COPYING.ja +51 -0
- data/README.html +725 -0
- data/README_ja.html +897 -0
- data/extconf.rb +67 -0
- data/mysql-compat.rb +62 -0
- data/mysql-ruby-2.5.1.gem +0 -0
- data/mysql-ruby.gemspec +20 -0
- data/mysql.c.in +1267 -0
- data/t/00connect.rb +1 -0
- data/t/10create_db.rb +3 -0
- data/t/20create_table.rb +1 -0
- data/t/30insert.rb +2 -0
- data/t/40select.rb +4 -0
- data/t/50update.rb +2 -0
- data/t/60drop_table.rb +1 -0
- data/t/70drop_db.rb +2 -0
- data/t/80close.rb +1 -0
- data/test.rb +33 -0
- data/tommy.css +128 -0
- metadata +57 -0
data/extconf.rb
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'mkmf'
|
2
|
+
|
3
|
+
if mc = with_config('mysql-config') then
|
4
|
+
mc = 'mysql_config' if mc == true
|
5
|
+
cflags = `#{mc} --cflags`.chomp
|
6
|
+
exit 1 if $? != 0
|
7
|
+
libs = `#{mc} --libs`.chomp
|
8
|
+
exit 1 if $? != 0
|
9
|
+
$CPPFLAGS += ' ' + cflags
|
10
|
+
$libs = libs + " " + $libs
|
11
|
+
else
|
12
|
+
inc, lib = dir_config('mysql', '/usr/local')
|
13
|
+
libs = ['m', 'z', 'socket', 'nsl']
|
14
|
+
while not find_library('mysqlclient', 'mysql_query', lib, "#{lib}/mysql") do
|
15
|
+
exit 1 if libs.empty?
|
16
|
+
have_library(libs.shift)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
have_func('mysql_ssl_set')
|
21
|
+
|
22
|
+
if have_header('mysql.h') then
|
23
|
+
src = "#include <errmsg.h>\n#include <mysqld_error.h>\n"
|
24
|
+
elsif have_header('mysql/mysql.h') then
|
25
|
+
src = "#include <mysql/errmsg.h>\n#include <mysql/mysqld_error.h>\n"
|
26
|
+
else
|
27
|
+
exit 1
|
28
|
+
end
|
29
|
+
|
30
|
+
# make mysql constant
|
31
|
+
File::open("conftest.c", "w") do |f|
|
32
|
+
f.puts src
|
33
|
+
end
|
34
|
+
if defined? cpp_command then
|
35
|
+
cpp = Config::expand(cpp_command(''))
|
36
|
+
else
|
37
|
+
cpp = Config::expand sprintf(CPP, $CPPFLAGS, $CFLAGS, '')
|
38
|
+
end
|
39
|
+
unless system "#{cpp} > confout" then
|
40
|
+
exit 1
|
41
|
+
end
|
42
|
+
File::unlink "conftest.c"
|
43
|
+
|
44
|
+
error_syms = []
|
45
|
+
IO::foreach('confout') do |l|
|
46
|
+
next unless l =~ /errmsg\.h|mysqld_error\.h/
|
47
|
+
fn = l.split(/\"/)[1]
|
48
|
+
IO::foreach(fn) do |m|
|
49
|
+
if m =~ /^#define\s+([CE]R_[0-9A-Z_]+)/ then
|
50
|
+
error_syms << $1
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
File::unlink 'confout'
|
55
|
+
error_syms.uniq!
|
56
|
+
|
57
|
+
newf = File::open('mysql.c', 'w')
|
58
|
+
IO::foreach('mysql.c.in') do |l|
|
59
|
+
newf.puts l
|
60
|
+
if l =~ /\/\* Mysql::Error constant \*\// then
|
61
|
+
error_syms.each do |s|
|
62
|
+
newf.puts " rb_define_const(eMysql, \"#{s}\", INT2NUM(#{s}));"
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
create_makefile("mysql")
|
data/mysql-compat.rb
ADDED
@@ -0,0 +1,62 @@
|
|
1
|
+
# for compatibility with 1.x
|
2
|
+
# $Id: mysql-compat.rb,v 1.2 1998/11/29 13:02:15 tommy Exp $
|
3
|
+
|
4
|
+
require 'mysql.o'
|
5
|
+
|
6
|
+
class Mysql
|
7
|
+
def Mysql.connect(host=nil, db=nil, user=nil, pass=nil)
|
8
|
+
Mysql.real_connect(host, user, pass, db)
|
9
|
+
end
|
10
|
+
def Mysql.new(host=nil, db=nil, user=nil, pass=nil)
|
11
|
+
Mysql.real_connect(host, user, pass, db)
|
12
|
+
end
|
13
|
+
|
14
|
+
alias selectdb select_db
|
15
|
+
alias affectedrows affected_rows
|
16
|
+
alias insertid insert_id
|
17
|
+
alias createdb create_db
|
18
|
+
alias dropdb drop_db
|
19
|
+
|
20
|
+
def listdbs()
|
21
|
+
ret = []
|
22
|
+
query("show databases").each {|x| ret << x[0]}
|
23
|
+
ret
|
24
|
+
end
|
25
|
+
|
26
|
+
def listtables()
|
27
|
+
ret = []
|
28
|
+
query("show tables").each {|x| ret << x[0]}
|
29
|
+
ret
|
30
|
+
end
|
31
|
+
|
32
|
+
def listfields(table)
|
33
|
+
query("show fields from #{table}")
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class MysqlRes
|
38
|
+
alias numrows num_rows
|
39
|
+
alias numfields num_fields
|
40
|
+
alias fetchrow fetch_row
|
41
|
+
alias dataseek data_seek
|
42
|
+
|
43
|
+
def fetchfields()
|
44
|
+
ret = []
|
45
|
+
fetch_fields.each{|f| ret << f.name}
|
46
|
+
ret
|
47
|
+
end
|
48
|
+
|
49
|
+
def fetchhash()
|
50
|
+
row = fetchrow or return nil
|
51
|
+
fields = fetchfields
|
52
|
+
ret = {}
|
53
|
+
fields.each_index {|i| ret[fields[i]] = row[i]}
|
54
|
+
ret
|
55
|
+
end
|
56
|
+
|
57
|
+
def each_hash()
|
58
|
+
while hash = fetchhash
|
59
|
+
yield hash
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
Binary file
|
data/mysql-ruby.gemspec
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
|
3
|
+
SPEC = Gem::Specification.new do |s|
|
4
|
+
s.name = "mysql"
|
5
|
+
s.version = "2.5.1"
|
6
|
+
s.author = "TOMITA Masahiro"
|
7
|
+
s.email = "tommy@tmtm.org"
|
8
|
+
s.homepage = "http://www.tmtm.org/en/mysql/ruby/"
|
9
|
+
s.platform = Gem::Platform::RUBY
|
10
|
+
s.summary = "MySQL/Ruby provides the same functions for Ruby programs that the MySQL C API provides for C programs."
|
11
|
+
s.extensions = %w{extconf.rb}
|
12
|
+
s.has_rdoc = false
|
13
|
+
s.autorequire = "mysql"
|
14
|
+
s.files = Dir.glob('**/*')
|
15
|
+
end
|
16
|
+
|
17
|
+
if $0 == __FILE__
|
18
|
+
Gem::manage_gems
|
19
|
+
Gem::Builder.new(spec).build
|
20
|
+
end
|
data/mysql.c.in
ADDED
@@ -0,0 +1,1267 @@
|
|
1
|
+
/* ruby mysql module
|
2
|
+
* $Id: mysql.c.in,v 1.8 2004/09/20 12:03:47 tommy Exp $
|
3
|
+
*/
|
4
|
+
|
5
|
+
#include "ruby.h"
|
6
|
+
#include "version.h"
|
7
|
+
#ifdef HAVE_MYSQL_H
|
8
|
+
#include <mysql.h>
|
9
|
+
#include <errmsg.h>
|
10
|
+
#include <mysqld_error.h>
|
11
|
+
#else
|
12
|
+
#include <mysql/mysql.h>
|
13
|
+
#include <mysql/errmsg.h>
|
14
|
+
#include <mysql/mysqld_error.h>
|
15
|
+
#endif
|
16
|
+
|
17
|
+
#define GC_STORE_RESULT_LIMIT 20
|
18
|
+
|
19
|
+
#ifndef Qtrue /* ruby 1.2.x ? */
|
20
|
+
#define Qtrue TRUE
|
21
|
+
#define Qfalse FALSE
|
22
|
+
#define rb_exc_raise rb_raise
|
23
|
+
#define rb_exc_new2 exc_new2
|
24
|
+
#define rb_str_new str_new
|
25
|
+
#define rb_str_new2 str_new2
|
26
|
+
#define rb_ary_new2 ary_new2
|
27
|
+
#define rb_ary_store ary_store
|
28
|
+
#define rb_obj_alloc obj_alloc
|
29
|
+
#define rb_hash_new hash_new
|
30
|
+
#define rb_hash_aset hash_aset
|
31
|
+
#define rb_eStandardError eStandardError
|
32
|
+
#define rb_cObject cObject
|
33
|
+
#endif
|
34
|
+
|
35
|
+
#if MYSQL_VERSION_ID < 32224
|
36
|
+
#define mysql_field_count mysql_num_fields
|
37
|
+
#endif
|
38
|
+
|
39
|
+
#define NILorSTRING(obj) (NIL_P(obj)? NULL: STR2CSTR(obj))
|
40
|
+
#define NILorINT(obj) (NIL_P(obj)? 0: NUM2INT(obj))
|
41
|
+
|
42
|
+
#define GetMysqlStruct(obj) (Check_Type(obj, T_DATA), (struct mysql*)DATA_PTR(obj))
|
43
|
+
#define GetHandler(obj) (Check_Type(obj, T_DATA), &(((struct mysql*)DATA_PTR(obj))->handler))
|
44
|
+
#define GetMysqlRes(obj) (Check_Type(obj, T_DATA), ((struct mysql_res*)DATA_PTR(obj))->res)
|
45
|
+
|
46
|
+
VALUE cMysql;
|
47
|
+
VALUE cMysqlRes;
|
48
|
+
VALUE cMysqlField;
|
49
|
+
VALUE eMysql;
|
50
|
+
|
51
|
+
static int store_result_count = 0;
|
52
|
+
|
53
|
+
struct mysql {
|
54
|
+
MYSQL handler;
|
55
|
+
char connection;
|
56
|
+
char query_with_result;
|
57
|
+
};
|
58
|
+
|
59
|
+
struct mysql_res {
|
60
|
+
MYSQL_RES* res;
|
61
|
+
char freed;
|
62
|
+
};
|
63
|
+
|
64
|
+
|
65
|
+
/* free Mysql class object */
|
66
|
+
static void free_mysql(struct mysql* my)
|
67
|
+
{
|
68
|
+
if (my->connection == Qtrue)
|
69
|
+
mysql_close(&my->handler);
|
70
|
+
free(my);
|
71
|
+
}
|
72
|
+
|
73
|
+
static void free_mysqlres(struct mysql_res* resp)
|
74
|
+
{
|
75
|
+
if (resp->freed == Qfalse) {
|
76
|
+
mysql_free_result(resp->res);
|
77
|
+
store_result_count--;
|
78
|
+
}
|
79
|
+
free(resp);
|
80
|
+
}
|
81
|
+
|
82
|
+
static void mysql_raise(MYSQL* m)
|
83
|
+
{
|
84
|
+
VALUE e = rb_exc_new2(eMysql, mysql_error(m));
|
85
|
+
rb_iv_set(e, "errno", INT2FIX(mysql_errno(m)));
|
86
|
+
rb_exc_raise(e);
|
87
|
+
}
|
88
|
+
|
89
|
+
static VALUE mysqlres2obj(MYSQL_RES* res)
|
90
|
+
{
|
91
|
+
VALUE obj;
|
92
|
+
struct mysql_res* resp;
|
93
|
+
obj = Data_Make_Struct(cMysqlRes, struct mysql_res, 0, free_mysqlres, resp);
|
94
|
+
resp->res = res;
|
95
|
+
resp->freed = Qfalse;
|
96
|
+
rb_obj_call_init(obj, 0, NULL);
|
97
|
+
if (++store_result_count > GC_STORE_RESULT_LIMIT)
|
98
|
+
rb_gc();
|
99
|
+
return obj;
|
100
|
+
}
|
101
|
+
|
102
|
+
/* make Mysql::Field object */
|
103
|
+
static VALUE make_field_obj(MYSQL_FIELD* f)
|
104
|
+
{
|
105
|
+
VALUE obj;
|
106
|
+
VALUE hash;
|
107
|
+
if (f == NULL)
|
108
|
+
return Qnil;
|
109
|
+
obj = rb_obj_alloc(cMysqlField);
|
110
|
+
rb_iv_set(obj, "name", f->name? rb_str_freeze(rb_tainted_str_new2(f->name)): Qnil);
|
111
|
+
rb_iv_set(obj, "table", f->table? rb_str_freeze(rb_tainted_str_new2(f->table)): Qnil);
|
112
|
+
rb_iv_set(obj, "def", f->def? rb_str_freeze(rb_tainted_str_new2(f->def)): Qnil);
|
113
|
+
rb_iv_set(obj, "type", INT2NUM(f->type));
|
114
|
+
rb_iv_set(obj, "length", INT2NUM(f->length));
|
115
|
+
rb_iv_set(obj, "max_length", INT2NUM(f->max_length));
|
116
|
+
rb_iv_set(obj, "flags", INT2NUM(f->flags));
|
117
|
+
rb_iv_set(obj, "decimals", INT2NUM(f->decimals));
|
118
|
+
return obj;
|
119
|
+
}
|
120
|
+
|
121
|
+
/*-------------------------------
|
122
|
+
* Mysql class method
|
123
|
+
*/
|
124
|
+
|
125
|
+
/* init() */
|
126
|
+
static VALUE init(VALUE klass)
|
127
|
+
{
|
128
|
+
struct mysql* myp;
|
129
|
+
VALUE obj;
|
130
|
+
|
131
|
+
obj = Data_Make_Struct(klass, struct mysql, 0, free_mysql, myp);
|
132
|
+
mysql_init(&myp->handler);
|
133
|
+
myp->connection = Qfalse;
|
134
|
+
myp->query_with_result = Qtrue;
|
135
|
+
rb_obj_call_init(obj, 0, NULL);
|
136
|
+
return obj;
|
137
|
+
}
|
138
|
+
|
139
|
+
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
|
140
|
+
static VALUE real_connect(int argc, VALUE* argv, VALUE klass)
|
141
|
+
{
|
142
|
+
VALUE host, user, passwd, db, port, sock, flag;
|
143
|
+
char *h, *u, *p, *d, *s;
|
144
|
+
unsigned int pp, f;
|
145
|
+
struct mysql* myp;
|
146
|
+
VALUE obj;
|
147
|
+
|
148
|
+
#if MYSQL_VERSION_ID >= 32200
|
149
|
+
rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
|
150
|
+
d = NILorSTRING(db);
|
151
|
+
f = NILorINT(flag);
|
152
|
+
#elif MYSQL_VERSION_ID >= 32115
|
153
|
+
rb_scan_args(argc, argv, "06", &host, &user, &passwd, &port, &sock, &flag);
|
154
|
+
f = NILorINT(flag);
|
155
|
+
#else
|
156
|
+
rb_scan_args(argc, argv, "05", &host, &user, &passwd, &port, &sock);
|
157
|
+
#endif
|
158
|
+
h = NILorSTRING(host);
|
159
|
+
u = NILorSTRING(user);
|
160
|
+
p = NILorSTRING(passwd);
|
161
|
+
pp = NILorINT(port);
|
162
|
+
s = NILorSTRING(sock);
|
163
|
+
|
164
|
+
obj = Data_Make_Struct(klass, struct mysql, 0, free_mysql, myp);
|
165
|
+
#if MYSQL_VERSION_ID >= 32200
|
166
|
+
mysql_init(&myp->handler);
|
167
|
+
if (mysql_real_connect(&myp->handler, h, u, p, d, pp, s, f) == NULL)
|
168
|
+
#elif MYSQL_VERSION_ID >= 32115
|
169
|
+
if (mysql_real_connect(&myp->handler, h, u, p, pp, s, f) == NULL)
|
170
|
+
#else
|
171
|
+
if (mysql_real_connect(&myp->handler, h, u, p, pp, s) == NULL)
|
172
|
+
#endif
|
173
|
+
mysql_raise(&myp->handler);
|
174
|
+
|
175
|
+
myp->connection = Qtrue;
|
176
|
+
myp->query_with_result = Qtrue;
|
177
|
+
rb_obj_call_init(obj, argc, argv);
|
178
|
+
|
179
|
+
return obj;
|
180
|
+
}
|
181
|
+
|
182
|
+
/* escape_string(string) */
|
183
|
+
static VALUE escape_string(VALUE klass, VALUE str)
|
184
|
+
{
|
185
|
+
VALUE ret;
|
186
|
+
Check_Type(str, T_STRING);
|
187
|
+
ret = rb_str_new(0, (RSTRING(str)->len)*2+1);
|
188
|
+
RSTRING(ret)->len = mysql_escape_string(RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
|
189
|
+
return ret;
|
190
|
+
}
|
191
|
+
|
192
|
+
/* client_info() */
|
193
|
+
static VALUE client_info(VALUE klass)
|
194
|
+
{
|
195
|
+
return rb_tainted_str_new2(mysql_get_client_info());
|
196
|
+
}
|
197
|
+
|
198
|
+
#if MYSQL_VERSION_ID >= 32332
|
199
|
+
/* my_debug(string) */
|
200
|
+
static VALUE my_debug(VALUE obj, VALUE str)
|
201
|
+
{
|
202
|
+
mysql_debug(STR2CSTR(str));
|
203
|
+
return obj;
|
204
|
+
}
|
205
|
+
#endif
|
206
|
+
|
207
|
+
#if MYSQL_VERSION_ID >= 40000
|
208
|
+
/* client_version() */
|
209
|
+
static VALUE client_version(VALUE obj)
|
210
|
+
{
|
211
|
+
return INT2NUM(mysql_get_client_version());
|
212
|
+
}
|
213
|
+
#endif
|
214
|
+
|
215
|
+
/*-------------------------------
|
216
|
+
* Mysql object method
|
217
|
+
*/
|
218
|
+
|
219
|
+
#if MYSQL_VERSION_ID >= 32200
|
220
|
+
/* real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, sock=nil, flag=nil) */
|
221
|
+
static VALUE real_connect2(int argc, VALUE* argv, VALUE obj)
|
222
|
+
{
|
223
|
+
VALUE host, user, passwd, db, port, sock, flag;
|
224
|
+
char *h, *u, *p, *d, *s;
|
225
|
+
unsigned int pp, f;
|
226
|
+
MYSQL* m = GetHandler(obj);
|
227
|
+
rb_scan_args(argc, argv, "07", &host, &user, &passwd, &db, &port, &sock, &flag);
|
228
|
+
d = NILorSTRING(db);
|
229
|
+
f = NILorINT(flag);
|
230
|
+
h = NILorSTRING(host);
|
231
|
+
u = NILorSTRING(user);
|
232
|
+
p = NILorSTRING(passwd);
|
233
|
+
pp = NILorINT(port);
|
234
|
+
s = NILorSTRING(sock);
|
235
|
+
|
236
|
+
if (mysql_real_connect(m, h, u, p, d, pp, s, f) == NULL)
|
237
|
+
mysql_raise(m);
|
238
|
+
|
239
|
+
return obj;
|
240
|
+
}
|
241
|
+
|
242
|
+
/* options(opt, value=nil) */
|
243
|
+
static VALUE options(int argc, VALUE* argv, VALUE obj)
|
244
|
+
{
|
245
|
+
VALUE opt, val;
|
246
|
+
int n;
|
247
|
+
char* v;
|
248
|
+
MYSQL* m = GetHandler(obj);
|
249
|
+
|
250
|
+
rb_scan_args(argc, argv, "11", &opt, &val);
|
251
|
+
switch(NUM2INT(opt)) {
|
252
|
+
case MYSQL_OPT_CONNECT_TIMEOUT:
|
253
|
+
if (val == Qnil)
|
254
|
+
rb_raise(rb_eArgError, "wrong # of arguments(1 for 2)");
|
255
|
+
n = NUM2INT(val);
|
256
|
+
v = (char*)&n;
|
257
|
+
break;
|
258
|
+
case MYSQL_INIT_COMMAND:
|
259
|
+
case MYSQL_READ_DEFAULT_FILE:
|
260
|
+
case MYSQL_READ_DEFAULT_GROUP:
|
261
|
+
if (val == Qnil)
|
262
|
+
rb_raise(rb_eArgError, "wrong # of arguments(1 for 2)");
|
263
|
+
v = STR2CSTR(val);
|
264
|
+
break;
|
265
|
+
#if MYSQL_VERSION_ID >= 32349
|
266
|
+
case MYSQL_OPT_LOCAL_INFILE:
|
267
|
+
if (val == Qnil || val == Qfalse)
|
268
|
+
v = NULL;
|
269
|
+
else {
|
270
|
+
n = 1;
|
271
|
+
v = (char*)&n;
|
272
|
+
}
|
273
|
+
break;
|
274
|
+
#endif
|
275
|
+
default:
|
276
|
+
v = NULL;
|
277
|
+
}
|
278
|
+
|
279
|
+
if (mysql_options(m, NUM2INT(opt), v) != 0)
|
280
|
+
rb_raise(eMysql, "unknown option: %d", NUM2INT(opt));
|
281
|
+
return obj;
|
282
|
+
}
|
283
|
+
#endif
|
284
|
+
|
285
|
+
#if MYSQL_VERSION_ID >= 32332
|
286
|
+
/* real_escape_string(string) */
|
287
|
+
static VALUE real_escape_string(VALUE obj, VALUE str)
|
288
|
+
{
|
289
|
+
MYSQL* m = GetHandler(obj);
|
290
|
+
VALUE ret;
|
291
|
+
Check_Type(str, T_STRING);
|
292
|
+
ret = rb_str_new(0, (RSTRING(str)->len)*2+1);
|
293
|
+
RSTRING(ret)->len = mysql_real_escape_string(m, RSTRING(ret)->ptr, RSTRING(str)->ptr, RSTRING(str)->len);
|
294
|
+
return ret;
|
295
|
+
}
|
296
|
+
#endif
|
297
|
+
|
298
|
+
/* initialize() */
|
299
|
+
static VALUE initialize(int argc, VALUE* argv, VALUE obj)
|
300
|
+
{
|
301
|
+
return obj;
|
302
|
+
}
|
303
|
+
|
304
|
+
/* affected_rows() */
|
305
|
+
static VALUE affected_rows(VALUE obj)
|
306
|
+
{
|
307
|
+
return INT2NUM(mysql_affected_rows(GetHandler(obj)));
|
308
|
+
}
|
309
|
+
|
310
|
+
#if MYSQL_VERSION_ID >= 32303
|
311
|
+
/* change_user(user=nil, passwd=nil, db=nil) */
|
312
|
+
static VALUE change_user(int argc, VALUE* argv, VALUE obj)
|
313
|
+
{
|
314
|
+
VALUE user, passwd, db;
|
315
|
+
char *u, *p, *d;
|
316
|
+
MYSQL* m = GetHandler(obj);
|
317
|
+
rb_scan_args(argc, argv, "03", &user, &passwd, &db);
|
318
|
+
u = NILorSTRING(user);
|
319
|
+
p = NILorSTRING(passwd);
|
320
|
+
d = NILorSTRING(db);
|
321
|
+
if (mysql_change_user(m, u, p, d) != 0)
|
322
|
+
mysql_raise(m);
|
323
|
+
return obj;
|
324
|
+
}
|
325
|
+
#endif
|
326
|
+
|
327
|
+
#if MYSQL_VERSION_ID >= 32321
|
328
|
+
/* character_set_name() */
|
329
|
+
static VALUE character_set_name(VALUE obj)
|
330
|
+
{
|
331
|
+
return rb_tainted_str_new2(mysql_character_set_name(GetHandler(obj)));
|
332
|
+
}
|
333
|
+
#endif
|
334
|
+
|
335
|
+
/* close() */
|
336
|
+
static VALUE my_close(VALUE obj)
|
337
|
+
{
|
338
|
+
MYSQL* m = GetHandler(obj);
|
339
|
+
mysql_close(m);
|
340
|
+
if (mysql_errno(m))
|
341
|
+
mysql_raise(m);
|
342
|
+
GetMysqlStruct(obj)->connection = Qfalse;
|
343
|
+
return obj;
|
344
|
+
}
|
345
|
+
|
346
|
+
#if MYSQL_VERSION_ID < 40000
|
347
|
+
/* create_db(db) */
|
348
|
+
static VALUE create_db(VALUE obj, VALUE db)
|
349
|
+
{
|
350
|
+
MYSQL* m = GetHandler(obj);
|
351
|
+
if (mysql_create_db(m, STR2CSTR(db)) != 0)
|
352
|
+
mysql_raise(m);
|
353
|
+
return obj;
|
354
|
+
}
|
355
|
+
|
356
|
+
/* drop_db(db) */
|
357
|
+
static VALUE drop_db(VALUE obj, VALUE db)
|
358
|
+
{
|
359
|
+
MYSQL* m = GetHandler(obj);
|
360
|
+
if (mysql_drop_db(m, STR2CSTR(db)) != 0)
|
361
|
+
mysql_raise(m);
|
362
|
+
return obj;
|
363
|
+
}
|
364
|
+
#endif
|
365
|
+
|
366
|
+
#if MYSQL_VERSION_ID >= 32332
|
367
|
+
/* dump_debug_info() */
|
368
|
+
static VALUE dump_debug_info(VALUE obj)
|
369
|
+
{
|
370
|
+
MYSQL* m = GetHandler(obj);
|
371
|
+
if (mysql_dump_debug_info(m) != 0)
|
372
|
+
mysql_raise(m);
|
373
|
+
return obj;
|
374
|
+
}
|
375
|
+
#endif
|
376
|
+
|
377
|
+
/* errno() */
|
378
|
+
static VALUE my_errno(VALUE obj)
|
379
|
+
{
|
380
|
+
return INT2NUM(mysql_errno(GetHandler(obj)));
|
381
|
+
}
|
382
|
+
|
383
|
+
/* error() */
|
384
|
+
static VALUE my_error(VALUE obj)
|
385
|
+
{
|
386
|
+
return rb_str_new2(mysql_error(GetHandler(obj)));
|
387
|
+
}
|
388
|
+
|
389
|
+
/* field_count() */
|
390
|
+
static VALUE field_count(VALUE obj)
|
391
|
+
{
|
392
|
+
return INT2NUM(mysql_field_count(GetHandler(obj)));
|
393
|
+
}
|
394
|
+
|
395
|
+
/* host_info() */
|
396
|
+
static VALUE host_info(VALUE obj)
|
397
|
+
{
|
398
|
+
return rb_tainted_str_new2(mysql_get_host_info(GetHandler(obj)));
|
399
|
+
}
|
400
|
+
|
401
|
+
/* proto_info() */
|
402
|
+
static VALUE proto_info(VALUE obj)
|
403
|
+
{
|
404
|
+
return INT2NUM(mysql_get_proto_info(GetHandler(obj)));
|
405
|
+
}
|
406
|
+
|
407
|
+
/* server_info() */
|
408
|
+
static VALUE server_info(VALUE obj)
|
409
|
+
{
|
410
|
+
return rb_tainted_str_new2(mysql_get_server_info(GetHandler(obj)));
|
411
|
+
}
|
412
|
+
|
413
|
+
/* info() */
|
414
|
+
static VALUE info(VALUE obj)
|
415
|
+
{
|
416
|
+
const char* p = mysql_info(GetHandler(obj));
|
417
|
+
return p? rb_tainted_str_new2(p): Qnil;
|
418
|
+
}
|
419
|
+
|
420
|
+
/* insert_id() */
|
421
|
+
static VALUE insert_id(VALUE obj)
|
422
|
+
{
|
423
|
+
return INT2NUM(mysql_insert_id(GetHandler(obj)));
|
424
|
+
}
|
425
|
+
|
426
|
+
/* kill(pid) */
|
427
|
+
static VALUE my_kill(VALUE obj, VALUE pid)
|
428
|
+
{
|
429
|
+
int p = NUM2INT(pid);
|
430
|
+
MYSQL* m = GetHandler(obj);
|
431
|
+
if (mysql_kill(m, p) != 0)
|
432
|
+
mysql_raise(m);
|
433
|
+
return obj;
|
434
|
+
}
|
435
|
+
|
436
|
+
/* list_dbs(db=nil) */
|
437
|
+
static VALUE list_dbs(int argc, VALUE* argv, VALUE obj)
|
438
|
+
{
|
439
|
+
unsigned int i, n;
|
440
|
+
VALUE db, ret;
|
441
|
+
MYSQL* m = GetHandler(obj);
|
442
|
+
MYSQL_RES* res;
|
443
|
+
|
444
|
+
rb_scan_args(argc, argv, "01", &db);
|
445
|
+
res = mysql_list_dbs(m, NILorSTRING(db));
|
446
|
+
if (res == NULL)
|
447
|
+
mysql_raise(m);
|
448
|
+
|
449
|
+
n = mysql_num_rows(res);
|
450
|
+
ret = rb_ary_new2(n);
|
451
|
+
for (i=0; i<n; i++)
|
452
|
+
rb_ary_store(ret, i, rb_tainted_str_new2(mysql_fetch_row(res)[0]));
|
453
|
+
mysql_free_result(res);
|
454
|
+
return ret;
|
455
|
+
}
|
456
|
+
|
457
|
+
/* list_fields(table, field=nil) */
|
458
|
+
static VALUE list_fields(int argc, VALUE* argv, VALUE obj)
|
459
|
+
{
|
460
|
+
VALUE table, field;
|
461
|
+
MYSQL* m = GetHandler(obj);
|
462
|
+
MYSQL_RES* res;
|
463
|
+
rb_scan_args(argc, argv, "11", &table, &field);
|
464
|
+
res = mysql_list_fields(m, STR2CSTR(table), NILorSTRING(field));
|
465
|
+
if (res == NULL)
|
466
|
+
mysql_raise(m);
|
467
|
+
return mysqlres2obj(res);
|
468
|
+
}
|
469
|
+
|
470
|
+
/* list_processes() */
|
471
|
+
static VALUE list_processes(VALUE obj)
|
472
|
+
{
|
473
|
+
MYSQL* m = GetHandler(obj);
|
474
|
+
MYSQL_RES* res = mysql_list_processes(m);
|
475
|
+
if (res == NULL)
|
476
|
+
mysql_raise(m);
|
477
|
+
return mysqlres2obj(res);
|
478
|
+
}
|
479
|
+
|
480
|
+
/* list_tables(table=nil) */
|
481
|
+
static VALUE list_tables(int argc, VALUE* argv, VALUE obj)
|
482
|
+
{
|
483
|
+
VALUE table;
|
484
|
+
MYSQL* m = GetHandler(obj);
|
485
|
+
MYSQL_RES* res;
|
486
|
+
unsigned int i, n;
|
487
|
+
VALUE ret;
|
488
|
+
|
489
|
+
rb_scan_args(argc, argv, "01", &table);
|
490
|
+
res = mysql_list_tables(m, NILorSTRING(table));
|
491
|
+
if (res == NULL)
|
492
|
+
mysql_raise(m);
|
493
|
+
|
494
|
+
n = mysql_num_rows(res);
|
495
|
+
ret = rb_ary_new2(n);
|
496
|
+
for (i=0; i<n; i++)
|
497
|
+
rb_ary_store(ret, i, rb_tainted_str_new2(mysql_fetch_row(res)[0]));
|
498
|
+
mysql_free_result(res);
|
499
|
+
return ret;
|
500
|
+
}
|
501
|
+
|
502
|
+
/* ping() */
|
503
|
+
static VALUE ping(VALUE obj)
|
504
|
+
{
|
505
|
+
MYSQL* m = GetHandler(obj);
|
506
|
+
if (mysql_ping(m) != 0)
|
507
|
+
mysql_raise(m);
|
508
|
+
return obj;
|
509
|
+
}
|
510
|
+
|
511
|
+
/* refresh(r) */
|
512
|
+
static VALUE refresh(VALUE obj, VALUE r)
|
513
|
+
{
|
514
|
+
MYSQL* m = GetHandler(obj);
|
515
|
+
if (mysql_refresh(m, NUM2INT(r)) != 0)
|
516
|
+
mysql_raise(m);
|
517
|
+
return obj;
|
518
|
+
}
|
519
|
+
|
520
|
+
/* reload() */
|
521
|
+
static VALUE reload(VALUE obj)
|
522
|
+
{
|
523
|
+
MYSQL* m = GetHandler(obj);
|
524
|
+
if (mysql_reload(m) != 0)
|
525
|
+
mysql_raise(m);
|
526
|
+
return obj;
|
527
|
+
}
|
528
|
+
|
529
|
+
/* select_db(db) */
|
530
|
+
static VALUE select_db(VALUE obj, VALUE db)
|
531
|
+
{
|
532
|
+
MYSQL* m = GetHandler(obj);
|
533
|
+
if (mysql_select_db(m, STR2CSTR(db)) != 0)
|
534
|
+
mysql_raise(m);
|
535
|
+
return obj;
|
536
|
+
}
|
537
|
+
|
538
|
+
/* shutdown() */
|
539
|
+
static VALUE my_shutdown(int argc, VALUE* argv, VALUE obj)
|
540
|
+
{
|
541
|
+
MYSQL* m = GetHandler(obj);
|
542
|
+
VALUE level;
|
543
|
+
|
544
|
+
rb_scan_args(argc, argv, "01", &level);
|
545
|
+
#if MYSQL_VERSION_ID >= 40103
|
546
|
+
if (mysql_shutdown(m, NIL_P(level) ? SHUTDOWN_DEFAULT : NUM2INT(level)) != 0)
|
547
|
+
#else
|
548
|
+
if (mysql_shutdown(m) != 0)
|
549
|
+
#endif
|
550
|
+
mysql_raise(m);
|
551
|
+
return obj;
|
552
|
+
}
|
553
|
+
|
554
|
+
/* stat() */
|
555
|
+
static VALUE my_stat(VALUE obj)
|
556
|
+
{
|
557
|
+
MYSQL* m = GetHandler(obj);
|
558
|
+
const char* s = mysql_stat(m);
|
559
|
+
if (s == NULL)
|
560
|
+
mysql_raise(m);
|
561
|
+
return rb_tainted_str_new2(s);
|
562
|
+
}
|
563
|
+
|
564
|
+
/* store_result() */
|
565
|
+
static VALUE store_result(VALUE obj)
|
566
|
+
{
|
567
|
+
MYSQL* m = GetHandler(obj);
|
568
|
+
MYSQL_RES* res = mysql_store_result(m);
|
569
|
+
if (res == NULL)
|
570
|
+
mysql_raise(m);
|
571
|
+
return mysqlres2obj(res);
|
572
|
+
}
|
573
|
+
|
574
|
+
/* thread_id() */
|
575
|
+
static VALUE thread_id(VALUE obj)
|
576
|
+
{
|
577
|
+
return INT2NUM(mysql_thread_id(GetHandler(obj)));
|
578
|
+
}
|
579
|
+
|
580
|
+
/* use_result() */
|
581
|
+
static VALUE use_result(VALUE obj)
|
582
|
+
{
|
583
|
+
MYSQL* m = GetHandler(obj);
|
584
|
+
MYSQL_RES* res = mysql_use_result(m);
|
585
|
+
if (res == NULL)
|
586
|
+
mysql_raise(m);
|
587
|
+
return mysqlres2obj(res);
|
588
|
+
}
|
589
|
+
|
590
|
+
/* query(sql) */
|
591
|
+
static VALUE query(VALUE obj, VALUE sql)
|
592
|
+
{
|
593
|
+
MYSQL* m = GetHandler(obj);
|
594
|
+
Check_Type(sql, T_STRING);
|
595
|
+
if (mysql_real_query(m, RSTRING(sql)->ptr, RSTRING(sql)->len) != 0)
|
596
|
+
mysql_raise(m);
|
597
|
+
if (GetMysqlStruct(obj)->query_with_result == Qfalse)
|
598
|
+
return obj;
|
599
|
+
if (mysql_field_count(m) == 0)
|
600
|
+
return Qnil;
|
601
|
+
return store_result(obj);
|
602
|
+
}
|
603
|
+
|
604
|
+
#if MYSQL_VERSION_ID >= 40100
|
605
|
+
/* server_version() */
|
606
|
+
static VALUE server_version(VALUE obj)
|
607
|
+
{
|
608
|
+
return INT2NUM(mysql_get_server_version(GetHandler(obj)));
|
609
|
+
}
|
610
|
+
|
611
|
+
/* warning_count() */
|
612
|
+
static VALUE warning_count(VALUE obj)
|
613
|
+
{
|
614
|
+
return INT2NUM(mysql_warning_count(GetHandler(obj)));
|
615
|
+
}
|
616
|
+
|
617
|
+
/* commit() */
|
618
|
+
static VALUE commit(VALUE obj)
|
619
|
+
{
|
620
|
+
MYSQL* m = GetHandler(obj);
|
621
|
+
if (mysql_commit(m) != 0)
|
622
|
+
mysql_raise(m);
|
623
|
+
return obj;
|
624
|
+
}
|
625
|
+
|
626
|
+
/* rollback() */
|
627
|
+
static VALUE rollback(VALUE obj)
|
628
|
+
{
|
629
|
+
MYSQL* m = GetHandler(obj);
|
630
|
+
if (mysql_rollback(m) != 0)
|
631
|
+
mysql_raise(m);
|
632
|
+
return obj;
|
633
|
+
}
|
634
|
+
|
635
|
+
/* autocommit() */
|
636
|
+
static VALUE autocommit(VALUE obj, VALUE mode)
|
637
|
+
{
|
638
|
+
MYSQL* m = GetHandler(obj);
|
639
|
+
int f;
|
640
|
+
f = (mode == Qnil || mode == Qfalse || NUM2INT(mode) == 0) ? 0 : 1;
|
641
|
+
if (mysql_autocommit(m, f) != 0)
|
642
|
+
mysql_raise(m);
|
643
|
+
return obj;
|
644
|
+
}
|
645
|
+
#endif
|
646
|
+
|
647
|
+
#ifdef HAVE_MYSQL_SSL_SET
|
648
|
+
/* ssl_set(key=nil, cert=nil, ca=nil, capath=nil, cipher=nil) */
|
649
|
+
static VALUE ssl_set(int argc, VALUE* argv, VALUE obj)
|
650
|
+
{
|
651
|
+
VALUE key, cert, ca, capath, cipher;
|
652
|
+
char *s_key, *s_cert, *s_ca, *s_capath, *s_cipher;
|
653
|
+
MYSQL* m = GetHandler(obj);
|
654
|
+
rb_scan_args(argc, argv, "05", &key, &cert, &ca, &capath, &cipher);
|
655
|
+
s_key = NILorSTRING(key);
|
656
|
+
s_cert = NILorSTRING(cert);
|
657
|
+
s_ca = NILorSTRING(ca);
|
658
|
+
s_capath = NILorSTRING(capath);
|
659
|
+
s_cipher = NILorSTRING(cipher);
|
660
|
+
mysql_ssl_set(m, s_key, s_cert, s_ca, s_capath, s_cipher);
|
661
|
+
return obj;
|
662
|
+
}
|
663
|
+
#endif
|
664
|
+
|
665
|
+
/* query_with_result() */
|
666
|
+
static VALUE query_with_result(VALUE obj)
|
667
|
+
{
|
668
|
+
return GetMysqlStruct(obj)->query_with_result? Qtrue: Qfalse;
|
669
|
+
}
|
670
|
+
|
671
|
+
/* query_with_result=(flag) */
|
672
|
+
static VALUE query_with_result_set(VALUE obj, VALUE flag)
|
673
|
+
{
|
674
|
+
if (TYPE(flag) != T_TRUE && TYPE(flag) != T_FALSE)
|
675
|
+
#if RUBY_VERSION_CODE < 160
|
676
|
+
TypeError("invalid type, required true or false.");
|
677
|
+
#else
|
678
|
+
rb_raise(rb_eTypeError, "invalid type, required true or false.");
|
679
|
+
#endif
|
680
|
+
GetMysqlStruct(obj)->query_with_result = flag;
|
681
|
+
return flag;
|
682
|
+
}
|
683
|
+
|
684
|
+
/*-------------------------------
|
685
|
+
* Mysql::Result object method
|
686
|
+
*/
|
687
|
+
|
688
|
+
/* check if alread freed */
|
689
|
+
static void check_free(VALUE obj)
|
690
|
+
{
|
691
|
+
struct mysql_res* resp = DATA_PTR(obj);
|
692
|
+
if (resp->freed == Qtrue)
|
693
|
+
rb_raise(eMysql, "Mysql::Result object is already freed");
|
694
|
+
}
|
695
|
+
|
696
|
+
/* data_seek(offset) */
|
697
|
+
static VALUE data_seek(VALUE obj, VALUE offset)
|
698
|
+
{
|
699
|
+
check_free(obj);
|
700
|
+
mysql_data_seek(GetMysqlRes(obj), NUM2INT(offset));
|
701
|
+
return obj;
|
702
|
+
}
|
703
|
+
|
704
|
+
/* fetch_field() */
|
705
|
+
static VALUE fetch_field(VALUE obj)
|
706
|
+
{
|
707
|
+
check_free(obj);
|
708
|
+
return make_field_obj(mysql_fetch_field(GetMysqlRes(obj)));
|
709
|
+
}
|
710
|
+
|
711
|
+
/* fetch_fields() */
|
712
|
+
static VALUE fetch_fields(VALUE obj)
|
713
|
+
{
|
714
|
+
MYSQL_RES* res;
|
715
|
+
MYSQL_FIELD* f;
|
716
|
+
unsigned int n;
|
717
|
+
VALUE ret;
|
718
|
+
unsigned int i;
|
719
|
+
check_free(obj);
|
720
|
+
res = GetMysqlRes(obj);
|
721
|
+
f = mysql_fetch_fields(res);
|
722
|
+
n = mysql_num_fields(res);
|
723
|
+
ret = rb_ary_new2(n);
|
724
|
+
for (i=0; i<n; i++)
|
725
|
+
rb_ary_store(ret, i, make_field_obj(&f[i]));
|
726
|
+
return ret;
|
727
|
+
}
|
728
|
+
|
729
|
+
/* fetch_field_direct(nr) */
|
730
|
+
static VALUE fetch_field_direct(VALUE obj, VALUE nr)
|
731
|
+
{
|
732
|
+
MYSQL_RES* res;
|
733
|
+
unsigned int max;
|
734
|
+
unsigned int n;
|
735
|
+
check_free(obj);
|
736
|
+
res = GetMysqlRes(obj);
|
737
|
+
max = mysql_num_fields(res);
|
738
|
+
n = NUM2INT(nr);
|
739
|
+
if (n >= max)
|
740
|
+
#if RUBY_VERSION_CODE < 160
|
741
|
+
Raise(eMysql, "%d: out of range (max: %d)", n, max-1);
|
742
|
+
#else
|
743
|
+
rb_raise(eMysql, "%d: out of range (max: %d)", n, max-1);
|
744
|
+
#endif
|
745
|
+
#if MYSQL_VERSION_ID >= 32226
|
746
|
+
return make_field_obj(mysql_fetch_field_direct(res, n));
|
747
|
+
#else
|
748
|
+
return make_field_obj(&mysql_fetch_field_direct(res, n));
|
749
|
+
#endif
|
750
|
+
}
|
751
|
+
|
752
|
+
/* fetch_lengths() */
|
753
|
+
static VALUE fetch_lengths(VALUE obj)
|
754
|
+
{
|
755
|
+
MYSQL_RES* res;
|
756
|
+
unsigned int n;
|
757
|
+
unsigned long* lengths;
|
758
|
+
VALUE ary;
|
759
|
+
unsigned int i;
|
760
|
+
check_free(obj);
|
761
|
+
res = GetMysqlRes(obj);
|
762
|
+
n = mysql_num_fields(res);
|
763
|
+
lengths = mysql_fetch_lengths(res);
|
764
|
+
if (lengths == NULL)
|
765
|
+
return Qnil;
|
766
|
+
ary = rb_ary_new2(n);
|
767
|
+
for (i=0; i<n; i++)
|
768
|
+
rb_ary_store(ary, i, INT2NUM(lengths[i]));
|
769
|
+
return ary;
|
770
|
+
}
|
771
|
+
|
772
|
+
/* fetch_row() */
|
773
|
+
static VALUE fetch_row(VALUE obj)
|
774
|
+
{
|
775
|
+
MYSQL_RES* res;
|
776
|
+
unsigned int n;
|
777
|
+
MYSQL_ROW row;
|
778
|
+
unsigned long* lengths;
|
779
|
+
VALUE ary;
|
780
|
+
unsigned int i;
|
781
|
+
check_free(obj);
|
782
|
+
res = GetMysqlRes(obj);
|
783
|
+
n = mysql_num_fields(res);
|
784
|
+
row = mysql_fetch_row(res);
|
785
|
+
lengths = mysql_fetch_lengths(res);
|
786
|
+
if (row == NULL)
|
787
|
+
return Qnil;
|
788
|
+
ary = rb_ary_new2(n);
|
789
|
+
for (i=0; i<n; i++)
|
790
|
+
rb_ary_store(ary, i, row[i]? rb_tainted_str_new(row[i], lengths[i]): Qnil);
|
791
|
+
return ary;
|
792
|
+
}
|
793
|
+
|
794
|
+
/* fetch_hash2 (internal) */
|
795
|
+
static VALUE fetch_hash2(VALUE obj, VALUE with_table)
|
796
|
+
{
|
797
|
+
MYSQL_RES* res = GetMysqlRes(obj);
|
798
|
+
unsigned int n = mysql_num_fields(res);
|
799
|
+
MYSQL_ROW row = mysql_fetch_row(res);
|
800
|
+
unsigned long* lengths = mysql_fetch_lengths(res);
|
801
|
+
MYSQL_FIELD* fields = mysql_fetch_fields(res);
|
802
|
+
unsigned int i;
|
803
|
+
VALUE hash;
|
804
|
+
if (row == NULL)
|
805
|
+
return Qnil;
|
806
|
+
hash = rb_hash_new();
|
807
|
+
for (i=0; i<n; i++) {
|
808
|
+
VALUE col;
|
809
|
+
if (row[i] == NULL)
|
810
|
+
continue;
|
811
|
+
if (with_table == Qnil || with_table == Qfalse)
|
812
|
+
col = rb_tainted_str_new2(fields[i].name);
|
813
|
+
else {
|
814
|
+
col = rb_tainted_str_new(fields[i].table, strlen(fields[i].table)+strlen(fields[i].name)+1);
|
815
|
+
RSTRING(col)->ptr[strlen(fields[i].table)] = '.';
|
816
|
+
strcpy(RSTRING(col)->ptr+strlen(fields[i].table)+1, fields[i].name);
|
817
|
+
}
|
818
|
+
rb_hash_aset(hash, col, row[i]? rb_tainted_str_new(row[i], lengths[i]): Qnil);
|
819
|
+
}
|
820
|
+
return hash;
|
821
|
+
}
|
822
|
+
|
823
|
+
/* fetch_hash(with_table=false) */
|
824
|
+
static VALUE fetch_hash(int argc, VALUE* argv, VALUE obj)
|
825
|
+
{
|
826
|
+
VALUE with_table;
|
827
|
+
check_free(obj);
|
828
|
+
rb_scan_args(argc, argv, "01", &with_table);
|
829
|
+
if (with_table == Qnil)
|
830
|
+
with_table = Qfalse;
|
831
|
+
return fetch_hash2(obj, with_table);
|
832
|
+
}
|
833
|
+
|
834
|
+
/* field_seek(offset) */
|
835
|
+
static VALUE field_seek(VALUE obj, VALUE offset)
|
836
|
+
{
|
837
|
+
check_free(obj);
|
838
|
+
return INT2NUM(mysql_field_seek(GetMysqlRes(obj), NUM2INT(offset)));
|
839
|
+
}
|
840
|
+
|
841
|
+
/* field_tell() */
|
842
|
+
static VALUE field_tell(VALUE obj)
|
843
|
+
{
|
844
|
+
check_free(obj);
|
845
|
+
return INT2NUM(mysql_field_tell(GetMysqlRes(obj)));
|
846
|
+
}
|
847
|
+
|
848
|
+
/* free() */
|
849
|
+
static VALUE res_free(VALUE obj)
|
850
|
+
{
|
851
|
+
struct mysql_res* resp = DATA_PTR(obj);
|
852
|
+
check_free(obj);
|
853
|
+
mysql_free_result(resp->res);
|
854
|
+
resp->freed = Qtrue;
|
855
|
+
store_result_count--;
|
856
|
+
return Qnil;
|
857
|
+
}
|
858
|
+
|
859
|
+
/* num_fields() */
|
860
|
+
static VALUE num_fields(VALUE obj)
|
861
|
+
{
|
862
|
+
check_free(obj);
|
863
|
+
return INT2NUM(mysql_num_fields(GetMysqlRes(obj)));
|
864
|
+
}
|
865
|
+
|
866
|
+
/* num_rows() */
|
867
|
+
static VALUE num_rows(VALUE obj)
|
868
|
+
{
|
869
|
+
check_free(obj);
|
870
|
+
return INT2NUM(mysql_num_rows(GetMysqlRes(obj)));
|
871
|
+
}
|
872
|
+
|
873
|
+
/* row_seek(offset) */
|
874
|
+
static VALUE row_seek(VALUE obj, VALUE offset)
|
875
|
+
{
|
876
|
+
check_free(obj);
|
877
|
+
return INT2NUM((int)mysql_row_seek(GetMysqlRes(obj), (MYSQL_ROWS*)NUM2INT(offset)));
|
878
|
+
}
|
879
|
+
|
880
|
+
/* row_tell() */
|
881
|
+
static VALUE row_tell(VALUE obj)
|
882
|
+
{
|
883
|
+
check_free(obj);
|
884
|
+
return INT2NUM((int)mysql_row_tell(GetMysqlRes(obj)));
|
885
|
+
}
|
886
|
+
|
887
|
+
/* each {...} */
|
888
|
+
static VALUE each(VALUE obj)
|
889
|
+
{
|
890
|
+
VALUE row;
|
891
|
+
check_free(obj);
|
892
|
+
while ((row = fetch_row(obj)) != Qnil)
|
893
|
+
rb_yield(row);
|
894
|
+
return obj;
|
895
|
+
}
|
896
|
+
|
897
|
+
/* each_hash(with_table=false) {...} */
|
898
|
+
static VALUE each_hash(int argc, VALUE* argv, VALUE obj)
|
899
|
+
{
|
900
|
+
VALUE with_table;
|
901
|
+
VALUE hash;
|
902
|
+
check_free(obj);
|
903
|
+
rb_scan_args(argc, argv, "01", &with_table);
|
904
|
+
if (with_table == Qnil)
|
905
|
+
with_table = Qfalse;
|
906
|
+
while ((hash = fetch_hash2(obj, with_table)) != Qnil)
|
907
|
+
rb_yield(hash);
|
908
|
+
return obj;
|
909
|
+
}
|
910
|
+
|
911
|
+
/*-------------------------------
|
912
|
+
* Mysql::Field object method
|
913
|
+
*/
|
914
|
+
|
915
|
+
/* hash */
|
916
|
+
static VALUE field_hash(VALUE obj)
|
917
|
+
{
|
918
|
+
VALUE h = rb_hash_new();
|
919
|
+
rb_hash_aset(h, rb_str_new2("name"), rb_iv_get(obj, "name"));
|
920
|
+
rb_hash_aset(h, rb_str_new2("table"), rb_iv_get(obj, "table"));
|
921
|
+
rb_hash_aset(h, rb_str_new2("def"), rb_iv_get(obj, "def"));
|
922
|
+
rb_hash_aset(h, rb_str_new2("type"), rb_iv_get(obj, "type"));
|
923
|
+
rb_hash_aset(h, rb_str_new2("length"), rb_iv_get(obj, "length"));
|
924
|
+
rb_hash_aset(h, rb_str_new2("max_length"), rb_iv_get(obj, "max_length"));
|
925
|
+
rb_hash_aset(h, rb_str_new2("flags"), rb_iv_get(obj, "flags"));
|
926
|
+
rb_hash_aset(h, rb_str_new2("decimals"), rb_iv_get(obj, "decimals"));
|
927
|
+
return h;
|
928
|
+
}
|
929
|
+
|
930
|
+
/* inspect */
|
931
|
+
static VALUE field_inspect(VALUE obj)
|
932
|
+
{
|
933
|
+
VALUE n = rb_iv_get(obj, "name");
|
934
|
+
VALUE s = rb_str_new(0, RSTRING(n)->len + 14);
|
935
|
+
sprintf(RSTRING(s)->ptr, "#<Mysql::Field:%s>", RSTRING(n)->ptr);
|
936
|
+
return s;
|
937
|
+
}
|
938
|
+
|
939
|
+
#define DefineMysqlFieldMemberMethod(m)\
|
940
|
+
static VALUE field_##m(VALUE obj)\
|
941
|
+
{return rb_iv_get(obj, #m);}
|
942
|
+
|
943
|
+
DefineMysqlFieldMemberMethod(name)
|
944
|
+
DefineMysqlFieldMemberMethod(table)
|
945
|
+
DefineMysqlFieldMemberMethod(def)
|
946
|
+
DefineMysqlFieldMemberMethod(type)
|
947
|
+
DefineMysqlFieldMemberMethod(length)
|
948
|
+
DefineMysqlFieldMemberMethod(max_length)
|
949
|
+
DefineMysqlFieldMemberMethod(flags)
|
950
|
+
DefineMysqlFieldMemberMethod(decimals)
|
951
|
+
|
952
|
+
#ifdef IS_NUM
|
953
|
+
/* is_num? */
|
954
|
+
static VALUE field_is_num(VALUE obj)
|
955
|
+
{
|
956
|
+
return IS_NUM(NUM2INT(rb_iv_get(obj, "type"))) ? Qtrue : Qfalse;
|
957
|
+
}
|
958
|
+
#endif
|
959
|
+
|
960
|
+
#ifdef IS_NOT_NULL
|
961
|
+
/* is_not_null? */
|
962
|
+
static VALUE field_is_not_null(VALUE obj)
|
963
|
+
{
|
964
|
+
return IS_NOT_NULL(NUM2INT(rb_iv_get(obj, "flags"))) ? Qtrue : Qfalse;
|
965
|
+
}
|
966
|
+
#endif
|
967
|
+
|
968
|
+
#ifdef IS_PRI_KEY
|
969
|
+
/* is_pri_key? */
|
970
|
+
static VALUE field_is_pri_key(VALUE obj)
|
971
|
+
{
|
972
|
+
return IS_PRI_KEY(NUM2INT(rb_iv_get(obj, "flags"))) ? Qtrue : Qfalse;
|
973
|
+
}
|
974
|
+
#endif
|
975
|
+
|
976
|
+
|
977
|
+
/*-------------------------------
|
978
|
+
* Mysql::Error object method
|
979
|
+
*/
|
980
|
+
|
981
|
+
static VALUE error_error(VALUE obj)
|
982
|
+
{
|
983
|
+
return rb_iv_get(obj, "mesg");
|
984
|
+
}
|
985
|
+
|
986
|
+
static VALUE error_errno(VALUE obj)
|
987
|
+
{
|
988
|
+
return rb_iv_get(obj, "errno");
|
989
|
+
}
|
990
|
+
|
991
|
+
/*-------------------------------
|
992
|
+
* Initialize
|
993
|
+
*/
|
994
|
+
|
995
|
+
void Init_mysql(void)
|
996
|
+
{
|
997
|
+
cMysql = rb_define_class("Mysql", rb_cObject);
|
998
|
+
cMysqlRes = rb_define_class_under(cMysql, "Result", rb_cObject);
|
999
|
+
cMysqlField = rb_define_class_under(cMysql, "Field", rb_cObject);
|
1000
|
+
eMysql = rb_define_class_under(cMysql, "Error", rb_eStandardError);
|
1001
|
+
|
1002
|
+
rb_define_global_const("MysqlRes", cMysqlRes);
|
1003
|
+
rb_define_global_const("MysqlField", cMysqlField);
|
1004
|
+
rb_define_global_const("MysqlError", eMysql);
|
1005
|
+
|
1006
|
+
/* Mysql class method */
|
1007
|
+
rb_define_singleton_method(cMysql, "init", init, 0);
|
1008
|
+
rb_define_singleton_method(cMysql, "real_connect", real_connect, -1);
|
1009
|
+
rb_define_singleton_method(cMysql, "connect", real_connect, -1);
|
1010
|
+
rb_define_singleton_method(cMysql, "new", real_connect, -1);
|
1011
|
+
rb_define_singleton_method(cMysql, "escape_string", escape_string, 1);
|
1012
|
+
rb_define_singleton_method(cMysql, "quote", escape_string, 1);
|
1013
|
+
rb_define_singleton_method(cMysql, "client_info", client_info, 0);
|
1014
|
+
rb_define_singleton_method(cMysql, "get_client_info", client_info, 0);
|
1015
|
+
#if MYSQL_VERSION_ID >= 32332
|
1016
|
+
rb_define_singleton_method(cMysql, "debug", my_debug, 1);
|
1017
|
+
#endif
|
1018
|
+
#if MYSQL_VERSION_ID >= 40000
|
1019
|
+
rb_define_singleton_method(cMysql, "get_client_version", client_version, 0);
|
1020
|
+
rb_define_singleton_method(cMysql, "client_version", client_version, 0);
|
1021
|
+
#endif
|
1022
|
+
|
1023
|
+
/* Mysql object method */
|
1024
|
+
#if MYSQL_VERSION_ID >= 32200
|
1025
|
+
rb_define_method(cMysql, "real_connect", real_connect2, -1);
|
1026
|
+
rb_define_method(cMysql, "connect", real_connect2, -1);
|
1027
|
+
rb_define_method(cMysql, "options", options, -1);
|
1028
|
+
#endif
|
1029
|
+
rb_define_method(cMysql, "initialize", initialize, -1);
|
1030
|
+
#if MYSQL_VERSION_ID >= 32332
|
1031
|
+
rb_define_method(cMysql, "escape_string", real_escape_string, 1);
|
1032
|
+
rb_define_method(cMysql, "quote", real_escape_string, 1);
|
1033
|
+
#else
|
1034
|
+
rb_define_method(cMysql, "escape_string", escape_string, 1);
|
1035
|
+
rb_define_method(cMysql, "quote", escape_string, 1);
|
1036
|
+
#endif
|
1037
|
+
rb_define_method(cMysql, "client_info", client_info, 0);
|
1038
|
+
rb_define_method(cMysql, "get_client_info", client_info, 0);
|
1039
|
+
rb_define_method(cMysql, "affected_rows", affected_rows, 0);
|
1040
|
+
#if MYSQL_VERSION_ID >= 32303
|
1041
|
+
rb_define_method(cMysql, "change_user", change_user, -1);
|
1042
|
+
#endif
|
1043
|
+
#if MYSQL_VERSION_ID >= 32321
|
1044
|
+
rb_define_method(cMysql, "character_set_name", character_set_name, 0);
|
1045
|
+
#endif
|
1046
|
+
rb_define_method(cMysql, "close", my_close, 0);
|
1047
|
+
#if MYSQL_VERSION_ID < 40000
|
1048
|
+
rb_define_method(cMysql, "create_db", create_db, 1);
|
1049
|
+
rb_define_method(cMysql, "drop_db", drop_db, 1);
|
1050
|
+
#endif
|
1051
|
+
#if MYSQL_VERSION_ID >= 32332
|
1052
|
+
rb_define_method(cMysql, "dump_debug_info", dump_debug_info, 0);
|
1053
|
+
#endif
|
1054
|
+
rb_define_method(cMysql, "errno", my_errno, 0);
|
1055
|
+
rb_define_method(cMysql, "error", my_error, 0);
|
1056
|
+
rb_define_method(cMysql, "field_count", field_count, 0);
|
1057
|
+
#if MYSQL_VERSION_ID >= 40000
|
1058
|
+
rb_define_method(cMysql, "get_client_version", client_version, 0);
|
1059
|
+
rb_define_method(cMysql, "client_version", client_version, 0);
|
1060
|
+
#endif
|
1061
|
+
rb_define_method(cMysql, "get_host_info", host_info, 0);
|
1062
|
+
rb_define_method(cMysql, "host_info", host_info, 0);
|
1063
|
+
rb_define_method(cMysql, "get_proto_info", proto_info, 0);
|
1064
|
+
rb_define_method(cMysql, "proto_info", proto_info, 0);
|
1065
|
+
rb_define_method(cMysql, "get_server_info", server_info, 0);
|
1066
|
+
rb_define_method(cMysql, "server_info", server_info, 0);
|
1067
|
+
rb_define_method(cMysql, "info", info, 0);
|
1068
|
+
rb_define_method(cMysql, "insert_id", insert_id, 0);
|
1069
|
+
rb_define_method(cMysql, "kill", my_kill, 1);
|
1070
|
+
rb_define_method(cMysql, "list_dbs", list_dbs, -1);
|
1071
|
+
rb_define_method(cMysql, "list_fields", list_fields, -1);
|
1072
|
+
rb_define_method(cMysql, "list_processes", list_processes, 0);
|
1073
|
+
rb_define_method(cMysql, "list_tables", list_tables, -1);
|
1074
|
+
#if MYSQL_VERSION_ID >= 32200
|
1075
|
+
rb_define_method(cMysql, "ping", ping, 0);
|
1076
|
+
#endif
|
1077
|
+
rb_define_method(cMysql, "query", query, 1);
|
1078
|
+
rb_define_method(cMysql, "refresh", refresh, 1);
|
1079
|
+
rb_define_method(cMysql, "reload", reload, 0);
|
1080
|
+
rb_define_method(cMysql, "select_db", select_db, 1);
|
1081
|
+
rb_define_method(cMysql, "shutdown", my_shutdown, -1);
|
1082
|
+
rb_define_method(cMysql, "stat", my_stat, 0);
|
1083
|
+
rb_define_method(cMysql, "store_result", store_result, 0);
|
1084
|
+
rb_define_method(cMysql, "thread_id", thread_id, 0);
|
1085
|
+
rb_define_method(cMysql, "use_result", use_result, 0);
|
1086
|
+
#if MYSQL_VERSION_ID >= 40100
|
1087
|
+
rb_define_method(cMysql, "get_server_version", server_version, 0);
|
1088
|
+
rb_define_method(cMysql, "server_version", server_version, 0);
|
1089
|
+
rb_define_method(cMysql, "warning_count", warning_count, 0);
|
1090
|
+
rb_define_method(cMysql, "commit", commit, 0);
|
1091
|
+
rb_define_method(cMysql, "rollback", rollback, 0);
|
1092
|
+
rb_define_method(cMysql, "autocommit", autocommit, 1);
|
1093
|
+
#endif
|
1094
|
+
#ifdef HAVE_MYSQL_SSL_SET
|
1095
|
+
rb_define_method(cMysql, "ssl_set", ssl_set, -1);
|
1096
|
+
#endif
|
1097
|
+
rb_define_method(cMysql, "query_with_result", query_with_result, 0);
|
1098
|
+
rb_define_method(cMysql, "query_with_result=", query_with_result_set, 1);
|
1099
|
+
|
1100
|
+
/* Mysql constant */
|
1101
|
+
#if MYSQL_VERSION_ID >= 32200
|
1102
|
+
rb_define_const(cMysql, "OPT_CONNECT_TIMEOUT", INT2NUM(MYSQL_OPT_CONNECT_TIMEOUT));
|
1103
|
+
rb_define_const(cMysql, "OPT_COMPRESS", INT2NUM(MYSQL_OPT_COMPRESS));
|
1104
|
+
rb_define_const(cMysql, "OPT_NAMED_PIPE", INT2NUM(MYSQL_OPT_NAMED_PIPE));
|
1105
|
+
rb_define_const(cMysql, "INIT_COMMAND", INT2NUM(MYSQL_INIT_COMMAND));
|
1106
|
+
rb_define_const(cMysql, "READ_DEFAULT_FILE", INT2NUM(MYSQL_READ_DEFAULT_FILE));
|
1107
|
+
rb_define_const(cMysql, "READ_DEFAULT_GROUP", INT2NUM(MYSQL_READ_DEFAULT_GROUP));
|
1108
|
+
#endif
|
1109
|
+
#if MYSQL_VERSION_ID >= 32349
|
1110
|
+
rb_define_const(cMysql, "OPT_LOCAL_INFILE", INT2NUM(MYSQL_OPT_LOCAL_INFILE));
|
1111
|
+
#endif
|
1112
|
+
rb_define_const(cMysql, "REFRESH_GRANT", INT2NUM(REFRESH_GRANT));
|
1113
|
+
rb_define_const(cMysql, "REFRESH_LOG", INT2NUM(REFRESH_LOG));
|
1114
|
+
rb_define_const(cMysql, "REFRESH_TABLES", INT2NUM(REFRESH_TABLES));
|
1115
|
+
#ifdef REFRESH_HOSTS
|
1116
|
+
rb_define_const(cMysql, "REFRESH_HOSTS", INT2NUM(REFRESH_HOSTS));
|
1117
|
+
#endif
|
1118
|
+
#ifdef REFRESH_STATUS
|
1119
|
+
rb_define_const(cMysql, "REFRESH_STATUS", INT2NUM(REFRESH_STATUS));
|
1120
|
+
#endif
|
1121
|
+
#ifdef REFRESH_THREADS
|
1122
|
+
rb_define_const(cMysql, "REFRESH_THREADS", INT2NUM(REFRESH_THREADS));
|
1123
|
+
#endif
|
1124
|
+
#ifdef REFRESH_SLAVE
|
1125
|
+
rb_define_const(cMysql, "REFRESH_SLAVE", INT2NUM(REFRESH_SLAVE));
|
1126
|
+
#endif
|
1127
|
+
#ifdef REFRESH_MASTER
|
1128
|
+
rb_define_const(cMysql, "REFRESH_MASTER", INT2NUM(REFRESH_MASTER));
|
1129
|
+
#endif
|
1130
|
+
#ifdef CLIENT_LONG_PASSWORD
|
1131
|
+
#endif
|
1132
|
+
#ifdef CLIENT_FOUND_ROWS
|
1133
|
+
rb_define_const(cMysql, "CLIENT_FOUND_ROWS", INT2NUM(CLIENT_FOUND_ROWS));
|
1134
|
+
#endif
|
1135
|
+
#ifdef CLIENT_LONG_FLAG
|
1136
|
+
#endif
|
1137
|
+
#ifdef CLIENT_CONNECT_WITH_DB
|
1138
|
+
#endif
|
1139
|
+
#ifdef CLIENT_NO_SCHEMA
|
1140
|
+
rb_define_const(cMysql, "CLIENT_NO_SCHEMA", INT2NUM(CLIENT_NO_SCHEMA));
|
1141
|
+
#endif
|
1142
|
+
#ifdef CLIENT_COMPRESS
|
1143
|
+
rb_define_const(cMysql, "CLIENT_COMPRESS", INT2NUM(CLIENT_COMPRESS));
|
1144
|
+
#endif
|
1145
|
+
#ifdef CLIENT_ODBC
|
1146
|
+
rb_define_const(cMysql, "CLIENT_ODBC", INT2NUM(CLIENT_ODBC));
|
1147
|
+
#endif
|
1148
|
+
#ifdef CLIENT_LOCAL_FILES
|
1149
|
+
rb_define_const(cMysql, "CLIENT_LOCAL_FILES", INT2NUM(CLIENT_LOCAL_FILES));
|
1150
|
+
#endif
|
1151
|
+
#ifdef CLIENT_IGNORE_SPACE
|
1152
|
+
rb_define_const(cMysql, "CLIENT_IGNORE_SPACE", INT2NUM(CLIENT_IGNORE_SPACE));
|
1153
|
+
#endif
|
1154
|
+
#ifdef CLIENT_CHANGE_USER
|
1155
|
+
rb_define_const(cMysql, "CLIENT_CHANGE_USER", INT2NUM(CLIENT_CHANGE_USER));
|
1156
|
+
#endif
|
1157
|
+
#ifdef CLIENT_INTERACTIVE
|
1158
|
+
rb_define_const(cMysql, "CLIENT_INTERACTIVE", INT2NUM(CLIENT_INTERACTIVE));
|
1159
|
+
#endif
|
1160
|
+
#ifdef CLIENT_SSL
|
1161
|
+
rb_define_const(cMysql, "CLIENT_SSL", INT2NUM(CLIENT_SSL));
|
1162
|
+
#endif
|
1163
|
+
#ifdef CLIENT_IGNORE_SIGPIPE
|
1164
|
+
rb_define_const(cMysql, "CLIENT_IGNORE_SIGPIPE", INT2NUM(CLIENT_IGNORE_SIGPIPE));
|
1165
|
+
#endif
|
1166
|
+
#ifdef CLIENT_TRANSACTIONS
|
1167
|
+
rb_define_const(cMysql, "CLIENT_TRANSACTIONS", INT2NUM(CLIENT_TRANSACTIONS));
|
1168
|
+
#endif
|
1169
|
+
|
1170
|
+
/* Mysql::Result object method */
|
1171
|
+
rb_define_method(cMysqlRes, "data_seek", data_seek, 1);
|
1172
|
+
rb_define_method(cMysqlRes, "fetch_field", fetch_field, 0);
|
1173
|
+
rb_define_method(cMysqlRes, "fetch_fields", fetch_fields, 0);
|
1174
|
+
rb_define_method(cMysqlRes, "fetch_field_direct", fetch_field_direct, 1);
|
1175
|
+
rb_define_method(cMysqlRes, "fetch_lengths", fetch_lengths, 0);
|
1176
|
+
rb_define_method(cMysqlRes, "fetch_row", fetch_row, 0);
|
1177
|
+
rb_define_method(cMysqlRes, "fetch_hash", fetch_hash, -1);
|
1178
|
+
rb_define_method(cMysqlRes, "field_seek", field_seek, 1);
|
1179
|
+
rb_define_method(cMysqlRes, "field_tell", field_tell, 0);
|
1180
|
+
rb_define_method(cMysqlRes, "free", res_free, 0);
|
1181
|
+
rb_define_method(cMysqlRes, "num_fields", num_fields, 0);
|
1182
|
+
rb_define_method(cMysqlRes, "num_rows", num_rows, 0);
|
1183
|
+
rb_define_method(cMysqlRes, "row_seek", row_seek, 1);
|
1184
|
+
rb_define_method(cMysqlRes, "row_tell", row_tell, 0);
|
1185
|
+
rb_define_method(cMysqlRes, "each", each, 0);
|
1186
|
+
rb_define_method(cMysqlRes, "each_hash", each_hash, -1);
|
1187
|
+
|
1188
|
+
/* MysqlField object method */
|
1189
|
+
rb_define_method(cMysqlField, "name", field_name, 0);
|
1190
|
+
rb_define_method(cMysqlField, "table", field_table, 0);
|
1191
|
+
rb_define_method(cMysqlField, "def", field_def, 0);
|
1192
|
+
rb_define_method(cMysqlField, "type", field_type, 0);
|
1193
|
+
rb_define_method(cMysqlField, "length", field_length, 0);
|
1194
|
+
rb_define_method(cMysqlField, "max_length", field_max_length, 0);
|
1195
|
+
rb_define_method(cMysqlField, "flags", field_flags, 0);
|
1196
|
+
rb_define_method(cMysqlField, "decimals", field_decimals, 0);
|
1197
|
+
rb_define_method(cMysqlField, "hash", field_hash, 0);
|
1198
|
+
rb_define_method(cMysqlField, "inspect", field_inspect, 0);
|
1199
|
+
#ifdef IS_NUM
|
1200
|
+
rb_define_method(cMysqlField, "is_num?", field_is_num, 0);
|
1201
|
+
#endif
|
1202
|
+
#ifdef IS_NOT_NULL
|
1203
|
+
rb_define_method(cMysqlField, "is_not_null?", field_is_not_null, 0);
|
1204
|
+
#endif
|
1205
|
+
#ifdef IS_PRI_KEY
|
1206
|
+
rb_define_method(cMysqlField, "is_pri_key?", field_is_pri_key, 0);
|
1207
|
+
#endif
|
1208
|
+
|
1209
|
+
/* Mysql::Field constant: TYPE */
|
1210
|
+
rb_define_const(cMysqlField, "TYPE_TINY", INT2NUM(FIELD_TYPE_TINY));
|
1211
|
+
#if MYSQL_VERSION_ID >= 32115
|
1212
|
+
rb_define_const(cMysqlField, "TYPE_ENUM", INT2NUM(FIELD_TYPE_ENUM));
|
1213
|
+
#endif
|
1214
|
+
rb_define_const(cMysqlField, "TYPE_DECIMAL", INT2NUM(FIELD_TYPE_DECIMAL));
|
1215
|
+
rb_define_const(cMysqlField, "TYPE_SHORT", INT2NUM(FIELD_TYPE_SHORT));
|
1216
|
+
rb_define_const(cMysqlField, "TYPE_LONG", INT2NUM(FIELD_TYPE_LONG));
|
1217
|
+
rb_define_const(cMysqlField, "TYPE_FLOAT", INT2NUM(FIELD_TYPE_FLOAT));
|
1218
|
+
rb_define_const(cMysqlField, "TYPE_DOUBLE", INT2NUM(FIELD_TYPE_DOUBLE));
|
1219
|
+
rb_define_const(cMysqlField, "TYPE_NULL", INT2NUM(FIELD_TYPE_NULL));
|
1220
|
+
rb_define_const(cMysqlField, "TYPE_TIMESTAMP", INT2NUM(FIELD_TYPE_TIMESTAMP));
|
1221
|
+
rb_define_const(cMysqlField, "TYPE_LONGLONG", INT2NUM(FIELD_TYPE_LONGLONG));
|
1222
|
+
rb_define_const(cMysqlField, "TYPE_INT24", INT2NUM(FIELD_TYPE_INT24));
|
1223
|
+
rb_define_const(cMysqlField, "TYPE_DATE", INT2NUM(FIELD_TYPE_DATE));
|
1224
|
+
rb_define_const(cMysqlField, "TYPE_TIME", INT2NUM(FIELD_TYPE_TIME));
|
1225
|
+
rb_define_const(cMysqlField, "TYPE_DATETIME", INT2NUM(FIELD_TYPE_DATETIME));
|
1226
|
+
#if MYSQL_VERSION_ID >= 32130
|
1227
|
+
rb_define_const(cMysqlField, "TYPE_YEAR", INT2NUM(FIELD_TYPE_YEAR));
|
1228
|
+
#endif
|
1229
|
+
rb_define_const(cMysqlField, "TYPE_SET", INT2NUM(FIELD_TYPE_SET));
|
1230
|
+
rb_define_const(cMysqlField, "TYPE_BLOB", INT2NUM(FIELD_TYPE_BLOB));
|
1231
|
+
rb_define_const(cMysqlField, "TYPE_STRING", INT2NUM(FIELD_TYPE_STRING));
|
1232
|
+
#if MYSQL_VERSION_ID >= 40000
|
1233
|
+
rb_define_const(cMysqlField, "TYPE_VAR_STRING", INT2NUM(FIELD_TYPE_VAR_STRING));
|
1234
|
+
#endif
|
1235
|
+
rb_define_const(cMysqlField, "TYPE_CHAR", INT2NUM(FIELD_TYPE_CHAR));
|
1236
|
+
|
1237
|
+
/* Mysql::Field constant: FLAG */
|
1238
|
+
rb_define_const(cMysqlField, "NOT_NULL_FLAG", INT2NUM(NOT_NULL_FLAG));
|
1239
|
+
rb_define_const(cMysqlField, "PRI_KEY_FLAG", INT2NUM(PRI_KEY_FLAG));
|
1240
|
+
rb_define_const(cMysqlField, "UNIQUE_KEY_FLAG", INT2NUM(UNIQUE_KEY_FLAG));
|
1241
|
+
rb_define_const(cMysqlField, "MULTIPLE_KEY_FLAG", INT2NUM(MULTIPLE_KEY_FLAG));
|
1242
|
+
rb_define_const(cMysqlField, "BLOB_FLAG", INT2NUM(BLOB_FLAG));
|
1243
|
+
rb_define_const(cMysqlField, "UNSIGNED_FLAG", INT2NUM(UNSIGNED_FLAG));
|
1244
|
+
rb_define_const(cMysqlField, "ZEROFILL_FLAG", INT2NUM(ZEROFILL_FLAG));
|
1245
|
+
rb_define_const(cMysqlField, "BINARY_FLAG", INT2NUM(BINARY_FLAG));
|
1246
|
+
#ifdef ENUM_FLAG
|
1247
|
+
rb_define_const(cMysqlField, "ENUM_FLAG", INT2NUM(ENUM_FLAG));
|
1248
|
+
#endif
|
1249
|
+
#ifdef AUTO_INCREMENT_FLAG
|
1250
|
+
rb_define_const(cMysqlField, "AUTO_INCREMENT_FLAG", INT2NUM(AUTO_INCREMENT_FLAG));
|
1251
|
+
#endif
|
1252
|
+
#ifdef TIMESTAMP_FLAG
|
1253
|
+
rb_define_const(cMysqlField, "TIMESTAMP_FLAG", INT2NUM(TIMESTAMP_FLAG));
|
1254
|
+
#endif
|
1255
|
+
#ifdef SET_FLAG
|
1256
|
+
rb_define_const(cMysqlField, "SET_FLAG", INT2NUM(SET_FLAG));
|
1257
|
+
#endif
|
1258
|
+
#ifdef NUM_FLAG
|
1259
|
+
rb_define_const(cMysqlField, "NUM_FLAG", INT2NUM(NUM_FLAG));
|
1260
|
+
#endif
|
1261
|
+
|
1262
|
+
/* Mysql::Error object method */
|
1263
|
+
rb_define_method(eMysql, "error", error_error, 0);
|
1264
|
+
rb_define_method(eMysql, "errno", error_errno, 0);
|
1265
|
+
|
1266
|
+
/* Mysql::Error constant */
|
1267
|
+
}
|