knjrbfw 0.0.19 → 0.0.20

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 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: