make specs a little finer grained, fix a few issues found along the way
This commit is contained in:
parent
61e748ddc4
commit
dfca514562
|
@ -352,8 +352,10 @@ static VALUE rb_mysql_result_fetch_row(int argc, VALUE * argv, VALUE self) {
|
|||
case MYSQL_TYPE_NULL: // NULL-type field
|
||||
val = Qnil;
|
||||
break;
|
||||
case MYSQL_TYPE_TINY: // TINYINT field
|
||||
case MYSQL_TYPE_BIT: // BIT field (MySQL 5.0.3 and up)
|
||||
val = rb_str_new(row[i], fieldLengths[i]);
|
||||
break;
|
||||
case MYSQL_TYPE_TINY: // TINYINT field
|
||||
case MYSQL_TYPE_SHORT: // SMALLINT field
|
||||
case MYSQL_TYPE_LONG: // INTEGER field
|
||||
case MYSQL_TYPE_INT24: // MEDIUMINT field
|
||||
|
|
|
@ -52,8 +52,9 @@ describe Mysql2::Result do
|
|||
@client.query "USE test"
|
||||
@client.query %[
|
||||
CREATE TABLE IF NOT EXISTS mysql2_test (
|
||||
id MEDIUMINT NOT NULL AUTO_INCREMENT,
|
||||
null_test VARCHAR(10),
|
||||
bit_test BIT,
|
||||
bit_test BIT(64),
|
||||
tiny_int_test TINYINT,
|
||||
small_int_test SMALLINT,
|
||||
medium_int_test MEDIUMINT,
|
||||
|
@ -80,7 +81,8 @@ describe Mysql2::Result do
|
|||
long_blob_test LONGBLOB,
|
||||
long_text_test LONGTEXT,
|
||||
enum_test ENUM('val1', 'val2'),
|
||||
set_test SET('val1', 'val2')
|
||||
set_test SET('val1', 'val2'),
|
||||
PRIMARY KEY (id)
|
||||
)
|
||||
]
|
||||
@client.query %[
|
||||
|
@ -93,14 +95,18 @@ describe Mysql2::Result do
|
|||
)
|
||||
|
||||
VALUES (
|
||||
NULL, 1, 1, 10, 10, 10, 10,
|
||||
NULL, b'101', 1, 10, 10, 10, 10,
|
||||
10.3, 10.3, 10.3, '2010-4-4', '2010-4-4 11:44:00', '2010-4-4 11:44:00', '11:44:00',
|
||||
2009, "test", "test", "test", "test", "test",
|
||||
"test", "test", "test", "test", "test",
|
||||
"test", "test", 'val1', 'val1,val2'
|
||||
)
|
||||
]
|
||||
@test_result = @client.query("SELECT * FROM mysql2_test LIMIT 1").first
|
||||
@test_result = @client.query("SELECT * FROM mysql2_test ORDER BY id DESC LIMIT 1").first
|
||||
end
|
||||
|
||||
after(:all) do
|
||||
@client.query("DELETE FROM mysql2_test WHERE id=#{@test_result['id']}")
|
||||
end
|
||||
|
||||
it "should return nil for a NULL value" do
|
||||
|
@ -108,59 +114,94 @@ describe Mysql2::Result do
|
|||
@test_result['null_test'].should eql(nil)
|
||||
end
|
||||
|
||||
{
|
||||
'bit_test' => 'BIT',
|
||||
'tiny_int_test' => 'TINYINT',
|
||||
'small_int_test' => 'SMALLINT',
|
||||
'medium_int_test' => 'MEDIUMINT',
|
||||
'int_test' => 'INT',
|
||||
'big_int_test' => 'BIGINT',
|
||||
'year_test' => 'YEAR'
|
||||
}.each do |field, type|
|
||||
it "should return a Fixnum for #{type}" do
|
||||
[Fixnum, Bignum].should include(@test_result[field].class)
|
||||
end
|
||||
it "should return Fixnum for a BIT value" do
|
||||
@test_result['bit_test'].class.should eql(String)
|
||||
@test_result['bit_test'].should eql("\000\000\000\000\000\000\000\005")
|
||||
end
|
||||
|
||||
{
|
||||
'decimal_test' => 'DECIMAL'
|
||||
}.each do |field, type|
|
||||
it "should return a Fixnum for #{type}" do
|
||||
@test_result[field].class.should eql(BigDecimal)
|
||||
end
|
||||
it "should return Fixnum for a TINYINT value" do
|
||||
[Fixnum, Bignum].should include(@test_result['tiny_int_test'].class)
|
||||
@test_result['tiny_int_test'].should eql(1)
|
||||
end
|
||||
|
||||
{
|
||||
'float_test' => 'FLOAT',
|
||||
'double_test' => 'DOUBLE'
|
||||
}.each do |field, type|
|
||||
it "should return a Float for #{type}" do
|
||||
@test_result[field].class.should eql(Float)
|
||||
end
|
||||
it "should return Fixnum for a SMALLINT value" do
|
||||
[Fixnum, Bignum].should include(@test_result['small_int_test'].class)
|
||||
@test_result['small_int_test'].should eql(10)
|
||||
end
|
||||
|
||||
{
|
||||
'date_time_test' => 'DATETIME',
|
||||
'timestamp_test' => 'TIMESTAMP',
|
||||
'time_test' => 'TIME'
|
||||
}.each do |field, type|
|
||||
it "should return a Time for #{type}" do
|
||||
@test_result[field].class.should eql(Time)
|
||||
end
|
||||
it "should return Fixnum for a MEDIUMINT value" do
|
||||
[Fixnum, Bignum].should include(@test_result['medium_int_test'].class)
|
||||
@test_result['medium_int_test'].should eql(10)
|
||||
end
|
||||
|
||||
{
|
||||
'date_test' => 'DATE'
|
||||
}.each do |field, type|
|
||||
it "should return a Date for #{type}" do
|
||||
@test_result[field].class.should eql(Date)
|
||||
it "should return Fixnum for an INT value" do
|
||||
[Fixnum, Bignum].should include(@test_result['int_test'].class)
|
||||
@test_result['int_test'].should eql(10)
|
||||
end
|
||||
|
||||
it "should return Fixnum for a BIGINT value" do
|
||||
[Fixnum, Bignum].should include(@test_result['big_int_test'].class)
|
||||
@test_result['big_int_test'].should eql(10)
|
||||
end
|
||||
|
||||
it "should return Fixnum for a YEAR value" do
|
||||
[Fixnum, Bignum].should include(@test_result['year_test'].class)
|
||||
@test_result['year_test'].should eql(2009)
|
||||
end
|
||||
|
||||
it "should return BigDecimal for a DECIMAL value" do
|
||||
@test_result['decimal_test'].class.should eql(BigDecimal)
|
||||
@test_result['decimal_test'].should eql(10.3)
|
||||
end
|
||||
|
||||
it "should return Float for a FLOAT value" do
|
||||
@test_result['float_test'].class.should eql(Float)
|
||||
@test_result['float_test'].should eql(10.3)
|
||||
end
|
||||
|
||||
it "should return Float for a DOUBLE value" do
|
||||
@test_result['double_test'].class.should eql(Float)
|
||||
@test_result['double_test'].should eql(10.3)
|
||||
end
|
||||
|
||||
it "should return Time for a DATETIME value" do
|
||||
@test_result['date_time_test'].class.should eql(Time)
|
||||
@test_result['date_time_test'].strftime("%F %T").should eql('2010-04-04 11:44:00')
|
||||
end
|
||||
|
||||
it "should return Time for a TIMESTAMP value" do
|
||||
@test_result['timestamp_test'].class.should eql(Time)
|
||||
@test_result['timestamp_test'].strftime("%F %T").should eql('2010-04-04 11:44:00')
|
||||
end
|
||||
|
||||
it "should return Time for a TIME value" do
|
||||
@test_result['time_test'].class.should eql(Time)
|
||||
@test_result['time_test'].strftime("%F %T").should eql('2000-01-01 11:44:00')
|
||||
end
|
||||
|
||||
it "should return Date for a DATE value" do
|
||||
@test_result['date_test'].class.should eql(Date)
|
||||
@test_result['date_test'].strftime("%F").should eql('2010-04-04')
|
||||
end
|
||||
|
||||
it "should return String for an ENUM value" do
|
||||
@test_result['enum_test'].class.should eql(String)
|
||||
@test_result['enum_test'].should eql('val1')
|
||||
end
|
||||
|
||||
it "should return String for a SET value" do
|
||||
@test_result['set_test'].class.should eql(String)
|
||||
@test_result['set_test'].should eql('val1,val2')
|
||||
end
|
||||
|
||||
it "should return String for a BINARY value" do
|
||||
@test_result['binary_test'].class.should eql(String)
|
||||
@test_result['binary_test'].should eql("test#{"\000"*6}")
|
||||
end
|
||||
|
||||
{
|
||||
'char_test' => 'CHAR',
|
||||
'varchar_test' => 'VARCHAR',
|
||||
'binary_test' => 'BINARY',
|
||||
'varbinary_test' => 'VARBINARY',
|
||||
'tiny_blob_test' => 'TINYBLOB',
|
||||
'tiny_text_test' => 'TINYTEXT',
|
||||
|
@ -169,12 +210,11 @@ describe Mysql2::Result do
|
|||
'medium_blob_test' => 'MEDIUMBLOB',
|
||||
'medium_text_test' => 'MEDIUMTEXT',
|
||||
'long_blob_test' => 'LONGBLOB',
|
||||
'long_text_test' => 'LONGTEXT',
|
||||
'enum_test' => 'ENUM',
|
||||
'set_test' => 'SET'
|
||||
'long_text_test' => 'LONGTEXT'
|
||||
}.each do |field, type|
|
||||
it "should return a String for #{type}" do
|
||||
@test_result[field].class.should eql(String)
|
||||
@test_result[field].should eql("test")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue