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 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
- == Test setup
6
- Run the following:
7
- $ echo "create database test;" | drizzle
8
- $ drizzle test < spec/bootstrap.sql
9
- $ rake
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?
@@ -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 settr(foo) static VALUE settr_##foo(VALUE self, VALUE newValue)\
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
- prop(uds);
47
+ prop_string(uds);
51
48
  attr_string(user);
52
49
  attr_string(password);
53
- prop(db);
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);
@@ -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 ret = rb_iv_set(self, "@result", downpour_result_constructor(result, rb_iv_get(self, "@connection")));
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
 
@@ -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
- static VALUE column_count(VALUE self)
91
- {
92
- read_self_ptr();
93
- return UINT2NUM(do_column_count(self_ptr));
94
- }
95
-
96
- static VALUE insert_id(VALUE self)
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
- rb_define_method(DrizzleResult, "insert_id", insert_id, 0);
123
- rb_define_method(DrizzleResult, "error_code", error_code, 0);
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
  }
@@ -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 in_port_t get_port(VALUE port)
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 DRIZZLE_DEFAULT_TCP_PORT;
22
+ return default_port;
9
23
  Check_Type(port, T_FIXNUM);
10
24
  return NUM2UINT(port);
11
25
  }
12
26
 
13
- static VALUE add_tcp_connection(int argc, VALUE *argv, VALUE self)
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
- DRIZZLE_CON_NONE);
42
+ default_options);
29
43
  return downpour_connection_constructor(connection, self);
30
44
  }
31
45
 
32
- static VALUE error(VALUE self)
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
- read_self_ptr();
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 verbose_name(VALUE self)
51
+ static VALUE add_mysql_tcp_connection(int argc, VALUE *argv, VALUE self)
57
52
  {
58
- read_self_ptr();
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, "error", error, 0);
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
- rb_define_method(DrizzleStatus, "add_query", add_query, 2);
109
- rb_define_method(DrizzleStatus, "run_all!", run_all, 0);
110
- rb_define_method(DrizzleStatus, "run!", run_one, 0);
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
@@ -1,2 +1,3 @@
1
1
  require 'downpour/downpour'
2
+ require 'downpour/status'
2
3
  require 'downpour/version'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Downpour
2
- VERSION = "0.0.5"
2
+ VERSION = "0.0.6"
3
3
  end
@@ -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
- it "should buffer all queries" do
12
- @status.run_all!
13
- @query1.result.should be_buffered
14
- @query2.result.should be_buffered
15
- end
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
- it "should run all queries" do
18
- @status.run_all!
19
- @query1.result.next_row.should == ["foo"]
20
- @query2.result.next_row.should == ["bar"]
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
- it "should run a query" do
24
- rows = []
25
- rows << @status.run!.result.next_row
26
- rows << @status.run!.result.next_row
27
- rows.should include(["foo"])
28
- rows.should include(["bar"])
29
- @status.run!.should be_nil
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 "Downpour connections" do
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
- before(:each) do
30
- @connection = @status.add_tcp_connection('localhost', @user, @password, @database)
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
- it_should_behave_like "a working downpour connection"
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
@@ -1,4 +1,4 @@
1
- describe Downpour do
1
+ describe "downpour connections" do
2
2
  before(:each) do
3
3
  @status = Downpour.create
4
4
  @connection = create_connection(@status)
@@ -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
@@ -1,4 +1,4 @@
1
- require './lib/downpour/downpour'
1
+ require './lib/downpour'
2
2
 
3
3
  def create_connection(status)
4
4
  status.add_tcp_connection "localhost", ENV["USER"], "", "test"
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
- prerelease: false
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
- requirement: &id002 !ruby/object:Gem::Requirement
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: "0"
30
+ requirements:
31
+ - - ! '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
36
34
  type: :development
37
- version_requirements: *id002
38
- description: A simple, fast Mysql and Drizzle library for Ruby, binding to libdrizzle. Still in early alpha
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: "0"
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: "0"
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