flydata 0.6.3 → 0.6.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.
Files changed (94) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +2 -2
  3. data/VERSION +1 -1
  4. data/bin/fdredshift +78 -0
  5. data/circle.yml +1 -1
  6. data/ext/flydata/{parser/mysql → source_mysql/parser}/.gitignore +0 -0
  7. data/ext/flydata/{parser/mysql → source_mysql/parser}/dump_parser_ext.cpp +3 -3
  8. data/ext/flydata/source_mysql/parser/extconf.rb +3 -0
  9. data/ext/flydata/{parser/mysql → source_mysql/parser}/parser.txt +0 -0
  10. data/ext/flydata/{parser/mysql → source_mysql/parser}/sql_parser.cpp +0 -0
  11. data/ext/flydata/{parser/mysql → source_mysql/parser}/sql_parser.h +0 -0
  12. data/flydata-core/lib/flydata-core/mysql/binlog_pos.rb +34 -32
  13. data/flydata-core/lib/flydata-core/mysql/compatibility_checker.rb +20 -0
  14. data/flydata-core/lib/flydata-core/table_def/mysql_table_def.rb +12 -4
  15. data/flydata-core/lib/flydata-core/table_def/redshift_table_def.rb +60 -6
  16. data/flydata-core/spec/mysql/binlog_pos_spec.rb +474 -0
  17. data/flydata-core/spec/table_def/mysql_table_def_spec.rb +57 -0
  18. data/flydata-core/spec/table_def/mysql_to_redshift_table_def_spec.rb +174 -20
  19. data/flydata-core/spec/table_def/mysqldump_test_col_comment_with_AUTO_INCREMENT_keyword.dump +43 -0
  20. data/flydata-core/spec/table_def/mysqldump_test_col_comment_with_not_null_keyword.dump +43 -0
  21. data/flydata-core/spec/table_def/mysqldump_test_col_comment_with_unique_keyword.dump +43 -0
  22. data/flydata-core/spec/table_def/mysqldump_test_col_comment_with_unsigned_keyword.dump +43 -0
  23. data/flydata-core/spec/table_def/redshift_table_def_spec.rb +41 -8
  24. data/flydata.gemspec +0 -0
  25. data/lib/flydata/cli.rb +11 -5
  26. data/lib/flydata/command/base.rb +14 -1
  27. data/lib/flydata/command/exclusive_runnable.rb +42 -12
  28. data/lib/flydata/command/helper.rb +6 -6
  29. data/lib/flydata/command/sender.rb +4 -3
  30. data/lib/flydata/command/setup.rb +30 -381
  31. data/lib/flydata/command/stop.rb +1 -0
  32. data/lib/flydata/command/sync.rb +273 -301
  33. data/lib/flydata/compatibility_check.rb +24 -117
  34. data/lib/flydata/fluent-plugins/in_mysql_binlog_flydata.rb +3 -3
  35. data/lib/flydata/fluent-plugins/mysql/alter_table_query_handler.rb +2 -2
  36. data/lib/flydata/fluent-plugins/mysql/binlog_record_handler.rb +6 -6
  37. data/lib/flydata/fluent-plugins/mysql/truncate_table_query_handler.rb +0 -1
  38. data/lib/flydata/parser.rb +14 -0
  39. data/lib/flydata/{parser_provider.rb → parser/parser_provider.rb} +6 -4
  40. data/lib/flydata/parser/source_table.rb +33 -0
  41. data/lib/flydata/source.rb +105 -0
  42. data/lib/flydata/source/component.rb +21 -0
  43. data/lib/flydata/source/errors.rb +7 -0
  44. data/lib/flydata/source/generate_source_dump.rb +72 -0
  45. data/lib/flydata/source/parse_dump_and_send.rb +52 -0
  46. data/lib/flydata/source/setup.rb +31 -0
  47. data/lib/flydata/source/source_pos.rb +45 -0
  48. data/lib/flydata/source/sync.rb +56 -0
  49. data/lib/flydata/source/sync_generate_table_ddl.rb +43 -0
  50. data/lib/flydata/source_file/setup.rb +17 -0
  51. data/lib/flydata/source_file/sync.rb +14 -0
  52. data/lib/flydata/{command → source_mysql/command}/mysql.rb +2 -1
  53. data/lib/flydata/{command → source_mysql/command}/mysql_command_base.rb +2 -4
  54. data/lib/flydata/{command → source_mysql/command}/mysqlbinlog.rb +2 -1
  55. data/lib/flydata/{command → source_mysql/command}/mysqldump.rb +2 -1
  56. data/lib/flydata/source_mysql/generate_source_dump.rb +53 -0
  57. data/lib/flydata/source_mysql/mysql_compatibility_check.rb +114 -0
  58. data/lib/flydata/source_mysql/parse_dump_and_send.rb +28 -0
  59. data/lib/flydata/{parser/mysql → source_mysql/parser}/.gitignore +0 -0
  60. data/lib/flydata/{parser/mysql → source_mysql/parser}/dump_parser.rb +32 -67
  61. data/lib/flydata/{parser/mysql → source_mysql/parser}/mysql_alter_table.treetop +0 -0
  62. data/lib/flydata/source_mysql/setup.rb +24 -0
  63. data/lib/flydata/source_mysql/source_pos.rb +21 -0
  64. data/lib/flydata/source_mysql/sync.rb +45 -0
  65. data/lib/flydata/source_mysql/sync_generate_table_ddl.rb +40 -0
  66. data/lib/flydata/{mysql → source_mysql}/table_ddl.rb +6 -17
  67. data/lib/flydata/source_zendesk/sync_generate_table_ddl.rb +30 -0
  68. data/lib/flydata/source_zendesk/zendesk_flydata_tabledefs.rb +133 -0
  69. data/lib/flydata/sync_file_manager.rb +132 -73
  70. data/lib/flydata/table_ddl.rb +18 -0
  71. data/spec/flydata/cli_spec.rb +1 -0
  72. data/spec/flydata/command/exclusive_runnable_spec.rb +19 -8
  73. data/spec/flydata/command/sender_spec.rb +1 -1
  74. data/spec/flydata/command/setup_spec.rb +4 -4
  75. data/spec/flydata/command/sync_spec.rb +97 -134
  76. data/spec/flydata/compatibility_check_spec.rb +16 -289
  77. data/spec/flydata/fluent-plugins/mysql/alter_table_query_handler_spec.rb +3 -3
  78. data/spec/flydata/fluent-plugins/mysql/dml_record_handler_spec.rb +1 -1
  79. data/spec/flydata/fluent-plugins/mysql/shared_query_handler_context.rb +4 -2
  80. data/spec/flydata/fluent-plugins/mysql/truncate_query_handler_spec.rb +1 -1
  81. data/spec/flydata/source_mysql/generate_source_dump_spec.rb +69 -0
  82. data/spec/flydata/source_mysql/mysql_compatibility_check_spec.rb +280 -0
  83. data/spec/flydata/{parser/mysql → source_mysql/parser}/alter_table_parser_spec.rb +2 -2
  84. data/spec/flydata/{parser/mysql → source_mysql/parser}/dump_parser_spec.rb +75 -70
  85. data/spec/flydata/source_mysql/sync_generate_table_ddl_spec.rb +137 -0
  86. data/spec/flydata/{mysql → source_mysql}/table_ddl_spec.rb +2 -2
  87. data/spec/flydata/source_spec.rb +140 -0
  88. data/spec/flydata/source_zendesk/sync_generate_table_ddl_spec.rb +33 -0
  89. data/spec/flydata/sync_file_manager_spec.rb +157 -77
  90. data/tmpl/redshift_mysql_data_entry.conf.tmpl +1 -1
  91. metadata +56 -23
  92. data/ext/flydata/parser/mysql/extconf.rb +0 -3
  93. data/lib/flydata/mysql/binlog_position.rb +0 -22
  94. data/spec/flydata/mysql/binlog_position_spec.rb +0 -35
