downpour 0.0.5 → 0.0.6

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/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