knjrbfw 0.0.19 → 0.0.20

Sign up to get free protection for your applications and to get access to all the features.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.0.19
1
+ 0.0.20
data/knjrbfw.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{knjrbfw}
8
- s.version = "0.0.19"
8
+ s.version = "0.0.20"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Kasper Johansen"]
12
- s.date = %q{2012-03-03}
12
+ s.date = %q{2012-03-04}
13
13
  s.description = %q{Including stuff for HTTP, SSH and much more.}
14
14
  s.email = %q{k@spernj.org}
15
15
  s.extra_rdoc_files = [
data/lib/knj/datarow.rb CHANGED
@@ -390,7 +390,7 @@ class Knj::Datarow
390
390
  when "return_sql"
391
391
  #ignore
392
392
  else
393
- raise "Invalid key: '#{key}' for '#{self.name}'."
393
+ raise "Invalid key: '#{key}' for '#{self.name}'. Valid keys are: '#{@columns_sqlhelper_args[:cols].keys.sort}'."
394
394
  end
395
395
  end
396
396
 
@@ -440,6 +440,12 @@ class Knj::Datarow
440
440
  return d.ob.list_bysql(self.classname, sql, &block)
441
441
  end
442
442
 
443
+ def self.list_helper(d)
444
+ self.load_columns(d) if !@columns_sqlhelper_args
445
+ @columns_sqlhelper_args[:table] = @table if @table
446
+ return d.ob.sqlhelper(d.args, @columns_sqlhelper_args)
447
+ end
448
+
443
449
  def self.classname
444
450
  return @classname
445
451
  end
@@ -448,12 +454,6 @@ class Knj::Datarow
448
454
  @classname = newclassname
449
455
  end
450
456
 
451
- def self.list_helper(d)
452
- self.load_columns(d) if !@columns_sqlhelper_args
453
- @columns_sqlhelper_args[:table] = @table if @table
454
- return d.ob.sqlhelper(d.args, @columns_sqlhelper_args)
455
- end
456
-
457
457
  def initialize(d)
458
458
  @ob = d.ob
459
459
  @db = d.ob.db
@@ -162,7 +162,11 @@ class KnjDB_mysql::Tables::Table
162
162
  end
163
163
  end
164
164
 
165
- return ret
165
+ if block_given?
166
+ return nil
167
+ else
168
+ return ret
169
+ end
166
170
  end
167
171
 
168
172
  def indexes
@@ -192,7 +196,11 @@ class KnjDB_mysql::Tables::Table
192
196
  end
193
197
  end
194
198
 
195
- return ret
199
+ if block_given?
200
+ return nil
201
+ else
202
+ return ret
203
+ end
196
204
  end
197
205
 
198
206
  def index(name)
@@ -48,7 +48,7 @@ class KnjDB_sqlite3::Columns::Column
48
48
  end
49
49
 
50
50
  def table
51
- return @args[:table]
51
+ return @db.tables[@args[:table_name]]
52
52
  end
53
53
 
54
54
  def data
@@ -1,3 +1,5 @@
1
+ require "#{$knjpath}wref"
2
+
1
3
  class KnjDB_sqlite3::Tables
2
4
  attr_reader :db, :driver
3
5
 
@@ -5,26 +7,56 @@ class KnjDB_sqlite3::Tables
5
7
  @args = args
6
8
  @db = @args[:db]
7
9
  @driver = @args[:driver]
10
+
11
+ @list_mutex = Mutex.new
12
+ @list = Knj::Wref_map.new
8
13
  end
9
14
 
10
15
  def [](table_name)
11
- list = self.list
12
- return list[table_name.to_s] if list[table_name.to_s]
16
+ table_name = table_name.to_s
17
+
18
+ begin
19
+ return @list[table_name]
20
+ rescue WeakRef::RefError
21
+ #ignore.
22
+ end
23
+
24
+ self.list do |table_obj|
25
+ return table_obj if table_obj.name.to_s == table_name
26
+ end
27
+
13
28
  raise Knj::Errors::NotFound.new("Table was not found: #{table_name}.")
14
29
  end
15
30
 
16
31
  def list
17
- list = {}
18
- q_tables = @db.select("sqlite_master", {"type" => "table"}, {"orderby" => "name"})
19
- while d_tables = q_tables.fetch
20
- list[d_tables[:name]] = KnjDB_sqlite3::Tables::Table.new(
21
- :db => @db,
22
- :driver => @driver,
23
- :data => d_tables
24
- )
32
+ ret = {} unless block_given?
33
+
34
+ @list_mutex.synchronize do
35
+ q_tables = @db.select("sqlite_master", {"type" => "table"}, {"orderby" => "name"}) do |d_tables|
36
+ obj = @list.get!(d_tables[:name])
37
+
38
+ if !obj
39
+ obj = KnjDB_sqlite3::Tables::Table.new(
40
+ :db => @db,
41
+ :driver => @driver,
42
+ :data => d_tables
43
+ )
44
+ @list[d_tables[:name]] = obj
45
+ end
46
+
47
+ if block_given?
48
+ yield(obj)
49
+ else
50
+ ret[d_tables[:Name]] = obj
51
+ end
52
+ end
25
53
  end
26
54
 
27
- return list
55
+ if block_given?
56
+ return nil
57
+ else
58
+ return ret
59
+ end
28
60
  end
29
61
 
30
62
  def create(name, data)
@@ -54,6 +86,9 @@ class KnjDB_sqlite3::Tables::Table
54
86
  @db = args[:db]
55
87
  @driver = args[:driver]
56
88
  @data = args[:data]
89
+
90
+ @list = Knj::Wref_map.new
91
+ @indexes_list = Knj::Wref_map.new
57
92
  end
58
93
 
59
94
  def name
@@ -69,6 +104,10 @@ class KnjDB_sqlite3::Tables::Table
69
104
  raise "stub!"
70
105
  end
71
106
 
107
+ def table
108
+ return @db.tables[@table_name]
109
+ end
110
+
72
111
  def column(name)
73
112
  list = self.columns
74
113
  return list[name] if list[name]
@@ -76,22 +115,34 @@ class KnjDB_sqlite3::Tables::Table
76
115
  end
77
116
 
78
117
  def columns
79
- if !@list
80
- @db.cols
81
- @list = {}
118
+ @db.cols
119
+ ret = {}
120
+
121
+ @db.q("PRAGMA table_info(`#{@driver.esc_table(self.name)}`)") do |d_cols|
122
+ obj = @list.get!(d_cols[:name])
82
123
 
83
- q_cols = @db.query("PRAGMA table_info(`#{@driver.esc_table(self.name)}`)")
84
- while d_cols = q_cols.fetch
85
- @list[d_cols[:name]] = KnjDB_sqlite3::Columns::Column.new(
86
- :table => self,
124
+ if !obj
125
+ obj = KnjDB_sqlite3::Columns::Column.new(
126
+ :table_name => self.name,
87
127
  :db => @db,
88
128
  :driver => @driver,
89
129
  :data => d_cols
90
130
  )
131
+ @list[d_cols[:name]] = obj
132
+ end
133
+
134
+ if block_given?
135
+ yield(obj)
136
+ else
137
+ ret[d_cols[:name]] = obj
91
138
  end
92
139
  end
93
140
 
94
- return @list
141
+ if block_given?
142
+ return nil
143
+ else
144
+ return ret
145
+ end
95
146
  end
96
147
 
97
148
  def create_columns(col_arr)
@@ -217,18 +268,41 @@ class KnjDB_sqlite3::Tables::Table
217
268
  end
218
269
 
219
270
  def index(name)
220
- list = self.indexes
221
- return list[name] if list[name]
271
+ name = name.to_s
272
+
273
+ begin
274
+ return @indexes_list[name]
275
+ rescue WeakRef::RefError
276
+ if @db.opts[:index_append_table_name]
277
+ tryname = "#{self.name}__#{name}"
278
+
279
+ begin
280
+ return @indexes_list[tryname]
281
+ rescue WeakRef::RefError
282
+ #ignore.
283
+ end
284
+ else
285
+ #ignore
286
+ end
287
+ end
288
+
289
+ self.indexes do |index|
290
+ return index if index.name.to_s == name
291
+ end
292
+
222
293
  raise Knj::Errors::NotFound.new("Index not found: #{name}.")
223
294
  end
224
295
 
225
296
  def indexes
226
- if !@indexes_list
227
- @db.indexes
228
- @indexes_list = {}
297
+ @db.indexes
298
+ ret = {}
299
+
300
+ @db.q("PRAGMA index_list(`#{@driver.esc_table(self.name)}`)") do |d_indexes|
301
+ next if d_indexes[:Key_name] == "PRIMARY"
302
+
303
+ obj = @indexes_list.get!(d_indexes[:name])
229
304
 
230
- q_indexes = @db.query("PRAGMA index_list(`#{@driver.esc_table(self.name)}`)")
231
- while d_indexes = q_indexes.fetch
305
+ if !obj
232
306
  if @db.opts[:index_append_table_name]
233
307
  match_name = d_indexes[:name].match(/__(.+)$/)
234
308
 
@@ -241,18 +315,28 @@ class KnjDB_sqlite3::Tables::Table
241
315
  name = d_indexes[:name]
242
316
  end
243
317
 
244
- @indexes_list[name] = KnjDB_sqlite3::Indexes::Index.new(
245
- :table => self,
318
+ obj = KnjDB_sqlite3::Indexes::Index.new(
319
+ :table_name => self.name,
246
320
  :db => @db,
247
321
  :driver => @driver,
248
322
  :data => d_indexes
249
323
  )
250
-
251
- @indexes_list[name].columns << name
324
+ obj.columns << name
325
+ @indexes_list[d_indexes[:name]] = obj
326
+ end
327
+
328
+ if block_given?
329
+ yield(obj)
330
+ else
331
+ ret[d_indexes[:name]] = obj
252
332
  end
253
333
  end
254
334
 
255
- return @indexes_list
335
+ if block_given?
336
+ return nil
337
+ else
338
+ return ret
339
+ end
256
340
  end
257
341
 
258
342
  def create_indexes(index_arr)
@@ -276,7 +360,6 @@ class KnjDB_sqlite3::Tables::Table
276
360
  sql << ")"
277
361
 
278
362
  @db.query(sql)
279
- @indexes_list = nil
280
363
  end
281
364
  end
282
365
 
@@ -252,6 +252,7 @@ class Knj::Db
252
252
  end
253
253
  end
254
254
 
255
+ #Makes a select from the given arguments: table-name, where-terms and other arguments as limits and orders. Also takes a block to avoid raping of memory.
255
256
  def select(tablename, arr_terms = nil, args = nil, &block)
256
257
  sql = ""
257
258
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: knjrbfw
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.19
4
+ version: 0.0.20
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,12 +9,12 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-03-03 00:00:00.000000000 +01:00
12
+ date: 2012-03-04 00:00:00.000000000 +01:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rspec
17
- requirement: &18696600 !ruby/object:Gem::Requirement
17
+ requirement: &12904920 !ruby/object:Gem::Requirement
18
18
  none: false
19
19
  requirements:
20
20
  - - ~>
@@ -22,10 +22,10 @@ dependencies:
22
22
  version: 2.3.0
23
23
  type: :development
24
24
  prerelease: false
25
- version_requirements: *18696600
25
+ version_requirements: *12904920
26
26
  - !ruby/object:Gem::Dependency
27
27
  name: bundler
28
- requirement: &18672900 !ruby/object:Gem::Requirement
28
+ requirement: &12875260 !ruby/object:Gem::Requirement
29
29
  none: false
30
30
  requirements:
31
31
  - - ~>
@@ -33,10 +33,10 @@ dependencies:
33
33
  version: 1.0.0
34
34
  type: :development
35
35
  prerelease: false
36
- version_requirements: *18672900
36
+ version_requirements: *12875260
37
37
  - !ruby/object:Gem::Dependency
38
38
  name: jeweler
39
- requirement: &18626780 !ruby/object:Gem::Requirement
39
+ requirement: &12868880 !ruby/object:Gem::Requirement
40
40
  none: false
41
41
  requirements:
42
42
  - - ~>
@@ -44,10 +44,10 @@ dependencies:
44
44
  version: 1.6.3
45
45
  type: :development
46
46
  prerelease: false
47
- version_requirements: *18626780
47
+ version_requirements: *12868880
48
48
  - !ruby/object:Gem::Dependency
49
49
  name: rcov
50
- requirement: &18624480 !ruby/object:Gem::Requirement
50
+ requirement: &12838540 !ruby/object:Gem::Requirement
51
51
  none: false
52
52
  requirements:
53
53
  - - ! '>='
@@ -55,10 +55,10 @@ dependencies:
55
55
  version: '0'
56
56
  type: :development
57
57
  prerelease: false
58
- version_requirements: *18624480
58
+ version_requirements: *12838540
59
59
  - !ruby/object:Gem::Dependency
60
60
  name: sqlite3
61
- requirement: &18622160 !ruby/object:Gem::Requirement
61
+ requirement: &12835900 !ruby/object:Gem::Requirement
62
62
  none: false
63
63
  requirements:
64
64
  - - ! '>='
@@ -66,10 +66,10 @@ dependencies:
66
66
  version: '0'
67
67
  type: :development
68
68
  prerelease: false
69
- version_requirements: *18622160
69
+ version_requirements: *12835900
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: rmagick
72
- requirement: &18602320 !ruby/object:Gem::Requirement
72
+ requirement: &12833760 !ruby/object:Gem::Requirement
73
73
  none: false
74
74
  requirements:
75
75
  - - ! '>='
@@ -77,7 +77,7 @@ dependencies:
77
77
  version: '0'
78
78
  type: :development
79
79
  prerelease: false
80
- version_requirements: *18602320
80
+ version_requirements: *12833760
81
81
  description: Including stuff for HTTP, SSH and much more.
82
82
  email: k@spernj.org
83
83
  executables: []
@@ -340,7 +340,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
340
340
  version: '0'
341
341
  segments:
342
342
  - 0
343
- hash: -2766455061602575387
343
+ hash: 2086432028938814395
344
344
  required_rubygems_version: !ruby/object:Gem::Requirement
345
345
  none: false
346
346
  requirements: