downpour 0.0.1 → 0.0.2

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.
@@ -1,4 +1,4 @@
1
- #include "drizzle.h"
1
+ #include "downpour.h"
2
2
 
3
3
  #define SELF_TYPE drizzle_con_st
4
4
 
@@ -13,7 +13,14 @@ static VALUE query(VALUE self, VALUE query)
13
13
 
14
14
  CHECK_OK(retptr);
15
15
 
16
- return Data_Wrap_Struct(DrizzleResult, NULL, NULL, result);
16
+ return downpour_result_constructor(result, self);
17
+ }
18
+
19
+ VALUE downpour_connection_constructor(drizzle_con_st *self_ptr, VALUE status)
20
+ {
21
+ VALUE ret = Data_Wrap_Struct(DrizzleConnection, NULL, drizzle_con_free, self_ptr);
22
+ rb_iv_set(ret, "@status", status);
23
+ return ret;
17
24
  }
18
25
 
19
26
  void init_drizzle_connection()
@@ -1,18 +1,18 @@
1
- #include "drizzle.h"
1
+ #include "downpour.h"
2
2
 
3
- VALUE DrizzleModule;
3
+ VALUE DownpourModule;
4
4
  VALUE DrizzleStatus;
5
5
  VALUE DrizzleConnection;
6
6
  VALUE DrizzleResult;
7
7
 
8
- void init_drizzle_module();
8
+ void init_downpour_module();
9
9
  void init_drizzle_status();
10
10
  void init_drizzle_connection();
11
11
  void init_drizzle_result();
12
12
 
13
13
  void Init_downpour()