@@ -253,6 +253,63 @@ describe MysqlTableDef do
253
253
  expect(subject[:columns][4][:type]).to eq("varchar(300)")
254
254
  end
255
255
  end
256
+
257
+ context 'when column comment has unique keyword' do
258
+ let(:dump_file_io) { file_io('mysqldump_test_col_comment_with_unique_keyword.dump')}
259
+ it 'should not include unique in column def' do
260
+ expect(subject[:columns]).to eq(
261
+ [
262
+ {:column=>"id", :type=>"int4(11)", :auto_increment=>true, :not_null=>true, :primary_key=>true },
263
+ {:column=>"title", :type=>"varchar(768)", :default=>nil , :comment=>"This column is not unique column."},
264
+ {:column=>"name", :type=>"text"},
265
+ {:column=>"num", :type=>"int4(11)", :default=>nil}
266
+ ]
267
+ )
268
+ end
269
+ end
270
+
271
+ context 'when column comment has unique keyword' do
272
+ let(:dump_file_io) { file_io('mysqldump_test_col_comment_with_AUTO_INCREMENT_keyword.dump')}
273
+ it 'should not include AUTO_INCREMENT in column def' do
274
+ expect(subject[:columns]).to eq(
275
+ [
276
+ {:column=>"id", :type=>"int4(11)", :auto_increment=>true, :not_null=>true, :primary_key=>true },
277
+ {:column=>"title", :type=>"varchar(768)", :default=>nil , :comment=>"This column is not AUTO_INCREMENT column."},
278
+ {:column=>"name", :type=>"text"},
279
+ {:column=>"num", :type=>"int4(11)", :default=>nil}
280
+ ]
281
+ )
282
+ end
283
+ end
284
+
285
+ context 'when column comment has unique keyword' do
286
+ let(:dump_file_io) { file_io('mysqldump_test_col_comment_with_unsigned_keyword.dump')}
287
+ it 'should not include unsigned in column def' do
288
+ expect(subject[:columns]).to eq(
289
+ [
290
+ {:column=>"id", :type=>"int4(11)", :auto_increment=>true, :not_null=>true, :primary_key=>true },
291
+ {:column=>"title", :type=>"varchar(768)", :default=>nil , :comment=>"This column is not unsigned column."},
292
+ {:column=>"name", :type=>"text"},
293
+ {:column=>"num", :type=>"int4(11)", :default=>nil}
294
+ ]
295
+ )
296
+ end
297
+ end
298
+
299
+
300
+ context 'when column comment has not null keyword' do
301
+ let(:dump_file_io) { file_io('mysqldump_test_col_comment_with_not_null_keyword.dump')}
302
+ it 'should not include not null in column def' do
303
+ expect(subject[:columns]).to eq(
304
+ [
305
+ {:column=>"id", :type=>"int4(11)", :auto_increment=>true, :not_null=>true, :primary_key=>true },
306
+ {:column=>"title", :type=>"varchar(768)", :default=>nil , :comment=>"This column is not null column."},
307
+ {:column=>"name", :type=>"text"},
308
+ {:column=>"num", :type=>"int4(11)", :default=>nil}
309
+ ]
310
+ )
311
+ end
312
+ end
256
313
  end
