flydata 0.5.15 → 0.5.16

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c4f662e6fc6c4a180d38770b2b84b87292b8d44f
4
- data.tar.gz: 97f92499dca46d6d9368c9e81756f502be4951dd
3
+ metadata.gz: 145b738aa44e8337c13b426d551c12d62d3f688b
4
+ data.tar.gz: 9597729174fa3a8d1e55eed087eb77ebd3e39cfd
5
5
  SHA512:
6
- metadata.gz: cf2588a3cce18df232abc2eecd2b066eab5224bb3e0b30d6a80484663f586f5de8c2b821cf22341f5cae7b731bd4d99aed55f6fa9b5ceab5bb06612fa2d5bcb0
7
- data.tar.gz: c9b5c2b979ef0360e7d8ce8fd73c8df645559cb56888b5d7a40746700b6e48537fdc5b8c4f453a872a44c2cccd25f440552b86d7a447a633e491faf3cd4a5abc
6
+ metadata.gz: 62a90057efd34adb6be5187d932d53d961f80f4e3f6138baa8dba840aaa0e91e22be96ba58fb5ce117e89d74048a4eb234244e59dde2fbe1ff4d86be3f246ffa
7
+ data.tar.gz: b0eb15b12279ea4865ef9bd93835bbddbb25a4b7d6b04d1711d14a470e6265224e7ded1c733866c9ea93fc1846e6327d5b116181611170ed54da151685eb59bf
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.5.15
1
+ 0.5.16
@@ -10,6 +10,16 @@ _declspec(dllexport)
10
10
  void Init_json_ext();
11
11
  }
12
12
 
13
+ inline void write_escape_str(const char*& buf, long& buf_len, const char* escape_str, long escape_str_len, std::stringstream& ss)
14
+ {
15
+ if (buf_len > 0)
16
+ {
17
+ ss.write(buf, buf_len);
18
+ }
19
+ ss.write(escape_str, escape_str_len);
20
+ buf = 0; buf_len = 0;
21
+ }
22
+
13
23
  inline void add_json_value(const char* buf, long buf_len, bool quote, std::stringstream& ss)