14
14
  {
15
- init_drizzle_module();
15
+ init_downpour_module();
16
16
  init_drizzle_status();
17
17
  init_drizzle_connection();
18
18
  init_drizzle_result();
@@ -5,11 +5,16 @@
5
5
  #include <libdrizzle/drizzle.h>
6
6
  #include <libdrizzle/drizzle_client.h>
7
7
 
8
- extern VALUE DrizzleModule;
8
+ extern VALUE DownpourModule;
9
9
  extern VALUE DrizzleStatus;
10
10
  extern VALUE DrizzleConnection;
11
11
  extern VALUE DrizzleResult;
12
12
 
13
+ // All Constructors
14
+ VALUE downpour_constructor(drizzle_st *self_ptr);
15
+ VALUE downpour_connection_constructor(drizzle_con_st *self_ptr, VALUE status);
16
+ VALUE downpour_result_constructor(drizzle_result_st *self_ptr, VALUE connection);
17
+
13
18
  VALUE drizzle_gem_create_class_with_private_constructor(const char *name, VALUE super);
14
19
  void drizzle_gem_assert_value_is_ok(drizzle_return_t value);
15
20
  VALUE drizzle_gem_to_string_array(char **array, long count);
@@ -20,5 +25,7 @@ const char *drizzle_gem_read_string_with_default(VALUE string, const char *defau
20
25
  #define CHECK_OK(value) drizzle_gem_assert_value_is_ok(value)
21
26
  #define rb_call(self, string) rb_funcall(self, rb_intern(string), 0)
22
27
  #define read_string(value, default_value) drizzle_gem_read_string_with_default(value, default_value)
28
+ #define drizzle_alloc(type) ((type *) malloc(sizeof(type)))
29
+ #define unset_option(value, bit) if(value->options & bit) value->options ^= bit
23
30
 
24
31
  #endif
@@ -1,9 +1,15 @@
1
1
  require 'mkmf'
2
2
 
3
+ libdrizzle = 'libdrizzle-1.0'
4
+
3
5
  extension_name = 'downpour'
4
6
  dir_config(extension_name)
5
7
 
6
- have_library("drizzle")
7
- $CFLAGS += " -I/usr/local/include/libdrizzle-1.0 -I/usr/include/libdrizzle-1.0"
8
+ if(!system("pkg-config #{libdrizzle}"))
9
+ raise "Cannot find pkg-config or #{libdrizzle}"
10
+ end
11
+
12
+ $LDFLAGS += " " + `pkg-config --libs #{libdrizzle}`
13
+ $CFLAGS += " " + `pkg-config --cflags #{libdrizzle}`
8
14
 
9
15
  create_makefile(extension_name)
@@ -1,4 +1,4 @@
1
- #include "drizzle.h"
1
+ #include "downpour.h"
2
2
 
3
3
  static VALUE do_not_use_this_constructor(VALUE self)
4
4
  {
@@ -18,7 +18,7 @@ VALUE drizzle_gem_to_string_array(char **array, long count)
18
18
 
19
19
  VALUE drizzle_gem_create_class_with_private_constructor(const char *name, VALUE super)
20
20
  {
21
- VALUE ret = rb_define_class_under(DrizzleModule, name, super);
21
+ VALUE ret = rb_define_class_under(DownpourModule, name, super);
22
22
  rb_define_method(ret, "initialize", do_not_use_this_constructor, 0);
23
23
  return ret;
24
24
  }
@@ -1,4 +1,4 @@
1
- #include "drizzle.h"
1
+ #include "downpour.h"
2
2
 
3
3
  static VALUE version(VALUE self)
4
4
  {
@@ -8,12 +8,13 @@ static VALUE version(VALUE self)
8
8
  static VALUE create(VALUE self)
9
9
  {
10
10
  drizzle_st *ptr = drizzle_create(NULL);
11
- return Data_Wrap_Struct(DrizzleStatus, NULL, drizzle_free, ptr);
11
+ unset_option(ptr, DRIZZLE_FREE_OBJECTS);
12
+ return downpour_constructor(ptr);
12
13
  }
13
14
 
14
- void init_drizzle_module()
15
+ void init_downpour_module()
15
16
  {
16
- DrizzleModule = rb_define_module("Drizzle");
17
- rb_define_singleton_method(DrizzleModule, "version", version, 0);
18
- rb_define_singleton_method(DrizzleModule, "create", create, 0);
17
+ DownpourModule = rb_define_module("Downpour");
18
+ rb_define_singleton_method(DownpourModule, "drizzle_version", version, 0);
19
+ rb_define_singleton_method(DownpourModule, "create", create, 0);
19
20
  }
@@ -1,4 +1,4 @@
1
- #include "drizzle.h"
1
+ #include "downpour.h"
2
2
 
3
3
  #define SELF_TYPE drizzle_result_st
4
4
 
@@ -48,21 +48,38 @@ static VALUE wrap_row(drizzle_result_st *self_ptr, drizzle_row_t row)
48
48
  if(row == NULL)
49
49
  return Qnil;
50
50
 
51
- // TODO: wrap this in a Ruby Object. It should be freed
52
51
  return drizzle_gem_to_string_array(row, do_column_count(self_ptr));
53
52
  }
54
53
 
55
54
  static VALUE next_row_buffered(drizzle_result_st *self_ptr)
56
55
  {
57
- return wrap_row(self_ptr, drizzle_row_next(self_ptr));
56
+ drizzle_row_t result = drizzle_row_next(self_ptr);
57
+ return wrap_row(self_ptr, result);
58
58
  }
59
59
 
60
- static VALUE next_row_unbuffered(drizzle_result_st *self_ptr)
60
+ static void buffer_column_if_needed(drizzle_result_st *self_ptr)
61
+ {
62
+ if(self_ptr->options & DRIZZLE_RESULT_BUFFER_COLUMN)
63
+ return;
64
+ CHECK_OK(drizzle_column_buffer(self_ptr));
65
+ }
66
+
67
+ static drizzle_row_t do_drizzle_row_buffer(drizzle_result_st *self_ptr)
61
68
  {
62
69
  drizzle_return_t ret;
63
70
  drizzle_row_t result = drizzle_row_buffer(self_ptr, &ret);
64
71
  CHECK_OK(ret);
65
- return wrap_row(self_ptr, result);
72
+ return result;
73
+ }
74
+
75
+ static VALUE next_row_unbuffered(drizzle_result_st *self_ptr)
76
+ {
77
+ buffer_column_if_needed(self_ptr);
78
+ drizzle_row_t result = do_drizzle_row_buffer(self_ptr);
79
+ VALUE parsed = wrap_row(self_ptr, result);
80
+ if(result)
81
+ drizzle_row_free(self_ptr, result);
82
+ return parsed;
66
83
  }
67
84
 
68
85
  static VALUE next_row(VALUE self)
@@ -81,6 +98,20 @@ static VALUE column_count(VALUE self)
81
98
  return UINT2NUM(do_column_count(self_ptr));
82
99
  }
83
100
 
101
+ static VALUE insert_id(VALUE self)
102
+ {
103
+ read_self_ptr();
104
+
105
+ return UINT2NUM(drizzle_result_insert_id(self_ptr));
106
+ }
107
+
108
+ VALUE downpour_result_constructor(drizzle_result_st *self_ptr, VALUE connection)
109
+ {
110
+ VALUE ret = Data_Wrap_Struct(DrizzleResult, NULL, drizzle_result_free, self_ptr);
111
+ rb_iv_set(ret, "@connection", connection);
112
+ return ret;
113
+ }
114
+
84
115
  void init_drizzle_result()
85
116
  {
86
117
  DrizzleResult = drizzle_gem_create_class_with_private_constructor("Result", rb_cObject);
@@ -89,4 +120,5 @@ void init_drizzle_result()
89
120
  rb_define_method(DrizzleResult, "buffer!", buffer_if_needed, 0);
90
121
  rb_define_method(DrizzleResult, "buffered?", is_buffered, 0);
91
122
  rb_define_method(DrizzleResult, "next_row", next_row, 0);
123
+ rb_define_method(DrizzleResult, "insert_id", insert_id, 0);
92
124
  }
@@ -1,14 +1,7 @@
1
- #include "drizzle.h"
1
+ #include "downpour.h"
2
2
 
3
3
  #define SELF_TYPE drizzle_st
4
4
 
5
- static VALUE clone_status(VALUE self)
6
- {
7
- read_self_ptr();
8
- drizzle_st *cloned = drizzle_clone(NULL, self_ptr);
9
- return Data_Wrap_Struct(DrizzleStatus, NULL, drizzle_free, cloned);
10
- }
11
-
12
5
  static in_port_t get_port(VALUE port)
13
6
  {
14
7
  if(port == Qnil)
@@ -17,7 +10,6 @@ static in_port_t get_port(VALUE port)
17
10
  return NUM2UINT(port);
18
11
  }
19
12
 
20
-
21
13
  static VALUE add_tcp_connection(int argc, VALUE *argv, VALUE self)
22
14
  {
23
15
  read_self_ptr();
@@ -34,10 +26,7 @@ static VALUE add_tcp_connection(int argc, VALUE *argv, VALUE self)
34
26
  read_string(passwd, ""),
35
27
  read_string(db, "test"),
36
28
  DRIZZLE_CON_NONE);
37
-
38
- VALUE val = Data_Wrap_Struct(DrizzleConnection, NULL, NULL, connection);
39
- rb_iv_set(val, "@status", self);
40
- return val;
29
+ return downpour_connection_constructor(connection, self);
41
30
  }
42
31
 
43
32
  static VALUE error(VALUE self)
@@ -57,11 +46,31 @@ static VALUE set_verbose(VALUE self, VALUE newVerbocity)
57
46
  return newVerbocity;
58
47
  }