257
314
 
258
315
  describe '.convert_to_flydata_type' do
@@ -1,5 +1,6 @@
1
1
  require 'spec_helper'
2
2
  require 'flydata-core/table_def'
3
+ require 'timecop'
3
4
 
4
5
  module FlydataCore
5
6
  module TableDef
@@ -22,11 +23,15 @@ module FlydataCore
22
23
  MysqlTableDef.create(dump_file_io).to_flydata_tabledef)
23
24
  }
24
25
 
26
+ before do
27
+ Timecop.freeze(Time.local(2016, 1, 25, 23, 28, 57))
28
+ end
29
+
25
30
  context 'with mysqldump_test_table_all' do
26
31
  let(:dump_file_name) { 'mysqldump_test_table_all.dump' }
27
32
 
28
33
  it 'should return ddl' do
29
- expect(subject).to eq( <<EOT.strip )
34
+ expect(subject).to eq( <<EOT )
30
35
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
31
36
  id integer NOT NULL IDENTITY(1,1),
32
37
  table_name varchar(128) NOT NULL,
@@ -44,7 +49,42 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
44
49
  created_at timestamp DEFAULT SYSDATE,
45
50
  PRIMARY KEY(id)
46
51
  ) DISTKEY(table_name) SORTKEY(table_name);
