rigrate 0.0.1
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 +7 -0
- data/README.md +160 -0
- data/Rakefile +9 -0
- data/bin/rigrate +69 -0
- data/lib/rigrate.rb +97 -0
- data/lib/rigrate/data_source.rb +43 -0
- data/lib/rigrate/error.rb +11 -0
- data/lib/rigrate/interface.rb +20 -0
- data/lib/rigrate/interface/driver.rb +41 -0
- data/lib/rigrate/interface/mysql.rb +148 -0
- data/lib/rigrate/interface/oracle.rb +172 -0
- data/lib/rigrate/interface/result_set.rb +389 -0
- data/lib/rigrate/interface/row.rb +69 -0
- data/lib/rigrate/interface/sqlite.rb +106 -0
- data/lib/rigrate/migration.rb +89 -0
- data/lib/rigrate/parser.rb +270 -0
- data/rigrate.gemspec +21 -0
- data/test/test_datasource.rb +66 -0
- data/test/test_driver.rb +45 -0
- data/test/test_driver_mysql.rb +87 -0
- data/test/test_driver_oracle.rb +109 -0
- data/test/test_driver_sqlite.rb +85 -0
- data/test/test_helper.rb +9 -0
- data/test/test_migration.rb +108 -0
- data/test/test_parser.rb +262 -0
- data/test/test_resultset.rb +300 -0
- data/test/test_rigrate.rb +6 -0
- data/test/test_rigrate_row.rb +51 -0
- metadata +124 -0
data/rigrate.gemspec
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = 'rigrate'
|
3
|
+
s.version = '0.0.1'
|
4
|
+
s.executables << 'rigrate'
|
5
|
+
s.date = '2016-04-01'
|
6
|
+
s.summary = 'Ruby Migrate! data migrate tool in ruby.'
|
7
|
+
s.description = 'a data migrate tool between diffenect data sources write by ruby.'
|
8
|
+
s.authors = ['jiyaping']
|
9
|
+
s.email = 'jiyaping0802@gmail.com'
|
10
|
+
s.homepage = 'http://rubygems.org/gems/rigrate'
|
11
|
+
s.license = 'MIT'
|
12
|
+
|
13
|
+
s.files = `git ls-files`.split("\n")
|
14
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
15
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
16
|
+
s.require_paths = ["lib"]
|
17
|
+
|
18
|
+
s.add_dependency 'ruby-oci8', '~> 2.2'
|
19
|
+
s.add_dependency 'sqlite3', '~> 1.3'
|
20
|
+
s.add_dependency "mysql", "~> 2.9"
|
21
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class DataSourceTest < TestHelper
|
4
|
+
def setup
|
5
|
+
@ds = DataSource.new("sqlite://memory")
|
6
|
+
|
7
|
+
setup_sql =<<SQL
|
8
|
+
create table users (
|
9
|
+
id integer primary key not null,
|
10
|
+
name varchar,
|
11
|
+
age integer,
|
12
|
+
birthday datetime default current_date
|
13
|
+
);
|
14
|
+
|
15
|
+
insert into users(id, name, age) values(1, 'jyp1', 23);
|
16
|
+
insert into users(id, name, age) values(2, 'jyp2', 24);
|
17
|
+
insert into users(id, name, age) values(3, 'jyp3', 25);
|
18
|
+
insert into users(id, name, age) values(4, 'jyp4', 26);
|
19
|
+
|
20
|
+
insert into users(id, name, age) values(5, 'jyp5', 23);
|
21
|
+
insert into users(id, name, age) values(6, 'jyp6', 24);
|
22
|
+
insert into users(id, name, age) values(7, 'jyp7', 25);
|
23
|
+
insert into users(id, name, age) values(8, 'jyp8', 26);
|
24
|
+
SQL
|
25
|
+
|
26
|
+
# setup data
|
27
|
+
@ds.dbh.execute_batch(setup_sql)
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_new_data_source
|
31
|
+
assert @ds
|
32
|
+
end
|
33
|
+
|
34
|
+
def test_new_data_source_2
|
35
|
+
assert DataSource.new("sqlite://#{File.join(Dir.tmpdir, 'tmptest.sqlite3')}")
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_build_sql
|
39
|
+
assert_equal "select * from user", @ds.send(:build_sql, 'user')
|
40
|
+
assert_equal "select name,age from user", @ds.send(:build_sql, 'user', 'name', 'age')
|
41
|
+
end
|
42
|
+
|
43
|
+
def test_sql_block_given
|
44
|
+
result = @ds.sql('select * from users') do |row|
|
45
|
+
row
|
46
|
+
end
|
47
|
+
|
48
|
+
assert_equal 8, result.size
|
49
|
+
end
|
50
|
+
|
51
|
+
def test_sql
|
52
|
+
result = @ds.sql('select * from users')
|
53
|
+
|
54
|
+
assert_kind_of ResultSet, result
|
55
|
+
assert_equal 8, result.size
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_method_missing
|
59
|
+
result = @ds.users(:name, :age) do |row|
|
60
|
+
row
|
61
|
+
end
|
62
|
+
|
63
|
+
assert_kind_of ResultSet, result
|
64
|
+
assert_equal 8, result.size
|
65
|
+
end
|
66
|
+
end
|
data/test/test_driver.rb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class DriverTest < TestHelper
|
4
|
+
def setup
|
5
|
+
@inst_str = "test test"
|
6
|
+
@driver = Driver.new
|
7
|
+
@driver.db = @inst_str
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_driver_not_null
|
11
|
+
assert @driver
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_extract_tbl_from_sql
|
15
|
+
tbl_name = "user"
|
16
|
+
tbl_sql = "select * from user"
|
17
|
+
|
18
|
+
assert_equal tbl_name, @driver.extract_tbl_from_sql(tbl_sql)
|
19
|
+
end
|
20
|
+
|
21
|
+
def test_extract_tbl_from_sql2
|
22
|
+
tbl_name = "user"
|
23
|
+
tbl_sql = "select * from user where xxx = 'from'"
|
24
|
+
|
25
|
+
assert_equal tbl_name, @driver.extract_tbl_from_sql(tbl_sql)
|
26
|
+
end
|
27
|
+
|
28
|
+
def test_extract_tbl_from_sql3
|
29
|
+
tbl_name = "user"
|
30
|
+
tbl_sql = "select * from user from test" # invalid sql form
|
31
|
+
|
32
|
+
assert_equal tbl_name, @driver.extract_tbl_from_sql(tbl_sql)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_method_missing
|
36
|
+
execpt_size = @inst_str.length
|
37
|
+
assert_equal execpt_size, @driver.length
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_extract_conn_param
|
41
|
+
result = @driver.send(:extract_conn_param, URI.parse("mysql://localhost:3306"))
|
42
|
+
assert_equal result.size, 3
|
43
|
+
assert_equal result['db_type'], 'mysql'
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class Mysqltest < TestHelper
|
4
|
+
def setup
|
5
|
+
@db = Mysql.new("mysql://root:20080802@127.0.0.1/test")
|
6
|
+
stm1 = @db.prepare(get_seed_data('tbl1'))
|
7
|
+
stm1.execute
|
8
|
+
stm1 = @db.prepare("insert into tbl1 values(?,?,?,?,?)")
|
9
|
+
10.times do |i|
|
10
|
+
args = [i, "jyp#{i}", 20+i, 'tbl1', "2001-01-#{1+i}"]
|
11
|
+
stm1.execute(*args)
|
12
|
+
end
|
13
|
+
|
14
|
+
stm1 = @db.prepare(get_seed_data('tbl2'))
|
15
|
+
stm1.execute
|
16
|
+
stm1 = @db.prepare("insert into tbl2 values(?,?,?,?,?)")
|
17
|
+
5.times do |i|
|
18
|
+
args = [i, "jyp#{i}", 20+i, 'tbl2', "2001-02-#{1+i}"]
|
19
|
+
stm1.execute(*args)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_new_mysql
|
24
|
+
assert @db
|
25
|
+
end
|
26
|
+
|
27
|
+
def test_transaction?
|
28
|
+
assert_respond_to @db, :transaction_active?
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_blob_read_and_write
|
32
|
+
stm = @db.prepare("create table if not exists test_blob(id integer, pic blob)")
|
33
|
+
stm.execute
|
34
|
+
|
35
|
+
# insert blob
|
36
|
+
test_str = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
|
37
|
+
stm_i = @db.prepare("insert into test_blob values(?,?)")
|
38
|
+
assert stm_i.execute(1, test_str)
|
39
|
+
|
40
|
+
# read blob
|
41
|
+
rs = @db.select("select * from test_blob")
|
42
|
+
assert test_str, rs.rows.first[1]
|
43
|
+
|
44
|
+
# clean db
|
45
|
+
stm = @db.prepare("drop table test_blob")
|
46
|
+
stm.execute
|
47
|
+
end
|
48
|
+
|
49
|
+
def test_mysql_migration
|
50
|
+
str =<<SCRIPT
|
51
|
+
ds :oa, "mysql://root:20080802@127.0.0.1/test"
|
52
|
+
ds :oa_bak,"mysql://root:20080802@127.0.0.1/test"
|
53
|
+
|
54
|
+
from oa.tbl1 to oa_bak.tbl2
|
55
|
+
SCRIPT
|
56
|
+
|
57
|
+
parser = Parser.new
|
58
|
+
parser.lex(str)
|
59
|
+
parser.parsing
|
60
|
+
rs = @db.select("select * from tbl2")
|
61
|
+
assert_equal 10, rs.size
|
62
|
+
assert_equal 'tbl1', rs.rows.first[3]
|
63
|
+
end
|
64
|
+
|
65
|
+
private
|
66
|
+
|
67
|
+
def get_seed_data(tbl_name)
|
68
|
+
prepare_a_data =<<SQL
|
69
|
+
create table if not exists #{tbl_name}(
|
70
|
+
id int,
|
71
|
+
name varchar(255),
|
72
|
+
age int,
|
73
|
+
flag varchar(255),
|
74
|
+
birth date
|
75
|
+
);
|
76
|
+
SQL
|
77
|
+
|
78
|
+
prepare_a_data
|
79
|
+
end
|
80
|
+
|
81
|
+
def teardown
|
82
|
+
stm = @db.prepare("drop table tbl1")
|
83
|
+
stm.execute
|
84
|
+
stm = @db.prepare("drop table tbl2")
|
85
|
+
stm.execute
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class OracleTest < TestHelper
|
4
|
+
def setup
|
5
|
+
@db = Oracle.new("oracle://scott:1234567@jtest")
|
6
|
+
@db.db.autocommit = true
|
7
|
+
|
8
|
+
# test for blob
|
9
|
+
@db.exec("create table test_blob(id number(11), pic blob)")
|
10
|
+
@db.exec("create table test_blob2(id number(11), pic blob)")
|
11
|
+
|
12
|
+
# prepare one row
|
13
|
+
@test_str = "xxxxxxxxxx"
|
14
|
+
b_var = OCI8::BLOB.new(@db.db, @test_str)
|
15
|
+
stm = @db.parse("insert into test_blob values (:1,:2)")
|
16
|
+
stm.exec(1, b_var)
|
17
|
+
stm.exec(2, b_var)
|
18
|
+
|
19
|
+
# test for data migration
|
20
|
+
@db.exec("create table user1(id number(11) primary key, name varchar(255), age number(4), flag varchar(255))")
|
21
|
+
stm = @db.parse("insert into user1 values(:1, :2, :3, :4)")
|
22
|
+
5.times do |i|
|
23
|
+
stm.exec(i, "user1+#{i}", 20+i, "user1")
|
24
|
+
end
|
25
|
+
@db.exec("create table user2(id number(11) primary key, name varchar(255), age number(4), flag varchar(255))")
|
26
|
+
stm = @db.parse("insert into user2 values(:1, :2, :3, :4)")
|
27
|
+
5.times do |i|
|
28
|
+
stm.exec(i+2, "user2+#{i}", 30+i, "user2")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def test_new_connection
|
33
|
+
assert @db
|
34
|
+
end
|
35
|
+
|
36
|
+
def test_respond_transaction
|
37
|
+
assert_respond_to @db, :transaction_active?
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_convert_question_mark_to_sym
|
41
|
+
e_sql_1 = "select * from users where id = ?"
|
42
|
+
a_sql_1 = "select * from users where id = :1"
|
43
|
+
assert_equal a_sql_1, @db.convert_question_mark_to_symbol(e_sql_1, ['a'].size)
|
44
|
+
|
45
|
+
e_sql_2 = "select * from users"
|
46
|
+
a_sql_2 = "select * from users"
|
47
|
+
assert_equal a_sql_2, @db.convert_question_mark_to_symbol(e_sql_2, [].size)
|
48
|
+
|
49
|
+
e_sql_3 = "select * from users where id = ? and name = ?"
|
50
|
+
a_sql_3 = "select * from users where id = :1 and name = :2"
|
51
|
+
assert_equal a_sql_3, @db.convert_question_mark_to_symbol(e_sql_3, ['a', 'b'].size)
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_blob_read_and_write
|
55
|
+
stm = @db.parse("select * from test_blob")
|
56
|
+
stm.exec
|
57
|
+
row = stm.fetch
|
58
|
+
assert_equal @test_str, row[1].read
|
59
|
+
|
60
|
+
stm.exec
|
61
|
+
row = stm.fetch
|
62
|
+
rb_row = @db.to_rb_row(row)
|
63
|
+
assert_equal [1, @test_str], rb_row
|
64
|
+
end
|
65
|
+
|
66
|
+
def test_select_rs
|
67
|
+
rs = @db.select("select * from test_blob")
|
68
|
+
assert_equal 2, rs.size
|
69
|
+
assert_equal @test_str, rs.rows.first[1]
|
70
|
+
end
|
71
|
+
|
72
|
+
def test_oracle_migration
|
73
|
+
str =<<SCRIPT
|
74
|
+
ds :oa, "oracle://scott:1234567@jtest"
|
75
|
+
ds :hr, "oracle://scott:1234567@jtest"
|
76
|
+
|
77
|
+
from oa.user1 to hr.user2
|
78
|
+
SCRIPT
|
79
|
+
|
80
|
+
parser = Parser.new
|
81
|
+
parser.lex(str).parsing
|
82
|
+
@rs = @db.select("select * from user2")
|
83
|
+
assert_equal 5, @rs.size
|
84
|
+
assert_equal 'user1', @rs.rows.first[3]
|
85
|
+
end
|
86
|
+
|
87
|
+
def test_blob_migration
|
88
|
+
str =<<SCRIPT
|
89
|
+
ds :oa, "oracle://scott:1234567@jtest"
|
90
|
+
ds :hr, "oracle://scott:1234567@jtest"
|
91
|
+
|
92
|
+
from oa.test_blob to hr.test_blob2
|
93
|
+
SCRIPT
|
94
|
+
|
95
|
+
parser = Parser.new
|
96
|
+
parser.lex(str).parsing
|
97
|
+
@rs = @db.select("select * from test_blob2")
|
98
|
+
assert_equal 2, @rs.size
|
99
|
+
assert_equal @test_str, @rs.rows.first[1]
|
100
|
+
end
|
101
|
+
|
102
|
+
def teardown
|
103
|
+
# clean environment
|
104
|
+
@db.exec("drop table test_blob")
|
105
|
+
@db.exec("drop table test_blob2")
|
106
|
+
@db.exec('drop table user1')
|
107
|
+
@db.exec('drop table user2')
|
108
|
+
end
|
109
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class SqliteTest < TestHelper
|
4
|
+
def setup
|
5
|
+
@tbl_name = 'users'
|
6
|
+
|
7
|
+
@db = Sqlite.new
|
8
|
+
setup_sql =<<SQL
|
9
|
+
create table users (
|
10
|
+
id integer primary key not null,
|
11
|
+
name varchar,
|
12
|
+
age integer,
|
13
|
+
birthday datetime default current_date
|
14
|
+
);
|
15
|
+
|
16
|
+
insert into users(id, name, age) values(1, 'jyp1', 23);
|
17
|
+
insert into users(id, name, age) values(2, 'jyp2', 24);
|
18
|
+
insert into users(id, name, age) values(3, 'jyp3', 25);
|
19
|
+
insert into users(id, name, age) values(4, 'jyp4', 26);
|
20
|
+
SQL
|
21
|
+
|
22
|
+
# setup data
|
23
|
+
@db.execute_batch(setup_sql)
|
24
|
+
end
|
25
|
+
|
26
|
+
def test_new_db
|
27
|
+
assert @db
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_table_users_exists?
|
31
|
+
sql = "select name from sqlite_master\
|
32
|
+
where type='table' and name='#{@tbl_name}'"
|
33
|
+
|
34
|
+
result = @db.execute sql
|
35
|
+
if result.size > 0
|
36
|
+
q_tbl_name = result.first.first
|
37
|
+
end
|
38
|
+
|
39
|
+
assert_equal q_tbl_name, @tbl_name
|
40
|
+
end
|
41
|
+
|
42
|
+
def test_primary_key_returned_value
|
43
|
+
result = @db.primary_key('users')
|
44
|
+
|
45
|
+
assert Array === result
|
46
|
+
end
|
47
|
+
|
48
|
+
def test_get_users_primary_is_id
|
49
|
+
result = @db.primary_key('users')
|
50
|
+
|
51
|
+
assert_equal ['id'], result
|
52
|
+
end
|
53
|
+
|
54
|
+
def test_insert_values
|
55
|
+
sql = "insert into users(id, name) values (1000, 'test')"
|
56
|
+
assert @db.insert(sql)
|
57
|
+
sql = "insert into users(id, name) values (?, ?)"
|
58
|
+
args = [10001, 'testtest']
|
59
|
+
assert @db.insert(sql, args)
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_inherit_extract_tblname
|
63
|
+
sql = "select * from users"
|
64
|
+
|
65
|
+
assert_equal "users", @db.extract_tbl_from_sql(sql)
|
66
|
+
end
|
67
|
+
|
68
|
+
def test_select_is_success
|
69
|
+
sql = "select id, name from users"
|
70
|
+
assert @db.select sql
|
71
|
+
end
|
72
|
+
|
73
|
+
def test_delete
|
74
|
+
assert @db.delete("delete from users where id=?", [1])
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_extract_db_path
|
78
|
+
assert ":memory:", @db.extract_db_path("sqlite://memory")
|
79
|
+
assert "/home/test.db", @db.extract_db_path("sqlite://home/test.db")
|
80
|
+
end
|
81
|
+
|
82
|
+
def teardown
|
83
|
+
#@db.close unless @db.closed?
|
84
|
+
end
|
85
|
+
end
|
data/test/test_helper.rb
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
require File.expand_path('../test_helper', __FILE__)
|
2
|
+
|
3
|
+
class MigrationTest < TestHelper
|
4
|
+
def setup
|
5
|
+
@obj = Object.new.extend(Migration)
|
6
|
+
|
7
|
+
# seed data
|
8
|
+
@obj.self_eval("ds :oa, 'sqlite://memory'")
|
9
|
+
@obj.oa.dbh.execute_batch(get_seed_sql('oa'))
|
10
|
+
|
11
|
+
@obj.self_eval("ds :hr, 'sqlite://memory'")
|
12
|
+
@obj.hr.dbh.execute_batch(get_seed_sql('hr'))
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_self_eval
|
16
|
+
assert_equal 3, @obj.self_eval('1+2')
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_self_eval2
|
20
|
+
assert_kind_of ResultSet, @obj.self_eval("oa.dbh.select('select * from users')")
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_data_source
|
24
|
+
@obj.ds('oa1', 'sqlite://memory')
|
25
|
+
|
26
|
+
assert_kind_of DataSource, @obj.oa1
|
27
|
+
assert @obj.oa1 = 'test'
|
28
|
+
assert_equal @obj.oa1, 'test'
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_union
|
32
|
+
rs_first_str = "oa.sql('select id,name,age,flag from users')"
|
33
|
+
rs_second_str = "hr.users(:id,:name,:age,:flag)"
|
34
|
+
|
35
|
+
new_rs = @obj.union(rs_first_str, rs_second_str)
|
36
|
+
assert_equal 10, new_rs.size
|
37
|
+
end
|
38
|
+
|
39
|
+
def test_join
|
40
|
+
rs_first_str = "oa.sql('select id,name,age,flag from users where id in (1, 2)')"
|
41
|
+
rs_second_str = "hr.sql('select id, birthday from users where id in (2, 3)')"
|
42
|
+
condition = ":id => :id"
|
43
|
+
new_rs = @obj.join(rs_first_str, rs_second_str, condition)
|
44
|
+
|
45
|
+
assert_equal 2, new_rs.size
|
46
|
+
|
47
|
+
# TODO when fetch none record , then fill with nil
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_join_2
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_migrate_full_table_migrate
|
54
|
+
rs_first_str = "oa.sql('select * from users')"
|
55
|
+
rs_second_str = "hr.users"
|
56
|
+
|
57
|
+
# this will save the migrated resultset
|
58
|
+
@obj.migrate(rs_first_str, rs_second_str)
|
59
|
+
|
60
|
+
# search the db to confirm
|
61
|
+
rs = @obj.oa.dbh.select("select flag from users")
|
62
|
+
|
63
|
+
assert_equal 5, rs.size
|
64
|
+
assert_equal 'oa', rs.rows.first[0]
|
65
|
+
end
|
66
|
+
|
67
|
+
def test_migrate_parted_record
|
68
|
+
rs_first_str = "oa.sql('select id,name,flag from users where id in (2)')"
|
69
|
+
rs_second_str = "hr.sql('select id,name,flag from users where id in (2)')"
|
70
|
+
|
71
|
+
@obj.migrate(rs_first_str, rs_second_str)
|
72
|
+
|
73
|
+
rs = @obj.hr.dbh.select("select count(*) from users where flag='oa'")
|
74
|
+
assert_equal 1, rs.rows.first[0]
|
75
|
+
end
|
76
|
+
|
77
|
+
def test_migrate_parted_record_2
|
78
|
+
# include delete, updated, insert (when target record exists in db but not in rs)
|
79
|
+
end
|
80
|
+
|
81
|
+
private
|
82
|
+
|
83
|
+
def get_seed_sql(db, insert_times = 5)
|
84
|
+
insert_sql = ""
|
85
|
+
insert_times.times do |i|
|
86
|
+
insert_sql << "insert into users(id, name, age, flag) values(#{i}, 'jyp#{i}', 26, '#{db}');"
|
87
|
+
end
|
88
|
+
|
89
|
+
setup_sql =<<SQL
|
90
|
+
create table users (
|
91
|
+
id integer primary key not null,
|
92
|
+
name varchar,
|
93
|
+
age integer,
|
94
|
+
flag varchar,
|
95
|
+
birthday datetime default current_date
|
96
|
+
);
|
97
|
+
#{insert_sql}
|
98
|
+
SQL
|
99
|
+
|
100
|
+
setup_sql
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
|