59
48
 
49
+ static VALUE get_verbose(VALUE self)
50
+ {
51
+ read_self_ptr();
52
+
53
+ return UINT2NUM(drizzle_verbose(self_ptr));
54
+ }
55
+
56
+ static VALUE verbose_name(VALUE self)
57
+ {
58
+ read_self_ptr();
59
+
60
+ return rb_str_new2(drizzle_verbose_name(drizzle_verbose(self_ptr)));
61
+ }
62
+
63
+ VALUE downpour_constructor(drizzle_st *self_ptr)
64
+ {
65
+ return Data_Wrap_Struct(DrizzleStatus, NULL, drizzle_free, self_ptr);
66
+ }
67
+
60
68
  void init_drizzle_status()
61
69
  {
62
70
  DrizzleStatus = drizzle_gem_create_class_with_private_constructor("Status", rb_cObject);
63
- rb_define_method(DrizzleStatus, "clone", clone_status, 0);
64
71
  rb_define_method(DrizzleStatus, "add_tcp_connection", add_tcp_connection, -1);
65
72
  rb_define_method(DrizzleStatus, "error", error, 0);
66
73
  rb_define_method(DrizzleStatus, "verbose=", set_verbose, 1);
74
+ rb_define_method(DrizzleStatus, "verbose", get_verbose, 0);
75
+ rb_define_method(DrizzleStatus, "verbose_name", verbose_name, 0);
67
76
  }