47
- DROP TABLE IF EXISTS "test_table_all";
52
+ BEGIN;
53
+ DROP TABLE IF EXISTS "test_table_all_flydata20160125232857";
54
+ CREATE TABLE IF NOT EXISTS "test_table_all" (
55
+ "id" int8,
56
+ "col_binary" varchar(202) DEFAULT NULL,
57
+ "col_blob" varchar(65535),
58
+ "col_bool" int2 DEFAULT '0',
59
+ "col_char" varchar(18) DEFAULT NULL,
60
+ "col_date" date DEFAULT NULL,
61
+ "col_datetime" timestamp DEFAULT NULL,
62
+ "col_decimal" numeric(5,2) DEFAULT NULL,
63
+ "col_double" float8 DEFAULT NULL,
64
+ "col_float" float4 DEFAULT NULL,
65
+ "col_float_4_2" float4 DEFAULT NULL,
66
+ "col_int" int4 DEFAULT NULL,
67
+ "col_int_6" int4 DEFAULT NULL,
68
+ "col_longblob" varchar(65535),
69
+ "col_longtext" varchar(max),
70
+ "col_mediumblob" varchar(65535),
71
+ "col_mediumint" int4 DEFAULT NULL,
72
+ "col_mediumtext" varchar(max),
73
+ "col_smallint" int2 DEFAULT NULL,
74
+ "col_text" varchar(max),
75
+ "col_time" timestamp DEFAULT NULL,
76
+ "col_timestamp" timestamp DEFAULT SYSDATE,
77
+ "col_tinyblob" varchar(255),
78
+ "col_tinyint" int2 DEFAULT NULL,
79
+ "col_tinytext" varchar(max),
80
+ "col_varbinary" varchar(512) DEFAULT NULL,
81
+ "col_varchar" varchar(372) DEFAULT NULL,
82
+ "col_year" date DEFAULT NULL,
83
+ "col_year_4" date DEFAULT NULL,
84
+ "col_year_2" date DEFAULT NULL,
85
+ PRIMARY KEY ("id")
86
+ ) DISTKEY("id") SORTKEY("id");
87
+ ALTER TABLE "test_table_all" RENAME TO "test_table_all_flydata20160125232857";
48
88
  CREATE TABLE "test_table_all" (
49
89
  "id" int8,
50
90
  "col_binary" varchar(202) DEFAULT NULL,
@@ -147,6 +187,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
147
187
  `col_year_2` year(2) DEFAULT NULL,
148
188
  PRIMARY KEY (`id`)
149
189
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\\'test table includes all kind of format type\\';".split("\n").join}');
190
+ COMMIT;
191
+ DROP TABLE IF EXISTS "test_table_all_flydata20160125232857";
150
192
  EOT
151
193
  end
152
194
  end
@@ -155,7 +197,7 @@ EOT
155
197
  let(:dump_file_name) { 'mysqldump_test_bit_table.dump' }
156
198
 
157
199
  it 'should return ddl' do
158
- expect(subject).to eq( <<EOT.strip )
200
+ expect(subject).to eq( <<EOT )
159
201
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
160
202
  id integer NOT NULL IDENTITY(1,1),
161
203
  table_name varchar(128) NOT NULL,
@@ -173,7 +215,15 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
173
215
  created_at timestamp DEFAULT SYSDATE,
174
216
  PRIMARY KEY(id)
175
217
  ) DISTKEY(table_name) SORTKEY(table_name);
