partitioned 0.8.0
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.
- data/Gemfile +17 -0
- data/LICENSE +30 -0
- data/PARTITIONING_EXPLAINED.txt +351 -0
- data/README +111 -0
- data/Rakefile +27 -0
- data/examples/README +23 -0
- data/examples/company_id.rb +417 -0
- data/examples/company_id_and_created_at.rb +689 -0
- data/examples/created_at.rb +590 -0
- data/examples/created_at_referencing_awards.rb +1000 -0
- data/examples/id.rb +475 -0
- data/examples/lib/by_company_id.rb +11 -0
- data/examples/lib/command_line_tool_mixin.rb +71 -0
- data/examples/lib/company.rb +29 -0
- data/examples/lib/get_options.rb +44 -0
- data/examples/lib/roman.rb +41 -0
- data/examples/start_date.rb +621 -0
- data/init.rb +1 -0
- data/lib/monkey_patch_activerecord.rb +92 -0
- data/lib/monkey_patch_postgres.rb +73 -0
- data/lib/partitioned.rb +26 -0
- data/lib/partitioned/active_record_overrides.rb +34 -0
- data/lib/partitioned/bulk_methods_mixin.rb +288 -0
- data/lib/partitioned/by_created_at.rb +13 -0
- data/lib/partitioned/by_foreign_key.rb +21 -0
- data/lib/partitioned/by_id.rb +35 -0
- data/lib/partitioned/by_integer_field.rb +32 -0
- data/lib/partitioned/by_monthly_time_field.rb +23 -0
- data/lib/partitioned/by_time_field.rb +65 -0
- data/lib/partitioned/by_weekly_time_field.rb +30 -0
- data/lib/partitioned/multi_level.rb +20 -0
- data/lib/partitioned/multi_level/configurator/data.rb +14 -0
- data/lib/partitioned/multi_level/configurator/dsl.rb +32 -0
- data/lib/partitioned/multi_level/configurator/reader.rb +162 -0
- data/lib/partitioned/multi_level/partition_manager.rb +47 -0
- data/lib/partitioned/partitioned_base.rb +354 -0
- data/lib/partitioned/partitioned_base/configurator.rb +6 -0
- data/lib/partitioned/partitioned_base/configurator/data.rb +62 -0
- data/lib/partitioned/partitioned_base/configurator/dsl.rb +628 -0
- data/lib/partitioned/partitioned_base/configurator/reader.rb +209 -0
- data/lib/partitioned/partitioned_base/partition_manager.rb +138 -0
- data/lib/partitioned/partitioned_base/sql_adapter.rb +286 -0
- data/lib/partitioned/version.rb +3 -0
- data/lib/tasks/desirable_tasks.rake +4 -0
- data/partitioned.gemspec +21 -0
- data/spec/dummy/.rspec +1 -0
- data/spec/dummy/README.rdoc +261 -0
- data/spec/dummy/Rakefile +7 -0
- data/spec/dummy/app/assets/javascripts/application.js +9 -0
- data/spec/dummy/app/assets/stylesheets/application.css +7 -0
- data/spec/dummy/app/controllers/application_controller.rb +3 -0
- data/spec/dummy/app/helpers/application_helper.rb +2 -0
- data/spec/dummy/app/views/layouts/application.html.erb +14 -0
- data/spec/dummy/config.ru +4 -0
- data/spec/dummy/config/application.rb +51 -0
- data/spec/dummy/config/boot.rb +10 -0
- data/spec/dummy/config/database.yml +32 -0
- data/spec/dummy/config/environment.rb +5 -0
- data/spec/dummy/config/environments/development.rb +30 -0
- data/spec/dummy/config/environments/production.rb +60 -0
- data/spec/dummy/config/environments/test.rb +39 -0
- data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
- data/spec/dummy/config/initializers/inflections.rb +10 -0
- data/spec/dummy/config/initializers/mime_types.rb +5 -0
- data/spec/dummy/config/initializers/secret_token.rb +7 -0
- data/spec/dummy/config/initializers/session_store.rb +8 -0
- data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
- data/spec/dummy/config/locales/en.yml +5 -0
- data/spec/dummy/config/routes.rb +58 -0
- data/spec/dummy/public/404.html +26 -0
- data/spec/dummy/public/422.html +26 -0
- data/spec/dummy/public/500.html +26 -0
- data/spec/dummy/public/favicon.ico +0 -0
- data/spec/dummy/script/rails +6 -0
- data/spec/dummy/spec/spec_helper.rb +27 -0
- data/spec/monkey_patch_posgres_spec.rb +176 -0
- data/spec/partitioned/bulk_methods_mixin_spec.rb +512 -0
- data/spec/partitioned/by_created_at_spec.rb +62 -0
- data/spec/partitioned/by_foreign_key_spec.rb +95 -0
- data/spec/partitioned/by_id_spec.rb +97 -0
- data/spec/partitioned/by_integer_field_spec.rb +143 -0
- data/spec/partitioned/by_monthly_time_field_spec.rb +100 -0
- data/spec/partitioned/by_time_field_spec.rb +182 -0
- data/spec/partitioned/by_weekly_time_field_spec.rb +100 -0
- data/spec/partitioned/multi_level/configurator/dsl_spec.rb +88 -0
- data/spec/partitioned/multi_level/configurator/reader_spec.rb +147 -0
- data/spec/partitioned/partitioned_base/configurator/dsl_spec.rb +459 -0
- data/spec/partitioned/partitioned_base/configurator/reader_spec.rb +513 -0
- data/spec/partitioned/partitioned_base/sql_adapter_spec.rb +204 -0
- data/spec/partitioned/partitioned_base_spec.rb +173 -0
- data/spec/spec_helper.rb +32 -0
- data/spec/support/shared_example_spec_helper_for_integer_key.rb +137 -0
- data/spec/support/shared_example_spec_helper_for_time_key.rb +147 -0
- data/spec/support/tables_spec_helper.rb +47 -0
- metadata +250 -0
|
@@ -0,0 +1,1000 @@
|
|
|
1
|
+
#!/usr/bin/env ../spec/dummy/script/rails runner
|
|
2
|
+
# if you use linux, please change previous line to the
|
|
3
|
+
# "#! ../spec/dummy/script/rails runner"
|
|
4
|
+
|
|
5
|
+
# Before running this example you should execute "bundle install" and "rake db:create".
|
|
6
|
+
# To run this example you should open 'example' directory and execute example with one of the following flags:
|
|
7
|
+
# -C cleanup data in database and exit;
|
|
8
|
+
# -F cleanup data in database before creating new data;
|
|
9
|
+
#
|
|
10
|
+
# For example:
|
|
11
|
+
# ./created_at_referencing_awards.rb - F
|
|
12
|
+
|
|
13
|
+
# Initial data:
|
|
14
|
+
#
|
|
15
|
+
# Companies table is completed by four companies:
|
|
16
|
+
#
|
|
17
|
+
# create table companies (
|
|
18
|
+
# id serial not null primary key,
|
|
19
|
+
# created_at timestamp not null default now(),
|
|
20
|
+
# updated_at timestamp,
|
|
21
|
+
# name text null
|
|
22
|
+
# );
|
|
23
|
+
#
|
|
24
|
+
# insert into companies (created_at,id,name) values
|
|
25
|
+
# ('2012-03-13 13:26:52.184347',1,'Fluent Mobile, inc.'),
|
|
26
|
+
# ('2012-03-13 13:26:52.184347',2,'Fiksu, inc.'),
|
|
27
|
+
# ('2012-03-13 13:26:52.184347',3,'AppExchanger, inc.'),
|
|
28
|
+
# ('2012-03-13 13:26:52.184347',4,'FreeMyApps, inc.');
|
|
29
|
+
#
|
|
30
|
+
# id | created_at | updated_at | name
|
|
31
|
+
# ---+----------------------------+------------+---------------------
|
|
32
|
+
# 1 | 2012-03-11 13:26:52.184347 | | Fluent Mobile, inc.
|
|
33
|
+
# 2 | 2012-03-11 13:26:52.184347 | | Fiksu, inc.
|
|
34
|
+
# 3 | 2012-03-11 13:26:52.184347 | | AppExchanger, inc.
|
|
35
|
+
# 4 | 2012-03-11 13:26:52.184347 | | FreeMyApps, inc.
|
|
36
|
+
#
|
|
37
|
+
# Employees table is associated with companies table via key - id:
|
|
38
|
+
#
|
|
39
|
+
# create table employees (
|
|
40
|
+
# id serial not null primary key,
|
|
41
|
+
# created_at timestamp not null default now(),
|
|
42
|
+
# updated_at timestamp,
|
|
43
|
+
# name text not null,
|
|
44
|
+
# salary money not null,
|
|
45
|
+
# company_id integer not null
|
|
46
|
+
# );
|
|
47
|
+
#
|
|
48
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
49
|
+
# ----+------------+------------+------+--------+------------
|
|
50
|
+
#
|
|
51
|
+
# Awards table is associated with employees table via key - employee_id:
|
|
52
|
+
#
|
|
53
|
+
# create table awards (
|
|
54
|
+
# id serial not null primary key,
|
|
55
|
+
# created_at timestamp not null default now(),
|
|
56
|
+
# employee_created_at timestamp not null,
|
|
57
|
+
# awarded_on date not null,
|
|
58
|
+
# employee_id integer not null,
|
|
59
|
+
# award_title text not null
|
|
60
|
+
# );
|
|
61
|
+
#
|
|
62
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
63
|
+
# ----+------------+---------------------+------------+-------------+-------------
|
|
64
|
+
#
|
|
65
|
+
# Task:
|
|
66
|
+
#
|
|
67
|
+
# To increase the speed of requests to the database and to reduce the time
|
|
68
|
+
# of the request, need to split the Employees table and Awards table to the partition tables.
|
|
69
|
+
# Break criterion for Employees table is a created date(created_at).
|
|
70
|
+
# Break criterion for Awards table is a employee created date(employee_created_at).
|
|
71
|
+
#
|
|
72
|
+
# Implementation:
|
|
73
|
+
#
|
|
74
|
+
# Class Employee inherits from the abstract class ByCreatedAt,
|
|
75
|
+
# which supports partitioning.
|
|
76
|
+
#
|
|
77
|
+
# class Employee < Partitioned::ByCreatedAt
|
|
78
|
+
#
|
|
79
|
+
# Indicates a relationship to the companies table.
|
|
80
|
+
# belongs_to :company, :class_name => 'Company'
|
|
81
|
+
#
|
|
82
|
+
# Create a rules for each partition.
|
|
83
|
+
# Id is a unique index. Foreign key is company_id.
|
|
84
|
+
# This imposes a restriction on each of partition, that
|
|
85
|
+
# the column company_id associated with the table of companies
|
|
86
|
+
# and can not have values that are not in the table companies.
|
|
87
|
+
# In this example, set up only 4 records in the table companies,
|
|
88
|
+
# so company_id can not be equal to 5 in any partition
|
|
89
|
+
# until it is an established company with id = 5.
|
|
90
|
+
#
|
|
91
|
+
# partitioned do |partition|
|
|
92
|
+
# partition.index :id, :unique => true
|
|
93
|
+
# partition.foreign_key :company_id
|
|
94
|
+
# end
|
|
95
|
+
# end
|
|
96
|
+
#
|
|
97
|
+
# Class Award inherits from the abstract class ByEmployeeCreatedAt,
|
|
98
|
+
# which supports partitioning.
|
|
99
|
+
#
|
|
100
|
+
# class Award < ByEmployeeCreatedAt
|
|
101
|
+
#
|
|
102
|
+
# Indicates a relationship to the employees table.
|
|
103
|
+
# belongs_to :employee, :class_name => 'Employee'
|
|
104
|
+
#
|
|
105
|
+
# partitioned do |partition|
|
|
106
|
+
# partition.foreign_key lambda {|model, *partition_key_values|
|
|
107
|
+
# return Configurator::Data::ForeignKey.
|
|
108
|
+
# new(:employee_id, Employee.partition_name(*partition_key_values), :id)
|
|
109
|
+
# }
|
|
110
|
+
# end
|
|
111
|
+
# end
|
|
112
|
+
#
|
|
113
|
+
# Create a schema employees_partitions, within which to store employees partitions:
|
|
114
|
+
#
|
|
115
|
+
# Employee.create_infrastructure
|
|
116
|
+
#
|
|
117
|
+
# Create the infrastructure for Awards table which includes the schema and partition tables:
|
|
118
|
+
#
|
|
119
|
+
# Award.create_infrastructure
|
|
120
|
+
#
|
|
121
|
+
# Create a partition tables with increments of one week:
|
|
122
|
+
#
|
|
123
|
+
# dates = Employee.partition_generate_range(START_DATE, END_DATE)
|
|
124
|
+
#
|
|
125
|
+
# Employee.create_new_partition_tables(dates)
|
|
126
|
+
# Each of employees partition has the same structure as that of the employees table:
|
|
127
|
+
#
|
|
128
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
129
|
+
# ----+------------+------------+------+--------+------------
|
|
130
|
+
#
|
|
131
|
+
# CREATE TABLE "employees_partitions"."p20101227" (CHECK (created_at >= '2010-12-27' AND
|
|
132
|
+
# created_at < '2011-01-03')) INHERITS (employees);
|
|
133
|
+
# CREATE INDEX "p20101227_created_at_idx" ON "employees_partitions"."p20101227" ("created_at");
|
|
134
|
+
# CREATE UNIQUE INDEX "p20101227_id_udx" ON "employees_partitions"."p20101227" ("id");
|
|
135
|
+
# ALTER TABLE employees_partitions.p20101227 add foreign key (company_id) references companies(id);
|
|
136
|
+
#
|
|
137
|
+
# CREATE TABLE "employees_partitions"."p20110103" (CHECK (created_at >= '2011-01-03' AND
|
|
138
|
+
# created_at < '2011-01-10')) INHERITS (employees);
|
|
139
|
+
# CREATE INDEX "p20110103_created_at_idx" ON "employees_partitions"."p20110103" ("created_at");
|
|
140
|
+
# CREATE UNIQUE INDEX "p20110103_id_udx" ON "employees_partitions"."p20110103" ("id");
|
|
141
|
+
# ALTER TABLE employees_partitions.p20110103 add foreign key (company_id) references companies(id);
|
|
142
|
+
#
|
|
143
|
+
# CREATE TABLE "employees_partitions"."p20110110" (CHECK (created_at >= '2011-01-10' AND
|
|
144
|
+
# created_at < '2011-01-17')) INHERITS (employees);
|
|
145
|
+
# CREATE INDEX "p20110110_created_at_idx" ON "employees_partitions"."p20110110" ("created_at");
|
|
146
|
+
# CREATE UNIQUE INDEX "p20110110_id_udx" ON "employees_partitions"."p20110110" ("id");
|
|
147
|
+
# ALTER TABLE employees_partitions.p20110110 add foreign key (company_id) references companies(id);
|
|
148
|
+
#
|
|
149
|
+
# ...
|
|
150
|
+
#
|
|
151
|
+
# CREATE TABLE "employees_partitions"."p20111212" (CHECK (created_at >= '2011-12-12' AND
|
|
152
|
+
# created_at < '2011-12-19')) INHERITS (employees);
|
|
153
|
+
# CREATE INDEX "p20111212_created_at_idx" ON "employees_partitions"."p20111212" ("created_at");
|
|
154
|
+
# CREATE UNIQUE INDEX "p20111212_id_udx" ON "employees_partitions"."p20111212" ("id");
|
|
155
|
+
# ALTER TABLE employees_partitions.p20111212 add foreign key (company_id) references companies(id);
|
|
156
|
+
#
|
|
157
|
+
# CREATE TABLE "employees_partitions"."p20111219" (CHECK (created_at >= '2011-12-19' AND
|
|
158
|
+
# created_at < '2011-12-26')) INHERITS (employees);
|
|
159
|
+
# CREATE INDEX "p20111219_created_at_idx" ON "employees_partitions"."p20111219" ("created_at");
|
|
160
|
+
# CREATE UNIQUE INDEX "p20111219_id_udx" ON "employees_partitions"."p20111219" ("id");
|
|
161
|
+
# ALTER TABLE employees_partitions.p20111219 add foreign key (company_id) references companies(id);
|
|
162
|
+
#
|
|
163
|
+
# CREATE TABLE "employees_partitions"."p20111226" (CHECK (created_at >= '2011-12-26' AND
|
|
164
|
+
# created_at < '2012-01-02')) INHERITS (employees);
|
|
165
|
+
# CREATE INDEX "p20111226_created_at_idx" ON "employees_partitions"."p20111226" ("created_at");
|
|
166
|
+
# CREATE UNIQUE INDEX "p20111226_id_udx" ON "employees_partitions"."p20111226" ("id");
|
|
167
|
+
# ALTER TABLE employees_partitions.p20111226 add foreign key (company_id) references companies(id);
|
|
168
|
+
#
|
|
169
|
+
# You should have the following tables with increments of one week:
|
|
170
|
+
# employees_partitions.p20101227
|
|
171
|
+
# employees_partitions.p20110103
|
|
172
|
+
# employees_partitions.p20110110
|
|
173
|
+
# employees_partitions.p20110117
|
|
174
|
+
# employees_partitions.p20110124
|
|
175
|
+
# employees_partitions.p20110131
|
|
176
|
+
# employees_partitions.p20110207
|
|
177
|
+
# employees_partitions.p20110214
|
|
178
|
+
# employees_partitions.p20110221
|
|
179
|
+
# employees_partitions.p20110228
|
|
180
|
+
# employees_partitions.p20110307
|
|
181
|
+
# employees_partitions.p20110314
|
|
182
|
+
# employees_partitions.p20110321
|
|
183
|
+
# employees_partitions.p20110328
|
|
184
|
+
# employees_partitions.p20110404
|
|
185
|
+
# employees_partitions.p20110411
|
|
186
|
+
# employees_partitions.p20110418
|
|
187
|
+
# employees_partitions.p20110425
|
|
188
|
+
# employees_partitions.p20110502
|
|
189
|
+
# employees_partitions.p20110509
|
|
190
|
+
# employees_partitions.p20110516
|
|
191
|
+
# employees_partitions.p20110523
|
|
192
|
+
# employees_partitions.p20110530
|
|
193
|
+
# employees_partitions.p20110606
|
|
194
|
+
# employees_partitions.p20110613
|
|
195
|
+
# employees_partitions.p20110620
|
|
196
|
+
# employees_partitions.p20110627
|
|
197
|
+
# employees_partitions.p20110704
|
|
198
|
+
# employees_partitions.p20110711
|
|
199
|
+
# employees_partitions.p20110718
|
|
200
|
+
# employees_partitions.p20110725
|
|
201
|
+
# employees_partitions.p20110801
|
|
202
|
+
# employees_partitions.p20110808
|
|
203
|
+
# employees_partitions.p20110815
|
|
204
|
+
# employees_partitions.p20110822
|
|
205
|
+
# employees_partitions.p20110829
|
|
206
|
+
# employees_partitions.p20110905
|
|
207
|
+
# employees_partitions.p20110912
|
|
208
|
+
# employees_partitions.p20110919
|
|
209
|
+
# employees_partitions.p20110926
|
|
210
|
+
# employees_partitions.p20111003
|
|
211
|
+
# employees_partitions.p20111010
|
|
212
|
+
# employees_partitions.p20111017
|
|
213
|
+
# employees_partitions.p20111024
|
|
214
|
+
# employees_partitions.p20111031
|
|
215
|
+
# employees_partitions.p20111107
|
|
216
|
+
# employees_partitions.p20111114
|
|
217
|
+
# employees_partitions.p20111121
|
|
218
|
+
# employees_partitions.p20111128
|
|
219
|
+
# employees_partitions.p20111205
|
|
220
|
+
# employees_partitions.p20111212
|
|
221
|
+
# employees_partitions.p20111219
|
|
222
|
+
# employees_partitions.p20111226
|
|
223
|
+
#
|
|
224
|
+
# Each of partitions inherits from employees table,
|
|
225
|
+
# thus a new row will automatically be added to the employees table .
|
|
226
|
+
#
|
|
227
|
+
# To add data, we use the following constructions,
|
|
228
|
+
# in which employees and employee_data - a random data:
|
|
229
|
+
#
|
|
230
|
+
# create_many - allows you to add multiple records
|
|
231
|
+
# Employee.create_many(employees)
|
|
232
|
+
# create - allows you to add one record
|
|
233
|
+
# Employee.create(employee_data)
|
|
234
|
+
# new/save! - allows you to add one record without using "create" method
|
|
235
|
+
# employee = Employee.new(employee_data)
|
|
236
|
+
# employee.save!
|
|
237
|
+
#
|
|
238
|
+
# For update data, we use the following constructions,
|
|
239
|
+
# in which updates - a random data:
|
|
240
|
+
#
|
|
241
|
+
# update_many - allows you to update multiple records.
|
|
242
|
+
# :set_array - additional option, you may read the description
|
|
243
|
+
# of the method in the file update_many bulk_methods_mixin.rb about this option.
|
|
244
|
+
# Employee.update_many(updates, { :set_array => '"salary = #{table_name}.salary +
|
|
245
|
+
# datatable.salary, updated_at = now()"' })
|
|
246
|
+
#
|
|
247
|
+
# This construction using for update one record. You also may use update method.
|
|
248
|
+
# employee = Employee.from_partition(employee_record[:created_at]).find(employee_record[:id])
|
|
249
|
+
# employee.save
|
|
250
|
+
#
|
|
251
|
+
# The data get into the employees table ONLY through partition tables.
|
|
252
|
+
# You can not do an insert row into a table employees directly.
|
|
253
|
+
# For this purpose special restrictions are imposed on the table employees.
|
|
254
|
+
#
|
|
255
|
+
# Award.create_new_partition_tables(dates)
|
|
256
|
+
# Each of awards partition has the same structure as that of the awards table:
|
|
257
|
+
#
|
|
258
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
259
|
+
# -----+------------+---------------------+------------+-------------+-------------
|
|
260
|
+
#
|
|
261
|
+
# CREATE TABLE "awards_partitions"."p20101227" (CHECK (employee_created_at >= '2010-12-27' AND
|
|
262
|
+
# employee_created_at < '2011-01-03')) INHERITS (awards);
|
|
263
|
+
# CREATE INDEX "p20101227_employee_created_at_idx" ON "awards_partitions"."p20101227" ("employee_created_at");
|
|
264
|
+
# ALTER TABLE awards_partitions.p20101227 add foreign key (employee_id) references employees_partitions.p20101227(id);
|
|
265
|
+
#
|
|
266
|
+
# CREATE TABLE "awards_partitions"."p20110103" (CHECK (employee_created_at >= '2011-01-03' AND
|
|
267
|
+
# employee_created_at < '2011-01-10')) INHERITS (awards);
|
|
268
|
+
# CREATE INDEX "p20110103_employee_created_at_idx" ON "awards_partitions"."p20110103" ("employee_created_at");
|
|
269
|
+
# ALTER TABLE awards_partitions.p20110103 add foreign key (employee_id) references employees_partitions.p20110103(id);
|
|
270
|
+
#
|
|
271
|
+
# CREATE TABLE "awards_partitions"."p20110110" (CHECK (employee_created_at >= '2011-01-10' AND
|
|
272
|
+
# employee_created_at < '2011-01-17')) INHERITS (awards);
|
|
273
|
+
# CREATE INDEX "p20110110_employee_created_at_idx" ON "awards_partitions"."p20110110" ("employee_created_at");
|
|
274
|
+
# ALTER TABLE awards_partitions.p20110110 add foreign key (employee_id) references employees_partitions.p20110110(id);
|
|
275
|
+
#
|
|
276
|
+
# ...
|
|
277
|
+
#
|
|
278
|
+
# CREATE TABLE "awards_partitions"."p20111212" (CHECK (employee_created_at >= '2011-12-12' AND
|
|
279
|
+
# employee_created_at < '2011-12-19')) INHERITS (awards);
|
|
280
|
+
# CREATE INDEX "p20111212_employee_created_at_idx" ON "awards_partitions"."p20111212" ("employee_created_at");
|
|
281
|
+
# ALTER TABLE awards_partitions.p20111212 add foreign key (employee_id) references employees_partitions.p20111212(id);
|
|
282
|
+
#
|
|
283
|
+
# CREATE TABLE "awards_partitions"."p20111219" (CHECK (employee_created_at >= '2011-12-19' AND
|
|
284
|
+
# employee_created_at < '2011-12-26')) INHERITS (awards);
|
|
285
|
+
# CREATE INDEX "p20111219_employee_created_at_idx" ON "awards_partitions"."p20111219" ("employee_created_at");
|
|
286
|
+
# ALTER TABLE awards_partitions.p20111219 add foreign key (employee_id) references employees_partitions.p20111219(id);
|
|
287
|
+
#
|
|
288
|
+
# CREATE TABLE "awards_partitions"."p20111226" (CHECK (employee_created_at >= '2011-12-26' AND
|
|
289
|
+
# employee_created_at < '2012-01-02')) INHERITS (awards);
|
|
290
|
+
# CREATE INDEX "p20111226_employee_created_at_idx" ON "awards_partitions"."p20111226" ("employee_created_at");
|
|
291
|
+
# ALTER TABLE awards_partitions.p20111226 add foreign key (employee_id) references employees_partitions.p20111226(id);
|
|
292
|
+
#
|
|
293
|
+
# You should have the following tables with increments of one week:
|
|
294
|
+
# awards_partitions.p20101227
|
|
295
|
+
# awards_partitions.p20110103
|
|
296
|
+
# awards_partitions.p20110110
|
|
297
|
+
# awards_partitions.p20110117
|
|
298
|
+
# awards_partitions.p20110124
|
|
299
|
+
# awards_partitions.p20110131
|
|
300
|
+
# awards_partitions.p20110207
|
|
301
|
+
# awards_partitions.p20110214
|
|
302
|
+
# awards_partitions.p20110221
|
|
303
|
+
# awards_partitions.p20110228
|
|
304
|
+
# awards_partitions.p20110307
|
|
305
|
+
# awards_partitions.p20110314
|
|
306
|
+
# awards_partitions.p20110321
|
|
307
|
+
# awards_partitions.p20110328
|
|
308
|
+
# awards_partitions.p20110404
|
|
309
|
+
# awards_partitions.p20110411
|
|
310
|
+
# awards_partitions.p20110418
|
|
311
|
+
# awards_partitions.p20110425
|
|
312
|
+
# awards_partitions.p20110502
|
|
313
|
+
# awards_partitions.p20110509
|
|
314
|
+
# awards_partitions.p20110516
|
|
315
|
+
# awards_partitions.p20110523
|
|
316
|
+
# awards_partitions.p20110530
|
|
317
|
+
# awards_partitions.p20110606
|
|
318
|
+
# awards_partitions.p20110613
|
|
319
|
+
# awards_partitions.p20110620
|
|
320
|
+
# awards_partitions.p20110627
|
|
321
|
+
# awards_partitions.p20110704
|
|
322
|
+
# awards_partitions.p20110711
|
|
323
|
+
# awards_partitions.p20110718
|
|
324
|
+
# awards_partitions.p20110725
|
|
325
|
+
# awards_partitions.p20110801
|
|
326
|
+
# awards_partitions.p20110808
|
|
327
|
+
# awards_partitions.p20110815
|
|
328
|
+
# awards_partitions.p20110822
|
|
329
|
+
# awards_partitions.p20110829
|
|
330
|
+
# awards_partitions.p20110905
|
|
331
|
+
# awards_partitions.p20110912
|
|
332
|
+
# awards_partitions.p20110919
|
|
333
|
+
# awards_partitions.p20110926
|
|
334
|
+
# awards_partitions.p20111003
|
|
335
|
+
# awards_partitions.p20111010
|
|
336
|
+
# awards_partitions.p20111017
|
|
337
|
+
# awards_partitions.p20111024
|
|
338
|
+
# awards_partitions.p20111031
|
|
339
|
+
# awards_partitions.p20111107
|
|
340
|
+
# awards_partitions.p20111114
|
|
341
|
+
# awards_partitions.p20111121
|
|
342
|
+
# awards_partitions.p20111128
|
|
343
|
+
# awards_partitions.p20111205
|
|
344
|
+
# awards_partitions.p20111212
|
|
345
|
+
# awards_partitions.p20111219
|
|
346
|
+
# awards_partitions.p20111226
|
|
347
|
+
#
|
|
348
|
+
# Each of partitions inherits from awards table,
|
|
349
|
+
# thus a new row will automatically be added to the awards table .
|
|
350
|
+
#
|
|
351
|
+
# To add data, we use the following constructions,
|
|
352
|
+
# in which awards and award_data - a random data:
|
|
353
|
+
#
|
|
354
|
+
# create_many - allows you to add multiple records
|
|
355
|
+
# Award.create_many(awards)
|
|
356
|
+
# create - allows you to add one record
|
|
357
|
+
# Award.create(award_data)
|
|
358
|
+
# new/save! - allows you to add one record without using "create" method
|
|
359
|
+
# award = Award.new(award_data)
|
|
360
|
+
# award.save!
|
|
361
|
+
#
|
|
362
|
+
# For update data, we use the following constructions,
|
|
363
|
+
# in which updates - a random data:
|
|
364
|
+
#
|
|
365
|
+
# update_many - allows you to update multiple records.
|
|
366
|
+
# :set_array - additional option, you may read the description
|
|
367
|
+
# of the method in the file update_many bulk_methods_mixin.rb about this option.
|
|
368
|
+
# Award.update_many(updates, { :set_array => '"award_title = datatable.award_title,
|
|
369
|
+
# awarded_on = now()"' })
|
|
370
|
+
#
|
|
371
|
+
# This construction using for update one record. You also may use update method.
|
|
372
|
+
# award = Award.from_partition(award_record[:employee_created_at]).find(award_record[:id])
|
|
373
|
+
# award.save
|
|
374
|
+
#
|
|
375
|
+
# The data get into the awards table ONLY through partition tables.
|
|
376
|
+
# You can not do an insert row into a table awards directly.
|
|
377
|
+
# For this purpose special restrictions are imposed on the table awards.
|
|
378
|
+
#
|
|
379
|
+
# Result:
|
|
380
|
+
#
|
|
381
|
+
# We have table companies:
|
|
382
|
+
#
|
|
383
|
+
# id | created_at | updated_at | name
|
|
384
|
+
# ---+----------------------------+------------+---------------------
|
|
385
|
+
# 1 | 2012-03-11 13:26:52.184347 | | Fluent Mobile, inc.
|
|
386
|
+
# 2 | 2012-03-11 13:26:52.184347 | | Fiksu, inc.
|
|
387
|
+
# 3 | 2012-03-11 13:26:52.184347 | | AppExchanger, inc.
|
|
388
|
+
# 4 | 2012-03-11 13:26:52.184347 | | FreeMyApps, inc.
|
|
389
|
+
#
|
|
390
|
+
# Table employees with random data from 1 to 2500:
|
|
391
|
+
#
|
|
392
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
393
|
+
#------+---------------------+----------------------------+---------------------------------+-------------+------------
|
|
394
|
+
# 1 | 2011-02-27 09:30:12 | | Winston J. Sillypants, I | $89,653.00 | 2
|
|
395
|
+
# 2 | 2011-02-08 01:08:50 | | Winston J. Sillypants, II | $94,759.00 | 4
|
|
396
|
+
# 3 | 2011-12-08 19:54:21 | 2012-03-27 11:38:50.674123 | Winston J. Sillypants, III | $73,726.00 | 2
|
|
397
|
+
# ...
|
|
398
|
+
# 2498 | 2011-01-18 01:43:42 | 2012-03-27 10:38:36.029443 | Picholine Pimplenad, MMCDXCVIII | $61,107.00 | 3
|
|
399
|
+
# 2499 | 2011-11-03 21:07:05 | 2012-03-27 11:38:50.656815 | Picholine Pimplenad, MMCDXCIX | $62,638.00 | 4
|
|
400
|
+
# 2500 | 2011-12-26 04:03:57 | 2012-03-27 10:38:36.039419 | Picholine Pimplenad, MMD | $102,855.00 | 1
|
|
401
|
+
#
|
|
402
|
+
# Table awards with random data from 1 to 2500:
|
|
403
|
+
#
|
|
404
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
405
|
+
#------+----------------------------+---------------------+------------+-------------+---------------------------------
|
|
406
|
+
# 1 | 2012-03-27 10:38:39.728924 | 2011-10-17 13:44:07 | 2012-07-02 | 440 | You're the best I
|
|
407
|
+
# 2 | 2012-03-27 10:38:39.728924 | 2011-06-15 20:00:02 | 2012-06-07 | 921 | You're the best II
|
|
408
|
+
# 3 | 2012-03-27 10:38:39.728924 | 2011-11-20 06:30:34 | 2012-10-16 | 349 | You're the best III
|
|
409
|
+
# ...
|
|
410
|
+
# 2498 | 2012-03-27 10:38:45.954887 | 2011-10-09 22:51:04 | 2012-07-10 | 1421 | You're the best MMCDXCVIII
|
|
411
|
+
# 2499 | 2012-03-27 10:38:45.959831 | 2011-01-07 02:25:00 | 2011-09-07 | 1717 | You're the best MMCDXCIX
|
|
412
|
+
# 2500 | 2012-03-27 10:38:45.964599 | 2011-08-23 08:02:50 | 2012-03-27 | 515 | You're the greatest DCCCXXXVIII
|
|
413
|
+
#
|
|
414
|
+
# Partition employees_partitions.p20101227 - partition where
|
|
415
|
+
# created_at >= '2010-12-27 00:00:00' AND created_at < '2011-01-03 00:00:00':
|
|
416
|
+
#
|
|
417
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
418
|
+
#------+---------------------+----------------------------+---------------------------------+-------------+------------
|
|
419
|
+
# 641 | 2011-01-01 06:32:16 | | Winston J. Sillypants, DCXLI | $103,834.00 | 4
|
|
420
|
+
# 644 | 2011-01-02 08:00:35 | 2012-03-27 11:38:50.70092 | Winston J. Sillypants, DCXLIV | $98,756.00 | 4
|
|
421
|
+
# 766 | 2011-01-01 18:22:34 | 2012-03-27 11:38:50.70092 | Winston J. Sillypants, DCCLXVI | $133,384.00 | 1
|
|
422
|
+
# ...
|
|
423
|
+
# 2058 | 2011-01-01 09:07:52 | 2012-03-27 10:38:33.742273 | Picholine Pimplenad, MMLVIII | $130,422.00 | 3
|
|
424
|
+
# 2422 | 2011-01-01 07:44:38 | 2012-03-27 10:38:35.604894 | Picholine Pimplenad, MMCDXXII | $86,484.00 | 3
|
|
425
|
+
# 2482 | 2011-01-01 07:52:26 | 2012-03-27 10:38:35.890074 | Picholine Pimplenad, MMCDLXXXII | $113,265.00 | 2
|
|
426
|
+
#
|
|
427
|
+
# Partition employees_partitions.p20110103 - partition where
|
|
428
|
+
# created_at >= '2011-01-03 00:00:00' AND created_at < '2011-01-10 00:00:00':
|
|
429
|
+
#
|
|
430
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
431
|
+
#------+---------------------+----------------------------+---------------------------------+-------------+------------
|
|
432
|
+
# 22 | 2011-01-09 03:20:24 | 2012-03-27 11:38:50.588609 | Winston J. Sillypants, XXII | $139,538.00 | 2
|
|
433
|
+
# 63 | 2011-01-09 04:51:41 | | Winston J. Sillypants, LXIII | $127,878.00 | 2
|
|
434
|
+
# 282 | 2011-01-03 09:19:16 | 2012-03-27 10:38:37.896505 | Winston J. Sillypants, CCLXXXII | $106,733.00 | 3
|
|
435
|
+
# ...
|
|
436
|
+
# 2366 | 2011-01-07 19:18:54 | 2012-03-27 11:38:50.588609 | Picholine Pimplenad, MMCCCLXVI | $112,775.00 | 4
|
|
437
|
+
# 2392 | 2011-01-08 21:19:03 | 2012-03-27 10:38:35.463625 | Picholine Pimplenad, MMCCCXCII | $106,327.00 | 4
|
|
438
|
+
# 2399 | 2011-01-03 06:04:39 | 2012-03-27 10:38:35.497058 | Picholine Pimplenad, MMCCCXCIX | $77,089.00 | 2
|
|
439
|
+
#
|
|
440
|
+
# Partition employees_partitions.p20110110 - partition where
|
|
441
|
+
# created_at >= '2011-01-10 00:00:00' AND created_at < '2011-01-17 00:00:00':
|
|
442
|
+
#
|
|
443
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
444
|
+
#------+---------------------+----------------------------+---------------------------------+-------------+------------
|
|
445
|
+
# 30 | 2011-01-15 11:53:36 | | Winston J. Sillypants, XXX | $130,203.00 | 4
|
|
446
|
+
# 34 | 2011-01-16 20:01:25 | 2012-03-27 10:38:37.428899 | Winston J. Sillypants, XXXIV | $69,225.00 | 4
|
|
447
|
+
# 109 | 2011-01-12 08:17:06 | | Winston J. Sillypants, CIX | $127,294.00 | 4
|
|
448
|
+
# ...
|
|
449
|
+
# 2325 | 2011-01-13 04:17:58 | 2012-03-27 11:38:50.661251 | Picholine Pimplenad, MMCCCXXV | $98,912.00 | 2
|
|
450
|
+
# 2362 | 2011-01-14 06:48:52 | 2012-03-27 10:38:35.316907 | Picholine Pimplenad, MMCCCLXII | $116,023.00 | 2
|
|
451
|
+
# 2403 | 2011-01-12 00:28:05 | 2012-03-27 10:38:38.022877 | Picholine Pimplenad, MMCDIII | $106,252.00 | 3
|
|
452
|
+
#
|
|
453
|
+
# ...
|
|
454
|
+
#
|
|
455
|
+
# Partition employees_partitions.p20111212 - partition where
|
|
456
|
+
# created_at >= '2011-12-12 00:00:00' AND created_at < '2011-12-19 00:00:00':
|
|
457
|
+
#
|
|
458
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
459
|
+
#------+---------------------+----------------------------+-----------------------------------+-------------+------------
|
|
460
|
+
# 85 | 2011-12-15 00:35:46 | | Winston J. Sillypants, LXXXV | $110,469.00 | 2
|
|
461
|
+
# 137 | 2011-12-12 10:58:14 | | Winston J. Sillypants, CXXXVII | $96,201.00 | 1
|
|
462
|
+
# 222 | 2011-12-14 07:13:52 | 2012-03-27 11:38:50.556991 | Winston J. Sillypants, CCXXII | $127,907.00 | 4
|
|
463
|
+
# ...
|
|
464
|
+
# 2351 | 2011-12-17 17:04:37 | 2012-03-27 10:38:35.26375 | Picholine Pimplenad, MMCCCLI | $82,418.00 | 3
|
|
465
|
+
# 2383 | 2011-12-12 22:01:11 | 2012-03-27 10:38:35.420221 | Picholine Pimplenad, MMCCCLXXXIII | $62,355.00 | 2
|
|
466
|
+
# 2391 | 2011-12-18 02:42:22 | 2012-03-27 10:38:35.458827 | Picholine Pimplenad, MMCCCXCI | $116,403.00 | 4
|
|
467
|
+
#
|
|
468
|
+
# Partition employees_partitions.p20111219 - partition where
|
|
469
|
+
# created_at >= '2011-12-19 00:00:00' AND created_at < '2011-12-26 00:00:00':
|
|
470
|
+
#
|
|
471
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
472
|
+
#------+---------------------+----------------------------+----------------------------------+-------------+------------
|
|
473
|
+
# 7 | 2011-12-20 04:40:07 | 2012-03-27 11:38:50.492916 | Winston J. Sillypants, VII | $89,608.00 | 4
|
|
474
|
+
# 84 | 2011-12-25 14:45:16 | | Winston J. Sillypants, LXXXIV | $122,661.00 | 2
|
|
475
|
+
# 120 | 2011-12-19 21:18:09 | | Winston J. Sillypants, CXX | $116,477.00 | 3
|
|
476
|
+
# ...
|
|
477
|
+
# 2256 | 2011-12-22 22:28:13 | 2012-03-27 10:38:34.755228 | Picholine Pimplenad, MMCCLVI | $106,724.00 | 1
|
|
478
|
+
# 2384 | 2011-12-23 13:27:09 | 2012-03-27 10:38:35.425007 | Picholine Pimplenad, MMCCCLXXXIV | $107,816.00 | 2
|
|
479
|
+
# 2434 | 2011-12-24 05:43:52 | 2012-03-27 10:38:35.65791 | Picholine Pimplenad, MMCDXXXIV | $69,897.00 | 1
|
|
480
|
+
#
|
|
481
|
+
# Partition employees_partitions.p20111226 - partition where
|
|
482
|
+
# created_at >= '2011-12-26 00:00:00' AND created_at < '2012-01-02 00:00:00':
|
|
483
|
+
#
|
|
484
|
+
# id | created_at | updated_at | name | salary | company_id
|
|
485
|
+
#------+---------------------+----------------------------+-------------------------------+-------------+------------
|
|
486
|
+
# 4 | 2011-12-28 09:59:33 | | Winston J. Sillypants, IV | $75,740.00 | 3
|
|
487
|
+
# 33 | 2011-12-26 00:15:53 | | Winston J. Sillypants, XXXIII | $72,866.00 | 4
|
|
488
|
+
# 134 | 2011-12-30 22:29:57 | | Winston J. Sillypants, CXXXIV | $101,256.00 | 2
|
|
489
|
+
# ...
|
|
490
|
+
# 2417 | 2011-12-26 14:49:13 | 2012-03-27 10:38:35.584125 | Picholine Pimplenad, MMCDXVII | $111,609.00 | 1
|
|
491
|
+
# 2420 | 2011-12-30 22:15:29 | 2012-03-27 10:38:35.596825 | Picholine Pimplenad, MMCDXX | $105,180.00 | 2
|
|
492
|
+
# 2500 | 2011-12-26 04:03:57 | 2012-03-27 10:38:36.039419 | Picholine Pimplenad, MMD | $102,855.00 | 1
|
|
493
|
+
#
|
|
494
|
+
# Partition awards_partitions.p20101227 - partition where
|
|
495
|
+
# employee_created_at >= '2010-12-27 00:00:00' AND employee_created_at < '2011-01-03 00:00:00':
|
|
496
|
+
#
|
|
497
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
498
|
+
#------+----------------------------+---------------------+------------+-------------+----------------------------
|
|
499
|
+
# 33 | 2012-03-27 10:38:39.728924 | 2011-01-02 05:58:21 | 2011-09-19 | 1811 | You're the best XXXIII
|
|
500
|
+
# 259 | 2012-03-27 10:38:39.728924 | 2011-01-02 10:54:32 | 2011-03-23 | 873 | You're the best CCLIX
|
|
501
|
+
# 261 | 2012-03-27 10:38:39.728924 | 2011-01-02 10:54:32 | 2011-12-10 | 873 | You're the best CCLXI
|
|
502
|
+
# ...
|
|
503
|
+
# 2269 | 2012-03-27 10:38:44.743054 | 2011-01-02 05:58:21 | 2012-03-27 | 1811 | You're the greatest CDXV
|
|
504
|
+
# 2408 | 2012-03-27 10:38:45.458391 | 2011-01-01 06:32:16 | 2011-06-25 | 641 | You're the best MMCDVIII
|
|
505
|
+
# 2484 | 2012-03-27 10:38:45.887678 | 2011-01-02 05:58:21 | 2011-08-22 | 1811 | You're the best MMCDLXXXIV
|
|
506
|
+
#
|
|
507
|
+
# Partition awards_partitions.p20110103 - partition where
|
|
508
|
+
# employee_created_at >= '2011-01-03 00:00:00' AND employee_created_at < '2011-01-10 00:00:00':
|
|
509
|
+
#
|
|
510
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
511
|
+
#------+----------------------------+---------------------+------------+-------------+------------------------------
|
|
512
|
+
# 61 | 2012-03-27 10:38:39.728924 | 2011-01-07 19:18:54 | 2012-03-27 | 2366 | You're the greatest CCCXLIII
|
|
513
|
+
# 134 | 2012-03-27 10:38:39.728924 | 2011-01-07 19:33:11 | 2011-05-17 | 810 | You're the best CXXXIV
|
|
514
|
+
# 193 | 2012-03-27 10:38:39.728924 | 2011-01-04 06:58:09 | 2011-05-27 | 836 | You're the best CXCIII
|
|
515
|
+
# ...
|
|
516
|
+
# 2218 | 2012-03-27 10:38:44.49816 | 2011-01-06 21:05:51 | 2011-07-16 | 2190 | You're the best MMCCXVIII
|
|
517
|
+
# 2245 | 2012-03-27 10:38:44.630179 | 2011-01-08 11:44:32 | 2011-04-17 | 841 | You're the best MMCCXLV
|
|
518
|
+
# 2499 | 2012-03-27 10:38:45.959831 | 2011-01-07 02:25:00 | 2011-09-07 | 1717 | You're the best MMCDXCIX
|
|
519
|
+
#
|
|
520
|
+
# Partition employees_partitions.p20110110 - partition where
|
|
521
|
+
# employee_created_at >= '2011-01-10 00:00:00' AND employee_created_at < '2011-01-17 00:00:00':
|
|
522
|
+
#
|
|
523
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
524
|
+
#------+----------------------------+---------------------+------------+-------------+---------------------------
|
|
525
|
+
# 36 | 2012-03-27 10:38:39.728924 | 2011-01-12 03:12:37 | 2011-06-23 | 1196 | You're the best XXXVI
|
|
526
|
+
# 44 | 2012-03-27 10:38:39.728924 | 2011-01-15 20:43:01 | 2011-10-09 | 1159 | You're the best XLIV
|
|
527
|
+
# 93 | 2012-03-27 10:38:39.728924 | 2011-01-16 14:45:36 | 2011-10-02 | 912 | You're the best XCIII
|
|
528
|
+
# ...
|
|
529
|
+
# 2476 | 2012-03-27 10:38:45.848691 | 2011-01-10 23:23:24 | 2011-11-05 | 1314 | You're the best MMCDLXXVI
|
|
530
|
+
# 2481 | 2012-03-27 10:38:45.873229 | 2011-01-11 05:12:47 | 2011-08-10 | 2240 | You're the best MMCDLXXXI
|
|
531
|
+
# 2491 | 2012-03-27 10:38:45.921378 | 2011-01-12 04:18:22 | 2011-08-13 | 1595 | You're the best MMCDXCI
|
|
532
|
+
#
|
|
533
|
+
# ...
|
|
534
|
+
#
|
|
535
|
+
# Partition awards_partitions.p20111212 - partition where
|
|
536
|
+
# employee_created_at >= '2011-12-12 00:00:00' AND employee_created_at < '2011-12-19 00:00:00':
|
|
537
|
+
#
|
|
538
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
539
|
+
#------+----------------------------+---------------------+------------+-------------+--------------------------------
|
|
540
|
+
# 76 | 2012-03-27 10:38:39.728924 | 2011-12-17 11:12:41 | 2012-03-27 | 1548 | You're the greatest DXXIII
|
|
541
|
+
# 159 | 2012-03-27 10:38:39.728924 | 2011-12-17 17:04:37 | 2012-03-27 | 2351 | You're the greatest DCCCLXXXII
|
|
542
|
+
# 181 | 2012-03-27 10:38:39.728924 | 2011-12-18 14:25:29 | 2012-04-20 | 2031 | You're the best CLXXXI
|
|
543
|
+
# ...
|
|
544
|
+
# 2197 | 2012-03-27 10:38:44.39818 | 2011-12-13 00:14:00 | 2012-06-11 | 555 | You're the best MMCXCVII
|
|
545
|
+
# 2216 | 2012-03-27 10:38:44.488553 | 2011-12-13 17:08:24 | 2011-12-26 | 596 | You're the best MMCCXVI
|
|
546
|
+
# 2217 | 2012-03-27 10:38:44.493389 | 2011-12-16 18:12:58 | 2012-12-14 | 1860 | You're the best MMCCXVII
|
|
547
|
+
#
|
|
548
|
+
# Partition awards_partitions.p20111219 - partition where
|
|
549
|
+
# employee_created_at >= '2011-12-19 00:00:00' AND employee_created_at < '2011-12-26 00:00:00':
|
|
550
|
+
#
|
|
551
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
552
|
+
#------+----------------------------+---------------------+------------+-------------+-----------------------------
|
|
553
|
+
# 16 | 2012-03-27 10:38:39.728924 | 2011-12-23 17:53:33 | 2012-05-06 | 1534 | You're the best XVI
|
|
554
|
+
# 132 | 2012-03-27 10:38:39.728924 | 2011-12-19 21:58:52 | 2012-08-28 | 979 | You're the best CXXXII
|
|
555
|
+
# 149 | 2012-03-27 10:38:39.728924 | 2011-12-24 06:28:33 | 2012-04-06 | 507 | You're the best CXLIX
|
|
556
|
+
# ...
|
|
557
|
+
# 2451 | 2012-03-27 10:38:45.726195 | 2011-12-23 22:40:28 | 2012-11-05 | 914 | You're the best MMCDLI
|
|
558
|
+
# 2483 | 2012-03-27 10:38:45.882936 | 2011-12-20 13:54:57 | 2012-05-09 | 1615 | You're the best MMCDLXXXIII
|
|
559
|
+
# 2485 | 2012-03-27 10:38:45.892318 | 2011-12-25 06:54:49 | 2012-03-27 | 2017 | You're the greatest CLIII
|
|
560
|
+
#
|
|
561
|
+
# Partition awards_partitions.p20111226 - partition where
|
|
562
|
+
# employee_created_at >= '2011-12-26 00:00:00' AND employee_created_at < '2012-01-02 00:00:00':
|
|
563
|
+
#
|
|
564
|
+
# id | created_at | employee_created_at | awarded_on | employee_id | award_title
|
|
565
|
+
#------+----------------------------+---------------------+------------+-------------+-----------------------------
|
|
566
|
+
# 15 | 2012-03-27 10:38:39.728924 | 2011-12-27 22:35:27 | 2012-03-27 | 1496 | You're the greatest CXXIII
|
|
567
|
+
# 62 | 2012-03-27 10:38:39.728924 | 2011-12-27 18:36:46 | 2012-03-27 | 1663 | You're the greatest CLXXXII
|
|
568
|
+
# 64 | 2012-03-27 10:38:39.728924 | 2011-12-26 14:49:13 | 2012-04-02 | 2417 | You're the best LXIV
|
|
569
|
+
# ...
|
|
570
|
+
# 2211 | 2012-03-27 10:38:44.464965 | 2011-12-27 10:11:18 | 2012-03-27 | 2388 | You're the greatest XXX
|
|
571
|
+
# 2291 | 2012-03-27 10:38:44.908378 | 2011-12-26 08:07:37 | 2012-03-27 | 242 | You're the greatest LXXXVI
|
|
572
|
+
# 2497 | 2012-03-27 10:38:45.949948 | 2011-12-27 16:51:56 | 2012-11-10 | 1902 | You're the best MMCDXCVII
|
|
573
|
+
#
|
|
574
|
+
|
|
575
|
+
require File.expand_path(File.dirname(__FILE__) + "/lib/command_line_tool_mixin")
|
|
576
|
+
require File.expand_path(File.dirname(__FILE__) + "/lib/get_options")
|
|
577
|
+
|
|
578
|
+
include CommandLineToolMixin
|
|
579
|
+
|
|
580
|
+
$cleanup = false
|
|
581
|
+
$force = false
|
|
582
|
+
$create_many = 1500
|
|
583
|
+
$create_individual = 500
|
|
584
|
+
$new_individual = 500
|
|
585
|
+
$update_many = 500
|
|
586
|
+
$update_individual = 500
|
|
587
|
+
|
|
588
|
+
@options = {
|
|
589
|
+
"--cleanup" => {
|
|
590
|
+
:short => "-C",
|
|
591
|
+
:argument => GetoptLong::NO_ARGUMENT,
|
|
592
|
+
:note => "cleanup data in database and exit"
|
|
593
|
+
},
|
|
594
|
+
"--force" => {
|
|
595
|
+
:short => "-F",
|
|
596
|
+
:argument => GetoptLong::NO_ARGUMENT,
|
|
597
|
+
:note => "cleanup data in database before creating new data"
|
|
598
|
+
},
|
|
599
|
+
"--create-many" => {
|
|
600
|
+
:short => "-m",
|
|
601
|
+
:argument => GetoptLong::REQUIRED_ARGUMENT,
|
|
602
|
+
:note => "how many objects to create via create_many",
|
|
603
|
+
:argument_note => "NUMBER"
|
|
604
|
+
},
|
|
605
|
+
"--create-individual" => {
|
|
606
|
+
:short => "-i",
|
|
607
|
+
:argument => GetoptLong::REQUIRED_ARGUMENT,
|
|
608
|
+
:note => "how many objects to create via create",
|
|
609
|
+
:argument_note => "NUMBER"
|
|
610
|
+
},
|
|
611
|
+
"--new-individual" => {
|
|
612
|
+
:short => "-I",
|
|
613
|
+
:argument => GetoptLong::REQUIRED_ARGUMENT,
|
|
614
|
+
:note => "how many objects to create via new/save",
|
|
615
|
+
:argument_note => "NUMBER"
|
|
616
|
+
},
|
|
617
|
+
"--update-individual" => {
|
|
618
|
+
:short => "-u",
|
|
619
|
+
:argument => GetoptLong::REQUIRED_ARGUMENT,
|
|
620
|
+
:note => "how many objects to update indivudually",
|
|
621
|
+
:argument_note => "NUMBER"
|
|
622
|
+
},
|
|
623
|
+
"--update-many" => {
|
|
624
|
+
:short => "-U",
|
|
625
|
+
:argument => GetoptLong::REQUIRED_ARGUMENT,
|
|
626
|
+
:note => "how many objects to update via update_many",
|
|
627
|
+
:argument_note => "NUMBER"
|
|
628
|
+
},
|
|
629
|
+
}
|
|
630
|
+
|
|
631
|
+
command_line_options(@options) do |option,argument|
|
|
632
|
+
if option == '--cleanup'
|
|
633
|
+
$cleanup = true
|
|
634
|
+
elsif option == '--force'
|
|
635
|
+
$force = true
|
|
636
|
+
elsif option == '--create-many'
|
|
637
|
+
$create_many = argument.to_i
|
|
638
|
+
elsif option == '--create-individual'
|
|
639
|
+
$create_individual = argument.to_i
|
|
640
|
+
elsif option == '--new-individual'
|
|
641
|
+
$new_individual = argument.to_i
|
|
642
|
+
elsif option == '--update-individual'
|
|
643
|
+
$update_individual = argument.to_i
|
|
644
|
+
elsif option == '--update-many'
|
|
645
|
+
$update_many = argument.to_i
|
|
646
|
+
end
|
|
647
|
+
end
|
|
648
|
+
|
|
649
|
+
if $cleanup || $force
|
|
650
|
+
ActiveRecord::Base.connection.drop_schema("awards_partitions", :cascade => true) rescue nil
|
|
651
|
+
ActiveRecord::Base.connection.drop_table("awards") rescue nil
|
|
652
|
+
ActiveRecord::Base.connection.drop_schema("employees_partitions", :cascade => true) rescue nil
|
|
653
|
+
ActiveRecord::Base.connection.drop_table("employees") rescue nil
|
|
654
|
+
ActiveRecord::Base.connection.drop_table("companies") rescue nil
|
|
655
|
+
exit(0) if $cleanup
|
|
656
|
+
end
|
|
657
|
+
|
|
658
|
+
$total_records = ($create_many + $create_individual + $new_individual) * 2
|
|
659
|
+
|
|
660
|
+
puts "total records: #{$total_records}"
|
|
661
|
+
|
|
662
|
+
START_DATE = Date.parse('2011-01-01')
|
|
663
|
+
END_DATE = Date.parse('2011-12-31')
|
|
664
|
+
|
|
665
|
+
# the ActiveRecord classes
|
|
666
|
+
|
|
667
|
+
require File.expand_path(File.dirname(__FILE__) + "/lib/company")
|
|
668
|
+
|
|
669
|
+
class Employee < Partitioned::ByCreatedAt
|
|
670
|
+
belongs_to :company, :class_name => 'Company'
|
|
671
|
+
attr_accessible :created_at, :salary, :name, :company_id
|
|
672
|
+
|
|
673
|
+
partitioned do |partition|
|
|
674
|
+
partition.index :id, :unique => true
|
|
675
|
+
partition.foreign_key :company_id
|
|
676
|
+
end
|
|
677
|
+
|
|
678
|
+
connection.execute <<-SQL
|
|
679
|
+
create table employees
|
|
680
|
+
(
|
|
681
|
+
id serial not null primary key,
|
|
682
|
+
created_at timestamp not null default now(),
|
|
683
|
+
updated_at timestamp,
|
|
684
|
+
name text not null,
|
|
685
|
+
salary money not null,
|
|
686
|
+
company_id integer not null
|
|
687
|
+
);
|
|
688
|
+
SQL
|
|
689
|
+
end
|
|
690
|
+
|
|
691
|
+
class ByEmployeeCreatedAt < Partitioned::ByWeeklyTimeField
|
|
692
|
+
self.abstract_class = true
|
|
693
|
+
|
|
694
|
+
def self.partition_time_field
|
|
695
|
+
return :employee_created_at
|
|
696
|
+
end
|
|
697
|
+
end
|
|
698
|
+
|
|
699
|
+
class Award < ByEmployeeCreatedAt
|
|
700
|
+
belongs_to :employee, :class_name => 'Employee'
|
|
701
|
+
attr_accessible :award_title, :employee_created_at, :employee_id, :awarded_on
|
|
702
|
+
|
|
703
|
+
partitioned do |partition|
|
|
704
|
+
partition.foreign_key lambda {|model, *partition_key_values|
|
|
705
|
+
return Configurator::Data::ForeignKey.new(:employee_id, Employee.partition_name(*partition_key_values), :id)
|
|
706
|
+
}
|
|
707
|
+
end
|
|
708
|
+
|
|
709
|
+
connection.execute <<-SQL
|
|
710
|
+
create table awards
|
|
711
|
+
(
|
|
712
|
+
id serial not null primary key,
|
|
713
|
+
created_at timestamp not null default now(),
|
|
714
|
+
employee_created_at timestamp not null,
|
|
715
|
+
awarded_on date not null,
|
|
716
|
+
employee_id integer not null,
|
|
717
|
+
award_title text not null
|
|
718
|
+
);
|
|
719
|
+
SQL
|
|
720
|
+
end
|
|
721
|
+
|
|
722
|
+
# You should have the following tables:
|
|
723
|
+
# public.companies
|
|
724
|
+
# public.employees
|
|
725
|
+
|
|
726
|
+
# create the infrastructure for EMPLOYEES table which includes the schema and partition tables
|
|
727
|
+
|
|
728
|
+
Employee.create_infrastructure
|
|
729
|
+
|
|
730
|
+
# create the infrastructure for Awards table which includes the schema and partition tables
|
|
731
|
+
|
|
732
|
+
Award.create_infrastructure
|
|
733
|
+
|
|
734
|
+
# You should have the following schema:
|
|
735
|
+
# employees_partitions
|
|
736
|
+
# awards_partitions
|
|
737
|
+
|
|
738
|
+
dates = Employee.partition_generate_range(START_DATE, END_DATE)
|
|
739
|
+
|
|
740
|
+
Employee.create_new_partition_tables(dates)
|
|
741
|
+
|
|
742
|
+
# You should have the following tables with increments of one week:
|
|
743
|
+
# employees_partitions.p20101227
|
|
744
|
+
# employees_partitions.p20110103
|
|
745
|
+
# employees_partitions.p20110110
|
|
746
|
+
# employees_partitions.p20110117
|
|
747
|
+
# employees_partitions.p20110124
|
|
748
|
+
# employees_partitions.p20110131
|
|
749
|
+
# employees_partitions.p20110207
|
|
750
|
+
# employees_partitions.p20110214
|
|
751
|
+
# employees_partitions.p20110221
|
|
752
|
+
# employees_partitions.p20110228
|
|
753
|
+
# employees_partitions.p20110307
|
|
754
|
+
# employees_partitions.p20110314
|
|
755
|
+
# employees_partitions.p20110321
|
|
756
|
+
# employees_partitions.p20110328
|
|
757
|
+
# employees_partitions.p20110404
|
|
758
|
+
# employees_partitions.p20110411
|
|
759
|
+
# employees_partitions.p20110418
|
|
760
|
+
# employees_partitions.p20110425
|
|
761
|
+
# employees_partitions.p20110502
|
|
762
|
+
# employees_partitions.p20110509
|
|
763
|
+
# employees_partitions.p20110516
|
|
764
|
+
# employees_partitions.p20110523
|
|
765
|
+
# employees_partitions.p20110530
|
|
766
|
+
# employees_partitions.p20110606
|
|
767
|
+
# employees_partitions.p20110613
|
|
768
|
+
# employees_partitions.p20110620
|
|
769
|
+
# employees_partitions.p20110627
|
|
770
|
+
# employees_partitions.p20110704
|
|
771
|
+
# employees_partitions.p20110711
|
|
772
|
+
# employees_partitions.p20110718
|
|
773
|
+
# employees_partitions.p20110725
|
|
774
|
+
# employees_partitions.p20110801
|
|
775
|
+
# employees_partitions.p20110808
|
|
776
|
+
# employees_partitions.p20110815
|
|
777
|
+
# employees_partitions.p20110822
|
|
778
|
+
# employees_partitions.p20110829
|
|
779
|
+
# employees_partitions.p20110905
|
|
780
|
+
# employees_partitions.p20110912
|
|
781
|
+
# employees_partitions.p20110919
|
|
782
|
+
# employees_partitions.p20110926
|
|
783
|
+
# employees_partitions.p20111003
|
|
784
|
+
# employees_partitions.p20111010
|
|
785
|
+
# employees_partitions.p20111017
|
|
786
|
+
# employees_partitions.p20111024
|
|
787
|
+
# employees_partitions.p20111031
|
|
788
|
+
# employees_partitions.p20111107
|
|
789
|
+
# employees_partitions.p20111114
|
|
790
|
+
# employees_partitions.p20111121
|
|
791
|
+
# employees_partitions.p20111128
|
|
792
|
+
# employees_partitions.p20111205
|
|
793
|
+
# employees_partitions.p20111212
|
|
794
|
+
# employees_partitions.p20111219
|
|
795
|
+
# employees_partitions.p20111226
|
|
796
|
+
|
|
797
|
+
Award.create_new_partition_tables(dates)
|
|
798
|
+
|
|
799
|
+
# You should have the following tables with increments of one week:
|
|
800
|
+
# awards_partitions.p20101227
|
|
801
|
+
# awards_partitions.p20110103
|
|
802
|
+
# awards_partitions.p20110110
|
|
803
|
+
# awards_partitions.p20110117
|
|
804
|
+
# awards_partitions.p20110124
|
|
805
|
+
# awards_partitions.p20110131
|
|
806
|
+
# awards_partitions.p20110207
|
|
807
|
+
# awards_partitions.p20110214
|
|
808
|
+
# awards_partitions.p20110221
|
|
809
|
+
# awards_partitions.p20110228
|
|
810
|
+
# awards_partitions.p20110307
|
|
811
|
+
# awards_partitions.p20110314
|
|
812
|
+
# awards_partitions.p20110321
|
|
813
|
+
# awards_partitions.p20110328
|
|
814
|
+
# awards_partitions.p20110404
|
|
815
|
+
# awards_partitions.p20110411
|
|
816
|
+
# awards_partitions.p20110418
|
|
817
|
+
# awards_partitions.p20110425
|
|
818
|
+
# awards_partitions.p20110502
|
|
819
|
+
# awards_partitions.p20110509
|
|
820
|
+
# awards_partitions.p20110516
|
|
821
|
+
# awards_partitions.p20110523
|
|
822
|
+
# awards_partitions.p20110530
|
|
823
|
+
# awards_partitions.p20110606
|
|
824
|
+
# awards_partitions.p20110613
|
|
825
|
+
# awards_partitions.p20110620
|
|
826
|
+
# awards_partitions.p20110627
|
|
827
|
+
# awards_partitions.p20110704
|
|
828
|
+
# awards_partitions.p20110711
|
|
829
|
+
# awards_partitions.p20110718
|
|
830
|
+
# awards_partitions.p20110725
|
|
831
|
+
# awards_partitions.p20110801
|
|
832
|
+
# awards_partitions.p20110808
|
|
833
|
+
# awards_partitions.p20110815
|
|
834
|
+
# awards_partitions.p20110822
|
|
835
|
+
# awards_partitions.p20110829
|
|
836
|
+
# awards_partitions.p20110905
|
|
837
|
+
# awards_partitions.p20110912
|
|
838
|
+
# awards_partitions.p20110919
|
|
839
|
+
# awards_partitions.p20110926
|
|
840
|
+
# awards_partitions.p20111003
|
|
841
|
+
# awards_partitions.p20111010
|
|
842
|
+
# awards_partitions.p20111017
|
|
843
|
+
# awards_partitions.p20111024
|
|
844
|
+
# awards_partitions.p20111031
|
|
845
|
+
# awards_partitions.p20111107
|
|
846
|
+
# awards_partitions.p20111114
|
|
847
|
+
# awards_partitions.p20111121
|
|
848
|
+
# awards_partitions.p20111128
|
|
849
|
+
# awards_partitions.p20111205
|
|
850
|
+
# awards_partitions.p20111212
|
|
851
|
+
# awards_partitions.p20111219
|
|
852
|
+
# awards_partitions.p20111226
|
|
853
|
+
|
|
854
|
+
# add some companies
|
|
855
|
+
|
|
856
|
+
Company.create_many(COMPANIES)
|
|
857
|
+
company_ids = Company.all.map(&:id)
|
|
858
|
+
|
|
859
|
+
# now add some employees across the year.
|
|
860
|
+
|
|
861
|
+
employees = []
|
|
862
|
+
|
|
863
|
+
require File.expand_path(File.dirname(__FILE__) + "/lib/roman")
|
|
864
|
+
|
|
865
|
+
# generates data for employees_partitions and employees tables
|
|
866
|
+
|
|
867
|
+
base = 0
|
|
868
|
+
(1..$create_many).each do |i|
|
|
869
|
+
employees << {
|
|
870
|
+
:name => "Winston J. Sillypants, #{to_roman(base+i)}",
|
|
871
|
+
:created_at => START_DATE + rand(END_DATE - START_DATE) + rand(1.day.seconds).seconds,
|
|
872
|
+
:salary => rand(80000) + 60000,
|
|
873
|
+
:company_id => company_ids[rand company_ids.length]
|
|
874
|
+
}
|
|
875
|
+
end
|
|
876
|
+
|
|
877
|
+
puts "creating many employees #{$create_many}"
|
|
878
|
+
Employee.create_many(employees)
|
|
879
|
+
base += $create_many
|
|
880
|
+
|
|
881
|
+
puts "creating individual employees #{$create_individual}"
|
|
882
|
+
(1..$create_individual).each do |i|
|
|
883
|
+
employee_data = {
|
|
884
|
+
:name => "Jonathan Crabapple, #{to_roman(base+i)}",
|
|
885
|
+
:created_at => START_DATE + rand(END_DATE - START_DATE) + rand(1.day.seconds).seconds,
|
|
886
|
+
:salary => rand(80000) + 60000,
|
|
887
|
+
:company_id => company_ids[rand company_ids.length]
|
|
888
|
+
}
|
|
889
|
+
employees << Employee.create(employee_data)
|
|
890
|
+
end
|
|
891
|
+
base += $create_individual
|
|
892
|
+
|
|
893
|
+
puts "new individual employees #{$new_individual}"
|
|
894
|
+
(1..$new_individual).each do |i|
|
|
895
|
+
employee_data = {
|
|
896
|
+
:name => "Picholine Pimplenad, #{to_roman(base+i)}",
|
|
897
|
+
:created_at => START_DATE + rand(END_DATE - START_DATE) + rand(1.day.seconds).seconds,
|
|
898
|
+
:salary => rand(80000) + 60000,
|
|
899
|
+
:company_id => company_ids[rand company_ids.length]
|
|
900
|
+
}
|
|
901
|
+
employee = Employee.new(employee_data)
|
|
902
|
+
employee.save
|
|
903
|
+
employees << employee
|
|
904
|
+
end
|
|
905
|
+
base += $new_individual
|
|
906
|
+
|
|
907
|
+
updates = {}
|
|
908
|
+
puts "update many employees #{$update_many}"
|
|
909
|
+
(1..$update_many).each do |i|
|
|
910
|
+
index = rand(employees.length)
|
|
911
|
+
employee_record = employees[index]
|
|
912
|
+
updates[{
|
|
913
|
+
:id => employee_record[:id],
|
|
914
|
+
:created_at => employee_record[:created_at]
|
|
915
|
+
}] = {
|
|
916
|
+
:salary => 100
|
|
917
|
+
}
|
|
918
|
+
end
|
|
919
|
+
|
|
920
|
+
Employee.update_many(updates, {:set_array => '"salary = #{table_name}.salary + datatable.salary, updated_at = now()"'})
|
|
921
|
+
|
|
922
|
+
puts "update individual employees #{$update_individual}"
|
|
923
|
+
(1..$update_individual).each do |i|
|
|
924
|
+
index = rand(employees.length)
|
|
925
|
+
employee_record = employees[index]
|
|
926
|
+
employee = Employee.from_partition(employee_record[:created_at]).find(employee_record[:id])
|
|
927
|
+
employee.salary += 1000
|
|
928
|
+
employee.save
|
|
929
|
+
end
|
|
930
|
+
|
|
931
|
+
# generates data for awards_partitions and awards tables
|
|
932
|
+
|
|
933
|
+
awards = []
|
|
934
|
+
|
|
935
|
+
base = 0
|
|
936
|
+
(1..$create_many).each do |i|
|
|
937
|
+
employee_record = employees[rand(employees.length)]
|
|
938
|
+
awards << {
|
|
939
|
+
:award_title => "You're the best #{to_roman(base+i)}",
|
|
940
|
+
:awarded_on => employee_record[:created_at] + rand(1.year.seconds).seconds,
|
|
941
|
+
:employee_created_at => employee_record[:created_at],
|
|
942
|
+
:employee_id => employee_record[:id]
|
|
943
|
+
}
|
|
944
|
+
end
|
|
945
|
+
|
|
946
|
+
puts "creating many awards #{$create_many}"
|
|
947
|
+
Award.create_many(awards)
|
|
948
|
+
base += $create_many
|
|
949
|
+
|
|
950
|
+
puts "creating individual awards #{$create_individual}"
|
|
951
|
+
(1..$create_individual).each do |i|
|
|
952
|
+
employee_record = employees[rand(employees.length)]
|
|
953
|
+
award_data = {
|
|
954
|
+
:award_title => "You're the best #{to_roman(base+i)}",
|
|
955
|
+
:awarded_on => employee_record[:created_at] + rand(1.year.seconds).seconds,
|
|
956
|
+
:employee_created_at => employee_record[:created_at],
|
|
957
|
+
:employee_id => employee_record[:id]
|
|
958
|
+
}
|
|
959
|
+
awards << Award.create(award_data)
|
|
960
|
+
end
|
|
961
|
+
base += $create_individual
|
|
962
|
+
|
|
963
|
+
puts "new individual awards #{$new_individual}"
|
|
964
|
+
(1..$new_individual).each do |i|
|
|
965
|
+
employee_record = employees[rand(employees.length)]
|
|
966
|
+
award_data = {
|
|
967
|
+
:award_title => "You're the best #{to_roman(base+i)}",
|
|
968
|
+
:awarded_on => employee_record[:created_at] + rand(1.year.seconds).seconds,
|
|
969
|
+
:employee_created_at => employee_record[:created_at],
|
|
970
|
+
:employee_id => employee_record[:id]
|
|
971
|
+
}
|
|
972
|
+
award = Award.new(award_data)
|
|
973
|
+
award.save
|
|
974
|
+
awards << award
|
|
975
|
+
end
|
|
976
|
+
|
|
977
|
+
base = 0
|
|
978
|
+
updates = {}
|
|
979
|
+
puts "update many awards #{$update_many}"
|
|
980
|
+
(1..$update_many).each do |i|
|
|
981
|
+
award_record = awards[rand(awards.length)]
|
|
982
|
+
updates[{
|
|
983
|
+
:id => award_record[:id],
|
|
984
|
+
:employee_created_at => award_record[:employee_created_at]
|
|
985
|
+
}] = {
|
|
986
|
+
:award_title => "You're the greatest #{to_roman(base+i)}"
|
|
987
|
+
}
|
|
988
|
+
end
|
|
989
|
+
|
|
990
|
+
Award.update_many(updates, {:set_array => '"award_title = datatable.award_title, awarded_on = now()"'})
|
|
991
|
+
base += $update_many
|
|
992
|
+
|
|
993
|
+
puts "update individual #{$update_individual}"
|
|
994
|
+
(1..$update_individual).each do |i|
|
|
995
|
+
award_record = awards[rand(awards.length)]
|
|
996
|
+
award = Award.from_partition(award_record[:employee_created_at]).find(award_record[:id])
|
|
997
|
+
award.awarded_on = Date.parse(Time.now.to_s)
|
|
998
|
+
award.award_title = "You're the greatest #{to_roman(base+i)}"
|
|
999
|
+
award.save
|
|
1000
|
+
end
|