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