14
24
  {
15
25
  if (quote)
@@ -21,31 +31,162 @@ inline void add_json_value(const char* buf, long buf_len, bool quote, std::strin
21
31
  const char* esc_str = 0;
22
32
  for (long i = 0; i < buf_len; i++) {
23
33
  if (!ptr) { ptr = buf + i; len = 0; }
34
+
35
+ if ((buf[i] >= 0x5d && buf[i] < 0x7f) || // small letter alphabet
36
+ (buf[i] >= 0x30 && buf[i] < 0x5c) || // digit and capital letter alphabet
37
+ (buf[i] >= 0x80) || // multi-byte utf-8
38
+ (buf[i] >= 0x23 && buf[i] < 0x2f) || // signs
39
+ (buf[i] == 0x21) // exclamation mark
40
+ ) {
41
+ len++;
42
+ continue;
43
+ }
44
+ // Handle JSON special characters. See http://www.json.org/
24
45
  switch (buf[i])
25
46
  {
26
47
  case '\"':
27
48
  esc_str = "\\\"";
49
+ write_escape_str(ptr, len, esc_str, 2, ss);
50
+ break;
28
51
  case '\\':
29
52
  esc_str = "\\\\";
53
+ write_escape_str(ptr, len, esc_str, 2, ss);
54
+ break;
30
55
  case '/':
31
56
  esc_str = "\\/";
57
+ write_escape_str(ptr, len, esc_str, 2, ss);
58
+ break;
59
+ case '\t':
60
+ esc_str = "\\t";
61
+ write_escape_str(ptr, len, esc_str, 2, ss);
62
+ break;
63
+ case '\n':
64
+ esc_str = "\\n";
65
+ write_escape_str(ptr, len, esc_str, 2, ss);
66
+ break;
67
+ case 0x00:
68
+ esc_str = "\\u0000";
69
+ write_escape_str(ptr, len, esc_str, 6, ss);
70
+ break;
71
+ case 0x01:
72
+ esc_str = "\\u0001";
73
+ write_escape_str(ptr, len, esc_str, 6, ss);
74
+ break;
75
+ case 0x02:
76
+ esc_str = "\\u0002";
77
+ write_escape_str(ptr, len, esc_str, 6, ss);
78
+ break;
79
+ case 0x03:
80
+ esc_str = "\\u0003";
81
+ write_escape_str(ptr, len, esc_str, 6, ss);
82
+ break;
83
+ case 0x04:
84
+ esc_str = "\\u0004";
85
+ write_escape_str(ptr, len, esc_str, 6, ss);
86
+ break;
87
+ case 0x05:
88
+ esc_str = "\\u0005";
89
+ write_escape_str(ptr, len, esc_str, 6, ss);
90
+ break;
91
+ case 0x06:
92
+ esc_str = "\\u0006";
93
+ write_escape_str(ptr, len, esc_str, 6, ss);
94
+ break;
95
+ case '\a':
96
+ esc_str = "\\u0007";
97
+ write_escape_str(ptr, len, esc_str, 6, ss);
98
+ break;
32
99
  case '\b':
33
100
  esc_str = "\\b";
101
+ write_escape_str(ptr, len, esc_str, 2, ss);
102
+ break;
103
+ case 0x0b:
104
+ esc_str = "\\u000b";
105
+ write_escape_str(ptr, len, esc_str, 6, ss);
106
+ break;
34
107
  case '\f':
35
108
  esc_str = "\\f";
36
- case '\n':
37
- esc_str = "\\n";
109
+ write_escape_str(ptr, len, esc_str, 2, ss);
110
+ break;
38
111
  case '\r':
39
112
  esc_str = "\\r";
40
- case '\t':
41
- esc_str = "\\t";
42
-
43
- if (len > 0)
44
- {
45
- ss.write(ptr, len);
46
- }
47
- ss.write(esc_str, 2);
48
- ptr = 0; len = 0;
113
+ write_escape_str(ptr, len, esc_str, 2, ss);
114
+ break;
115
+ case 0x0e:
116
+ esc_str = "\\u000e";
117
+ write_escape_str(ptr, len, esc_str, 6, ss);
118
+ break;
119
+ case 0x0f:
120
+ esc_str = "\\u000f";
121
+ write_escape_str(ptr, len, esc_str, 6, ss);
122
+ break;
123
+ case 0x10:
124
+ esc_str = "\\u0010";
125
+ write_escape_str(ptr, len, esc_str, 6, ss);
126
+ break;
127
+ case 0x11:
128
+ esc_str = "\\u0011";
129
+ write_escape_str(ptr, len, esc_str, 6, ss);
130
+ break;
131
+ case 0x12:
132
+ esc_str = "\\u0012";
133
+ write_escape_str(ptr, len, esc_str, 6, ss);
134
+ break;
135
+ case 0x13:
136
+ esc_str = "\\u0013";
137
+ write_escape_str(ptr, len, esc_str, 6, ss);
138
+ break;
139
+ case 0x14:
140
+ esc_str = "\\u0014";
141
+ write_escape_str(ptr, len, esc_str, 6, ss);
142
+ break;
143
+ case 0x15:
144
+ esc_str = "\\u0015";
145
+ write_escape_str(ptr, len, esc_str, 6, ss);
146
+ break;
147
+ case 0x16:
148
+ esc_str = "\\u0016";
149
+ write_escape_str(ptr, len, esc_str, 6, ss);
150
+ break;
151
+ case 0x17:
152
+ esc_str = "\\u0017";
153
+ write_escape_str(ptr, len, esc_str, 6, ss);
154
+ break;
155
+ case 0x18:
156
+ esc_str = "\\u0018";
157
+ write_escape_str(ptr, len, esc_str, 6, ss);
158
+ break;
159
+ case 0x19:
160
+ esc_str = "\\u0019";
161
+ write_escape_str(ptr, len, esc_str, 6, ss);
162
+ break;
163
+ case 0x1a:
164
+ esc_str = "\\u001a";
165
+ write_escape_str(ptr, len, esc_str, 6, ss);
166
+ break;
167
+ case 0x1b:
168
+ esc_str = "\\u001b";
169
+ write_escape_str(ptr, len, esc_str, 6, ss);
170
+ break;
171
+ case 0x1c:
172
+ esc_str = "\\u001c";
173
+ write_escape_str(ptr, len, esc_str, 6, ss);
174
+ break;
175
+ case 0x1d:
176
+ esc_str = "\\u001d";
177
+ write_escape_str(ptr, len, esc_str, 6, ss);
178
+ break;
179
+ case 0x1e:
180
+ esc_str = "\\u001e";
181
+ write_escape_str(ptr, len, esc_str, 6, ss);
182
+ break;
183
+ case 0x1f:
184
+ esc_str = "\\u001f";
185
+ write_escape_str(ptr, len, esc_str, 6, ss);
186
+ break;
187
+ case 0x7f:
188
+ esc_str = "\\u007f";
189
+ write_escape_str(ptr, len, esc_str, 6, ss);
49
190
  break;
50
191
  default:
51
192
  len++;
data/flydata.gemspec CHANGED
Binary file
@@ -0,0 +1,69 @@
1
+ require 'spec_helper'
2
+ require 'flydata/json/json_ext'
3
+
4
+ describe JSON do
5
+ describe '.generate_kv_pairs' do
6
+ subject { described_class.generate_kv_pairs(keys, values) }
7
+
8
+ context 'testing values' do
9
+ let(:keys) { ['test'] }
10
+ let(:values) { [ value ] }
11
+ let(:expected_result) { %Q|{"test":"#{expected_value}"}| }
12
+ shared_examples 'producing the expected result' do
13
+ it do
14
+ is_expected.to eq expected_result
15
+ end
16
+ end
17
+ context 'regular string' do
18
+ let(:value) { "a regular text" }
19
+ let(:expected_value) { value }
20
+ it_behaves_like "producing the expected result"
21
+ end
22
+ context 'regular UTF-8 2 byte chars' do
23
+ let(:value) { "¢Àø" }
24
+ let(:expected_value) { value }
25
+ it_behaves_like "producing the expected result"
26
+ end
27
+ context 'regular UTF-8 3 byte chars' do
28
+ let(:value) { "三国一" }
29
+ let(:expected_value) { value }
30
+ it_behaves_like "producing the expected result"
31
+ end
32
+ context '/' do
33
+ let(:value) { "/" }
34
+ let(:expected_value) { "\\/" }
35
+ it_behaves_like "producing the expected result"
36
+ end
37
+ context '\\' do
38
+ let(:value) { "\\" }
39
+ let(:expected_value) { "\\\\" }
40
+ it_behaves_like "producing the expected result"
41
+ end
42
+ context '"' do
43
+ let(:value) { "\"" }
44
+ let(:expected_value) { "\\\"" }
45
+ it_behaves_like "producing the expected result"
46
+ end
47
+ context '\'' do
48
+ let(:value) { "'" }
49
+ let(:expected_value) { "'" }
50
+ it_behaves_like "producing the expected result"
51
+ end
52
+ context '\b' do
53
+ let(:value) { "\b" }
54
+ let(:expected_value) { "\\b" }
55
+ it_behaves_like "producing the expected result"
56
+ end
57
+ context '\x02' do
58
+ let(:value) { "\x02" }
59
+ let(:expected_value) { "\\u0002" }
60
+ it_behaves_like "producing the expected result"
61
+ end
62
+ context '^\\' do
63
+ let(:value) { "\x1c" }
64
+ let(:expected_value) { "\\u001c" }
65
+ it_behaves_like "producing the expected result"
66
+ end
67
+ end
68
+ end
69
+ end
@@ -1068,6 +1068,18 @@ EOS
1068
1068
  end
1069
1069
  end
1070
1070
 
1071
+ context 'when ^B is given' do
1072
+ let(:target_line) {"INSERT INTO `test_table` VALUES ('testtest');"}
1073
+ it 'should not remove the leading zeros' do
1074
+ expect(subject).to eq([["test\x02test"]])
1075
+ end
1076
+ end
1077
+ context 'when ^\\ is given' do
1078
+ let(:target_line) {"INSERT INTO `test_table` VALUES ('testtest');"}
1079
+ it 'should not remove the leading zeros' do
1080
+ expect(subject).to eq([["test\x1ctest"]])
1081
+ end
1082
+ end
1071
1083
  end
1072
1084
  end
1073
1085
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flydata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.15
4
+ version: 0.5.16
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Fujikawa
@@ -12,7 +12,7 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2015-10-29 00:00:00.000000000 Z
15
+ date: 2015-11-02 00:00:00.000000000 Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: rest-client
@@ -696,6 +696,7 @@ files:
696
696
  - spec/flydata/helper/scheduler_spec.rb
697
697
  - spec/flydata/helper/worker_spec.rb
698
698
  - spec/flydata/heroku_spec.rb
699
+ - spec/flydata/json/json_ext_spec.rb
699
700
  - spec/flydata/mysql/binlog_position_spec.rb
700
701
  - spec/flydata/mysql/table_ddl_spec.rb
701
702
  - spec/flydata/output/forwarder_spec.rb