baza 0.0.12 → 0.0.13
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/baza.gemspec +2 -1
- data/include/db.rb +25 -18
- data/include/drivers/active_record/active_record.rb +112 -0
- data/include/drivers/mysql/mysql.rb +34 -29
- data/include/drivers/mysql/mysql_tables.rb +1 -0
- data/include/drivers/sqlite3/libknjdb_java_sqlite3.rb +5 -5
- data/include/drivers/sqlite3/libknjdb_sqlite3_ironruby.rb +3 -3
- data/include/drivers/sqlite3/sqlite3.rb +18 -18
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.13
|
data/baza.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = "baza"
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.13"
|
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"]
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"baza.gemspec",
|
29
29
|
"include/db.rb",
|
30
30
|
"include/dbtime.rb",
|
31
|
+
"include/drivers/active_record/active_record.rb",
|
31
32
|
"include/drivers/mysql/mysql.rb",
|
32
33
|
"include/drivers/mysql/mysql_columns.rb",
|
33
34
|
"include/drivers/mysql/mysql_indexes.rb",
|
data/include/db.rb
CHANGED
@@ -28,7 +28,7 @@ class Baza::Db
|
|
28
28
|
next unless File.directory?(fp)
|
29
29
|
|
30
30
|
driver_file = "#{fp}/#{file}.rb"
|
31
|
-
class_name =
|
31
|
+
class_name = StringCases.snake_to_camel(file).to_sym
|
32
32
|
|
33
33
|
drivers << {
|
34
34
|
:name => file,
|
@@ -54,7 +54,9 @@ class Baza::Db
|
|
54
54
|
obj = const.from_object(args)
|
55
55
|
if obj.is_a?(Hash) and obj[:type] == :success
|
56
56
|
if obj[:args]
|
57
|
-
|
57
|
+
new_args = obj[:args]
|
58
|
+
new_args = new_args.merge(args[:new_args]) if args[:new_args]
|
59
|
+
return Baza::Db.new(new_args)
|
58
60
|
else
|
59
61
|
raise "Didnt know what to do."
|
60
62
|
end
|
@@ -100,7 +102,7 @@ class Baza::Db
|
|
100
102
|
@opts[:subtype] = "ironruby"
|
101
103
|
end
|
102
104
|
|
103
|
-
@type_cc =
|
105
|
+
@type_cc = StringCases.snake_to_camel(@opts[:type])
|
104
106
|
self.connect
|
105
107
|
end
|
106
108
|
|
@@ -142,14 +144,14 @@ class Baza::Db
|
|
142
144
|
|
143
145
|
thread_cur = Thread.current
|
144
146
|
tid = self.__id__
|
145
|
-
thread_cur[:
|
147
|
+
thread_cur[:baza] = {} if !thread_cur[:baza]
|
146
148
|
|
147
|
-
if thread_cur[:
|
149
|
+
if thread_cur[:baza][tid]
|
148
150
|
#An object has already been spawned - free that first to avoid endless "used" objects.
|
149
151
|
self.free_thread
|
150
152
|
end
|
151
153
|
|
152
|
-
thread_cur[:
|
154
|
+
thread_cur[:baza][tid] = @conns.get_and_lock if !thread_cur[:baza][tid]
|
153
155
|
|
154
156
|
#If block given then be ensure to free thread after yielding.
|
155
157
|
if block_given?
|
@@ -166,9 +168,9 @@ class Baza::Db
|
|
166
168
|
thread_cur = Thread.current
|
167
169
|
tid = self.__id__
|
168
170
|
|
169
|
-
if thread_cur[:
|
170
|
-
db = thread_cur[:
|
171
|
-
thread_cur[:
|
171
|
+
if thread_cur[:baza] and thread_cur[:baza].key?(tid)
|
172
|
+
db = thread_cur[:baza][tid]
|
173
|
+
thread_cur[:baza].delete(tid)
|
172
174
|
@conns.free(db) if @conns
|
173
175
|
end
|
174
176
|
end
|
@@ -584,11 +586,11 @@ class Baza::Db
|
|
584
586
|
# str = driver.escape('something̈́')
|
585
587
|
# end
|
586
588
|
def conn_exec
|
587
|
-
if tcur = Thread.current and tcur[:
|
589
|
+
if tcur = Thread.current and tcur[:baza]
|
588
590
|
tid = self.__id__
|
589
591
|
|
590
|
-
if tcur[:
|
591
|
-
yield(tcur[:
|
592
|
+
if tcur[:baza].key?(tid)
|
593
|
+
yield(tcur[:baza][tid])
|
592
594
|
return nil
|
593
595
|
end
|
594
596
|
end
|
@@ -779,7 +781,7 @@ class Baza::Db
|
|
779
781
|
#Returns the table-module and spawns it if it isnt already spawned.
|
780
782
|
def tables
|
781
783
|
if !@tables
|
782
|
-
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_tables" if (!@opts.key?(:require) or @opts[:require])
|
784
|
+
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_tables" if (!@opts.key?(:require) or @opts[:require]) unless Baza::Driver.const_get(@type_cc).const_defined?(:Tables)
|
783
785
|
@tables = Baza::Driver.const_get(@type_cc).const_get(:Tables).new(
|
784
786
|
:db => self
|
785
787
|
)
|
@@ -791,7 +793,7 @@ class Baza::Db
|
|
791
793
|
#Returns the columns-module and spawns it if it isnt already spawned.
|
792
794
|
def cols
|
793
795
|
if !@cols
|
794
|
-
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_columns" if (!@opts.key?(:require) or @opts[:require])
|
796
|
+
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_columns" if (!@opts.key?(:require) or @opts[:require]) unless Baza::Driver.const_get(@type_cc).const_defined?(:Columns)
|
795
797
|
@cols = Baza::Driver.const_get(@type_cc).const_get(:Columns).new(
|
796
798
|
:db => self
|
797
799
|
)
|
@@ -803,7 +805,7 @@ class Baza::Db
|
|
803
805
|
#Returns the index-module and spawns it if it isnt already spawned.
|
804
806
|
def indexes
|
805
807
|
if !@indexes
|
806
|
-
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_indexes" if (!@opts.key?(:require) or @opts[:require])
|
808
|
+
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_indexes" if (!@opts.key?(:require) or @opts[:require]) unless Baza::Driver.const_get(@type_cc).const_defined?(:Indexes)
|
807
809
|
@indexes = Baza::Driver.const_get(@type_cc).const_get(:Indexes).new(
|
808
810
|
:db => self
|
809
811
|
)
|
@@ -815,7 +817,7 @@ class Baza::Db
|
|
815
817
|
#Returns the SQLSpec-module and spawns it if it isnt already spawned.
|
816
818
|
def sqlspecs
|
817
819
|
if !@sqlspecs
|
818
|
-
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_sqlspecs" if (!@opts.key?(:require) or @opts[:require])
|
820
|
+
require "#{File.dirname(__FILE__)}/drivers/#{@opts[:type]}/#{@opts[:type]}_sqlspecs" if (!@opts.key?(:require) or @opts[:require]) unless Baza::Driver.const_get(@type_cc).const_defined?(:Sqlspecs)
|
819
821
|
@sqlspecs = Baza::Driver.const_get(@type_cc).const_get(:Sqlspecs).new(
|
820
822
|
:db => self
|
821
823
|
)
|
@@ -861,11 +863,16 @@ class Baza::Db
|
|
861
863
|
end
|
862
864
|
end
|
863
865
|
|
864
|
-
raise "Method not found: #{method_name}"
|
866
|
+
raise "Method not found: '#{method_name}'."
|
865
867
|
end
|
866
868
|
end
|
867
869
|
|
868
870
|
#Subclass that contains all the drivers as further subclasses.
|
869
871
|
class Baza::Driver
|
870
|
-
|
872
|
+
#Autoloader for drivers.
|
873
|
+
def self.const_missing(name)
|
874
|
+
require_relative "drivers/#{StringCases.camel_to_snake(name)}/#{StringCases.camel_to_snake(name)}.rb"
|
875
|
+
raise LoadError, "Still not loaded: '#{name}'." unless Baza::Driver.const_defined?(name)
|
876
|
+
return Baza::Driver.const_get(name)
|
877
|
+
end
|
871
878
|
end
|
@@ -0,0 +1,112 @@
|
|
1
|
+
class Baza::Driver::ActiveRecord
|
2
|
+
attr_reader :baza, :conn, :sep_table, :sep_col, :sep_val, :symbolize, :conn_type
|
3
|
+
attr_accessor :tables, :cols, :indexes
|
4
|
+
|
5
|
+
def self.from_object(args)
|
6
|
+
if args[:object].class.name.include?("ActiveRecord::ConnectionAdapters")
|
7
|
+
return {
|
8
|
+
:type => :success,
|
9
|
+
:args => {
|
10
|
+
:type => :active_record,
|
11
|
+
:conn => args[:object]
|
12
|
+
}
|
13
|
+
}
|
14
|
+
end
|
15
|
+
|
16
|
+
return nil
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(baza)
|
20
|
+
@baza = baza
|
21
|
+
@conn = @baza.opts[:conn]
|
22
|
+
conn_name = @conn.class.name.to_s.downcase
|
23
|
+
|
24
|
+
if conn_name.include?("mysql")
|
25
|
+
@sep_table = "`"
|
26
|
+
@sep_col = "`"
|
27
|
+
@sep_val = "'"
|
28
|
+
@conn_type = :mysql
|
29
|
+
elsif conn_name.include?("sqlite")
|
30
|
+
@sep_table = "`"
|
31
|
+
@sep_col = "`"
|
32
|
+
@sep_val = "'"
|
33
|
+
@conn_type = :sqlite3
|
34
|
+
else
|
35
|
+
raise "Unknown type: '#{conn_name}'."
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def query(str)
|
40
|
+
Baza::Driver::ActiveRecord::Result.new(self, @conn.execute(str))
|
41
|
+
end
|
42
|
+
|
43
|
+
def escape(str)
|
44
|
+
@conn.quote_string(str.to_s)
|
45
|
+
end
|
46
|
+
|
47
|
+
def esc_col(string)
|
48
|
+
string = string.to_s
|
49
|
+
raise "Invalid column-string: #{string}" if string.include?(@sep_col)
|
50
|
+
return string
|
51
|
+
end
|
52
|
+
|
53
|
+
def esc_table(string)
|
54
|
+
string = string.to_s
|
55
|
+
raise "Invalid column-string: #{string}" if string.include?(@sep_col)
|
56
|
+
return string
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
class Baza::Driver::ActiveRecord::Result
|
61
|
+
def initialize(db, res)
|
62
|
+
@db = db
|
63
|
+
@res = res
|
64
|
+
end
|
65
|
+
|
66
|
+
def each
|
67
|
+
@res.each(:as => :hash) do |hash|
|
68
|
+
yield hash.symbolize_keys!
|
69
|
+
end
|
70
|
+
|
71
|
+
nil
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class Baza::Driver::ActiveRecord::Tables
|
76
|
+
def initialize(args)
|
77
|
+
@args = args
|
78
|
+
|
79
|
+
require_relative "../#{@args[:db].conn.conn_type}/#{@args[:db].conn.conn_type}_tables"
|
80
|
+
@proxy_to = ::Baza::Driver.const_get(StringCases.snake_to_camel(@args[:db].conn.conn_type)).const_get(:Tables).new(@args)
|
81
|
+
end
|
82
|
+
|
83
|
+
def method_missing(name, *args, &blk)
|
84
|
+
@proxy_to.__send__(name, *args, &blk)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
class Baza::Driver::ActiveRecord::Columns
|
89
|
+
def initialize(args)
|
90
|
+
@args = args
|
91
|
+
|
92
|
+
require_relative "../#{@args[:db].conn.conn_type}/#{@args[:db].conn.conn_type}_columns"
|
93
|
+
@proxy_to = ::Baza::Driver.const_get(StringCases.snake_to_camel(@args[:db].conn.conn_type)).const_get(:Columns).new(@args)
|
94
|
+
end
|
95
|
+
|
96
|
+
def method_missing(name, *args, &blk)
|
97
|
+
@proxy_to.__send__(name, *args, &blk)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
class Baza::Driver::ActiveRecord::Indexes
|
102
|
+
def initialize(args)
|
103
|
+
@args = args
|
104
|
+
|
105
|
+
require_relative "../#{@args[:db].conn.conn_type}/#{@args[:db].conn.conn_type}_indexes"
|
106
|
+
@proxy_to = ::Baza::Driver.const_get(StringCases.snake_to_camel(@args[:db].conn.conn_type)).const_get(:Indexes).new(@args)
|
107
|
+
end
|
108
|
+
|
109
|
+
def method_missing(name, *args, &blk)
|
110
|
+
@proxy_to.__send__(name, *args, &blk)
|
111
|
+
end
|
112
|
+
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
class Baza::Driver::Mysql
|
2
|
-
attr_reader :
|
2
|
+
attr_reader :baza, :conn, :conns, :sep_table, :sep_col, :sep_val
|
3
3
|
attr_accessor :tables, :cols, :indexes
|
4
4
|
|
5
5
|
#Helper to enable automatic registering of database using Baza::Db.from_object
|
@@ -10,7 +10,11 @@ class Baza::Driver::Mysql
|
|
10
10
|
:args => {
|
11
11
|
:type => :mysql,
|
12
12
|
:subtype => :mysql2,
|
13
|
-
:conn => args[:object]
|
13
|
+
:conn => args[:object],
|
14
|
+
:query_args => {
|
15
|
+
:as => :hash,
|
16
|
+
:symbolize_keys => true
|
17
|
+
}
|
14
18
|
}
|
15
19
|
}
|
16
20
|
end
|
@@ -18,9 +22,9 @@ class Baza::Driver::Mysql
|
|
18
22
|
return nil
|
19
23
|
end
|
20
24
|
|
21
|
-
def initialize(
|
22
|
-
@
|
23
|
-
@opts = @
|
25
|
+
def initialize(baza_db_obj)
|
26
|
+
@baza_db = baza_db_obj
|
27
|
+
@opts = @baza_db.opts
|
24
28
|
@sep_table = "`"
|
25
29
|
@sep_col = "`"
|
26
30
|
@sep_val = "'"
|
@@ -34,14 +38,14 @@ class Baza::Driver::Mysql
|
|
34
38
|
@encoding = "utf8"
|
35
39
|
end
|
36
40
|
|
37
|
-
if @
|
38
|
-
@port = @
|
41
|
+
if @baza_db.opts.key?(:port)
|
42
|
+
@port = @baza_db.opts[:port].to_i
|
39
43
|
else
|
40
44
|
@port = 3306
|
41
45
|
end
|
42
46
|
|
43
47
|
@java_rs_data = {}
|
44
|
-
@subtype = @
|
48
|
+
@subtype = @baza_db.opts[:subtype]
|
45
49
|
@subtype = :mysql if @subtype.to_s.empty?
|
46
50
|
self.reconnect
|
47
51
|
end
|
@@ -66,16 +70,16 @@ class Baza::Driver::Mysql
|
|
66
70
|
@mutex.synchronize do
|
67
71
|
case @subtype
|
68
72
|
when :mysql
|
69
|
-
@conn = Mysql.real_connect(@
|
73
|
+
@conn = Mysql.real_connect(@baza_db.opts[:host], @baza_db.opts[:user], @baza_db.opts[:pass], @baza_db.opts[:db], @port)
|
70
74
|
when :mysql2
|
71
75
|
require "rubygems"
|
72
76
|
require "mysql2"
|
73
77
|
|
74
78
|
args = {
|
75
|
-
:host => @
|
76
|
-
:username => @
|
77
|
-
:password => @
|
78
|
-
:database => @
|
79
|
+
:host => @baza_db.opts[:host],
|
80
|
+
:username => @baza_db.opts[:user],
|
81
|
+
:password => @baza_db.opts[:pass],
|
82
|
+
:database => @baza_db.opts[:db],
|
79
83
|
:port => @port,
|
80
84
|
:symbolize_keys => true,
|
81
85
|
:cache_rows => false
|
@@ -83,11 +87,11 @@ class Baza::Driver::Mysql
|
|
83
87
|
|
84
88
|
#Symbolize keys should also be given here, else table-data wont be symbolized for some reason - knj.
|
85
89
|
@query_args = {:symbolize_keys => true}
|
86
|
-
@query_args.merge!(@
|
90
|
+
@query_args.merge!(@baza_db.opts[:query_args]) if @baza_db.opts[:query_args]
|
87
91
|
|
88
92
|
pos_args = [:as, :async, :cast_booleans, :database_timezone, :application_timezone, :cache_rows, :connect_flags, :cast]
|
89
93
|
pos_args.each do |key|
|
90
|
-
args[key] = @
|
94
|
+
args[key] = @baza_db.opts[key] if @baza_db.opts.key?(key)
|
91
95
|
end
|
92
96
|
|
93
97
|
args[:as] = :array if @opts[:result] == "array"
|
@@ -95,8 +99,8 @@ class Baza::Driver::Mysql
|
|
95
99
|
tries = 0
|
96
100
|
begin
|
97
101
|
tries += 1
|
98
|
-
if @
|
99
|
-
@conn = @
|
102
|
+
if @baza_db.opts[:conn]
|
103
|
+
@conn = @baza_db.opts[:conn]
|
100
104
|
else
|
101
105
|
@conn = Mysql2::Client.new(args)
|
102
106
|
end
|
@@ -104,6 +108,7 @@ class Baza::Driver::Mysql
|
|
104
108
|
if tries <= 3
|
105
109
|
if e.message == "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)"
|
106
110
|
sleep 1
|
111
|
+
tries += 1
|
107
112
|
retry
|
108
113
|
end
|
109
114
|
end
|
@@ -118,7 +123,7 @@ class Baza::Driver::Mysql
|
|
118
123
|
@jdbc_loaded = true
|
119
124
|
end
|
120
125
|
|
121
|
-
@conn = java.sql::DriverManager.getConnection("jdbc:mysql://#{@
|
126
|
+
@conn = java.sql::DriverManager.getConnection("jdbc:mysql://#{@baza_db.opts[:host]}:#{@port}/#{@baza_db.opts[:db]}?user=#{@baza_db.opts[:user]}&password=#{@baza_db.opts[:pass]}&populateInsertRowWithDefaultValues=true&zeroDateTimeBehavior=round&characterEncoding=#{@encoding}&holdResultsOpenOverStatementClose=true")
|
122
127
|
self.query("SET SQL_MODE = ''")
|
123
128
|
else
|
124
129
|
raise "Unknown subtype: #{@subtype} (#{@subtype.class.name})"
|
@@ -158,7 +163,7 @@ class Baza::Driver::Mysql
|
|
158
163
|
|
159
164
|
begin
|
160
165
|
res = stmt.execute_query(str)
|
161
|
-
ret = Baza::Driver::Mysql::ResultJava.new(@
|
166
|
+
ret = Baza::Driver::Mysql::ResultJava.new(@baza_db, @opts, res)
|
162
167
|
id = ret.__id__
|
163
168
|
|
164
169
|
#If ID is being reused we have to free the result.
|
@@ -222,7 +227,7 @@ class Baza::Driver::Mysql
|
|
222
227
|
|
223
228
|
begin
|
224
229
|
res = stmt.executeQuery(str)
|
225
|
-
ret = Baza::Driver::Mysql::ResultJava.new(@
|
230
|
+
ret = Baza::Driver::Mysql::ResultJava.new(@baza_db, @opts, res)
|
226
231
|
|
227
232
|
#Save reference to result and statement, so we can close them when they are garbage collected.
|
228
233
|
@java_rs_data[ret.__id__] = {:res => res, :stmt => stmt}
|
@@ -271,7 +276,7 @@ class Baza::Driver::Mysql
|
|
271
276
|
#Escapes a string to be safe to use as a column in a query.
|
272
277
|
def esc_col(string)
|
273
278
|
string = string.to_s
|
274
|
-
raise "Invalid column-string: #{string}" if string.
|
279
|
+
raise "Invalid column-string: #{string}" if string.include?(@sep_col)
|
275
280
|
return string
|
276
281
|
end
|
277
282
|
|
@@ -306,7 +311,7 @@ class Baza::Driver::Mysql
|
|
306
311
|
#Destroyes the connection.
|
307
312
|
def destroy
|
308
313
|
@conn = nil
|
309
|
-
@
|
314
|
+
@baza_db = nil
|
310
315
|
@mutex = nil
|
311
316
|
@subtype = nil
|
312
317
|
@encoding = nil
|
@@ -352,7 +357,7 @@ class Baza::Driver::Mysql
|
|
352
357
|
sql << ","
|
353
358
|
end
|
354
359
|
|
355
|
-
sql << @
|
360
|
+
sql << @baza_db.sqlval(val)
|
356
361
|
end
|
357
362
|
else
|
358
363
|
hash.each do |key, val|
|
@@ -362,7 +367,7 @@ class Baza::Driver::Mysql
|
|
362
367
|
sql << ","
|
363
368
|
end
|
364
369
|
|
365
|
-
sql << @
|
370
|
+
sql << @baza_db.sqlval(val)
|
366
371
|
end
|
367
372
|
end
|
368
373
|
end
|
@@ -393,13 +398,13 @@ class Baza::Driver::Mysql
|
|
393
398
|
|
394
399
|
#Starts a transaction, yields the database and commits at the end.
|
395
400
|
def transaction
|
396
|
-
@
|
401
|
+
@baza_db.q("START TRANSACTION")
|
397
402
|
|
398
403
|
begin
|
399
|
-
yield(@
|
400
|
-
@
|
404
|
+
yield(@baza_db)
|
405
|
+
@baza_db.q("COMMIT")
|
401
406
|
rescue
|
402
|
-
@
|
407
|
+
@baza_db.q("ROLLBACK")
|
403
408
|
raise
|
404
409
|
end
|
405
410
|
end
|
@@ -552,7 +557,7 @@ end
|
|
552
557
|
class Baza::Driver::Mysql::ResultJava
|
553
558
|
#Constructor. This should not be called manually.
|
554
559
|
def initialize(knjdb, opts, result)
|
555
|
-
@
|
560
|
+
@baza_db = knjdb
|
556
561
|
@result = result
|
557
562
|
|
558
563
|
if !opts.key?(:result) or opts[:result] == "hash"
|
@@ -11,18 +11,18 @@ class KnjDB_java_sqlite3
|
|
11
11
|
return "'"
|
12
12
|
end
|
13
13
|
|
14
|
-
def initialize(
|
15
|
-
@
|
14
|
+
def initialize(baza_db_obj)
|
15
|
+
@baza_db = baza_db_obj
|
16
16
|
|
17
|
-
if @
|
18
|
-
require @
|
17
|
+
if @baza_db.opts[:sqlite_driver]
|
18
|
+
require @baza_db.opts[:sqlite_driver]
|
19
19
|
else
|
20
20
|
require File.dirname(__FILE__) + "/sqlitejdbc-v056.jar"
|
21
21
|
end
|
22
22
|
|
23
23
|
require "java"
|
24
24
|
import "org.sqlite.JDBC"
|
25
|
-
@conn = java.sql.DriverManager::getConnection("jdbc:sqlite:" + @
|
25
|
+
@conn = java.sql.DriverManager::getConnection("jdbc:sqlite:" + @baza_db.opts[:path])
|
26
26
|
@stat = @conn.createStatement
|
27
27
|
end
|
28
28
|
|
@@ -14,9 +14,9 @@ class Baza::Driver::Sqlite3_ironruby
|
|
14
14
|
return "'"
|
15
15
|
end
|
16
16
|
|
17
|
-
def initialize(
|
18
|
-
@
|
19
|
-
@conn = Mono::Data::SqliteClient::SqliteConnection.new("URI=file:" + @
|
17
|
+
def initialize(baza_db_obj)
|
18
|
+
@baza_db = baza_db_obj
|
19
|
+
@conn = Mono::Data::SqliteClient::SqliteConnection.new("URI=file:" + @baza_db.opts[:path] + ",version=3")
|
20
20
|
@conn.Open
|
21
21
|
end
|
22
22
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
#This class handels SQLite3-specific behaviour.
|
2
2
|
class Baza::Driver::Sqlite3
|
3
|
-
attr_reader :
|
3
|
+
attr_reader :baza, :conn, :sep_table, :sep_col, :sep_val, :symbolize
|
4
4
|
attr_accessor :tables, :cols, :indexes
|
5
5
|
|
6
6
|
#Helper to enable automatic registering of database using Baza::Db.from_object
|
@@ -19,34 +19,34 @@ class Baza::Driver::Sqlite3
|
|
19
19
|
end
|
20
20
|
|
21
21
|
#Constructor. This should not be called manually.
|
22
|
-
def initialize(
|
22
|
+
def initialize(baza_db_obj)
|
23
23
|
@sep_table = "`"
|
24
24
|
@sep_col = "`"
|
25
25
|
@sep_val = "'"
|
26
26
|
|
27
|
-
@
|
28
|
-
@path = @
|
29
|
-
@path = @
|
27
|
+
@baza_db = baza_db_obj
|
28
|
+
@path = @baza_db.opts[:path] if @baza_db.opts[:path]
|
29
|
+
@path = @baza_db.opts["path"] if @baza_db.opts["path"]
|
30
30
|
|
31
|
-
@
|
31
|
+
@baza_db.opts[:subtype] = "java" if !@baza_db.opts.key?(:subtype) and RUBY_ENGINE == "jruby"
|
32
32
|
|
33
|
-
if @
|
34
|
-
@conn = @
|
33
|
+
if @baza_db.opts[:conn]
|
34
|
+
@conn = @baza_db.opts[:conn]
|
35
35
|
else
|
36
36
|
raise "No path was given." if !@path
|
37
37
|
|
38
|
-
if @
|
39
|
-
if @
|
40
|
-
require @
|
38
|
+
if @baza_db.opts[:subtype] == "java"
|
39
|
+
if @baza_db.opts[:sqlite_driver]
|
40
|
+
require @baza_db.opts[:sqlite_driver]
|
41
41
|
else
|
42
42
|
require "#{File.dirname(__FILE__)}/../../../jruby/sqlitejdbc-v056.jar"
|
43
43
|
end
|
44
44
|
|
45
45
|
require "java"
|
46
46
|
import "org.sqlite.JDBC"
|
47
|
-
@conn = java.sql.DriverManager::getConnection("jdbc:sqlite:#{@
|
47
|
+
@conn = java.sql.DriverManager::getConnection("jdbc:sqlite:#{@baza_db.opts[:path]}")
|
48
48
|
@stat = @conn.createStatement
|
49
|
-
elsif @
|
49
|
+
elsif @baza_db.opts[:subtype] == "rhodes"
|
50
50
|
@conn = SQLite3::Database.new(@path, @path)
|
51
51
|
else
|
52
52
|
@conn = SQLite3::Database.open(@path)
|
@@ -58,9 +58,9 @@ class Baza::Driver::Sqlite3
|
|
58
58
|
|
59
59
|
#Executes a query against the driver.
|
60
60
|
def query(string)
|
61
|
-
if @
|
61
|
+
if @baza_db.opts[:subtype] == :rhodes
|
62
62
|
return Baza::Driver::Sqlite3::Result.new(self, @conn.execute(string, string))
|
63
|
-
elsif @
|
63
|
+
elsif @baza_db.opts[:subtype] == :java
|
64
64
|
begin
|
65
65
|
return Baza::Driver::Sqlite3::ResultJava.new(self, @stat.executeQuery(string))
|
66
66
|
rescue java.sql.SQLException => e
|
@@ -109,16 +109,16 @@ class Baza::Driver::Sqlite3
|
|
109
109
|
#Starts a transaction, yields the database and commits.
|
110
110
|
def transaction
|
111
111
|
@conn.transaction do
|
112
|
-
yield(@
|
112
|
+
yield(@baza_db)
|
113
113
|
end
|
114
114
|
end
|
115
115
|
|
116
116
|
def insert_multi(tablename, arr_hashes, args = nil)
|
117
117
|
sql = [] if args and args[:return_sql]
|
118
118
|
|
119
|
-
@
|
119
|
+
@baza_db.transaction do
|
120
120
|
arr_hashes.each do |hash|
|
121
|
-
res = @
|
121
|
+
res = @baza_db.insert(tablename, hash, args)
|
122
122
|
sql << res if args and args[:return_sql]
|
123
123
|
end
|
124
124
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: baza
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.13
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -206,6 +206,7 @@ files:
|
|
206
206
|
- baza.gemspec
|
207
207
|
- include/db.rb
|
208
208
|
- include/dbtime.rb
|
209
|
+
- include/drivers/active_record/active_record.rb
|
209
210
|
- include/drivers/mysql/mysql.rb
|
210
211
|
- include/drivers/mysql/mysql_columns.rb
|
211
212
|
- include/drivers/mysql/mysql_indexes.rb
|
@@ -249,7 +250,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
249
250
|
- !ruby/object:Gem::Version
|
250
251
|
segments:
|
251
252
|
- 0
|
252
|
-
hash: -
|
253
|
+
hash: -1432230654984551532
|
253
254
|
version: '0'
|
254
255
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
255
256
|
none: false
|