File: setup_db.rb

package info (click to toggle)
ruby-mysql2 0.5.5-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,096 kB
  • sloc: ansic: 3,459; ruby: 3,334; sh: 226; makefile: 3
file content (119 lines) | stat: -rw-r--r-- 4,439 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
$LOAD_PATH.unshift File.expand_path(File.dirname(__FILE__) + '/../lib')

# This script is for generating psudo-random data into a single table consisting of nearly every
# data type MySQL 5.1 supports.
#
# It's meant to be used with the query.rb benchmark script (or others in the future)

require 'mysql2'
require 'rubygems'
require 'faker'

num = ENV['NUM'] && ENV['NUM'].to_i || 10_000

create_table_sql = %[
  CREATE TABLE IF NOT EXISTS mysql2_test (
    null_test VARCHAR(10),
    bit_test BIT,
    tiny_int_test TINYINT,
    small_int_test SMALLINT,
    medium_int_test MEDIUMINT,
    int_test INT,
    big_int_test BIGINT,
    float_test FLOAT(10,3),
    float_zero_test FLOAT(10,3),
    double_test DOUBLE(10,3),
    decimal_test DECIMAL(10,3),
    decimal_zero_test DECIMAL(10,3),
    date_test DATE,
    date_time_test DATETIME,
    timestamp_test TIMESTAMP,
    time_test TIME,
    year_test YEAR(4),
    char_test CHAR(10),
    varchar_test VARCHAR(10),
    binary_test BINARY(10),
    varbinary_test VARBINARY(10),
    tiny_blob_test TINYBLOB,
    tiny_text_test TINYTEXT,
    blob_test BLOB,
    text_test TEXT,
    medium_blob_test MEDIUMBLOB,
    medium_text_test MEDIUMTEXT,
    long_blob_test LONGBLOB,
    long_text_test LONGTEXT,
    enum_test ENUM('val1', 'val2'),
    set_test SET('val1', 'val2')
  ) DEFAULT CHARSET=utf8
]

# connect to localhost by default, pass options as needed
@client = Mysql2::Client.new host: "localhost", username: "root", database: "test"

@client.query create_table_sql
@client.query 'TRUNCATE mysql2_test'

def insert_record(args)
  insert_sql = "
    INSERT INTO mysql2_test (
      null_test, bit_test, tiny_int_test, small_int_test, medium_int_test, int_test, big_int_test,
      float_test, float_zero_test, double_test, decimal_test, decimal_zero_test, date_test, date_time_test, timestamp_test, time_test,
      year_test, char_test, varchar_test, binary_test, varbinary_test, tiny_blob_test,
      tiny_text_test, blob_test, text_test, medium_blob_test, medium_text_test,
      long_blob_test, long_text_test, enum_test, set_test
    )

    VALUES (
      NULL, #{args[:bit_test]}, #{args[:tiny_int_test]}, #{args[:small_int_test]}, #{args[:medium_int_test]}, #{args[:int_test]}, #{args[:big_int_test]},
      #{args[:float_test]}, #{args[:float_zero_test]}, #{args[:double_test]}, #{args[:decimal_test]}, #{args[:decimal_zero_test]}, '#{args[:date_test]}', '#{args[:date_time_test]}', '#{args[:timestamp_test]}', '#{args[:time_test]}',
      #{args[:year_test]}, '#{args[:char_test]}', '#{args[:varchar_test]}', '#{args[:binary_test]}', '#{args[:varbinary_test]}', '#{args[:tiny_blob_test]}',
      '#{args[:tiny_text_test]}', '#{args[:blob_test]}', '#{args[:text_test]}', '#{args[:medium_blob_test]}', '#{args[:medium_text_test]}',
      '#{args[:long_blob_test]}', '#{args[:long_text_test]}', '#{args[:enum_test]}', '#{args[:set_test]}'
    )
  "
  @client.query insert_sql
end

puts "Creating #{num} records"
num.times do |n|
  five_words = Faker::Lorem.words(rand(5))
  twenty5_paragraphs = Faker::Lorem.paragraphs(rand(25))
  insert_record(
    bit_test: 1,
    tiny_int_test: rand(128),
    small_int_test: rand(32767),
    medium_int_test: rand(8388607),
    int_test: rand(2147483647),
    big_int_test: rand(9223372036854775807),
    float_test: rand(32767) / 1.87,
    float_zero_test: 0.0,
    double_test: rand(8388607) / 1.87,
    decimal_test: rand(8388607) / 1.87,
    decimal_zero_test: 0,
    date_test: '2010-4-4',
    date_time_test: '2010-4-4 11:44:00',
    timestamp_test: '2010-4-4 11:44:00',
    time_test: '11:44:00',
    year_test: Time.now.year,
    char_test: five_words.join.slice(0, 10), # CHAR(10)
    varchar_test: five_words.join.slice(0, 10), # VARCHAR(10)
    binary_test: five_words.join.byteslice(0, 10), # BINARY(10)
    varbinary_test: five_words.join.byteslice(0, 10), # VARBINARY(10)
    tiny_blob_test: five_words.join.byteslice(0, 255), # TINYBLOB
    tiny_text_test: Faker::Lorem.paragraph(rand(5)).byteslice(0, 255), # TINYTEXT
    blob_test: twenty5_paragraphs,
    text_test: twenty5_paragraphs,
    medium_blob_test: twenty5_paragraphs,
    medium_text_test: twenty5_paragraphs,
    long_blob_test: twenty5_paragraphs,
    long_text_test: twenty5_paragraphs,
    enum_test: %w[val1 val2].sample,
    set_test: %w[val1 val2 val1,val2].sample,
  )
  if (n % 100).zero?
    $stdout.putc '.'
    $stdout.flush
  end
end
puts
puts "Done"