flydata 0.2.3 → 0.2.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0c1397fca1de7c4cb3382fcf4278e03de645693
4
- data.tar.gz: 533850a6c296ca0df8ba934ec277e99b5b155bd2
3
+ metadata.gz: 0c8db01831bbe6064e91787631ec6bb0e943adcf
4
+ data.tar.gz: 9d2693f29f27ddc50606aad9092aa858e03aa794
5
5
  SHA512:
6
- metadata.gz: 15180ce5c9fd332023fbaefb28dc290a144885d23e8e1bc1d12a542dadece366da16c8f6c2078f3c3b405db25010c67b2ad372ba8a4f8cc97ee59703828f351f
7
- data.tar.gz: 4a1c28339d84a87d19304ca7a4e85239dbadbbdda4009a08a1d14add1af58c38238626042996524310a2f994891cacf195aaed06edc59c7ac6b38a80d336f143
6
+ metadata.gz: 1491e172b4e48f320eeea818e26dd78c6ab932686d12bd82fa1bea9bf9f65062802efa49ec83b4dc6384c0ee2a01aa0841ed13df8a0e96a802179711ea801e3c
7
+ data.tar.gz: c095c18ac4bda4be13c36a7cb03348e62b1fedde7bea01ff400b81e854516484910c8455d49be54f46881c6767215c5b9a62cbdb53b435e697f7093107cd8f7c
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.3
1
+ 0.2.4
data/flydata.gemspec CHANGED
@@ -2,16 +2,16 @@
2
2
  # DO NOT EDIT THIS FILE DIRECTLY
3
3
  # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
4
  # -*- encoding: utf-8 -*-
5
- # stub: flydata 0.2.3 ruby lib
5
+ # stub: flydata 0.2.4 ruby lib
6
6
 
7
7
  Gem::Specification.new do |s|
8
8
  s.name = "flydata"
9
- s.version = "0.2.3"
9
+ s.version = "0.2.4"
10
10
 
11
11
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
12
12
  s.require_paths = ["lib"]
13
13
  s.authors = ["Koichi Fujikawa"]
14
- s.date = "2014-09-16"
14
+ s.date = "2014-09-17"
15
15
  s.description = "FlyData Command Line Interface"
16
16
  s.email = "sysadmin@flydata.co"
17
17
  s.executables = ["fdmysqldump", "flydata", "serverinfo"]
@@ -202,8 +202,51 @@ grammar MysqlAlterTable
202
202
  'default'i sp default_value { def default_opt_option; { default: default_value.default_value }; end }
203
203
  end
204
204
  rule default_value
205
- 'null'i { def default_value; nil; end }
206
- / value { def default_value; raw_value; end }
205
+ now { def default_value; text_value; end }
206
+ / signed_literal { def default_value; text_value; end }
207
+ end
208
+ rule now
209
+ 'current_timestamp'i
210
+ / 'localtimestamp'i { def text_value; 'current_timestamp'; end }
211
+ / 'localtime'i { def text_value; 'current_timestamp'; end }
212
+ / 'now()'i { def text_value; 'current_timestamp'; end }
213
+ end
214
+ rule signed_literal
215
+ literal
216
+ / '+' num_literal { def text_value; num_literal.text_value; end }
217
+ / '-' num_literal { def text_value; "-#{num_literal.text_value}"; end }
218
+ end
219
+ rule literal
220
+ text_literal
221
+ / num_literal
222
+ # / temporal_literal # TODO
223
+ / null_sym
224
+ / false_sym
225
+ / true_sym
226
+ # / hex_num # TODO
227
+ # / bin_num # TODO
228
+ # / underscore_charset hex_num # TODO
229
+ # / underscore_charset bin_num # TODO
230
+ end
231
+ rule text_literal
232
+ quoted_value { def text_value; text_raw_value; end }
233
+ # text_string # TODO
234
+ # / nchar_string # TODO
235
+ # / underscore_charset text_string # TODO
236
+ # / text_literal text_string_literal # TODO
237
+ end
238
+ rule null_sym
239
+ 'null'i { def text_value; nil; end }
240
+ end
241
+ rule false_sym
242
+ 'false'i
243
+ end
244
+ rule true_sym
245
+ 'true'i
246
+ end
247
+ rule num_literal
248
+ [0-9]* '.' [0-9]+ { def text_value; v = super; v.start_with?('.') ? "0#{v}" : v; end }
249
+ / [0-9]+
207
250
  end
208
251
  rule auto_increment_opt
209
252
  'auto_increment'i
@@ -286,11 +329,11 @@ grammar MysqlAlterTable
286
329
  end
287
330
 
288
331
  rule quoted_value
289
- '\'' text '\'' { def text_raw_value; text.text_value; end }
332
+ "'" text "'" { def text_raw_value; text.text_value; end }
290
333
  end
291
334
 
292
335
  rule text
293
- ( '\\\'' / !'\'' . )*
336
+ ("\\\\" / "\\'" / !"'" .)*
294
337
  end
295
338
 
296
339
  rule ident_sys
@@ -210,19 +210,158 @@ describe 'MysqlAlterTableParser' do
210
210
  end
211
211
  end
212
212
 
