data_fabric 1.3.2 → 1.3.3
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/CHANGELOG +7 -0
- data/example30/db/development.sqlite3 +0 -0
- data/example30/db/s0_development.sqlite3 +0 -0
- data/example30/db/s0_test.sqlite3 +0 -0
- data/example30/db/s1_development.sqlite3 +0 -0
- data/example30/db/s1_test.sqlite3 +0 -0
- data/example30/db/schema.rb +29 -0
- data/example30/db/test.sqlite3 +0 -0
- data/example30/log/development.log +66 -0
- data/example30/log/test.log +170 -0
- data/lib/data_fabric.rb +2 -1
- data/lib/data_fabric/connection_proxy.rb +15 -21
- data/lib/data_fabric/version.rb +1 -1
- data/test/connection_test.rb +58 -36
- data/test/thread_test.rb +6 -6
- data/test/vr_austin_master.db +0 -0
- data/test/vr_austin_slave.db +0 -0
- data/test/vr_dallas_master.db +0 -0
- data/test/vr_dallas_slave.db +0 -0
- metadata +46 -44
- data/lib/data_fabric/version.rbc +0 -203
data/CHANGELOG
CHANGED
@@ -1,5 +1,12 @@
|
|
1
1
|
DataFabric changelog
|
2
2
|
|
3
|
+
v1.3.3 - 2011-10-29
|
4
|
+
|
5
|
+
- Added ConnectionProxy#respond_to? which delegates to underlying connection
|
6
|
+
(Paul Gross and Dan Manges)
|
7
|
+
- Remove specific handling of nested transactions and let the underlying
|
8
|
+
connection handle it (Paul Gross and Dan Manges)
|
9
|
+
|
3
10
|
v1.3.2 - 2011-06-02
|
4
11
|
|
5
12
|
- Fix problem fetching spec for connection pool.
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# This file is auto-generated from the current state of the database. Instead
|
2
|
+
# of editing this file, please use the migrations feature of Active Record to
|
3
|
+
# incrementally modify your database, and then regenerate this schema definition.
|
4
|
+
#
|
5
|
+
# Note that this schema.rb definition is the authoritative source for your
|
6
|
+
# database schema. If you need to create the application database on another
|
7
|
+
# system, you should be using db:schema:load, not running all the migrations
|
8
|
+
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
|
9
|
+
# you'll amass, the slower it'll run and the greater likelihood for issues).
|
10
|
+
#
|
11
|
+
# It's strongly recommended to check this file into your version control system.
|
12
|
+
|
13
|
+
ActiveRecord::Schema.define(:version => 20080702154820) do
|
14
|
+
|
15
|
+
create_table "accounts", :force => true do |t|
|
16
|
+
t.string "name"
|
17
|
+
t.string "shard"
|
18
|
+
t.datetime "created_at"
|
19
|
+
t.datetime "updated_at"
|
20
|
+
end
|
21
|
+
|
22
|
+
create_table "figments", :force => true do |t|
|
23
|
+
t.integer "account_id"
|
24
|
+
t.integer "value"
|
25
|
+
t.datetime "created_at"
|
26
|
+
t.datetime "updated_at"
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
Binary file
|
@@ -0,0 +1,66 @@
|
|
1
|
+
[1m[36mSQL (0.4ms)[0m [1m SELECT name
|
2
|
+
FROM sqlite_master
|
3
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
4
|
+
[0m
|
5
|
+
[1m[35mSQL (0.1ms)[0m select sqlite_version(*)
|
6
|
+
[1m[36mSQL (1.0ms)[0m [1mCREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) [0m
|
7
|
+
[1m[35mSQL (0.0ms)[0m PRAGMA index_list("schema_migrations")
|
8
|
+
[1m[36mSQL (0.9ms)[0m [1mCREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")[0m
|
9
|
+
[1m[35mSQL (0.1ms)[0m SELECT name
|
10
|
+
FROM sqlite_master
|
11
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
12
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
13
|
+
FROM sqlite_master
|
14
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
15
|
+
[0m
|
16
|
+
[1m[35mSQL (0.1ms)[0m SELECT "schema_migrations"."version" FROM "schema_migrations"
|
17
|
+
Migrating to CreateAccounts (20080702154628)
|
18
|
+
[1m[36mSQL (0.5ms)[0m [1mCREATE TABLE "accounts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "shard" varchar(255), "created_at" datetime, "updated_at" datetime) [0m
|
19
|
+
[1m[35mSQL (0.1ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('20080702154628')
|
20
|
+
Migrating to CreateFigments (20080702154820)
|
21
|
+
[1m[36mSQL (0.5ms)[0m [1mCREATE TABLE "figments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "account_id" integer, "value" integer, "created_at" datetime, "updated_at" datetime) [0m
|
22
|
+
[1m[35mSQL (0.1ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('20080702154820')
|
23
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
24
|
+
FROM sqlite_master
|
25
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
26
|
+
[0m
|
27
|
+
[1m[35mSQL (0.1ms)[0m SELECT "schema_migrations"."version" FROM "schema_migrations"
|
28
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
29
|
+
FROM sqlite_master
|
30
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
31
|
+
[0m
|
32
|
+
[1m[35mSQL (0.0ms)[0m PRAGMA index_list("accounts")
|
33
|
+
[1m[36mSQL (0.0ms)[0m [1mPRAGMA index_list("figments")[0m
|
34
|
+
[1m[36mSQL (0.5ms)[0m [1m SELECT name
|
35
|
+
FROM sqlite_master
|
36
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
37
|
+
[0m
|
38
|
+
[1m[35mSQL (0.1ms)[0m SELECT name
|
39
|
+
FROM sqlite_master
|
40
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
41
|
+
[1m[36mSQL (0.1ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m
|
42
|
+
[1m[35mSQL (0.2ms)[0m select sqlite_version(*)
|
43
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
44
|
+
FROM sqlite_master
|
45
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
46
|
+
[0m
|
47
|
+
[1m[35mSQL (1.9ms)[0m CREATE TABLE "accounts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "shard" varchar(255), "created_at" datetime, "updated_at" datetime)
|
48
|
+
[1m[36mSQL (0.3ms)[0m [1m SELECT name
|
49
|
+
FROM sqlite_master
|
50
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
51
|
+
[0m
|
52
|
+
[1m[35mSQL (1.4ms)[0m CREATE TABLE "figments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "account_id" integer, "value" integer, "created_at" datetime, "updated_at" datetime)
|
53
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
54
|
+
FROM sqlite_master
|
55
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
56
|
+
[0m
|
57
|
+
[1m[35mSQL (1.9ms)[0m CREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL)
|
58
|
+
[1m[36mSQL (0.0ms)[0m [1mPRAGMA index_list("schema_migrations")[0m
|
59
|
+
[1m[35mSQL (0.8ms)[0m CREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")
|
60
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
61
|
+
FROM sqlite_master
|
62
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
63
|
+
[0m
|
64
|
+
[1m[35mSQL (0.1ms)[0m SELECT version FROM "schema_migrations"
|
65
|
+
[1m[36mSQL (1.3ms)[0m [1mINSERT INTO "schema_migrations" (version) VALUES ('20080702154820')[0m
|
66
|
+
[1m[35mSQL (0.7ms)[0m INSERT INTO "schema_migrations" (version) VALUES ('20080702154628')
|
@@ -0,0 +1,170 @@
|
|
1
|
+
[1m[36mSQL (0.4ms)[0m [1m SELECT name
|
2
|
+
FROM sqlite_master
|
3
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
4
|
+
[0m
|
5
|
+
[1m[35mSQL (0.1ms)[0m select sqlite_version(*)
|
6
|
+
[1m[36mSQL (1.6ms)[0m [1mCREATE TABLE "schema_migrations" ("version" varchar(255) NOT NULL) [0m
|
7
|
+
[1m[35mSQL (0.0ms)[0m PRAGMA index_list("schema_migrations")
|
8
|
+
[1m[36mSQL (0.8ms)[0m [1mCREATE UNIQUE INDEX "unique_schema_migrations" ON "schema_migrations" ("version")[0m
|
9
|
+
[1m[35mSQL (0.1ms)[0m SELECT name
|
10
|
+
FROM sqlite_master
|
11
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
12
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
13
|
+
FROM sqlite_master
|
14
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
15
|
+
[0m
|
16
|
+
[1m[35mSQL (0.1ms)[0m SELECT "schema_migrations"."version" FROM "schema_migrations"
|
17
|
+
Migrating to CreateAccounts (20080702154628)
|
18
|
+
[1m[36mSQL (0.4ms)[0m [1mCREATE TABLE "accounts" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar(255), "shard" varchar(255), "created_at" datetime, "updated_at" datetime) [0m
|
19
|
+
[1m[35mSQL (0.1ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('20080702154628')
|
20
|
+
Migrating to CreateFigments (20080702154820)
|
21
|
+
[1m[36mSQL (0.4ms)[0m [1mCREATE TABLE "figments" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "account_id" integer, "value" integer, "created_at" datetime, "updated_at" datetime) [0m
|
22
|
+
[1m[35mSQL (0.1ms)[0m INSERT INTO "schema_migrations" ("version") VALUES ('20080702154820')
|
23
|
+
[1m[36mSQL (0.2ms)[0m [1m SELECT name
|
24
|
+
FROM sqlite_master
|
25
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
26
|
+
[0m
|
27
|
+
[1m[35mSQL (0.1ms)[0m SELECT "schema_migrations"."version" FROM "schema_migrations"
|
28
|
+
[1m[36mSQL (0.1ms)[0m [1m SELECT name
|
29
|
+
FROM sqlite_master
|
30
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
31
|
+
[0m
|
32
|
+
[1m[35mSQL (0.0ms)[0m PRAGMA index_list("accounts")
|
33
|
+
[1m[36mSQL (0.0ms)[0m [1mPRAGMA index_list("figments")[0m
|
34
|
+
Processing by AccountsController#index as HTML
|
35
|
+
[1m[36mAccount Load (0.3ms)[0m [1mSELECT "accounts".* FROM "accounts"[0m
|
36
|
+
Rendered accounts/index.html.erb within layouts/application (7.1ms)
|
37
|
+
Completed 200 OK in 40ms (Views: 11.3ms | ActiveRecord: 0.9ms)
|
38
|
+
[1m[36mSQL (1.0ms)[0m [1mdelete from figments[0m
|
39
|
+
[1m[35mSQL (1.0ms)[0m delete from figments
|
40
|
+
[1m[36mSQL (0.1ms)[0m [1mselect count(*) as c from figments[0m
|
41
|
+
[1m[35mSQL (0.1ms)[0m select count(*) as c from figments
|
42
|
+
|
43
|
+
|
44
|
+
Started GET "/accounts" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
45
|
+
Processing by AccountsController#index as HTML
|
46
|
+
[1m[36mAccount Load (0.3ms)[0m [1mSELECT "accounts".* FROM "accounts"[0m
|
47
|
+
Rendered accounts/index.html.erb within layouts/application (33.1ms)
|
48
|
+
Completed 200 OK in 64ms (Views: 35.3ms | ActiveRecord: 3.2ms)
|
49
|
+
|
50
|
+
|
51
|
+
Started POST "/accounts" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
52
|
+
Processing by AccountsController#create as HTML
|
53
|
+
Parameters: {"acct"=>{"name"=>"mike", "shard"=>"0"}}
|
54
|
+
[1m[35mSQL (0.2ms)[0m SELECT name
|
55
|
+
FROM sqlite_master
|
56
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
57
|
+
[1m[36mAREL (0.3ms)[0m [1mINSERT INTO "accounts" ("name", "shard", "created_at", "updated_at") VALUES ('mike', '0', '2011-10-30 00:25:50.668938', '2011-10-30 00:25:50.668938')[0m
|
58
|
+
Redirected to http://www.example.com/
|
59
|
+
Completed 302 Found in 9ms
|
60
|
+
|
61
|
+
|
62
|
+
Started GET "/" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
63
|
+
Processing by AccountsController#index as HTML
|
64
|
+
[1m[35mAccount Load (0.2ms)[0m SELECT "accounts".* FROM "accounts"
|
65
|
+
Rendered accounts/index.html.erb within layouts/application (1.8ms)
|
66
|
+
Completed 200 OK in 3ms (Views: 2.3ms | ActiveRecord: 0.7ms)
|
67
|
+
[1m[36mAccount Load (0.2ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."name" = 'mike') LIMIT 1[0m
|
68
|
+
|
69
|
+
|
70
|
+
Started GET "/accounts/1033447817/choose" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
71
|
+
Processing by AccountsController#choose as HTML
|
72
|
+
Parameters: {"id"=>"1033447817"}
|
73
|
+
[1m[35mAccount Load (0.1ms)[0m SELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447817) LIMIT 1
|
74
|
+
Redirected to http://www.example.com/
|
75
|
+
Completed 302 Found in 1ms
|
76
|
+
|
77
|
+
|
78
|
+
Started GET "/" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
79
|
+
Processing by AccountsController#index as HTML
|
80
|
+
[1m[36mAccount Load (0.1ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447817) LIMIT 1[0m
|
81
|
+
[1m[35mAccount Load (0.1ms)[0m SELECT "accounts".* FROM "accounts"
|
82
|
+
[1m[36mFigment Load (0.4ms)[0m [1mSELECT "figments".* FROM "figments" WHERE ("figments".account_id = 1033447817)[0m
|
83
|
+
Rendered accounts/index.html.erb within layouts/application (10.2ms)
|
84
|
+
Completed 200 OK in 12ms (Views: 10.4ms | ActiveRecord: 0.9ms)
|
85
|
+
[1m[35mSQL (0.2ms)[0m SELECT COUNT(*) FROM "figments" WHERE ("figments".account_id = 1033447817)
|
86
|
+
|
87
|
+
|
88
|
+
Started POST "/figments" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
89
|
+
Processing by FigmentsController#create as HTML
|
90
|
+
Parameters: {"figment"=>{"value"=>"14"}}
|
91
|
+
[1m[36mAccount Load (0.1ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447817) LIMIT 1[0m
|
92
|
+
[1m[35mAREL (0.4ms)[0m INSERT INTO "figments" ("account_id", "value", "created_at", "updated_at") VALUES (1033447817, 14, '2011-10-30 00:25:50.718857', '2011-10-30 00:25:50.718857')
|
93
|
+
Redirected to http://www.example.com/
|
94
|
+
Completed 302 Found in 45ms
|
95
|
+
|
96
|
+
|
97
|
+
Started GET "/" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
98
|
+
Processing by AccountsController#index as HTML
|
99
|
+
[1m[36mAccount Load (0.2ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447817) LIMIT 1[0m
|
100
|
+
[1m[35mAccount Load (0.1ms)[0m SELECT "accounts".* FROM "accounts"
|
101
|
+
[1m[36mFigment Load (0.2ms)[0m [1mSELECT "figments".* FROM "figments" WHERE ("figments".account_id = 1033447817)[0m
|
102
|
+
[1m[35mCACHE (0.0ms)[0m SELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447817) LIMIT 1
|
103
|
+
Rendered accounts/index.html.erb within layouts/application (8.1ms)
|
104
|
+
Completed 200 OK in 10ms (Views: 8.4ms | ActiveRecord: 1.2ms)
|
105
|
+
[1m[36mFigment Load (0.2ms)[0m [1mSELECT "figments".* FROM "figments" WHERE ("figments".account_id = 1033447817)[0m
|
106
|
+
[1m[35mSQL (0.1ms)[0m select count(*) as c from figments
|
107
|
+
[1m[36mSQL (0.1ms)[0m [1mselect count(*) as c from figments[0m
|
108
|
+
|
109
|
+
|
110
|
+
Started GET "/accounts" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
111
|
+
Processing by AccountsController#index as HTML
|
112
|
+
[1m[35mAccount Load (0.2ms)[0m SELECT "accounts".* FROM "accounts"
|
113
|
+
Rendered accounts/index.html.erb within layouts/application (1.8ms)
|
114
|
+
Completed 200 OK in 3ms (Views: 2.3ms | ActiveRecord: 0.6ms)
|
115
|
+
|
116
|
+
|
117
|
+
Started POST "/accounts" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
118
|
+
Processing by AccountsController#create as HTML
|
119
|
+
Parameters: {"acct"=>{"name"=>"bob", "shard"=>"1"}}
|
120
|
+
[1m[36mAREL (0.1ms)[0m [1mINSERT INTO "accounts" ("name", "shard", "created_at", "updated_at") VALUES ('bob', '1', '2011-10-30 00:25:50.780179', '2011-10-30 00:25:50.780179')[0m
|
121
|
+
Redirected to http://www.example.com/
|
122
|
+
Completed 302 Found in 1ms
|
123
|
+
|
124
|
+
|
125
|
+
Started GET "/" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
126
|
+
Processing by AccountsController#index as HTML
|
127
|
+
[1m[35mAccount Load (0.2ms)[0m SELECT "accounts".* FROM "accounts"
|
128
|
+
Rendered accounts/index.html.erb within layouts/application (1.8ms)
|
129
|
+
Completed 200 OK in 3ms (Views: 2.2ms | ActiveRecord: 0.3ms)
|
130
|
+
[1m[36mAccount Load (0.1ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."name" = 'bob') LIMIT 1[0m
|
131
|
+
|
132
|
+
|
133
|
+
Started GET "/accounts/1033447818/choose" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
134
|
+
Processing by AccountsController#choose as HTML
|
135
|
+
Parameters: {"id"=>"1033447818"}
|
136
|
+
[1m[35mAccount Load (0.1ms)[0m SELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447818) LIMIT 1
|
137
|
+
Redirected to http://www.example.com/
|
138
|
+
Completed 302 Found in 1ms
|
139
|
+
|
140
|
+
|
141
|
+
Started GET "/" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
142
|
+
Processing by AccountsController#index as HTML
|
143
|
+
[1m[36mAccount Load (0.1ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447818) LIMIT 1[0m
|
144
|
+
[1m[35mAccount Load (0.1ms)[0m SELECT "accounts".* FROM "accounts"
|
145
|
+
[1m[36mFigment Load (0.3ms)[0m [1mSELECT "figments".* FROM "figments" WHERE ("figments".account_id = 1033447818)[0m
|
146
|
+
Rendered accounts/index.html.erb within layouts/application (4.4ms)
|
147
|
+
Completed 200 OK in 6ms (Views: 4.5ms | ActiveRecord: 0.7ms)
|
148
|
+
[1m[35mSQL (0.1ms)[0m SELECT COUNT(*) FROM "figments" WHERE ("figments".account_id = 1033447818)
|
149
|
+
|
150
|
+
|
151
|
+
Started POST "/figments" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
152
|
+
Processing by FigmentsController#create as HTML
|
153
|
+
Parameters: {"figment"=>{"value"=>"66"}}
|
154
|
+
[1m[36mAccount Load (0.1ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447818) LIMIT 1[0m
|
155
|
+
[1m[35mAREL (0.3ms)[0m INSERT INTO "figments" ("account_id", "value", "created_at", "updated_at") VALUES (1033447818, 66, '2011-10-30 00:25:50.801327', '2011-10-30 00:25:50.801327')
|
156
|
+
Redirected to http://www.example.com/
|
157
|
+
Completed 302 Found in 4ms
|
158
|
+
|
159
|
+
|
160
|
+
Started GET "/" for 127.0.0.1 at 2011-10-29 17:25:50 -0700
|
161
|
+
Processing by AccountsController#index as HTML
|
162
|
+
[1m[36mAccount Load (0.2ms)[0m [1mSELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447818) LIMIT 1[0m
|
163
|
+
[1m[35mAccount Load (0.1ms)[0m SELECT "accounts".* FROM "accounts"
|
164
|
+
[1m[36mFigment Load (0.2ms)[0m [1mSELECT "figments".* FROM "figments" WHERE ("figments".account_id = 1033447818)[0m
|
165
|
+
[1m[35mCACHE (0.0ms)[0m SELECT "accounts".* FROM "accounts" WHERE ("accounts"."id" = 1033447818) LIMIT 1
|
166
|
+
Rendered accounts/index.html.erb within layouts/application (3.4ms)
|
167
|
+
Completed 200 OK in 5ms (Views: 3.6ms | ActiveRecord: 1.1ms)
|
168
|
+
[1m[36mFigment Load (0.2ms)[0m [1mSELECT "figments".* FROM "figments" WHERE ("figments".account_id = 1033447818)[0m
|
169
|
+
[1m[35mSQL (0.1ms)[0m select count(*) as c from figments
|
170
|
+
[1m[36mSQL (0.1ms)[0m [1mselect count(*) as c from figments[0m
|
data/lib/data_fabric.rb
CHANGED
@@ -41,7 +41,8 @@ require 'data_fabric/version'
|
|
41
41
|
module DataFabric
|
42
42
|
|
43
43
|
def self.logger
|
44
|
-
|
44
|
+
devnull = RUBY_PLATFORM =~ /w32/ ? 'nul' : '/dev/null'
|
45
|
+
@logger ||= ActiveRecord::Base.logger || Logger.new(devnull)
|
45
46
|
end
|
46
47
|
|
47
48
|
def self.logger=(log)
|
@@ -17,7 +17,7 @@ module DataFabric
|
|
17
17
|
@proc.call
|
18
18
|
end
|
19
19
|
end
|
20
|
-
|
20
|
+
|
21
21
|
class PoolProxy
|
22
22
|
def initialize(proxy)
|
23
23
|
@proxy = proxy
|
@@ -47,7 +47,7 @@ module DataFabric
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
%w(columns columns_hash table_exists? primary_keys).each do |name|
|
50
|
+
%w(columns column_defaults columns_hash table_exists? primary_keys).each do |name|
|
51
51
|
define_method(name.to_sym) do |*args|
|
52
52
|
@proxy.current_pool.send(name.to_sym, *args)
|
53
53
|
end
|
@@ -61,7 +61,7 @@ module DataFabric
|
|
61
61
|
|
62
62
|
class ConnectionProxy
|
63
63
|
cattr_accessor :shard_pools
|
64
|
-
|
64
|
+
|
65
65
|
def initialize(model_class, options)
|
66
66
|
@model_class = model_class
|
67
67
|
@replicated = options[:replicated]
|
@@ -79,16 +79,15 @@ module DataFabric
|
|
79
79
|
delegate :insert_many, :to => :master # ar-extensions bulk insert support
|
80
80
|
|
81
81
|
def transaction(start_db_transaction = true, &block)
|
82
|
-
# Transaction is not re-entrant in SQLite 3 so we
|
83
|
-
# need to track if we've already started an XA to avoid
|
84
|
-
# calling it twice.
|
85
|
-
return yield if in_transaction?
|
86
|
-
|
87
82
|
with_master do
|
88
|
-
connection.transaction(start_db_transaction, &block)
|
83
|
+
connection.transaction(start_db_transaction, &block)
|
89
84
|
end
|
90
85
|
end
|
91
86
|
|
87
|
+
def respond_to?(method)
|
88
|
+
super || connection.respond_to?(method)
|
89
|
+
end
|
90
|
+
|
92
91
|
def method_missing(method, *args, &block)
|
93
92
|
DataFabric.logger.debug { "Calling #{method} on #{connection}" }
|
94
93
|
connection.send(method, *args, &block)
|
@@ -106,7 +105,7 @@ module DataFabric
|
|
106
105
|
ensure
|
107
106
|
set_role(old_role)
|
108
107
|
end
|
109
|
-
|
108
|
+
|
110
109
|
def connected?
|
111
110
|
current_pool.connected?
|
112
111
|
end
|
@@ -123,21 +122,16 @@ module DataFabric
|
|
123
122
|
ActiveRecord::ConnectionAdapters::ConnectionPool.new(spec_for(config))
|
124
123
|
end
|
125
124
|
end
|
126
|
-
|
127
|
-
private
|
128
125
|
|
129
|
-
|
130
|
-
current_role == 'master'
|
131
|
-
end
|
126
|
+
private
|
132
127
|
|
133
128
|
def spec_for(config)
|
134
|
-
# XXX This looks pretty fragile. Will break if AR changes how it initializes connections and adapters.
|
135
129
|
config = config.symbolize_keys
|
136
130
|
adapter_method = "#{config[:adapter]}_connection"
|
137
131
|
initialize_adapter(config[:adapter])
|
138
132
|
ActiveRecord::Base::ConnectionSpecification.new(config, adapter_method)
|
139
133
|
end
|
140
|
-
|
134
|
+
|
141
135
|
def initialize_adapter(adapter)
|
142
136
|
begin
|
143
137
|
require 'rubygems'
|
@@ -150,7 +144,7 @@ module DataFabric
|
|
150
144
|
raise "Please install the #{adapter} adapter: `gem install activerecord-#{adapter}-adapter` (#{$!})"
|
151
145
|
end
|
152
146
|
end
|
153
|
-
end
|
147
|
+
end
|
154
148
|
|
155
149
|
def connection_name_builder
|
156
150
|
@connection_name_builder ||= begin
|
@@ -163,11 +157,11 @@ module DataFabric
|
|
163
157
|
clauses
|
164
158
|
end
|
165
159
|
end
|
166
|
-
|
160
|
+
|
167
161
|
def set_role(role)
|
168
162
|
Thread.current[:data_fabric_role] = role
|
169
163
|
end
|
170
|
-
|
164
|
+
|
171
165
|
def current_role
|
172
166
|
Thread.current[:data_fabric_role] || 'slave'
|
173
167
|
end
|
@@ -177,4 +171,4 @@ module DataFabric
|
|
177
171
|
end
|
178
172
|
end
|
179
173
|
|
180
|
-
end
|
174
|
+
end
|
data/lib/data_fabric/version.rb
CHANGED
data/test/connection_test.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
require 'flexmock/test_unit'
|
3
3
|
|
4
|
+
require 'active_record/connection_adapters/mysql_adapter'
|
5
|
+
|
4
6
|
class PrefixModel < ActiveRecord::Base
|
5
7
|
data_fabric :prefix => 'prefix'
|
6
8
|
end
|
@@ -16,33 +18,37 @@ end
|
|
16
18
|
class AdapterMock < ActiveRecord::ConnectionAdapters::AbstractAdapter
|
17
19
|
# Minimum required to perform a find with no results.
|
18
20
|
# Works on 2.3.10, 3.0.0 and 3.0.3.
|
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
|
-
|
21
|
+
def columns(table_name, name=nil)
|
22
|
+
[ActiveRecord::ConnectionAdapters::Column.new('id', 0, :integer, false)]
|
23
|
+
end
|
24
|
+
def primary_key(name)
|
25
|
+
:id
|
26
|
+
end
|
27
|
+
def adapter_name
|
28
|
+
'mysql'
|
29
|
+
end
|
30
|
+
def select(sql, name=nil, bindings=nil)
|
31
|
+
[]
|
32
|
+
end
|
33
|
+
def execute(sql, name=nil)
|
34
|
+
[]
|
35
|
+
end
|
36
|
+
def tables
|
37
|
+
["enchiladas", "the_whole_burritos"]
|
38
|
+
end
|
39
|
+
def table_exists?(name)
|
40
|
+
true
|
41
|
+
end
|
42
|
+
def last_inserted_id(result)
|
43
|
+
1
|
44
|
+
end
|
45
|
+
def method_missing(name, *args)
|
46
|
+
raise ArgumentError, "#{self.class.name} missing '#{name}': #{args.inspect}"
|
47
|
+
end
|
48
|
+
|
49
|
+
def self.visitor_for(pool)
|
50
|
+
Arel::Visitors::MySQL.new(pool)
|
51
|
+
end
|
46
52
|
end
|
47
53
|
|
48
54
|
class RawConnection
|
@@ -58,12 +64,12 @@ class ConnectionTest < Test::Unit::TestCase
|
|
58
64
|
meth = PrefixModel.methods.first.is_a?(Symbol) ? :data_fabric : 'data_fabric'
|
59
65
|
assert PrefixModel.methods.include?(meth)
|
60
66
|
end
|
61
|
-
|
67
|
+
|
62
68
|
def test_prefix_connection_name
|
63
69
|
setup_configuration_for PrefixModel, 'prefix_test'
|
64
70
|
assert_equal 'prefix_test', PrefixModel.connection.connection_name
|
65
71
|
end
|
66
|
-
|
72
|
+
|
67
73
|
def test_shard_connection_name
|
68
74
|
setup_configuration_for ShardModel, 'city_austin_test'
|
69
75
|
# ensure unset means error
|
@@ -78,7 +84,24 @@ class ConnectionTest < Test::Unit::TestCase
|
|
78
84
|
ShardModel.connection.connection_name
|
79
85
|
end
|
80
86
|
end
|
81
|
-
|
87
|
+
|
88
|
+
def test_respond_to_connection_methods
|
89
|
+
setup_configuration_for ShardModel, 'city_austin_test'
|
90
|
+
DataFabric.activate_shard(:city => 'austin', :category => 'art') do
|
91
|
+
assert ShardModel.connection.respond_to?(:columns)
|
92
|
+
assert ShardModel.connection.respond_to?(:primary_key)
|
93
|
+
assert !ShardModel.connection.respond_to?(:nonexistent_method)
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def test_respond_to_connection_proxy_methods
|
98
|
+
setup_configuration_for ShardModel, 'city_austin_test'
|
99
|
+
DataFabric.activate_shard(:city => 'austin', :category => 'art') do
|
100
|
+
assert ShardModel.connection.respond_to?(:with_master)
|
101
|
+
assert !ShardModel.connection.respond_to?(:nonexistent_method)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
82
105
|
def test_enchilada
|
83
106
|
setup_configuration_for TheWholeEnchilada, 'fiveruns_city_dallas_test_slave'
|
84
107
|
setup_configuration_for TheWholeEnchilada, 'fiveruns_city_dallas_test_master'
|
@@ -89,7 +112,7 @@ class ConnectionTest < Test::Unit::TestCase
|
|
89
112
|
assert_raises ActiveRecord::RecordNotFound do
|
90
113
|
TheWholeEnchilada.find(1)
|
91
114
|
end
|
92
|
-
|
115
|
+
|
93
116
|
# Should use the master
|
94
117
|
mmmm = TheWholeEnchilada.new
|
95
118
|
mmmm.instance_variable_set(:@attributes, { 'id' => 1 })
|
@@ -98,7 +121,7 @@ class ConnectionTest < Test::Unit::TestCase
|
|
98
121
|
end
|
99
122
|
# ...but immediately set it back to default to the slave
|
100
123
|
assert_equal 'fiveruns_city_dallas_test_slave', TheWholeEnchilada.connection.connection_name
|
101
|
-
|
124
|
+
|
102
125
|
# Should use the master
|
103
126
|
TheWholeEnchilada.transaction do
|
104
127
|
mmmm.save!
|
@@ -114,11 +137,10 @@ class ConnectionTest < Test::Unit::TestCase
|
|
114
137
|
end
|
115
138
|
|
116
139
|
private
|
117
|
-
|
140
|
+
|
118
141
|
def setup_configuration_for(clazz, name)
|
119
|
-
flexmock(ActiveRecord::
|
120
|
-
:new_connection).and_return(AdapterMock.new(RawConnection.new))
|
142
|
+
flexmock(ActiveRecord::Base).should_receive(:mysql_connection).and_return(AdapterMock.new(RawConnection.new))
|
121
143
|
ActiveRecord::Base.configurations ||= HashWithIndifferentAccess.new
|
122
144
|
ActiveRecord::Base.configurations[name] = HashWithIndifferentAccess.new({ :adapter => 'mysql', :database => name, :host => 'localhost'})
|
123
145
|
end
|
124
|
-
end
|
146
|
+
end
|
data/test/thread_test.rb
CHANGED
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
require 'erb'
|
3
3
|
|
4
4
|
class ThreadTest < Test::Unit::TestCase
|
5
|
-
|
5
|
+
|
6
6
|
MUTEX = Mutex.new
|
7
7
|
|
8
8
|
def test_class_and_instance_connections
|
@@ -18,7 +18,7 @@ class ThreadTest < Test::Unit::TestCase
|
|
18
18
|
iconn = ThreadedEnchilada.new.connection
|
19
19
|
assert_equal cconn, iconn
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
def xtest_threaded_access
|
23
23
|
clear_databases
|
24
24
|
|
@@ -48,7 +48,7 @@ class ThreadTest < Test::Unit::TestCase
|
|
48
48
|
end
|
49
49
|
end
|
50
50
|
threads.each { |thread| thread.join }
|
51
|
-
|
51
|
+
|
52
52
|
counts.each_pair do |city, count|
|
53
53
|
DataFabric.activate_shard(:city => city) do
|
54
54
|
# slave should be empty
|
@@ -62,9 +62,9 @@ class ThreadTest < Test::Unit::TestCase
|
|
62
62
|
end
|
63
63
|
end
|
64
64
|
end
|
65
|
-
|
65
|
+
|
66
66
|
private
|
67
|
-
|
67
|
+
|
68
68
|
def clear_databases
|
69
69
|
ActiveRecord::Base.configurations = { 'test' => { :adapter => 'mysql', :host => 'localhost', :database => 'mysql' } }
|
70
70
|
ActiveRecord::Base.establish_connection 'test'
|
@@ -77,7 +77,7 @@ class ThreadTest < Test::Unit::TestCase
|
|
77
77
|
end
|
78
78
|
ActiveRecord::Base.clear_active_connections!
|
79
79
|
end
|
80
|
-
|
80
|
+
|
81
81
|
def using_connection(&block)
|
82
82
|
ActiveRecord::Base.connection.instance_eval(&block)
|
83
83
|
end
|
data/test/vr_austin_master.db
CHANGED
Binary file
|
data/test/vr_austin_slave.db
CHANGED
Binary file
|
data/test/vr_dallas_master.db
CHANGED
Binary file
|
data/test/vr_dallas_slave.db
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,52 +1,48 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: data_fabric
|
3
|
-
version: !ruby/object:Gem::Version
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.3.3
|
4
5
|
prerelease:
|
5
|
-
version: 1.3.2
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
7
|
+
authors:
|
8
8
|
- Mike Perham
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2011-10-30 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
16
15
|
name: flexmock
|
17
|
-
|
18
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &2157070860 !ruby/object:Gem::Requirement
|
19
17
|
none: false
|
20
|
-
requirements:
|
21
|
-
- -
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version:
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
24
22
|
type: :development
|
25
|
-
version_requirements: *id001
|
26
|
-
- !ruby/object:Gem::Dependency
|
27
|
-
name: sqlite3
|
28
23
|
prerelease: false
|
29
|
-
|
24
|
+
version_requirements: *2157070860
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: sqlite3
|
27
|
+
requirement: &2157069320 !ruby/object:Gem::Requirement
|
30
28
|
none: false
|
31
|
-
requirements:
|
32
|
-
- -
|
33
|
-
- !ruby/object:Gem::Version
|
34
|
-
version:
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
35
33
|
type: :development
|
36
|
-
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *2157069320
|
37
36
|
description: Sharding and replication support for ActiveRecord
|
38
37
|
email: mperham@gmail.com
|
39
38
|
executables: []
|
40
|
-
|
41
39
|
extensions: []
|
42
|
-
|
43
|
-
extra_rdoc_files:
|
40
|
+
extra_rdoc_files:
|
44
41
|
- README.rdoc
|
45
|
-
files:
|
42
|
+
files:
|
46
43
|
- lib/data_fabric/connection_proxy.rb
|
47
44
|
- lib/data_fabric/extensions.rb
|
48
45
|
- lib/data_fabric/version.rb
|
49
|
-
- lib/data_fabric/version.rbc
|
50
46
|
- lib/data_fabric.rb
|
51
47
|
- example23/app/controllers/accounts_controller.rb
|
52
48
|
- example23/app/controllers/application_controller.rb
|
@@ -122,11 +118,20 @@ files:
|
|
122
118
|
- example30/config/locales/en.yml
|
123
119
|
- example30/config/routes.rb
|
124
120
|
- example30/config.ru
|
121
|
+
- example30/db/development.sqlite3
|
125
122
|
- example30/db/migrate/20080702154628_create_accounts.rb
|
126
123
|
- example30/db/migrate/20080702154820_create_figments.rb
|
124
|
+
- example30/db/s0_development.sqlite3
|
125
|
+
- example30/db/s0_test.sqlite3
|
126
|
+
- example30/db/s1_development.sqlite3
|
127
|
+
- example30/db/s1_test.sqlite3
|
128
|
+
- example30/db/schema.rb
|
127
129
|
- example30/db/seeds.rb
|
130
|
+
- example30/db/test.sqlite3
|
128
131
|
- example30/Gemfile
|
129
132
|
- example30/Gemfile.lock
|
133
|
+
- example30/log/development.log
|
134
|
+
- example30/log/test.log
|
130
135
|
- example30/Rakefile
|
131
136
|
- example30/README
|
132
137
|
- example30/script/rails
|
@@ -152,32 +157,29 @@ files:
|
|
152
157
|
- test/vr_dallas_slave.db
|
153
158
|
homepage: http://github.com/mperham/data_fabric
|
154
159
|
licenses: []
|
155
|
-
|
156
160
|
post_install_message:
|
157
161
|
rdoc_options: []
|
158
|
-
|
159
|
-
require_paths:
|
162
|
+
require_paths:
|
160
163
|
- lib
|
161
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
164
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
162
165
|
none: false
|
163
|
-
requirements:
|
164
|
-
- -
|
165
|
-
- !ruby/object:Gem::Version
|
166
|
-
version:
|
167
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
166
|
+
requirements:
|
167
|
+
- - ! '>='
|
168
|
+
- !ruby/object:Gem::Version
|
169
|
+
version: '0'
|
170
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
171
|
none: false
|
169
|
-
requirements:
|
170
|
-
- -
|
171
|
-
- !ruby/object:Gem::Version
|
172
|
-
version:
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
173
176
|
requirements: []
|
174
|
-
|
175
177
|
rubyforge_project:
|
176
|
-
rubygems_version: 1.
|
178
|
+
rubygems_version: 1.8.10
|
177
179
|
signing_key:
|
178
180
|
specification_version: 3
|
179
181
|
summary: Sharding and replication support for ActiveRecord
|
180
|
-
test_files:
|
182
|
+
test_files:
|
181
183
|
- test/connection_test.rb
|
182
184
|
- test/database.yml
|
183
185
|
- test/database.yml.mysql
|
data/lib/data_fabric/version.rbc
DELETED
@@ -1,203 +0,0 @@
|
|
1
|
-
!RBIX
|
2
|
-
17831730954501249321
|
3
|
-
x
|
4
|
-
M
|
5
|
-
1
|
6
|
-
n
|
7
|
-
n
|
8
|
-
x
|
9
|
-
10
|
10
|
-
__script__
|
11
|
-
i
|
12
|
-
28
|
13
|
-
99
|
14
|
-
7
|
15
|
-
0
|
16
|
-
65
|
17
|
-
49
|
18
|
-
1
|
19
|
-
2
|
20
|
-
13
|
21
|
-
99
|
22
|
-
12
|
23
|
-
7
|
24
|
-
2
|
25
|
-
12
|
26
|
-
7
|
27
|
-
3
|
28
|
-
12
|
29
|
-
65
|
30
|
-
12
|
31
|
-
49
|
32
|
-
4
|
33
|
-
4
|
34
|
-
15
|
35
|
-
49
|
36
|
-
2
|
37
|
-
0
|
38
|
-
15
|
39
|
-
2
|
40
|
-
11
|
41
|
-
I
|
42
|
-
6
|
43
|
-
I
|
44
|
-
0
|
45
|
-
I
|
46
|
-
0
|
47
|
-
I
|
48
|
-
0
|
49
|
-
n
|
50
|
-
p
|
51
|
-
5
|
52
|
-
x
|
53
|
-
10
|
54
|
-
DataFabric
|
55
|
-
x
|
56
|
-
11
|
57
|
-
open_module
|
58
|
-
x
|
59
|
-
15
|
60
|
-
__module_init__
|
61
|
-
M
|
62
|
-
1
|
63
|
-
n
|
64
|
-
n
|
65
|
-
x
|
66
|
-
10
|
67
|
-
DataFabric
|
68
|
-
i
|
69
|
-
28
|
70
|
-
5
|
71
|
-
66
|
72
|
-
99
|
73
|
-
7
|
74
|
-
0
|
75
|
-
65
|
76
|
-
49
|
77
|
-
1
|
78
|
-
2
|
79
|
-
13
|
80
|
-
99
|
81
|
-
12
|
82
|
-
7
|
83
|
-
2
|
84
|
-
12
|
85
|
-
7
|
86
|
-
3
|
87
|
-
12
|
88
|
-
65
|
89
|
-
12
|
90
|
-
49
|
91
|
-
4
|
92
|
-
4
|
93
|
-
15
|
94
|
-
49
|
95
|
-
2
|
96
|
-
0
|
97
|
-
11
|
98
|
-
I
|
99
|
-
6
|
100
|
-
I
|
101
|
-
0
|
102
|
-
I
|
103
|
-
0
|
104
|
-
I
|
105
|
-
0
|
106
|
-
n
|
107
|
-
p
|
108
|
-
5
|
109
|
-
x
|
110
|
-
7
|
111
|
-
Version
|
112
|
-
x
|
113
|
-
11
|
114
|
-
open_module
|
115
|
-
x
|
116
|
-
15
|
117
|
-
__module_init__
|
118
|
-
M
|
119
|
-
1
|
120
|
-
n
|
121
|
-
n
|
122
|
-
x
|
123
|
-
7
|
124
|
-
Version
|
125
|
-
i
|
126
|
-
12
|
127
|
-
5
|
128
|
-
66
|
129
|
-
65
|
130
|
-
7
|
131
|
-
0
|
132
|
-
7
|
133
|
-
1
|
134
|
-
64
|
135
|
-
49
|
136
|
-
2
|
137
|
-
2
|
138
|
-
11
|
139
|
-
I
|
140
|
-
3
|
141
|
-
I
|
142
|
-
0
|
143
|
-
I
|
144
|
-
0
|
145
|
-
I
|
146
|
-
0
|
147
|
-
n
|
148
|
-
p
|
149
|
-
3
|
150
|
-
x
|
151
|
-
6
|
152
|
-
STRING
|
153
|
-
s
|
154
|
-
5
|
155
|
-
1.3.1
|
156
|
-
x
|
157
|
-
9
|
158
|
-
const_set
|
159
|
-
p
|
160
|
-
3
|
161
|
-
I
|
162
|
-
2
|
163
|
-
I
|
164
|
-
3
|
165
|
-
I
|
166
|
-
c
|
167
|
-
x
|
168
|
-
61
|
169
|
-
/Users/mperham/src/git/data_fabric/lib/data_fabric/version.rb
|
170
|
-
p
|
171
|
-
0
|
172
|
-
x
|
173
|
-
13
|
174
|
-
attach_method
|
175
|
-
p
|
176
|
-
3
|
177
|
-
I
|
178
|
-
2
|
179
|
-
I
|
180
|
-
2
|
181
|
-
I
|
182
|
-
1c
|
183
|
-
x
|
184
|
-
61
|
185
|
-
/Users/mperham/src/git/data_fabric/lib/data_fabric/version.rb
|
186
|
-
p
|
187
|
-
0
|
188
|
-
x
|
189
|
-
13
|
190
|
-
attach_method
|
191
|
-
p
|
192
|
-
3
|
193
|
-
I
|
194
|
-
0
|
195
|
-
I
|
196
|
-
1
|
197
|
-
I
|
198
|
-
1c
|
199
|
-
x
|
200
|
-
61
|
201
|
-
/Users/mperham/src/git/data_fabric/lib/data_fabric/version.rb
|
202
|
-
p
|
203
|
-
0
|