176
- DROP TABLE IF EXISTS "bit_test_def_1";
218
+ BEGIN;
219
+ DROP TABLE IF EXISTS "bit_test_def_1_flydata20160125232857";
220
+ CREATE TABLE IF NOT EXISTS "bit_test_def_1" (
221
+ "id" int4,
222
+ "bit_value" bigint DEFAULT 1,
223
+ "int_value" int4 DEFAULT 16,
224
+ PRIMARY KEY ("id")
225
+ ) DISTKEY("id") SORTKEY("id");
226
+ ALTER TABLE "bit_test_def_1" RENAME TO "bit_test_def_1_flydata20160125232857";
177
227
  CREATE TABLE "bit_test_def_1" (
178
228
  "id" int4,
179
229
  "bit_value" bigint DEFAULT 1,
@@ -195,6 +245,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
195
245
  `int_value` int(11) DEFAULT x\\'10\\',
196
246
  PRIMARY KEY (`id`)
197
247
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;".split("\n").join}');
248
+ COMMIT;
249
+ DROP TABLE IF EXISTS "bit_test_def_1_flydata20160125232857";
198
250
  EOT
199
251
  end
200
252
  end
@@ -203,7 +255,7 @@ EOT
203
255
  let(:dump_file_name) { 'mysqldump_test_foreign_key.dump' }
204
256
 
205
257
  it 'should return ddl' do
206
- expect(subject).to eq( <<EOT.strip )
258
+ expect(subject).to eq( <<EOT )
207
259
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
208
260
  id integer NOT NULL IDENTITY(1,1),
209
261
  table_name varchar(128) NOT NULL,
@@ -221,7 +273,16 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
221
273
  created_at timestamp DEFAULT SYSDATE,
222
274
  PRIMARY KEY(id)
223
275
  ) DISTKEY(table_name) SORTKEY(table_name);
224
- DROP TABLE IF EXISTS "product_order";
276
+ BEGIN;
277
+ DROP TABLE IF EXISTS "product_order_flydata20160125232857";
278
+ CREATE TABLE IF NOT EXISTS "product_order" (
279
+ "no" int4,
280
+ "product_category" int4,
281
+ "product_id" int4,
282
+ "customer_id" int4,
283
+ PRIMARY KEY ("no")
284
+ ) DISTKEY("no") SORTKEY("no");
285
+ ALTER TABLE "product_order" RENAME TO "product_order_flydata20160125232857";
225
286
  CREATE TABLE "product_order" (
226
287
  "no" int4,
227
288
  "product_category" int4,
@@ -250,6 +311,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
250
311
  CONSTRAINT `product_order_ibfk_1` FOREIGN KEY (`product_category`, `product_id`) REFERENCES `product` (`category`, `id`) ON UPDATE CASCADE,
251
312
  CONSTRAINT `product_order_ibfk_2` FOREIGN KEY (`customer_id`) REFERENCES `customer` (`id`)
252
313
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8;".split("\n").join}');
314
+ COMMIT;
315
+ DROP TABLE IF EXISTS "product_order_flydata20160125232857";
253
316
  EOT
254
317
  end
255
318
  end
@@ -258,7 +321,7 @@ EOT
258
321
  let(:dump_file_name) { 'mysqldump_test_table_column_comment.dump' }
259
322
 
260
323
  it 'should return ddl' do
261
- expect(subject).to eq( <<EOT.strip )
324
+ expect(subject).to eq( <<EOT )
262
325
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
263
326
  id integer NOT NULL IDENTITY(1,1),
264
327
  table_name varchar(128) NOT NULL,
@@ -276,7 +339,14 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
276
339
  created_at timestamp DEFAULT SYSDATE,
277
340
  PRIMARY KEY(id)
278
341
  ) DISTKEY(table_name) SORTKEY(table_name);
279
- DROP TABLE IF EXISTS "test_table_column_comment";
342
+ BEGIN;
343
+ DROP TABLE IF EXISTS "test_table_column_comment_flydata20160125232857";
344
+ CREATE TABLE IF NOT EXISTS "test_table_column_comment" (
345
+ "id" int4 DEFAULT '0',
346
+ "value" varchar(max),
347
+ PRIMARY KEY ("id")
348
+ ) DISTKEY("id") SORTKEY("id");
349
+ ALTER TABLE "test_table_column_comment" RENAME TO "test_table_column_comment_flydata20160125232857";
280
350
  CREATE TABLE "test_table_column_comment" (
281
351
  "id" int4 DEFAULT '0',
282
352
  "value" varchar(max),
@@ -297,6 +367,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
297
367
  `value` text,
298
368
  PRIMARY KEY (`id`)
299
369
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\\'column comment test\\';".split("\n").join}');
370
+ COMMIT;
371
+ DROP TABLE IF EXISTS "test_table_column_comment_flydata20160125232857";
300
372
  EOT
301
373
  end
302
374
  end
@@ -305,7 +377,7 @@ EOT
305
377
  let(:dump_file_name) { 'mysqldump_test_table_enum.dump' }
306
378
 
307
379
  it 'should return ddl' do
308
- expect(subject).to eq( <<EOT.strip )
380
+ expect(subject).to eq( <<EOT )
309
381
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
310
382
  id integer NOT NULL IDENTITY(1,1),
311
383
  table_name varchar(128) NOT NULL,
@@ -323,7 +395,16 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
323
395
  created_at timestamp DEFAULT SYSDATE,
324
396
  PRIMARY KEY(id)
325
397
  ) DISTKEY(table_name) SORTKEY(table_name);