213
- context 'with default option taking an unquoted parameter' do
214
- let(:query) { "alter table test_table add column updated_at timestamp default current_timestamp" }
215
- it do
216
- expect(subject).to eq({
217
- type: :alter_table,
218
- table_name: "test_table",
219
- actions: [{
220
- action: :add_column,
221
- column: "updated_at",
222
- type: "datetime",
223
- default: "current_timestamp",
224
- }]
225
- })
213
+ context "with default option" do
214
+ shared_examples "a query parser parsing a query adding a column with a default value" do
215
+ let(:query) { "alter table test_table add column col #{data_type} default #{value}" }
216
+ it do
217
+ expect(subject).to eq({
218
+ type: :alter_table,
219
+ table_name: "test_table",
220
+ actions: [{
221
+ action: :add_column,
222
+ column: "col",
223
+ type: expected_data_type,
224
+ default: expected_value,
225
+ }]
226
+ })
227
+ end
228
+ end
229
+
230
+ context 'for timestamp column' do
231
+ let(:data_type) { "timestamp" }
232
+ let(:expected_data_type) { "datetime" }
233
+ context 'taking current_timestamp' do
234
+ let(:value) { "current_timestamp" }
235
+ let(:expected_value) { "current_timestamp" }
236
+
237
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
238
+ end
239
+ context 'taking localtime' do
240
+ let(:value) { "localtime" }
241
+ let(:expected_value) { "current_timestamp" }
242
+
243
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
244
+ end
245
+ context 'taking localtimestamp' do
246
+ let(:value) { "localtimestamp" }
247
+ let(:expected_value) { "current_timestamp" }
248
+
249
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
250
+ end
251
+ context 'taking now()' do
252
+ let(:value) { "now()" }
253
+ let(:expected_value) { "current_timestamp" }
254
+
255
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
256
+ end
257
+ end
258
+
259
+ context 'for integer column' do
260
+ let(:data_type) { "int(11)" }
261
+ let(:expected_data_type) { "int4(11)" }
262
+
263
+ context 'taking a positive number without sign' do
264
+ let(:value) { "1" }
265
+ let(:expected_value) { "1" }
266
+
267
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
268
+ end
269
+ context 'taking a positive number' do
270
+ let(:value) { "+1" }
271
+ let(:expected_value) { "1" }
272
+
273
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
274
+ end
275
+ context 'taking a negative number' do
276
+ let(:value) { "-1" }
277
+ let(:expected_value) { "-1" }
278
+
279
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
280
+ end
281
+ context 'taking a negative number string' do
282
+ let(:value) { %Q|'-1'| }
283
+ let(:expected_value) { "-1" }
284
+
285
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
286
+ end
287
+ context 'taking null' do
288
+ let(:value) { %Q|NULL| }
289
+ let(:expected_value) { nil }
290
+
291
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
292
+ end
293
+ end
294
+
295
+ context 'for decimal column' do
296
+ let(:data_type) { "decimal(10,2)" }
297
+ let(:expected_data_type) { "numeric(10,2)" }
298
+
299
+ context 'taking a positive number without sign' do
300
+ let(:value) { "2.4" }
301
+ let(:expected_value) { "2.4" }
302
+
303
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
304
+ end
305
+ context 'taking a positive number with sign' do
306
+ let(:value) { "+0.4" }
307
+ let(:expected_value) { "0.4" }
308
+
309
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
310
+ end
311
+ context 'taking a positive number no integer part' do
312
+ let(:value) { ".05" }
313
+ let(:expected_value) { "0.05" }
314
+
315
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
316
+ end
317
+ context 'taking a negative number' do
318
+ let(:value) { "-20.43" }
319
+ let(:expected_value) { "-20.43" }
320
+
321
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
322
+ end
323
+ context 'taking a negative number no integer part' do
324
+ let(:value) { "-.43" }
325
+ let(:expected_value) { "-0.43" }
326
+
327
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
328
+ end
329
+ end
330
+
331
+ context 'for varchar column' do
332
+ let(:data_type) { "varchar(10)" }
333
+ let(:expected_data_type) { "varchar(30)" }
334
+
335
+ context 'taking null' do
336
+ let(:value) { "NULL" }
337
+ let(:expected_value) { nil }
338
+
339
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
340
+ end
341
+ context 'taking empty string' do
342
+ let(:value) { %Q|''| }
343
+ let(:expected_value) { "" }
344
+
345
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
346
+ end
347
+ context 'taking a string with spaces' do
348
+ let(:value) { %Q|'0 0 0 0 0 0 0'| }
349
+ let(:expected_value) { "0 0 0 0 0 0 0" }
350
+
351
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
352
+ end
353
+ context 'taking a backslash' do
354
+ let(:value) { %q|'\\\\'| }
355
+ let(:expected_value) { %q|\\\\| }
356
+
357
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
358
+ end
359
+ context 'taking a string with special characters' do
360
+ let(:value) { %q|'https://flydata.com $ \\\\\'\"\n\t'| }
361
+ let(:expected_value) { %q|https://flydata.com $ \\\\\'\"\n\t| }
362
+
363
+ it_behaves_like "a query parser parsing a query adding a column with a default value"
364
+ end
226
365
  end
227
366
  end
228
367
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flydata
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.2.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Koichi Fujikawa
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-16 00:00:00.000000000 Z
11
+ date: 2014-09-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client