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 +1 -1
- data/knjrbfw.gemspec +2 -2
- data/lib/knj/datarow.rb +7 -7
- data/lib/knj/knjdb/drivers/mysql/knjdb_mysql_tables.rb +10 -2
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_columns.rb +1 -1
- data/lib/knj/knjdb/drivers/sqlite3/knjdb_sqlite3_tables.rb +115 -32
- data/lib/knj/knjdb/libknjdb.rb +1 -0
- metadata +15 -15
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
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.
|
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-
|
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
|
-
|
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
|
-
|
199
|
+
if block_given?
|
200
|
+
return nil
|
201
|
+
else
|
202
|
+
return ret
|
203
|
+
end
|
196
204
|
end
|
197
205
|
|
198
206
|
def index(name)
|
@@ -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
|
-
|
12
|
-
|
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
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
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
|
-
|
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
|
-
|
80
|
-
|
81
|
-
|
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
|
-
|
84
|
-
|
85
|
-
|
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
|
-
|
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
|
-
|
221
|
-
|
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
|
-
|
227
|
-
|
228
|
-
|
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
|
-
|
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
|
-
|
245
|
-
:
|
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]
|
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
|
-
|
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
|
|
data/lib/knj/knjdb/libknjdb.rb
CHANGED
@@ -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.
|
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-
|
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: &
|
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: *
|
25
|
+
version_requirements: *12904920
|
26
26
|
- !ruby/object:Gem::Dependency
|
27
27
|
name: bundler
|
28
|
-
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: *
|
36
|
+
version_requirements: *12875260
|
37
37
|
- !ruby/object:Gem::Dependency
|
38
38
|
name: jeweler
|
39
|
-
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: *
|
47
|
+
version_requirements: *12868880
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
49
|
name: rcov
|
50
|
-
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: *
|
58
|
+
version_requirements: *12838540
|
59
59
|
- !ruby/object:Gem::Dependency
|
60
60
|
name: sqlite3
|
61
|
-
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: *
|
69
|
+
version_requirements: *12835900
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rmagick
|
72
|
-
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: *
|
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:
|
343
|
+
hash: 2086432028938814395
|
344
344
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
345
345
|
none: false
|
346
346
|
requirements:
|