326
- DROP TABLE IF EXISTS "test_table_enum";
398
+ BEGIN;
399
+ DROP TABLE IF EXISTS "test_table_enum_flydata20160125232857";
400
+ CREATE TABLE IF NOT EXISTS "test_table_enum" (
401
+ "id" int4,
402
+ "enum_1" varchar encode bytedict DEFAULT NULL,
403
+ "enum_2" varchar encode bytedict DEFAULT 'a',
404
+ "enum_3" varchar encode bytedict,
405
+ PRIMARY KEY ("id")
406
+ ) DISTKEY("id") SORTKEY("id");
407
+ ALTER TABLE "test_table_enum" RENAME TO "test_table_enum_flydata20160125232857";
327
408
  CREATE TABLE "test_table_enum" (
328
409
  "id" int4,
329
410
  "enum_1" varchar encode bytedict DEFAULT NULL,
@@ -348,6 +429,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
348
429
  `enum_3` enum(\\'e\\',\\'f\\',\\'g\\') NOT NULL,
349
430
  PRIMARY KEY (`id`)
350
431
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\\'with enum column\\';".split("\n").join}');
432
+ COMMIT;
433
+ DROP TABLE IF EXISTS "test_table_enum_flydata20160125232857";
351
434
  EOT
352
435
  end
353
436
  end
@@ -356,7 +439,7 @@ EOT
356
439
  let(:dump_file_name) { 'mysqldump_test_table_multi_pk.dump' }
357
440
 
358
441
  it 'should return ddl' do
359
- expect(subject).to eq( <<EOT.strip )
442
+ expect(subject).to eq( <<EOT )
360
443
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
361
444
  id integer NOT NULL IDENTITY(1,1),
362
445
  table_name varchar(128) NOT NULL,
@@ -374,7 +457,15 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
374
457
  created_at timestamp DEFAULT SYSDATE,
375
458
  PRIMARY KEY(id)
376
459
  ) DISTKEY(table_name) SORTKEY(table_name);
377
- DROP TABLE IF EXISTS "test_table_multi_pk";
460
+ BEGIN;
461
+ DROP TABLE IF EXISTS "test_table_multi_pk_flydata20160125232857";
462
+ CREATE TABLE IF NOT EXISTS "test_table_multi_pk" (
463
+ "id1" int4 DEFAULT '0',
464
+ "id2" int4 DEFAULT '0',
465
+ "value" varchar(max),
466
+ PRIMARY KEY ("id1","id2")
467
+ ) DISTKEY("id1") SORTKEY("id1","id2");
468
+ ALTER TABLE "test_table_multi_pk" RENAME TO "test_table_multi_pk_flydata20160125232857";
378
469
  CREATE TABLE "test_table_multi_pk" (
379
470
  "id1" int4 DEFAULT '0',
380
471
  "id2" int4 DEFAULT '0',
@@ -396,6 +487,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
396
487
  `value` text,
397
488
  PRIMARY KEY (`id1`,`id2`)
398
489
  ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=\\'multiple primary key\\';".split("\n").join}');
490
+ COMMIT;
491
+ DROP TABLE IF EXISTS "test_table_multi_pk_flydata20160125232857";
399
492
  EOT
400
493
  end
401
494
  end
@@ -412,7 +505,7 @@ EOT
412
505
  let(:dump_file_name) { 'mysqldump_test_unique_key.dump' }
413
506
 
414
507
  it 'should return ddl' do
415
- expect(subject).to eq( <<EOT.strip )
508
+ expect(subject).to eq( <<EOT )
416
509
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
417
510
  id integer NOT NULL IDENTITY(1,1),
418
511
  table_name varchar(128) NOT NULL,
@@ -430,7 +523,16 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
430
523
  created_at timestamp DEFAULT SYSDATE,
431
524
  PRIMARY KEY(id)
432
525
  ) DISTKEY(table_name) SORTKEY(table_name);
