cloudwow-not_relational 0.1.0 → 0.1.2
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/VERSION.yml +1 -1
- data/lib/not_relational/berkeley_repository.rb +2 -2
- data/lib/not_relational/configuration.rb +10 -10
- data/lib/not_relational/domain_model.rb +12 -10
- data/lib/not_relational/geo.rb +1 -0
- data/lib/not_relational/lazy_loading_text.rb +3 -3
- data/lib/not_relational/memcache_repository.rb +6 -6
- data/lib/not_relational/memory_repository.rb +6 -6
- data/lib/not_relational/memory_storage.rb +7 -0
- data/lib/not_relational/property_description.rb +2 -2
- data/lib/not_relational/repository_factory.rb +3 -3
- data/lib/not_relational/repository_interface.rb +2 -2
- data/lib/not_relational/{repository.rb → sdb_repository.rb} +269 -231
- data/lib/not_relational/storage.rb +2 -2
- data/lib/not_relational.rb +5 -2
- data/test/models/album.rb +1 -1
- data/test/models/blurb_wording.rb +1 -1
- data/test/models/friend_request.rb +1 -1
- data/test/models/group.rb +1 -1
- data/test/models/media_item.rb +1 -1
- data/test/models/message.rb +1 -1
- data/test/models/node.rb +1 -1
- data/test/models/outgoing_email.rb +1 -1
- data/test/models/user.rb +1 -1
- data/test/models/weblab.rb +2 -2
- data/test/unit_tests/album_test.rb +1 -5
- data/test/unit_tests/blurb_test.rb +2 -2
- data/test/unit_tests/comment_test.rb +2 -2
- data/test/unit_tests/composite_key_test.rb +1 -1
- data/test/unit_tests/enum_test.rb +1 -1
- data/test/unit_tests/group_test.rb +2 -2
- data/test/unit_tests/mediaitem_test.rb +2 -2
- data/test/unit_tests/memcache_repository_test.rb +2 -2
- data/test/unit_tests/memory_repository_test.rb +1 -1
- data/test/unit_tests/node_test.rb +2 -2
- data/test/unit_tests/place_test.rb +2 -2
- data/test/unit_tests/reference_set_test.rb +1 -1
- data/test/unit_tests/repository_factory_test.rb +1 -1
- data/test/unit_tests/tag_test.rb +2 -2
- data/test/unit_tests/user_test.rb +2 -2
- metadata +5 -5
@@ -1,6 +1,6 @@
|
|
1
1
|
# THis class implements access to SDB 222.
|
2
2
|
# =I am the walrus=
|
3
|
-
|
3
|
+
module NotRelational
|
4
4
|
$KCODE = 'u'
|
5
5
|
require "aws_sdb"
|
6
6
|
require "not_relational/storage.rb"
|
@@ -9,77 +9,59 @@
|
|
9
9
|
|
10
10
|
require File.dirname(__FILE__) +"/sdb_monkey_patch.rb"
|
11
11
|
# THis class implements access to SDB.
|
12
|
-
class
|
13
|
-
|
12
|
+
class SdbRepository
|
13
|
+
MAX_PAGE_SIZE=250#defined by sdb
|
14
14
|
attr_accessor :storage
|
15
|
+
|
15
16
|
def initialize(
|
16
|
-
|
17
|
+
base_domain_name,#MyDevPayApp
|
17
18
|
clob_bucket,
|
18
19
|
aws_key_id,
|
19
20
|
aws_secret_key,
|
20
21
|
memcache_servers = nil ,
|
21
|
-
|
22
|
-
|
22
|
+
blob_storage=nil,
|
23
|
+
use_seperate_domain_per_model=true,
|
23
24
|
options={}
|
24
25
|
|
25
26
|
)
|
26
|
-
|
27
|
-
@use_cache=true
|
28
|
-
@storage=a_storage
|
29
|
-
@storage||=Storage.new(aws_key_id,aws_secret_key,memcache_servers)
|
30
|
-
@domain_name_prefix = domain_name_prefix
|
31
|
-
@clob_bucket = clob_bucket
|
32
|
-
@memcache_servers = memcache_servers
|
33
|
-
@aws_key_id = aws_key_id
|
34
|
-
@aws_secret_key = aws_secret_key
|
35
|
-
@append_table_to_domain=append_table_to_domain
|
27
|
+
|
36
28
|
@logger = options[:logger]
|
37
29
|
if !@logger
|
38
30
|
@logger = Logger.new(STDOUT)
|
39
31
|
@logger.level = Logger::ERROR
|
40
32
|
end
|
33
|
+
|
34
|
+
|
35
|
+
|
36
|
+
@base_domain_name = base_domain_name
|
37
|
+
@storage_bucket = clob_bucket
|
38
|
+
@memcache_servers = memcache_servers
|
39
|
+
@aws_key_id = aws_key_id
|
40
|
+
@aws_secret_key = aws_secret_key
|
41
|
+
@use_seperate_domain_per_model=use_seperate_domain_per_model
|
42
|
+
@storage=blob_storage
|
43
|
+
|
44
|
+
@use_cache=true
|
45
|
+
@use_cache=options[:use_cache] if options.has_key?(:use_cache)
|
46
|
+
|
47
|
+
|
48
|
+
@storage ||= Storage.new(aws_key_id,aws_secret_key,memcache_servers)
|
41
49
|
@sdb=AwsSdb::Service.new(:access_key_id=>aws_key_id,:secret_access_key=>aws_secret_key,:url=>"http://sdb.amazonaws.com",:logger=>@logger)
|
42
50
|
@session_cache=MemoryRepository.new
|
43
|
-
|
44
|
-
# #create_domain()
|
45
|
-
end
|
46
|
-
#can you guess what this does?
|
47
|
-
def clear_session_cache
|
48
|
-
@session_cache.clear
|
49
|
-
end
|
50
|
-
def flatten_key(key)
|
51
|
-
if key.is_a?( Array)
|
52
|
-
flattened_key=""
|
53
|
-
key.each do |key_part|
|
54
|
-
flattened_key<<CGI.escape(key_part.to_s)+"/"
|
55
|
-
end
|
56
|
-
return flattened_key[0..-2]
|
57
|
-
else
|
58
|
-
return CGI.escape(key.to_s)
|
59
|
-
end
|
60
|
-
end
|
61
|
-
def make_cache_key(table_name,primary_key)
|
62
51
|
|
63
|
-
primary_key=flatten_key(primary_key)
|
64
|
-
primary_key="#{table_name}/#{primary_key}" unless @append_table_to_domain
|
65
|
-
return primary_key
|
66
|
-
end
|
67
|
-
def make_clob_key(table_name,primary_key,clob_name)
|
68
|
-
return "clobs/#{table_name}/#{flatten_key(primary_key)}/#{clob_name}"
|
69
|
-
end
|
70
|
-
def get_clob(table_name,primary_key,clob_name)
|
71
|
-
return @storage.get(@clob_bucket,make_clob_key(table_name,primary_key,clob_name))
|
72
|
-
|
73
52
|
end
|
53
|
+
|
74
54
|
def save(table_name, primary_key, attributes,index_descriptions)
|
55
|
+
|
75
56
|
@session_cache.save(table_name,primary_key,attributes,index_descriptions)
|
57
|
+
|
76
58
|
formatted_attributes={}
|
77
59
|
attributes.each do |description,value|
|
78
60
|
if value || description.value_type==:boolean
|
79
|
-
if description.
|
61
|
+
if description.is_text?
|
80
62
|
@storage.put(
|
81
|
-
@
|
82
|
-
|
63
|
+
@storage_bucket,
|
64
|
+
make_storage_key(table_name,primary_key,description.name),
|
83
65
|
value.to_s,
|
84
66
|
{})
|
85
67
|
else
|
@@ -87,7 +69,7 @@
|
|
87
69
|
end
|
88
70
|
end
|
89
71
|
end
|
90
|
-
if !@
|
72
|
+
if !@use_seperate_domain_per_model
|
91
73
|
formatted_attributes['metadata%%table_name'] = table_name
|
92
74
|
|
93
75
|
end
|
@@ -95,34 +77,153 @@
|
|
95
77
|
# put_into_cache(table_name, primary_key, formatted_attributes)
|
96
78
|
|
97
79
|
end
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
#
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
80
|
+
|
81
|
+
def destroy(table_name, primary_key)
|
82
|
+
@session_cache.destroy(table_name,primary_key)
|
83
|
+
@sdb.delete_attributes(make_domain_name(table_name),make_cache_key(table_name, primary_key) )
|
84
|
+
#TODO destroy text
|
85
|
+
end
|
86
|
+
|
87
|
+
|
88
|
+
# result will be an array of hashes. each hash is a set of attributes
|
89
|
+
def query(table_name,attribute_descriptions,options)
|
90
|
+
|
91
|
+
@logger.debug "query on table: #{table_name}"
|
92
|
+
|
93
|
+
if options.has_key?(:limit) and !options.has_key?(:order_by)
|
94
|
+
session_cache_result=@session_cache.query(table_name,attribute_descriptions,options)
|
95
|
+
if options[:limit]==session_cache_result.length
|
96
|
+
return session_cache_result
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
100
|
+
the_query=build_query(table_name, attribute_descriptions, options)
|
101
|
+
@logger.debug "the query: #{the_query}"
|
102
|
+
|
103
|
+
max=MAX_PAGE_SIZE
|
104
|
+
if options[:limit]
|
105
|
+
max=options[:limit].to_i
|
106
|
+
end
|
107
|
+
|
108
|
+
page_size=max> MAX_PAGE_SIZE ? MAX_PAGE_SIZE : max
|
109
|
+
sdb_result,token=sdb_query_with_attributes(table_name,the_query,page_size)
|
110
|
+
|
111
|
+
while !(token.nil? || token.empty? || sdb_result.length>=max)
|
112
|
+
page_size=max- sdb_result.length
|
113
|
+
page_size=page_size> MAX_PAGE_SIZE ? MAX_PAGE_SIZE : page_size
|
114
|
+
partial_results,token=sdb_query_with_attributes(table_name,the_query,page_size,token)
|
115
|
+
sdb_result.merge!( partial_results)
|
116
|
+
end
|
117
|
+
|
118
|
+
result=[]
|
119
|
+
sdb_result.each{|primary_key,sdb_row|
|
120
|
+
attributes =parse_attributes(attribute_descriptions,sdb_row)
|
121
|
+
if attributes
|
122
|
+
result<<attributes
|
123
|
+
end
|
124
|
+
}
|
125
|
+
|
126
|
+
#ordering is handled in sdb now
|
127
|
+
# if options and options[:order_by]
|
128
|
+
# result.sort! do |a,b|
|
129
|
+
# a_value=a[options[:order_by]]
|
130
|
+
# b_value=b[options[:order_by]]
|
131
|
+
# if options[:order] && options[:order]!=:ascending
|
132
|
+
# if !a_value
|
133
|
+
# 1
|
134
|
+
# else
|
135
|
+
# if b_value
|
136
|
+
# b_value <=> a_value
|
137
|
+
# else
|
138
|
+
# -1
|
139
|
+
# end
|
140
|
+
# end
|
141
|
+
# else
|
142
|
+
# if !b_value
|
143
|
+
# 1
|
144
|
+
# else
|
145
|
+
# if a_value
|
146
|
+
# a_value <=> b_value
|
147
|
+
# else
|
148
|
+
# -1
|
149
|
+
# end
|
150
|
+
# end
|
151
|
+
# end
|
152
|
+
# end
|
153
|
+
# end
|
154
|
+
if options[:limit] && result.length>options[:limit]
|
155
|
+
result=result[0..(options[:limit]-1)]
|
156
|
+
end
|
157
|
+
return result
|
158
|
+
end
|
159
|
+
def get_text(table_name,primary_key,clob_name)
|
160
|
+
return @storage.get(@storage_bucket,make_storage_key(table_name,primary_key,clob_name))
|
161
|
+
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
def find_one(table_name, primary_key,attribute_descriptions)#, non_clob_attribute_names, clob_attribute_names)
|
166
|
+
session_cache_result=@session_cache.find_one(table_name, make_cache_key(table_name,primary_key),attribute_descriptions)
|
167
|
+
return session_cache_result if session_cache_result
|
168
|
+
# if @use_cache
|
169
|
+
# yaml=@storage.get(@storage_bucket,make_cache_key(table_name,primary_key))
|
170
|
+
# if yaml
|
171
|
+
# result=YAML::load( yaml)
|
172
|
+
# if result.respond_to?(:non_clob_attributes) && result.non_clob_attributes!=nil
|
173
|
+
# return parse_attributes(attribute_descriptions, result.non_clob_attributes)
|
174
|
+
# end
|
175
|
+
#
|
176
|
+
# end
|
177
|
+
# end
|
178
|
+
attributes=parse_attributes(attribute_descriptions,sdb_get_attributes(table_name,primary_key))
|
179
|
+
if attributes
|
180
|
+
# #attributes[:primary_key]=primary_key #put_into_cache(table_name,
|
181
|
+
# primary_key, attributes)
|
182
|
+
end
|
183
|
+
|
184
|
+
attributes
|
185
|
+
end
|
186
|
+
|
111
187
|
def create_domain
|
112
188
|
20.times do |i|
|
113
189
|
begin
|
114
|
-
@sdb.create_domain(@
|
190
|
+
@sdb.create_domain(@base_domain_name)
|
115
191
|
return
|
116
|
-
|
192
|
+
|
117
193
|
rescue => e
|
118
194
|
s= "#{e.message}\n#{e.backtrace}"
|
119
195
|
@logger.warn(s) if @logger
|
120
196
|
sleep(i*i)
|
121
|
-
|
197
|
+
|
122
198
|
end
|
123
199
|
end
|
124
|
-
|
200
|
+
|
125
201
|
end
|
202
|
+
|
203
|
+
def pause
|
204
|
+
sleep(2)
|
205
|
+
end
|
206
|
+
|
207
|
+
def clear
|
208
|
+
@session_cache.clear
|
209
|
+
end
|
210
|
+
|
211
|
+
# can you guess what this does?
|
212
|
+
def clear_session_cache
|
213
|
+
@session_cache.clear
|
214
|
+
end
|
215
|
+
|
216
|
+
|
217
|
+
private
|
218
|
+
|
219
|
+
def make_domain_name(table_name)
|
220
|
+
if @use_seperate_domain_per_model
|
221
|
+
@base_domain_name+"_"+table_name
|
222
|
+
else
|
223
|
+
@base_domain_name
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
126
227
|
def put_attributes(table_name,primary_key, formatted_attributes,options={})
|
127
228
|
20.times do |i|
|
128
229
|
begin
|
@@ -132,17 +233,77 @@
|
|
132
233
|
rescue Exception => e
|
133
234
|
s= "#{e.message}\n#{e.backtrace}"
|
134
235
|
@logger.warn(s) if @logger
|
135
|
-
puts e.to_yaml
|
136
236
|
sleep(i*i)
|
137
237
|
end
|
138
238
|
end
|
239
|
+
|
240
|
+
end
|
241
|
+
|
242
|
+
def sdb_get_attributes(table_name,primary_key)
|
243
|
+
|
244
|
+
@logger.debug( "SDB get_attributes #{table_name} : #{primary_key}") if @logger
|
245
|
+
|
246
|
+
20.times do |i|
|
247
|
+
begin
|
248
|
+
return @sdb.get_attributes(make_domain_name(table_name), make_cache_key(table_name,primary_key))
|
249
|
+
rescue Exception => e
|
250
|
+
s= "#{e.message}\n#{e.backtrace}"
|
251
|
+
@logger.warn(s) if @logger
|
139
252
|
|
253
|
+
sleep(i*i)
|
254
|
+
ensure
|
255
|
+
|
256
|
+
end
|
257
|
+
end
|
258
|
+
|
140
259
|
end
|
141
|
-
|
260
|
+
|
261
|
+
# this method no longer useful since query with attrivutes was introduced to sdb
|
262
|
+
# def sdb_query(table_name,query,max,token=nil)
|
263
|
+
#
|
264
|
+
# @logger.debug( "SDB query:#{table_name}(#{max}) : #{query} #{token}" ) if @logger
|
265
|
+
# # puts "#{table_name} #{query} (#{max}) #{token}"
|
266
|
+
# 20.times do |i|
|
267
|
+
# begin
|
268
|
+
# return @sdb.query(make_domain_name(table_name),query,max,token)
|
269
|
+
#
|
270
|
+
# rescue Exception => e
|
271
|
+
# s= "#{e.message}\n#{e.backtrace}"
|
272
|
+
# @logger.error(s) if @logger
|
273
|
+
#
|
274
|
+
# sleep(i*i)
|
275
|
+
# ensure
|
276
|
+
#
|
277
|
+
# end
|
278
|
+
# end
|
279
|
+
#
|
280
|
+
# end
|
281
|
+
|
282
|
+
def sdb_query_with_attributes(table_name,query,max,token=nil)
|
283
|
+
|
284
|
+
@logger.debug( "SDB query:#{table_name}(#{max}) : #{query} #{token}" ) if @logger
|
285
|
+
20.times do |i|
|
286
|
+
begin
|
287
|
+
return @sdb.query_with_attributes(make_domain_name(table_name),query,max,token)
|
288
|
+
|
289
|
+
rescue Exception => e
|
290
|
+
s= "#{e.message}\n#{e.backtrace}"
|
291
|
+
@logger.error(s) if @logger
|
292
|
+
|
293
|
+
sleep(i*i)
|
294
|
+
ensure
|
295
|
+
|
296
|
+
end
|
297
|
+
end
|
298
|
+
|
299
|
+
end
|
300
|
+
|
301
|
+
|
302
|
+
def extend_query(query,new_clause)
|
142
303
|
if query.length>0
|
143
304
|
query << " intersection "
|
144
305
|
end
|
145
|
-
|
306
|
+
|
146
307
|
query << new_clause
|
147
308
|
end
|
148
309
|
def escape_quotes(value)
|
@@ -150,8 +311,8 @@
|
|
150
311
|
value.gsub( "'","\\'")
|
151
312
|
end
|
152
313
|
def build_query(table_name,attribute_descriptions,options={})
|
153
|
-
|
154
|
-
|
314
|
+
|
315
|
+
|
155
316
|
query=""
|
156
317
|
params=nil
|
157
318
|
params=options[:params] if options.has_key?(:params)
|
@@ -168,7 +329,7 @@
|
|
168
329
|
end
|
169
330
|
|
170
331
|
end
|
171
|
-
if !@
|
332
|
+
if !@use_seperate_domain_per_model
|
172
333
|
extend_query(query," ['metadata%%table_name' = '#{table_name}']")
|
173
334
|
|
174
335
|
end
|
@@ -226,161 +387,28 @@
|
|
226
387
|
extend_query(query,"["+condition.to_sdb_query()+"]")
|
227
388
|
end
|
228
389
|
end
|
229
|
-
|
230
|
-
end
|
231
|
-
return query
|
232
|
-
|
233
|
-
end
|
234
|
-
# #result will be an array of hashes. each hash is a set of attributes
|
235
|
-
def query(table_name,attribute_descriptions,options)
|
236
|
-
if options.has_key?(:limit) and !options.has_key?(:order_by)
|
237
|
-
session_cache_result=@session_cache.query(table_name,attribute_descriptions,options)
|
238
|
-
if options[:limit]==session_cache_result.length
|
239
|
-
return session_cache_result
|
240
|
-
end
|
241
|
-
end
|
242
|
-
|
243
|
-
the_query=build_query(table_name, attribute_descriptions, options)
|
244
|
-
max=250
|
245
|
-
if options[:limit]
|
246
|
-
max=options[:limit].to_i
|
247
|
-
|
248
|
-
end
|
249
|
-
page_size=max>250?250:max
|
250
|
-
sdb_result,token=sdb_query_with_attributes(table_name,the_query,page_size)
|
251
|
-
|
252
|
-
while !(token.nil? || token.empty? || sdb_result.length>=max)
|
253
|
-
page_size=max- sdb_result.length
|
254
|
-
page_size=page_size>250?250:page_size
|
255
|
-
partial_results,token=sdb_query_with_attributes(table_name,the_query,page_size,token)
|
256
390
|
|
257
|
-
sdb_result.merge!( partial_results)
|
258
391
|
end
|
259
|
-
|
260
|
-
sdb_result.each{|primary_key,sdb_row|
|
261
|
-
attributes =parse_attributes(attribute_descriptions,sdb_row)
|
262
|
-
if attributes
|
263
|
-
# #attributes[:primary_key]=primary_key
|
392
|
+
return query
|
264
393
|
|
265
|
-
result<<attributes
|
266
|
-
end
|
267
|
-
}
|
268
|
-
if options and options[:order_by]
|
269
|
-
result.sort! do |a,b|
|
270
|
-
a_value=a[options[:order_by]]
|
271
|
-
b_value=b[options[:order_by]]
|
272
|
-
if options[:order] && options[:order]!=:ascending
|
273
|
-
if !a_value
|
274
|
-
1
|
275
|
-
else
|
276
|
-
if b_value
|
277
|
-
b_value <=> a_value
|
278
|
-
else
|
279
|
-
-1
|
280
|
-
end
|
281
|
-
end
|
282
|
-
else
|
283
|
-
if !b_value
|
284
|
-
1
|
285
|
-
else
|
286
|
-
if a_value
|
287
|
-
a_value <=> b_value
|
288
|
-
else
|
289
|
-
-1
|
290
|
-
end
|
291
|
-
end
|
292
|
-
end
|
293
|
-
end
|
294
|
-
end
|
295
|
-
if options[:limit] && result.length>options[:limit]
|
296
|
-
result=result[0..(options[:limit]-1)]
|
297
|
-
end
|
298
|
-
return result
|
299
|
-
end
|
300
|
-
def find_one(table_name, primary_key,attribute_descriptions)#, non_clob_attribute_names, clob_attribute_names)
|
301
|
-
session_cache_result=@session_cache.find_one(table_name, make_cache_key(table_name,primary_key),attribute_descriptions)
|
302
|
-
return session_cache_result if session_cache_result
|
303
|
-
# if @use_cache
|
304
|
-
# yaml=@storage.get(@clob_bucket,make_cache_key(table_name,primary_key))
|
305
|
-
# if yaml
|
306
|
-
# result=YAML::load( yaml)
|
307
|
-
# if result.respond_to?(:non_clob_attributes) && result.non_clob_attributes!=nil
|
308
|
-
# return parse_attributes(attribute_descriptions, result.non_clob_attributes)
|
309
|
-
# end
|
310
|
-
#
|
311
|
-
# end
|
312
|
-
# end
|
313
|
-
attributes=parse_attributes(attribute_descriptions,sdb_get_attributes(table_name,primary_key))
|
314
|
-
if attributes
|
315
|
-
# #attributes[:primary_key]=primary_key #put_into_cache(table_name,
|
316
|
-
# primary_key, attributes)
|
317
|
-
end
|
318
|
-
|
319
|
-
attributes
|
320
|
-
end
|
321
|
-
def make_domain_name(table_name)
|
322
|
-
if @append_table_to_domain
|
323
|
-
@domain_name_prefix+"_"+table_name
|
324
|
-
else
|
325
|
-
@domain_name_prefix
|
326
|
-
end
|
327
|
-
end
|
328
|
-
def sdb_get_attributes(table_name,primary_key)
|
329
|
-
|
330
|
-
@logger.debug( "SDB get_attributes #{table_name} : #{primary_key}") if @logger
|
331
|
-
|
332
|
-
20.times do |i|
|
333
|
-
begin
|
334
|
-
return @sdb.get_attributes(make_domain_name(table_name), make_cache_key(table_name,primary_key))
|
335
|
-
rescue Exception => e
|
336
|
-
s= "#{e.message}\n#{e.backtrace}"
|
337
|
-
@logger.warn(s) if @logger
|
338
|
-
|
339
|
-
sleep(i*i)
|
340
|
-
ensure
|
341
|
-
|
342
|
-
end
|
343
|
-
end
|
344
|
-
|
345
|
-
end
|
346
|
-
def sdb_query(table_name,query,max,token=nil)
|
347
|
-
|
348
|
-
@logger.debug( "SDB query:#{table_name}(#{max}) : #{query} #{token}" ) if @logger
|
349
|
-
# puts "#{table_name} #{query} (#{max}) #{token}"
|
350
|
-
20.times do |i|
|
351
|
-
begin
|
352
|
-
return @sdb.query(make_domain_name(table_name),query,max,token)
|
353
|
-
|
354
|
-
rescue Exception => e
|
355
|
-
s= "#{e.message}\n#{e.backtrace}"
|
356
|
-
@logger.error(s) if @logger
|
357
|
-
|
358
|
-
sleep(i*i)
|
359
|
-
ensure
|
360
|
-
|
361
|
-
end
|
362
|
-
end
|
363
|
-
|
364
394
|
end
|
365
|
-
def sdb_query_with_attributes(table_name,query,max,token=nil)
|
366
395
|
|
367
|
-
|
368
|
-
|
369
|
-
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
396
|
+
# def put_into_cache(table_name, primary_key, formatted_attributes)
|
397
|
+
# if @use_cache
|
398
|
+
# cacheItem=DomainModelCacheItem.new(table_name, primary_key, formatted_attributes)
|
399
|
+
#
|
400
|
+
# yaml=cacheItem.ya2yaml(:syck_compatible => true)
|
401
|
+
#
|
402
|
+
# @storage.put(
|
403
|
+
# @storage_bucket,
|
404
|
+
# make_cache_key(table_name,primary_key),
|
405
|
+
# yaml ,
|
406
|
+
# {})
|
407
|
+
# end
|
408
|
+
# end
|
379
409
|
|
380
|
-
end
|
381
|
-
end
|
382
410
|
|
383
|
-
|
411
|
+
|
384
412
|
def parse_attributes(attribute_descriptions,attributes)
|
385
413
|
if !attributes || attributes.length==0
|
386
414
|
return nil
|
@@ -399,21 +427,31 @@
|
|
399
427
|
end
|
400
428
|
parsed_attributes
|
401
429
|
end
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
430
|
+
|
431
|
+
|
432
|
+
def flatten_key(key)
|
433
|
+
if key.is_a?( Array)
|
434
|
+
flattened_key=""
|
435
|
+
key.each do |key_part|
|
436
|
+
flattened_key<<CGI.escape(key_part.to_s)+"/"
|
437
|
+
end
|
438
|
+
return flattened_key[0..-2]
|
439
|
+
else
|
440
|
+
return CGI.escape(key.to_s)
|
441
|
+
end
|
408
442
|
end
|
409
|
-
# #parse date in yyyy-mm-dd format
|
410
443
|
|
411
|
-
def
|
412
|
-
|
444
|
+
def make_cache_key(table_name,primary_key)
|
445
|
+
|
446
|
+
primary_key=flatten_key(primary_key)
|
447
|
+
primary_key="#{table_name}/#{primary_key}" unless @use_seperate_domain_per_model
|
448
|
+
return primary_key
|
413
449
|
end
|
414
450
|
|
415
|
-
def
|
416
|
-
|
451
|
+
def make_storage_key(table_name,primary_key,clob_name)
|
452
|
+
return "clobs/#{table_name}/#{flatten_key(primary_key)}/#{clob_name}"
|
417
453
|
end
|
454
|
+
|
455
|
+
|
418
456
|
end
|
419
457
|
end
|
@@ -72,7 +72,7 @@ class Storage
|
|
72
72
|
if self.memory_only
|
73
73
|
return nil
|
74
74
|
end
|
75
|
-
|
75
|
+
4.times do |i|
|
76
76
|
begin
|
77
77
|
response=real_s3.get(bucket,key)
|
78
78
|
if response and response.http_response.code=='404'
|
@@ -103,7 +103,7 @@ class Storage
|
|
103
103
|
|
104
104
|
return if self.memory_only
|
105
105
|
x=nil
|
106
|
-
|
106
|
+
4.times do |i|
|
107
107
|
begin
|
108
108
|
x= real_s3.put(bucket,key,S3::S3Object.new(object),attributes)
|
109
109
|
|
data/lib/not_relational.rb
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
# License:: Distributes under the same terms as Ruby
|
6
6
|
|
7
7
|
|
8
|
-
require "#{File.dirname(__FILE__)}/not_relational/
|
8
|
+
require "#{File.dirname(__FILE__)}/not_relational/sdb_repository.rb"
|
9
9
|
require "#{File.dirname(__FILE__)}/not_relational/repository_factory.rb"
|
10
10
|
require "#{File.dirname(__FILE__)}/not_relational/acts_as_not_relational_application.rb"
|
11
11
|
require "#{File.dirname(__FILE__)}/not_relational/memory_repository.rb"
|
@@ -14,4 +14,7 @@ require "#{File.dirname(__FILE__)}/not_relational/storage.rb"
|
|
14
14
|
require "#{File.dirname(__FILE__)}/not_relational/s3.rb"
|
15
15
|
require "#{File.dirname(__FILE__)}/not_relational/attribute_range.rb"
|
16
16
|
require "#{File.dirname(__FILE__)}/not_relational/and_condition.rb"
|
17
|
-
require "#{File.dirname(__FILE__)}/not_relational/or_condition.rb"
|
17
|
+
require "#{File.dirname(__FILE__)}/not_relational/or_condition.rb"
|
18
|
+
require "#{File.dirname(__FILE__)}/not_relational/starts_with_condition.rb"
|
19
|
+
require "#{File.dirname(__FILE__)}/not_relational/is_null_transform.rb"
|
20
|
+
require "#{File.dirname(__FILE__)}/not_relational/geo.rb"
|
data/test/models/album.rb
CHANGED
@@ -9,7 +9,7 @@ class Album < NotRelational::DomainModel
|
|
9
9
|
property :guid , :string,:unique=>true
|
10
10
|
property :user_name , :string
|
11
11
|
property :title , :string
|
12
|
-
property :description , :
|
12
|
+
property :description , :text
|
13
13
|
property :created_time_utc ,:date
|
14
14
|
property :last_update_time_utc ,:date
|
15
15
|
property :is_private, :boolean
|
@@ -7,7 +7,7 @@ class BlurbWording < NotRelational::DomainModel
|
|
7
7
|
property :blurb_name,:string,:is_primary_key=>true
|
8
8
|
property :blurb_namespace,:string,:is_primary_key=>true
|
9
9
|
property :language_id , :string ,:is_primary_key=>true
|
10
|
-
property :text,:
|
10
|
+
property :text,:text
|
11
11
|
property :title , :string
|
12
12
|
property :version , :string
|
13
13
|
property :author , :string
|
@@ -8,7 +8,7 @@ class FriendRequest < DomainModel
|
|
8
8
|
property :id,:string,:is_primary_key=>true
|
9
9
|
property :user_name,:string
|
10
10
|
property :friend_user_name,:string
|
11
|
-
property :message,:
|
11
|
+
property :message,:text
|
12
12
|
property :answer,:boolean
|
13
13
|
property :created_time_utc,:date
|
14
14
|
belongs_to :User,:user_name,:user
|
data/test/models/group.rb
CHANGED
@@ -15,7 +15,7 @@ class Group < NotRelational::DomainModel
|
|
15
15
|
property :short_description , :string
|
16
16
|
property :icon_guid , :string
|
17
17
|
property :tags , :string
|
18
|
-
property :layout , :
|
18
|
+
property :layout , :text
|
19
19
|
property :domain , :string,:unique=>true
|
20
20
|
|
21
21
|
property :devpay_user_token , :string
|
data/test/models/media_item.rb
CHANGED
@@ -15,7 +15,7 @@ class Mediaitem < NotRelational::DomainModel
|
|
15
15
|
property :group_id , :string
|
16
16
|
property :title , :string
|
17
17
|
property :user_login , :string
|
18
|
-
property :description , :
|
18
|
+
property :description , :text
|
19
19
|
property :latitude , :float
|
20
20
|
property :longitude , :float
|
21
21
|
|