ruby-mysql 2.9.8 → 2.9.9
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.
Potentially problematic release.
This version of ruby-mysql might be problematic. Click here for more details.
- data/lib/mysql.rb +7 -4
- data/lib/mysql/protocol.rb +8 -10
- data/spec/mysql_spec.rb +96 -1
- metadata +2 -2
data/lib/mysql.rb
CHANGED
@@ -14,13 +14,13 @@ class Mysql
|
|
14
14
|
require "mysql/error"
|
15
15
|
require "mysql/charset"
|
16
16
|
require "mysql/protocol"
|
17
|
+
require "mysql/packet.rb"
|
17
18
|
begin
|
18
|
-
require "mysql/
|
19
|
+
require "mysql/ext.so"
|
19
20
|
rescue LoadError
|
20
|
-
require "mysql/packet.rb"
|
21
21
|
end
|
22
22
|
|
23
|
-
VERSION =
|
23
|
+
VERSION = 20909 # Version number of this library
|
24
24
|
MYSQL_UNIX_PORT = "/tmp/mysql.sock" # UNIX domain socket filename
|
25
25
|
MYSQL_TCP_PORT = 3306 # TCP socket port number
|
26
26
|
|
@@ -1054,6 +1054,7 @@ class Mysql
|
|
1054
1054
|
# @param [Boolean] neg negative flag
|
1055
1055
|
# @param [Integer] second_part
|
1056
1056
|
def initialize(year=0, month=0, day=0, hour=0, minute=0, second=0, neg=false, second_part=0)
|
1057
|
+
@date_flag = !(hour && minute && second)
|
1057
1058
|
@year, @month, @day, @hour, @minute, @second, @neg, @second_part =
|
1058
1059
|
year.to_i, month.to_i, day.to_i, hour.to_i, minute.to_i, second.to_i, neg, second_part.to_i
|
1059
1060
|
end
|
@@ -1077,7 +1078,9 @@ class Mysql
|
|
1077
1078
|
|
1078
1079
|
# @return [String] "yyyy-mm-dd HH:MM:SS"
|
1079
1080
|
def to_s
|
1080
|
-
if
|
1081
|
+
if @date_flag
|
1082
|
+
sprintf "%04d-%02d-%02d", year, mon, day
|
1083
|
+
elsif year == 0 and mon == 0 and day == 0
|
1081
1084
|
h = neg ? hour * -1 : hour
|
1082
1085
|
sprintf "%02d:%02d:%02d", h, min, sec
|
1083
1086
|
else
|
data/lib/mysql/protocol.rb
CHANGED
@@ -44,15 +44,12 @@ class Mysql
|
|
44
44
|
when Field::TYPE_DATE
|
45
45
|
len = pkt.utiny
|
46
46
|
y, m, d = pkt.read(len).unpack("vCC")
|
47
|
-
t = Mysql::Time.new(y, m, d)
|
48
|
-
def t.to_s
|
49
|
-
sprintf "%04d-%02d-%02d", year, mon ,day
|
50
|
-
end
|
47
|
+
t = Mysql::Time.new(y, m, d, nil, nil, nil)
|
51
48
|
return t
|
52
49
|
when Field::TYPE_DATETIME, Field::TYPE_TIMESTAMP
|
53
50
|
len = pkt.utiny
|
54
|
-
y, m, d, h, mi, s,
|
55
|
-
return Mysql::Time.new(y, m, d, h, mi, s,
|
51
|
+
y, m, d, h, mi, s, sp = pkt.read(len).unpack("vCCCCCV")
|
52
|
+
return Mysql::Time.new(y, m, d, h, mi, s, false, sp)
|
56
53
|
when Field::TYPE_TIME
|
57
54
|
len = pkt.utiny
|
58
55
|
sign, d, h, mi, s, sp = pkt.read(len).unpack("CVCCCV")
|
@@ -423,10 +420,11 @@ class Mysql
|
|
423
420
|
# [Array of Array of Object] all records
|
424
421
|
def stmt_retr_all_records(fields, charset)
|
425
422
|
check_state :RESULT
|
423
|
+
enc = charset.encoding
|
426
424
|
begin
|
427
425
|
all_recs = []
|
428
|
-
until (
|
429
|
-
all_recs.push StmtRawRecord.new(
|
426
|
+
until (pkt = read).eof?
|
427
|
+
all_recs.push StmtRawRecord.new(pkt, fields, enc)
|
430
428
|
end
|
431
429
|
all_recs
|
432
430
|
ensure
|
@@ -494,13 +492,13 @@ class Mysql
|
|
494
492
|
begin
|
495
493
|
Timeout.timeout @read_timeout do
|
496
494
|
header = @sock.read(4)
|
497
|
-
raise EOFError unless header.length == 4
|
495
|
+
raise EOFError unless header && header.length == 4
|
498
496
|
len1, len2, seq = header.unpack("CvC")
|
499
497
|
len = (len2 << 8) + len1
|
500
498
|
raise ProtocolError, "invalid packet: sequence number mismatch(#{seq} != #{@seq}(expected))" if @seq != seq
|
501
499
|
@seq = (@seq + 1) % 256
|
502
500
|
ret = @sock.read(len)
|
503
|
-
raise EOFError unless ret.length == len
|
501
|
+
raise EOFError unless ret && ret.length == len
|
504
502
|
end
|
505
503
|
rescue EOFError
|
506
504
|
raise ClientError::ServerGoneError, 'The MySQL server has gone away'
|
data/spec/mysql_spec.rb
CHANGED
@@ -13,7 +13,7 @@ MYSQL_SOCKET = ENV['MYSQL_SOCKET']
|
|
13
13
|
|
14
14
|
describe 'Mysql::VERSION' do
|
15
15
|
it 'returns client version' do
|
16
|
-
Mysql::VERSION.should ==
|
16
|
+
Mysql::VERSION.should == 20909
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -649,6 +649,7 @@ end
|
|
649
649
|
describe 'Mysql::Result' do
|
650
650
|
before do
|
651
651
|
@m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
|
652
|
+
@m.charset = 'latin1'
|
652
653
|
@m.query 'create temporary table t (id int, str char(10), primary key (id))'
|
653
654
|
@m.query "insert into t values (1,'abc'),(2,'defg'),(3,'hi'),(4,null)"
|
654
655
|
@res = @m.query 'select * from t'
|
@@ -808,6 +809,7 @@ end
|
|
808
809
|
describe 'Mysql::Field' do
|
809
810
|
before do
|
810
811
|
@m = Mysql.new(MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DATABASE, MYSQL_PORT, MYSQL_SOCKET)
|
812
|
+
@m.charset = 'latin1'
|
811
813
|
@m.query 'create temporary table t (id int default 0, str char(10), primary key (id))'
|
812
814
|
@m.query "insert into t values (1,'abc'),(2,'defg'),(3,'hi'),(4,null)"
|
813
815
|
@res = @m.query 'select * from t'
|
@@ -1065,6 +1067,99 @@ describe 'Mysql::Stmt' do
|
|
1065
1067
|
end
|
1066
1068
|
end
|
1067
1069
|
|
1070
|
+
describe '#execute with various integer value:' do
|
1071
|
+
before do
|
1072
|
+
@m.query('create temporary table t (i bigint)')
|
1073
|
+
end
|
1074
|
+
[
|
1075
|
+
-9223372036854775808,
|
1076
|
+
-9223372036854775807,
|
1077
|
+
-4294967297,
|
1078
|
+
-4294967296,
|
1079
|
+
-4294967295,
|
1080
|
+
-2147483649,
|
1081
|
+
-2147483648,
|
1082
|
+
-2147483647,
|
1083
|
+
-65537,
|
1084
|
+
-65536,
|
1085
|
+
-65535,
|
1086
|
+
-32769,
|
1087
|
+
-32768,
|
1088
|
+
-32767,
|
1089
|
+
-257,
|
1090
|
+
-256,
|
1091
|
+
-255,
|
1092
|
+
-129,
|
1093
|
+
-128,
|
1094
|
+
-127,
|
1095
|
+
0,
|
1096
|
+
126,
|
1097
|
+
127,
|
1098
|
+
128,
|
1099
|
+
254,
|
1100
|
+
255,
|
1101
|
+
256,
|
1102
|
+
32766,
|
1103
|
+
32767,
|
1104
|
+
32768,
|
1105
|
+
65534,
|
1106
|
+
65535,
|
1107
|
+
65536,
|
1108
|
+
2147483646,
|
1109
|
+
2147483647,
|
1110
|
+
2147483648,
|
1111
|
+
4294967294,
|
1112
|
+
4294967295,
|
1113
|
+
4294967296,
|
1114
|
+
9223372036854775806,
|
1115
|
+
9223372036854775807,
|
1116
|
+
].each do |n|
|
1117
|
+
it "#{n} is #{n}" do
|
1118
|
+
@s.prepare 'insert into t values (?)'
|
1119
|
+
@s.execute n
|
1120
|
+
@m.query('select i from t').fetch.should == ["#{n}"]
|
1121
|
+
end
|
1122
|
+
end
|
1123
|
+
end
|
1124
|
+
|
1125
|
+
describe '#execute with various unsigned integer value:' do
|
1126
|
+
before do
|
1127
|
+
@m.query('create temporary table t (i bigint unsigned)')
|
1128
|
+
end
|
1129
|
+
[
|
1130
|
+
0,
|
1131
|
+
126,
|
1132
|
+
127,
|
1133
|
+
128,
|
1134
|
+
254,
|
1135
|
+
255,
|
1136
|
+
256,
|
1137
|
+
32766,
|
1138
|
+
32767,
|
1139
|
+
32768,
|
1140
|
+
65534,
|
1141
|
+
65535,
|
1142
|
+
65536,
|
1143
|
+
2147483646,
|
1144
|
+
2147483647,
|
1145
|
+
2147483648,
|
1146
|
+
4294967294,
|
1147
|
+
4294967295,
|
1148
|
+
4294967296,
|
1149
|
+
9223372036854775806,
|
1150
|
+
9223372036854775807,
|
1151
|
+
9223372036854775808,
|
1152
|
+
18446744073709551614,
|
1153
|
+
18446744073709551615,
|
1154
|
+
].each do |n|
|
1155
|
+
it "#{n} is #{n}" do
|
1156
|
+
@s.prepare 'insert into t values (?)'
|
1157
|
+
@s.execute n
|
1158
|
+
@m.query('select i from t').fetch.should == ["#{n}"]
|
1159
|
+
end
|
1160
|
+
end
|
1161
|
+
end
|
1162
|
+
|
1068
1163
|
it '#fetch returns result-record' do
|
1069
1164
|
@s.prepare 'select 123, "abc", null'
|
1070
1165
|
@s.execute
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ruby-mysql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.9.
|
4
|
+
version: 2.9.9
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
12
|
+
date: 2012-06-17 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: This is MySQL connector. pure Ruby version
|
15
15
|
email: tommy@tmtm.org
|