433
- DROP TABLE IF EXISTS "sample1";
526
+ BEGIN;
527
+ DROP TABLE IF EXISTS "sample1_flydata20160125232857";
528
+ CREATE TABLE IF NOT EXISTS "sample1" (
529
+ "id" int4,
530
+ "title" varchar(768) DEFAULT NULL,
531
+ "name" varchar(max),
532
+ "num" int4 DEFAULT NULL,
533
+ PRIMARY KEY ("id")
534
+ ) DISTKEY("id") SORTKEY("id");
535
+ ALTER TABLE "sample1" RENAME TO "sample1_flydata20160125232857";
434
536
  CREATE TABLE "sample1" (
435
537
  "id" int4,
436
538
  "title" varchar(768) DEFAULT NULL,
@@ -457,6 +559,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
457
559
  UNIQUE KEY `title` (`title`),
458
560
  UNIQUE KEY `num` (`num`)
459
561
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1;".split("\n").join}');
562
+ COMMIT;
563
+ DROP TABLE IF EXISTS "sample1_flydata20160125232857";
460
564
  EOT
461
565
  end
462
566
  end
@@ -465,7 +569,7 @@ EOT
465
569
  let(:dump_file_name) { 'mysqldump_test_unique_key2.dump' }
466
570
 
467
571
  it 'should return ddl' do
468
- expect(subject).to eq( <<EOT.strip )
572
+ expect(subject).to eq( <<EOT )
469
573
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
470
574
  id integer NOT NULL IDENTITY(1,1),
471
575
  table_name varchar(128) NOT NULL,
@@ -483,7 +587,16 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
483
587
  created_at timestamp DEFAULT SYSDATE,
484
588
  PRIMARY KEY(id)
485
589
  ) DISTKEY(table_name) SORTKEY(table_name);
486
- DROP TABLE IF EXISTS "sample1";
590
+ BEGIN;
591
+ DROP TABLE IF EXISTS "sample1_flydata20160125232857";
592
+ CREATE TABLE IF NOT EXISTS "sample1" (
593
+ "id" int4,
594
+ "title" varchar(768) DEFAULT NULL,
595
+ "name" varchar(max),
596
+ "num" int4 DEFAULT NULL,
597
+ PRIMARY KEY ("id")
598
+ ) DISTKEY("id") SORTKEY("id");
599
+ ALTER TABLE "sample1" RENAME TO "sample1_flydata20160125232857";
487
600
  CREATE TABLE "sample1" (
488
601
  "id" int4,
489
602
  "title" varchar(768) DEFAULT NULL,
@@ -510,6 +623,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
510
623
  UNIQUE KEY `title` (`title`),
511
624
  UNIQUE KEY `index_num` (`num`)
512
625
  ) ENGINE=InnoDB DEFAULT CHARSET=latin1;".split("\n").join}');
626
+ COMMIT;
627
+ DROP TABLE IF EXISTS "sample1_flydata20160125232857";
513
628
  EOT
514
629
  end
515
630
  end
@@ -518,7 +633,7 @@ EOT
518
633
  let(:dump_file_name) { 'mysqldump_test_unique_key3.dump' }
519
634
 
520
635
  it 'should return ddl' do
521
- expect(subject).to eq( <<EOT.strip )
636
+ expect(subject).to eq( <<EOT )
522
637
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
523
638
  id integer NOT NULL IDENTITY(1,1),
524
639
  table_name varchar(128) NOT NULL,
@@ -536,7 +651,30 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
536
651
  created_at timestamp DEFAULT SYSDATE,
537
652
  PRIMARY KEY(id)
538
653
  ) DISTKEY(table_name) SORTKEY(table_name);