@@ -1,3 +1,3 @@
1
1
  module Downpour
2
- VERSION = "0.0.1"
3
- end
2
+ VERSION = "0.0.2"
3
+ end
data/spec/bootstrap.sql CHANGED
@@ -5,3 +5,9 @@ create table Test1 (
5
5
  insert into Test1 values ('foo');
6
6
  insert into Test1 values ('bar');
7
7
  insert into Test1 values ('baz');
8
+
9
+ drop table if exists Test2;
10
+ create table Test2 (
11
+ id int auto_increment primary key,
12
+ name varchar(20)
13
+ );
@@ -0,0 +1,19 @@
1
+ describe "insert query" do
2
+
3
+ def count_of_test2
4
+ @conn.query("select * from Test2").row_count
5
+ end
6
+
7
+ before(:each) do
8
+ @status = Downpour.create
9
+ @conn = create_connection(@status)
10
+ end
11
+
12
+ it "should increment the row count by one" do
13
+ lambda { @conn.query "insert into Test2 (name) values ('foo')" }.should change(self, :count_of_test2).by(1)
14
+ end
15
+
16
+ it "should get id after inserting" do
17
+ @conn.query("insert into Test2 (name) values ('foo')").insert_id.should == count_of_test2
18
+ end
19
+ end
@@ -0,0 +1,12 @@
1
+ describe Downpour do
2
+ it "should have the version number set" do
3
+ Downpour.drizzle_version.should eq("7")
4
+ end
5
+
6
+ it "should set the verbose level" do
7
+ st = Downpour.create
8
+ st.verbose = 5
9
+ st.verbose.should == 5
10
+ st.verbose_name.should == "CRAZY"
11
+ end
12
+ end
@@ -1,6 +1,6 @@
1
- describe Drizzle do
1
+ describe Downpour do
2
2
  before(:each) do
3
- @status = Drizzle.create
3
+ @status = Downpour.create
4
4
  @connection = create_connection(@status)
5
5
  end
6
6
 
@@ -0,0 +1,52 @@
1
+ describe "select query" do
2
+
3
+ before(:each) do
4
+ @status = Downpour.create
5
+ @conn = create_connection(@status)
6
+ @results = @conn.query "select * from Test1"
7
+ end
8
+
9
+ it "should count records" do
10
+ @results.row_count.should == 3
11
+ @results.should be_buffered
12
+ end
13
+
14
+ it "should buffer records" do
15
+ @results.should_not be_buffered
16
+ @results.buffer!
17
+ @results.should be_buffered
18
+ end
19
+
20
+ it "should only buffer records once" do
21
+ @results.buffer!.should be_true
22
+ @results.buffer!.should be_false
23
+ end
24
+
25
+ it "should count columns" do
26
+ @results.column_count.should == 1
27
+ end
28
+
29
+ it "should not buffer when reading a single row" do
30
+ @results.next_row
31
+ @results.should_not be_buffered
32
+ end
33
+
34
+ shared_examples_for "a read query" do
35
+ it "should read all rows" do
36
+ @results.next_row.should == ["foo"]
37
+ @results.next_row.should == ["bar"]
38
+ @results.next_row.should == ["baz"]
39
+ @results.next_row.should be_nil
40
+ end
41
+ end
42
+
43
+ context "without buffering" do
44
+ it_should_behave_like "a read query"
45
+ end
46
+
47
+ context "with buffering" do
48
+ before(:each) { @results.buffer! }
49
+
50
+ it_should_behave_like "a read query"
51
+ end
52
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: downpour
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Tejas Dinkar
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-05-25 00:00:00 +05:30
13
+ date: 2011-05-30 00:00:00 +05:30
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -46,8 +46,8 @@ extra_rdoc_files:
46
46
  files:
47
47
  - downpour.gemspec
48
48
  - ext/downpour/connection.c
49
- - ext/downpour/drizzle.c
50
- - ext/downpour/drizzle.h
49
+ - ext/downpour/downpour.c
50
+ - ext/downpour/downpour.h
51
51
  - ext/downpour/extconf.rb
52
52
  - ext/downpour/helpers.c
53
53
  - ext/downpour/module.c
@@ -55,12 +55,13 @@ files:
55
55
  - ext/downpour/status.c
56
56
  - lib/downpour.rb
57
57
  - lib/downpour/version.rb
58
- - README.rdoc
59
58
  - spec/bootstrap.sql
60
- - spec/module_spec.rb
61
- - spec/query_spec.rb
62
- - spec/smoke_spec.rb
59
+ - spec/downpour/insert_spec.rb
60
+ - spec/downpour/module_spec.rb
61
+ - spec/downpour/query_spec.rb
62
+ - spec/downpour/select_spec.rb
63
63
  - spec/spec_helper.rb
64
+ - README.rdoc
64
65
  has_rdoc: true
65
66
  homepage: http://github.com/gja/downpour
66
67
  licenses: []
@@ -92,7 +93,8 @@ specification_version: 3
92
93
  summary: A simple, fast Mysql and Drizzle library for Ruby, binding to libdrizzle
93
94
  test_files:
94
95
  - spec/bootstrap.sql
95
- - spec/module_spec.rb
96
- - spec/query_spec.rb
97
- - spec/smoke_spec.rb
96
+ - spec/downpour/insert_spec.rb
97
+ - spec/downpour/module_spec.rb
98
+ - spec/downpour/query_spec.rb
99
+ - spec/downpour/select_spec.rb
98
100
  - spec/spec_helper.rb
data/spec/module_spec.rb DELETED
@@ -1,5 +0,0 @@
1
- describe Drizzle do
2
- it "should have the version number set" do
3
- Drizzle.version.should == "7"
4
- end
5
- end
data/spec/smoke_spec.rb DELETED
@@ -1,61 +0,0 @@
1
- describe Drizzle do
2
-
3
- before(:each) do
4
- @status = Drizzle.create
5
- @conn = create_connection(@status)
6
- end
7
-
8
- context "select query" do
9
- before(:each) do
10
- @results = @conn.query "select * from Test1"
11
- end
12
-
13
- it "should count records" do
14
- @results.row_count.should == 3
15
- @results.should be_buffered
16
- end
17
-
18
- it "should buffer records" do
19
- @results.should_not be_buffered
20
- @results.buffer!
21
- @results.should be_buffered
22
- end
23
-
24
- it "should only buffer records once" do
25
- @results.buffer!.should be_true
26
- @results.buffer!.should be_false
27
- end
28
-
29
- it "should count columns" do
30
- @results.column_count.should == 1
31
- end
32
-
33
- it "should not buffer when reading a single row" do
34
- @results.next_row
35
- @results.should_not be_buffered
36
- end
37
-
38
- shared_examples_for "a read query" do
39
- it "should read all rows" do
40
- @results.next_row.should == ["foo"]
41
- @results.next_row.should == ["bar"]
42
- @results.next_row.should == ["baz"]
43
- @results.next_row.should be_nil
44
- end
45
- end
46
-
47
- context "without buffering" do
48
- it_should_behave_like "a read query"
49
- end
50
-
51
- context "with buffering" do
52
- before(:each) { @results.buffer! }
53
-
54
- it_should_behave_like "a read query"
55
- end
56
- end
57
-
58
- after(:each) do
59
- #puts @status.error
60
- end
61
- end