· 9 years ago · Dec 08, 2016, 07:59 PM
1require 'pg'
2class DBOperations
3 GENDER = ["Man", "Woman"]
4 def initialize(tablename)
5 @tablename = tablename
6 end
7 def create_table(attributes = {})
8 attrs = generate_attributes(attributes)
9 "create table if not exists #{@tablename + attrs};"
10 end
11 def insert_into(values = nil, number_of_records = 1000000)
12 values = generate_records(number_of_records) unless values
13 return "insert into #{@tablename} values#{values};"
14 end
15 private
16 def generate_attributes(attributes)
17 sub_query = ""
18 attributes.each do |k, v|
19 sub_query += "#{k} #{v},"
20 end
21 query = "(" + sub_query[0..sub_query.size - 2] + ")" # Delete last coma
22 return query
23 end
24 def generate_records(records)
25 result = ""
26 records.times do |f|
27 id = f + 1
28 first_name = random_str(3, 15)
29 last_name = random_str(3, 15)
30 email = random_str + "@" + random_str(0, 10)
31 gender = GENDER[rand(0..1)]
32 result += "(#{id},'#{first_name}','#{last_name}','#{email}','#{gender}'),"
33 end
34 return result[0..result.size - 2]
35 end
36 # Random string
37 def random_str(min_length = 5, max_length = 30)
38 return (0...rand(min_length..max_length)).map { ('a'..'z').to_a[rand(0..26)] }.join
39 end
40end
41begin
42 db = DBOperations.new("test")
43 create_table_query = db.create_table({"id" => "int not null primary key", "first_name" => "varchar", "last_name" => "varchar", "email" => "varchar", "gender" => "varchar"})
44 insert_into_query = db.insert_into(nil, 100000)
45
46 puts "Poehali!!!"
47 con = PG.connect(:dbname => 'tspp4', :user => 'karim')
48
49 puts "Create if not exists"
50 con.exec(create_table_query)
51
52 puts "Let's add some records"
53 con.exec(insert_into_query)
54
55rescue PG::Error => e
56 puts e.message
57ensure
58 con.close if con
59end