downpour 0.0.5 → 0.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +6 -5
- data/ext/downpour/connection.c +7 -9
- data/ext/downpour/downpour.h +10 -0
- data/ext/downpour/memory_allocation.c +10 -0
- data/ext/downpour/query.c +2 -1
- data/ext/downpour/result.c +23 -21
- data/ext/downpour/status.c +49 -36
- data/lib/downpour.rb +1 -0
- data/lib/downpour/status.rb +25 -0
- data/lib/downpour/version.rb +1 -1
- data/spec/downpour/concurrent_spec.rb +37 -16
- data/spec/downpour/connect_type_spec.rb +27 -4
- data/spec/downpour/connection_spec.rb +1 -1
- data/spec/downpour/insert_spec.rb +4 -0
- data/spec/downpour/memory_mgmt_spec.rb +14 -0
- data/spec/spec_helper.rb +1 -1
- metadata +41 -41
data/README.rdoc
CHANGED
@@ -2,8 +2,9 @@
|
|
2
2
|
|
3
3
|
Downpour is a gem to connect and query a Drizzle or MySql database using the libdrizzle library.
|
4
4
|
|
5
|
-
==
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
== TODO
|
6
|
+
* Do not maintain a list of pending queries and connections in ruby. Mark and sweep. Is this a good idea
|
7
|
+
* Actually honor some options passed in to drizzle_con_create
|
8
|
+
* Get column info and do stuff
|
9
|
+
* Create a rails plugin
|
10
|
+
* Result, Column does not have a context. Memory Leak?
|
data/ext/downpour/connection.c
CHANGED
@@ -1,24 +1,20 @@
|
|
1
1
|
#include "downpour.h"
|
2
2
|
|
3
3
|
#define SELF_TYPE drizzle_con_st
|
4
|
+
#define RUBY_CLASS DrizzleConnection
|
5
|
+
|
4
6
|
#define attr(foo, conversion) static VALUE attr_##foo(VALUE self)\
|
5
7
|
{\
|
6
8
|
read_self_ptr();\
|
7
9
|
return conversion(drizzle_con_##foo(self_ptr));\
|
8
10
|
}
|
9
|
-
#define
|
11
|
+
#define settr_string(foo) static VALUE settr_##foo(VALUE self, VALUE newValue)\
|
10
12
|
{\
|
11
13
|
read_self_ptr();\
|
12
14
|
Check_Type(newValue, T_STRING);\
|
13
15
|
drizzle_con_set_##foo(self_ptr, RSTRING_PTR(newValue));\
|
14
16
|
return newValue;\
|
15
17
|
}
|
16
|
-
#define attr_string(foo) attr(foo, rb_str_new2)
|
17
|
-
#define prop(foo) attr_string(foo) settr(foo)
|
18
|
-
|
19
|
-
#define define_attr(foo) rb_define_method(DrizzleConnection, #foo, attr_##foo, 0)
|
20
|
-
#define define_settr(foo) rb_define_method(DrizzleConnection, #foo "=", settr_##foo, 1)
|
21
|
-
#define define_prop(foo) define_attr(foo); define_settr(foo)
|
22
18
|
|
23
19
|
static VALUE query(VALUE self, VALUE query)
|
24
20
|
{
|
@@ -41,16 +37,17 @@ static VALUE connection_close(VALUE self)
|
|
41
37
|
return Qnil;
|
42
38
|
}
|
43
39
|
|
40
|
+
attr(options, INT2NUM);
|
44
41
|
attr_string(error);
|
45
42
|
attr(errno, INT2NUM);
|
46
43
|
attr(error_code, UINT2NUM);
|
47
44
|
attr_string(sqlstate);
|
48
45
|
attr_string(host);
|
49
46
|
attr(port, UINT2NUM);
|
50
|
-
|
47
|
+
prop_string(uds);
|
51
48
|
attr_string(user);
|
52
49
|
attr_string(password);
|
53
|
-
|
50
|
+
prop_string(db);
|
54
51
|
attr(protocol_version, UINT2NUM);
|
55
52
|
attr_string(server_version);
|
56
53
|
attr(server_version_number, UINT2NUM);
|
@@ -66,6 +63,7 @@ void init_drizzle_connection()
|
|
66
63
|
{
|
67
64
|
DrizzleConnection = drizzle_gem_create_class_with_private_constructor("Connection", rb_cObject);
|
68
65
|
rb_define_method(DrizzleConnection, "query", query, 1);
|
66
|
+
define_attr(options);
|
69
67
|
define_attr(error);
|
70
68
|
define_attr(errno);
|
71
69
|
define_attr(error_code);
|
data/ext/downpour/downpour.h
CHANGED
@@ -17,6 +17,7 @@ typedef void (*SET_CONTEXT)(void* ptr, void *context);
|
|
17
17
|
void *downpour_from_ruby_object(VALUE value);
|
18
18
|
VALUE downpour_to_ruby_object(void *ptr, VALUE klass, VALUE parent, FREE_METHOD free_method, SET_CONTEXT set_context);
|
19
19
|
VALUE downpour_get_ruby_object(void *ptr);
|
20
|
+
VALUE downpour_get_parent(VALUE self);
|
20
21
|
|
21
22
|
// All Constructors
|
22
23
|
VALUE downpour_constructor(drizzle_st *self_ptr);
|
@@ -37,4 +38,13 @@ const char *drizzle_gem_read_string_with_default(VALUE string, const char *defau
|
|
37
38
|
#define drizzle_alloc(type) ((type *) malloc(sizeof(type)))
|
38
39
|
#define to_ruby_object(ptr, klass, parent, free_method, set_context) downpour_to_ruby_object(ptr, klass, parent, (FREE_METHOD) (free_method), (SET_CONTEXT) (set_context))
|
39
40
|
|
41
|
+
// Property Macros -> define attr(foo, conversion) and settr_string to use them
|
42
|
+
#define attr_string(foo) attr(foo, rb_str_new2)
|
43
|
+
#define prop_string(foo) attr_string(foo) settr_string(foo)
|
44
|
+
#define prop_int(foo, conversion) attr(foo, conversion) settr_int(foo)
|
45
|
+
|
46
|
+
#define define_attr(foo) rb_define_method(RUBY_CLASS, #foo, attr_##foo, 0)
|
47
|
+
#define define_settr(foo) rb_define_method(RUBY_CLASS, #foo "=", settr_##foo, 1)
|
48
|
+
#define define_prop(foo) define_attr(foo); define_settr(foo)
|
49
|
+
|
40
50
|
#endif
|
@@ -91,3 +91,13 @@ VALUE downpour_to_ruby_object(void *ptr, VALUE klass, VALUE parent, FREE_METHOD
|
|
91
91
|
|
92
92
|
return wrapper->rb_object = Data_Wrap_Struct(klass, mark_for_ruby_gc, downpour_release, wrapper);
|
93
93
|
}
|
94
|
+
|
95
|
+
VALUE downpour_get_parent(VALUE self)
|
96
|
+
{
|
97
|
+
DownpourWrapper *wrapper = get_wrapper_from_object(self);
|
98
|
+
|
99
|
+
if(wrapper == NULL || wrapper->parent == NULL)
|
100
|
+
return Qnil;
|
101
|
+
|
102
|
+
return wrapper->parent->rb_object;
|
103
|
+
}
|
data/ext/downpour/query.c
CHANGED
@@ -11,7 +11,8 @@ static VALUE get_result(VALUE self)
|
|
11
11
|
return cached_result;
|
12
12
|
|
13
13
|
drizzle_result_st *result = drizzle_query_result(self_ptr);
|
14
|
-
VALUE
|
14
|
+
VALUE connection = downpour_get_parent(self);
|
15
|
+
VALUE ret = rb_iv_set(self, "@result", downpour_result_constructor(result, connection));
|
15
16
|
return ret;
|
16
17
|
}
|
17
18
|
|
data/ext/downpour/result.c
CHANGED
@@ -1,6 +1,13 @@
|
|
1
1
|
#include "downpour.h"
|
2
2
|
|
3
3
|
#define SELF_TYPE drizzle_result_st
|
4
|
+
#define RUBY_CLASS DrizzleResult
|
5
|
+
|
6
|
+
#define attr(foo, conversion) static VALUE attr_##foo(VALUE self)\
|
7
|
+
{\
|
8
|
+
read_self_ptr();\
|
9
|
+
return conversion(drizzle_result_##foo(self_ptr));\
|
10
|
+
}
|
4
11
|
|
5
12
|
static uint64_t do_column_count(drizzle_result_st *self_ptr)
|
6
13
|
{
|
@@ -87,24 +94,14 @@ static VALUE next_row(VALUE self)
|
|
87
94
|
return next_row_unbuffered(self_ptr);
|
88
95
|
}
|
89
96
|
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
read_self_ptr();
|
99
|
-
|
100
|
-
return UINT2NUM(drizzle_result_insert_id(self_ptr));
|
101
|
-
}
|
102
|
-
|
103
|
-
static VALUE error_code(VALUE self)
|
104
|
-
{
|
105
|
-
read_self_ptr();
|
106
|
-
return UINT2NUM(drizzle_result_error_code(self_ptr));
|
107
|
-
}
|
97
|
+
attr(column_count, UINT2NUM);
|
98
|
+
attr(insert_id, UINT2NUM);
|
99
|
+
attr(error_code, UINT2NUM);
|
100
|
+
attr(affected_rows, UINT2NUM);
|
101
|
+
attr(warning_count, UINT2NUM);
|
102
|
+
attr_string(sqlstate);
|
103
|
+
attr_string(info);
|
104
|
+
attr_string(error);
|
108
105
|
|
109
106
|
VALUE downpour_result_constructor(drizzle_result_st *self_ptr, VALUE connection)
|
110
107
|
{
|
@@ -115,10 +112,15 @@ void init_drizzle_result()
|
|
115
112
|
{
|
116
113
|
DrizzleResult = drizzle_gem_create_class_with_private_constructor("Result", rb_cObject);
|
117
114
|
rb_define_method(DrizzleResult, "row_count", row_count, 0);
|
118
|
-
rb_define_method(DrizzleResult, "column_count", column_count, 0);
|
119
115
|
rb_define_method(DrizzleResult, "buffer!", buffer_if_needed, 0);
|
120
116
|
rb_define_method(DrizzleResult, "buffered?", is_buffered, 0);
|
121
117
|
rb_define_method(DrizzleResult, "next_row", next_row, 0);
|
122
|
-
|
123
|
-
|
118
|
+
define_attr(column_count);
|
119
|
+
define_attr(insert_id);
|
120
|
+
define_attr(error_code);
|
121
|
+
define_attr(affected_rows);
|
122
|
+
define_attr(warning_count);
|
123
|
+
define_attr(sqlstate);
|
124
|
+
define_attr(info);
|
125
|
+
define_attr(error);
|
124
126
|
}
|
data/ext/downpour/status.c
CHANGED
@@ -1,16 +1,30 @@
|
|
1
1
|
#include "downpour.h"
|
2
2
|
|
3
3
|
#define SELF_TYPE drizzle_st
|
4
|
+
#define RUBY_CLASS DrizzleStatus
|
4
5
|
|
5
|
-
static
|
6
|
+
#define attr(foo, conversion) static VALUE attr_##foo(VALUE self)\
|
7
|
+
{\
|
8
|
+
read_self_ptr();\
|
9
|
+
return conversion(drizzle_##foo(self_ptr));\
|
10
|
+
}
|
11
|
+
|
12
|
+
#define settr_int(foo) static VALUE settr_##foo(VALUE self, VALUE newValue)\
|
13
|
+
{\
|
14
|
+
read_self_ptr();\
|
15
|
+
drizzle_set_##foo(self_ptr, NUM2INT(newValue));\
|
16
|
+
return newValue;\
|
17
|
+
}
|
18
|
+
|
19
|
+
static in_port_t get_port(VALUE port, in_port_t default_port)
|
6
20
|
{
|
7
21
|
if(port == Qnil)
|
8
|
-
return
|
22
|
+
return default_port;
|
9
23
|
Check_Type(port, T_FIXNUM);
|
10
24
|
return NUM2UINT(port);
|
11
25
|
}
|
12
26
|
|
13
|
-
static VALUE
|
27
|
+
static VALUE add_tcp_connection_with_defaults(int argc, VALUE *argv, VALUE self, in_port_t default_port, drizzle_con_options_t default_options)
|
14
28
|
{
|
15
29
|
read_self_ptr();
|
16
30
|
|
@@ -21,43 +35,22 @@ static VALUE add_tcp_connection(int argc, VALUE *argv, VALUE self)
|
|
21
35
|
|
22
36
|
drizzle_con_st *connection = drizzle_con_add_tcp(self_ptr, NULL,
|
23
37
|
read_string(host, "localhost"),
|
24
|
-
get_port(port),
|
38
|
+
get_port(port, default_port),
|
25
39
|
read_string(user, ""),
|
26
40
|
read_string(passwd, ""),
|
27
41
|
read_string(db, "test"),
|
28
|
-
|
42
|
+
default_options);
|
29
43
|
return downpour_connection_constructor(connection, self);
|
30
44
|
}
|
31
45
|
|
32
|
-
static VALUE
|
33
|
-
{
|
34
|
-
read_self_ptr();
|
35
|
-
|
36
|
-
return rb_str_new2(drizzle_error(self_ptr));
|
37
|
-
}
|
38
|
-
|
39
|
-
static VALUE set_verbose(VALUE self, VALUE newVerbocity)
|
40
|
-
{
|
41
|
-
read_self_ptr();
|
42
|
-
|
43
|
-
int verbocity = NUM2INT(newVerbocity);
|
44
|
-
drizzle_set_verbose(self_ptr, verbocity);
|
45
|
-
|
46
|
-
return newVerbocity;
|
47
|
-
}
|
48
|
-
|
49
|
-
static VALUE get_verbose(VALUE self)
|
46
|
+
static VALUE add_tcp_connection(int argc, VALUE *argv, VALUE self)
|
50
47
|
{
|
51
|
-
|
52
|
-
|
53
|
-
return UINT2NUM(drizzle_verbose(self_ptr));
|
48
|
+
return add_tcp_connection_with_defaults(argc, argv, self, DRIZZLE_DEFAULT_TCP_PORT, DRIZZLE_CON_NONE);
|
54
49
|
}
|
55
50
|
|
56
|
-
static VALUE
|
51
|
+
static VALUE add_mysql_tcp_connection(int argc, VALUE *argv, VALUE self)
|
57
52
|
{
|
58
|
-
|
59
|
-
|
60
|
-
return rb_str_new2(drizzle_verbose_name(drizzle_verbose(self_ptr)));
|
53
|
+
return add_tcp_connection_with_defaults(argc, argv, self, 3306, DRIZZLE_CON_MYSQL);
|
61
54
|
}
|
62
55
|
|
63
56
|
static VALUE add_query(VALUE self, VALUE connection, VALUE query)
|
@@ -92,6 +85,21 @@ static VALUE run_one(VALUE self)
|
|
92
85
|
return downpour_get_ruby_object(drizzle_query_context(query));
|
93
86
|
}
|
94
87
|
|
88
|
+
static VALUE verbose_name(VALUE self)
|
89
|
+
{
|
90
|
+
read_self_ptr();
|
91
|
+
|
92
|
+
return rb_str_new2(drizzle_verbose_name(drizzle_verbose(self_ptr)));
|
93
|
+
}
|
94
|
+
|
95
|
+
attr_string(error);
|
96
|
+
attr(errno, INT2NUM);
|
97
|
+
attr(error_code, INT2NUM);
|
98
|
+
attr_string(sqlstate);
|
99
|
+
attr(options, UINT2NUM);
|
100
|
+
prop_int(timeout, INT2NUM);
|
101
|
+
prop_int(verbose, UINT2NUM);
|
102
|
+
|
95
103
|
VALUE downpour_constructor(drizzle_st *self_ptr)
|
96
104
|
{
|
97
105
|
return to_ruby_object(self_ptr, DrizzleStatus, Qnil, drizzle_free, drizzle_set_context);
|
@@ -101,11 +109,16 @@ void init_drizzle_status()
|
|
101
109
|
{
|
102
110
|
DrizzleStatus = drizzle_gem_create_class_with_private_constructor("Status", rb_cObject);
|
103
111
|
rb_define_method(DrizzleStatus, "add_tcp_connection", add_tcp_connection, -1);
|
104
|
-
rb_define_method(DrizzleStatus, "
|
105
|
-
rb_define_method(DrizzleStatus, "verbose=", set_verbose, 1);
|
106
|
-
rb_define_method(DrizzleStatus, "verbose", get_verbose, 0);
|
112
|
+
rb_define_method(DrizzleStatus, "add_mysql_tcp_connection", add_mysql_tcp_connection, -1);
|
107
113
|
rb_define_method(DrizzleStatus, "verbose_name", verbose_name, 0);
|
108
|
-
|
109
|
-
|
110
|
-
|
114
|
+
rb_define_private_method(DrizzleStatus, "_add_query", add_query, 2);
|
115
|
+
rb_define_private_method(DrizzleStatus, "_run_all!", run_all, 0);
|
116
|
+
rb_define_private_method(DrizzleStatus, "_run!", run_one, 0);
|
117
|
+
define_attr(error);
|
118
|
+
define_attr(errno);
|
119
|
+
define_attr(error_code);
|
120
|
+
define_attr(sqlstate);
|
121
|
+
define_attr(options);
|
122
|
+
define_prop(timeout);
|
123
|
+
define_prop(verbose);
|
111
124
|
}
|
data/lib/downpour.rb
CHANGED
@@ -0,0 +1,25 @@
|
|
1
|
+
module Downpour
|
2
|
+
class Status
|
3
|
+
def add_query(connection, query)
|
4
|
+
new_query = _add_query(connection, query)
|
5
|
+
pending_queries << new_query
|
6
|
+
new_query
|
7
|
+
end
|
8
|
+
|
9
|
+
def run!
|
10
|
+
pending_queries.delete(_run!)
|
11
|
+
end
|
12
|
+
|
13
|
+
def run_all!
|
14
|
+
_run_all!
|
15
|
+
pending_queries.clear
|
16
|
+
end
|
17
|
+
|
18
|
+
def pending_queries
|
19
|
+
if(@pending_queries == nil)
|
20
|
+
@pending_queries = []
|
21
|
+
end
|
22
|
+
@pending_queries
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/downpour/version.rb
CHANGED
@@ -8,24 +8,45 @@ describe "a concurrent query" do
|
|
8
8
|
@query2 = @status.add_query(@conn2, "select name from Test1 where name like '%ar'");
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
context "when running all" do
|
12
|
+
it "should buffer all queries" do
|
13
|
+
@status.run_all!
|
14
|
+
@query1.result.should be_buffered
|
15
|
+
@query2.result.should be_buffered
|
16
|
+
end
|
17
|
+
|
18
|
+
it "should run all queries" do
|
19
|
+
@status.run_all!
|
20
|
+
@query1.result.next_row.should == ["foo"]
|
21
|
+
@query2.result.next_row.should == ["bar"]
|
22
|
+
end
|
16
23
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
24
|
+
it "should clear all pending queries" do
|
25
|
+
@status.pending_queries.size.should == 2
|
26
|
+
@status.run_all!
|
27
|
+
@status.pending_queries.should be_empty
|
28
|
+
end
|
21
29
|
end
|
22
30
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
31
|
+
context "when executing one at a time" do
|
32
|
+
it "should run all queries" do
|
33
|
+
rows = []
|
34
|
+
rows << @status.run!.result.next_row
|
35
|
+
rows << @status.run!.result.next_row
|
36
|
+
rows.should include(["foo"])
|
37
|
+
rows.should include(["bar"])
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return nil after all queries are executed" do
|
41
|
+
@status.run!
|
42
|
+
@status.run!
|
43
|
+
@status.run!.should be_nil
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should release pending queries" do
|
47
|
+
query = @status.run!
|
48
|
+
@status.pending_queries.should_not include(query)
|
49
|
+
@status.pending_queries.size.should == 1
|
50
|
+
end
|
30
51
|
end
|
31
52
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
describe "
|
1
|
+
describe "downpour connections" do
|
2
2
|
|
3
3
|
before(:each) do
|
4
4
|
@status = Downpour.create
|
@@ -26,10 +26,33 @@ describe "Downpour connections" do
|
|
26
26
|
end
|
27
27
|
|
28
28
|
context "over drizzle tcp protocol" do
|
29
|
-
|
30
|
-
|
29
|
+
it "should have default port set" do
|
30
|
+
connection = @status.add_tcp_connection('localhost', @user, @password, @database)
|
31
|
+
connection.port.should == 4427
|
31
32
|
end
|
32
33
|
|
33
|
-
|
34
|
+
context "connection sanity" do
|
35
|
+
before(:each) do
|
36
|
+
@connection = @status.add_tcp_connection('localhost', @user, @password, @database)
|
37
|
+
end
|
38
|
+
|
39
|
+
it_should_behave_like "a working downpour connection"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
context "over mysql tcp protocol" do
|
44
|
+
it "should have default port set" do
|
45
|
+
connection = @status.add_mysql_tcp_connection('localhost', @user, @password, @database)
|
46
|
+
connection.port.should == 3306
|
47
|
+
end
|
48
|
+
|
49
|
+
context "connection sanity" do
|
50
|
+
before(:each) do
|
51
|
+
# connect to drizzle over a mysql db
|
52
|
+
@connection = @status.add_mysql_tcp_connection('localhost', @user, @password, @database, 4427)
|
53
|
+
end
|
54
|
+
|
55
|
+
it_should_behave_like "a working downpour connection"
|
56
|
+
end
|
34
57
|
end
|
35
58
|
end
|
@@ -16,4 +16,8 @@ describe "an insert query" do
|
|
16
16
|
it "should get id after inserting" do
|
17
17
|
@conn.query("insert into Test2 (name) values ('foo')").insert_id.should == count_of_test2
|
18
18
|
end
|
19
|
+
|
20
|
+
it "should get count of affected rows" do
|
21
|
+
@conn.query("insert into Test2 (name) values ('foo')").affected_rows.should == 1
|
22
|
+
end
|
19
23
|
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
describe Downpour do
|
2
|
+
|
3
|
+
before(:each) do
|
4
|
+
@status = Downpour.create
|
5
|
+
@conn = create_connection(@status)
|
6
|
+
@query = @status.add_query(@conn, "select * from Test1 where name like '%oo'");
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should not allow query to gc before running" do
|
10
|
+
@query = nil
|
11
|
+
GC.start
|
12
|
+
@status.run!.result.next_row.should include("foo")
|
13
|
+
end
|
14
|
+
end
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,49 +1,48 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: downpour
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.6
|
4
5
|
prerelease:
|
5
|
-
version: 0.0.5
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Tejas Dinkar
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
date: 2011-06-02 00:00:00 +05:30
|
12
|
+
date: 2011-06-03 00:00:00.000000000 +00:00
|
14
13
|
default_executable:
|
15
|
-
dependencies:
|
16
|
-
- !ruby/object:Gem::Dependency
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
17
16
|
name: rake-compiler
|
18
|
-
|
19
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
17
|
+
requirement: &18332580 !ruby/object:Gem::Requirement
|
20
18
|
none: false
|
21
|
-
requirements:
|
19
|
+
requirements:
|
22
20
|
- - ~>
|
23
|
-
- !ruby/object:Gem::Version
|
21
|
+
- !ruby/object:Gem::Version
|
24
22
|
version: 0.7.1
|
25
23
|
type: :development
|
26
|
-
version_requirements: *id001
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rspec
|
29
24
|
prerelease: false
|
30
|
-
|
25
|
+
version_requirements: *18332580
|
26
|
+
- !ruby/object:Gem::Dependency
|
27
|
+
name: rspec
|
28
|
+
requirement: &18330100 !ruby/object:Gem::Requirement
|
31
29
|
none: false
|
32
|
-
requirements:
|
33
|
-
- -
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version:
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
36
34
|
type: :development
|
37
|
-
|
38
|
-
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: *18330100
|
37
|
+
description: A simple, fast Mysql and Drizzle library for Ruby, binding to libdrizzle.
|
38
|
+
Still in early alpha
|
39
39
|
email: tejas@gja.in
|
40
40
|
executables: []
|
41
|
-
|
42
|
-
extensions:
|
41
|
+
extensions:
|
43
42
|
- ext/downpour/extconf.rb
|
44
|
-
extra_rdoc_files:
|
43
|
+
extra_rdoc_files:
|
45
44
|
- README.rdoc
|
46
|
-
files:
|
45
|
+
files:
|
47
46
|
- downpour.gemspec
|
48
47
|
- ext/downpour/connection.c
|
49
48
|
- ext/downpour/downpour.c
|
@@ -56,12 +55,14 @@ files:
|
|
56
55
|
- ext/downpour/result.c
|
57
56
|
- ext/downpour/status.c
|
58
57
|
- lib/downpour.rb
|
58
|
+
- lib/downpour/status.rb
|
59
59
|
- lib/downpour/version.rb
|
60
60
|
- spec/bootstrap.sql
|
61
61
|
- spec/downpour/concurrent_spec.rb
|
62
62
|
- spec/downpour/connect_type_spec.rb
|
63
63
|
- spec/downpour/connection_spec.rb
|
64
64
|
- spec/downpour/insert_spec.rb
|
65
|
+
- spec/downpour/memory_mgmt_spec.rb
|
65
66
|
- spec/downpour/module_spec.rb
|
66
67
|
- spec/downpour/select_spec.rb
|
67
68
|
- spec/spec_helper.rb
|
@@ -69,38 +70,37 @@ files:
|
|
69
70
|
has_rdoc: true
|
70
71
|
homepage: http://github.com/gja/downpour
|
71
72
|
licenses: []
|
72
|
-
|
73
73
|
post_install_message:
|
74
|
-
rdoc_options:
|
74
|
+
rdoc_options:
|
75
75
|
- --charset=UTF-8
|
76
|
-
require_paths:
|
76
|
+
require_paths:
|
77
77
|
- lib
|
78
78
|
- ext
|
79
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
80
80
|
none: false
|
81
|
-
requirements:
|
82
|
-
- -
|
83
|
-
- !ruby/object:Gem::Version
|
84
|
-
version:
|
85
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
|
+
requirements:
|
82
|
+
- - ! '>='
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
version: '0'
|
85
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
86
86
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
version:
|
87
|
+
requirements:
|
88
|
+
- - ! '>='
|
89
|
+
- !ruby/object:Gem::Version
|
90
|
+
version: '0'
|
91
91
|
requirements: []
|
92
|
-
|
93
92
|
rubyforge_project:
|
94
93
|
rubygems_version: 1.6.2
|
95
94
|
signing_key:
|
96
95
|
specification_version: 3
|
97
96
|
summary: A simple, fast Mysql and Drizzle library for Ruby, binding to libdrizzle
|
98
|
-
test_files:
|
97
|
+
test_files:
|
99
98
|
- spec/bootstrap.sql
|
100
99
|
- spec/downpour/concurrent_spec.rb
|
101
100
|
- spec/downpour/connect_type_spec.rb
|
102
101
|
- spec/downpour/connection_spec.rb
|
103
102
|
- spec/downpour/insert_spec.rb
|
103
|
+
- spec/downpour/memory_mgmt_spec.rb
|
104
104
|
- spec/downpour/module_spec.rb
|
105
105
|
- spec/downpour/select_spec.rb
|
106
106
|
- spec/spec_helper.rb
|