From 8f93f830c1224beee84464866cc71561b3fc25ee Mon Sep 17 00:00:00 2001 From: Brian Lopez Date: Wed, 7 Apr 2010 09:47:45 -0700 Subject: [PATCH] add affected_rows method (mysql_affected_rows) --- ext/mysql2_ext.c | 12 ++++++++--- ext/mysql2_ext.h | 1 + spec/mysql2/client_spec.rb | 41 +++++++++++++++++++++++++++----------- 3 files changed, 39 insertions(+), 15 deletions(-) diff --git a/ext/mysql2_ext.c b/ext/mysql2_ext.c index 0beabcd..5325b86 100644 --- a/ext/mysql2_ext.c +++ b/ext/mysql2_ext.c @@ -254,11 +254,16 @@ static VALUE rb_mysql_client_async_result(VALUE self) { static VALUE rb_mysql_client_last_id(VALUE self) { MYSQL * client; - my_ulonglong id; GetMysql2Client(self, client); - id = mysql_insert_id(client); - return ULL2NUM(id); + return ULL2NUM(mysql_insert_id(client)); +} + +static VALUE rb_mysql_client_affected_rows(VALUE self) { + MYSQL * client; + GetMysql2Client(self, client); + + return ULL2NUM(mysql_affected_rows(client)); } /* Mysql2::Result */ @@ -459,6 +464,7 @@ void Init_mysql2_ext() { rb_define_method(cMysql2Client, "socket", rb_mysql_client_socket, 0); rb_define_method(cMysql2Client, "async_result", rb_mysql_client_async_result, 0); rb_define_method(cMysql2Client, "last_id", rb_mysql_client_last_id, 0); + rb_define_method(cMysql2Client, "affected_rows", rb_mysql_client_affected_rows, 0); cMysql2Error = rb_define_class_under(mMysql2, "Error", rb_eStandardError); diff --git a/ext/mysql2_ext.h b/ext/mysql2_ext.h index d90af2c..a2bee42 100644 --- a/ext/mysql2_ext.h +++ b/ext/mysql2_ext.h @@ -39,6 +39,7 @@ static VALUE rb_mysql_client_server_info(VALUE self); static VALUE rb_mysql_client_socket(VALUE self); static VALUE rb_mysql_client_async_result(VALUE self); static VALUE rb_mysql_client_last_id(VALUE self); +static VALUE rb_mysql_client_affected_rows(VALUE self); void rb_mysql_client_free(void * client); /* Mysql2::Result */ diff --git a/spec/mysql2/client_spec.rb b/spec/mysql2/client_spec.rb index 3aec296..0c3cd9e 100644 --- a/spec/mysql2/client_spec.rb +++ b/spec/mysql2/client_spec.rb @@ -117,18 +117,35 @@ describe Mysql2::Client do result.class.should eql(Mysql2::Result) end - it "should respond to #last_id" do - @client.should respond_to(:last_id) - end + context 'write operations api' do + before(:each) do + @client.query "USE test" + @client.query "CREATE TABLE lastIdTest (`id` int(11) NOT NULL AUTO_INCREMENT, blah INT(11), PRIMARY KEY (`id`))" + end - it "#last_id should return a Fixnum, the from the last INSERT/UPDATE" do - @client.last_id.should eql(0) - @client.query "USE test" - @client.query "CREATE TABLE lastIdTest (`id` int(11) NOT NULL AUTO_INCREMENT, blah INT(11), PRIMARY KEY (`id`))" - @client.last_id.should eql(0) - @client.query "INSERT INTO lastIdTest (blah) VALUES (1234)" - @client.last_id.should eql(1) - @client.query "DROP TABLE lastIdTest" - @client.last_id.should eql(0) + after(:each) do + @client.query "DROP TABLE lastIdTest" + end + + it "should respond to #last_id" do + @client.should respond_to(:last_id) + end + + it "#last_id should return a Fixnum, the from the last INSERT/UPDATE" do + @client.last_id.should eql(0) + @client.query "INSERT INTO lastIdTest (blah) VALUES (1234)" + @client.last_id.should eql(1) + end + + it "should respond to #last_id" do + @client.should respond_to(:last_id) + end + + it "#last_id should return a Fixnum, the from the last INSERT/UPDATE" do + @client.query "INSERT INTO lastIdTest (blah) VALUES (1234)" + @client.affected_rows.should eql(1) + @client.query "UPDATE lastIdTest SET blah=4321 WHERE id=1" + @client.affected_rows.should eql(1) + end end end \ No newline at end of file