539
- DROP TABLE IF EXISTS "invoice_items";
654
+ BEGIN;
655
+ DROP TABLE IF EXISTS "invoice_items_flydata20160125232857";
656
+ CREATE TABLE IF NOT EXISTS "invoice_items" (
657
+ "id" int4,
658
+ "app_id" int4,
659
+ "subscription_id" int4,
660
+ "overage_id" varchar(765),
661
+ "stripe_invoice_item_id" varchar(765) DEFAULT NULL,
662
+ "stripe_error" varchar(765) DEFAULT NULL,
663
+ "synced_to_stripe" int2 DEFAULT '0',
664
+ "description" varchar(max),
665
+ "item_name" varchar(765),
666
+ "item_cost" int4,
667
+ "item_count" int4,
668
+ "total_cost" int4,
669
+ "created_at" timestamp DEFAULT NULL,
670
+ "updated_at" timestamp DEFAULT NULL,
671
+ "bill_ahead" int2 DEFAULT '0',
672
+ "bill_ahead_resolved_at" timestamp DEFAULT NULL,
673
+ "stripe_invoice_id" varchar(765) DEFAULT NULL,
674
+ "is_vat" int2 DEFAULT '0',
675
+ PRIMARY KEY ("id")
676
+ ) DISTKEY("id") SORTKEY("id");
677
+ ALTER TABLE "invoice_items" RENAME TO "invoice_items_flydata20160125232857";
540
678
  CREATE TABLE "invoice_items" (
541
679
  "id" int4,
542
680
  "app_id" int4,
@@ -604,6 +742,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
604
742
  PRIMARY KEY (`id`),
605
743
  UNIQUE KEY `index_invoice_items_on_app_id_and_overage_id_and_item_name` (`app_id`,`overage_id`(32),`item_name`(32)) USING BTREE
606
744
  ) ENGINE=InnoDB AUTO_INCREMENT=16654 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;".split("\n").join}');
745
+ COMMIT;
746
+ DROP TABLE IF EXISTS "invoice_items_flydata20160125232857";
607
747
  EOT
608
748
  end
609
749
  end
@@ -612,7 +752,7 @@ EOT
612
752
  let(:dump_file_name) { 'mysqldump_test_unsigned.dump' }
613
753
 
614
754
  it 'should return ddl' do
615
- expect(subject).to eq( <<EOT.strip )
755
+ expect(subject).to eq( <<EOT )
616
756
  CREATE TABLE IF NOT EXISTS "flydata_ctl_columns"(
617
757
  id integer NOT NULL IDENTITY(1,1),
618
758
  table_name varchar(128) NOT NULL,
@@ -630,7 +770,19 @@ CREATE TABLE IF NOT EXISTS "flydata_ctl_tables"(
630
770
  created_at timestamp DEFAULT SYSDATE,
631
771
  PRIMARY KEY(id)
632
772
  ) DISTKEY(table_name) SORTKEY(table_name);
633
- DROP TABLE IF EXISTS "zerofill_table";
773
+ BEGIN;
774
+ DROP TABLE IF EXISTS "zerofill_table_flydata20160125232857";
775
+ CREATE TABLE IF NOT EXISTS "zerofill_table" (
776
+ "id" int4,
777
+ "value_int" int8 DEFAULT NULL,
778
+ "value_float" float4 DEFAULT NULL,
779
+ "value_dec" numeric(10,2) DEFAULT NULL,
780
+ "value_double" float8 DEFAULT NULL,
781
+ "name" varchar(768) DEFAULT NULL,
782
+ "value_small_int" int4 DEFAULT NULL,
783
+ PRIMARY KEY ("id")
784
+ ) DISTKEY("id") SORTKEY("id");
785
+ ALTER TABLE "zerofill_table" RENAME TO "zerofill_table_flydata20160125232857";
634
786
  CREATE TABLE "zerofill_table" (
635
787
  "id" int4,
636
788
  "value_int" int8 DEFAULT NULL,
@@ -664,6 +816,8 @@ INSERT INTO "flydata_ctl_tables" (table_name, attribute, value) VALUES
664
816
  `value_small_int` smallint(5) unsigned DEFAULT NULL,
665
817
  PRIMARY KEY (`id`)
666
818
  ) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=latin1;".split("\n").join}');
819
+ COMMIT;
820
+ DROP TABLE IF EXISTS "zerofill_table_flydata20160125232857";
667
821
  EOT
668
822
  end
669
823
  end