baza 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.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +157 -0
- data/Gemfile +11 -9
- data/Gemfile.lock +41 -9
- data/README.md +1 -1
- data/Rakefile +19 -16
- data/VERSION +1 -1
- data/baza.gemspec +31 -7
- data/config/best_project_practice_rubocop.yml +2 -0
- data/config/best_project_practice_rubocop_todo.yml +157 -0
- data/lib/baza/base_sql_driver.rb +79 -20
- data/lib/baza/cloner.rb +2 -2
- data/lib/baza/column.rb +6 -0
- data/lib/baza/database.rb +33 -0
- data/lib/baza/database_model.rb +26 -0
- data/lib/baza/database_model_functionality.rb +10 -0
- data/lib/baza/database_model_name.rb +16 -0
- data/lib/baza/db.rb +210 -413
- data/lib/baza/dbtime.rb +20 -20
- data/lib/baza/driver.rb +3 -3
- data/lib/baza/drivers/active_record/columns.rb +1 -1
- data/lib/baza/drivers/active_record/indexes.rb +1 -1
- data/lib/baza/drivers/active_record/result.rb +3 -5
- data/lib/baza/drivers/active_record/tables.rb +2 -2
- data/lib/baza/drivers/active_record.rb +30 -16
- data/lib/baza/drivers/mysql/column.rb +51 -48
- data/lib/baza/drivers/mysql/columns.rb +8 -8
- data/lib/baza/drivers/mysql/database.rb +28 -0
- data/lib/baza/drivers/mysql/databases.rb +35 -0
- data/lib/baza/drivers/mysql/index.rb +32 -22
- data/lib/baza/drivers/mysql/result.rb +24 -24
- data/lib/baza/drivers/mysql/sqlspecs.rb +1 -1
- data/lib/baza/drivers/mysql/table.rb +80 -91
- data/lib/baza/drivers/mysql/tables.rb +30 -32
- data/lib/baza/drivers/mysql/unbuffered_result.rb +5 -5
- data/lib/baza/drivers/mysql.rb +127 -220
- data/lib/baza/drivers/mysql2/database.rb +2 -0
- data/lib/baza/drivers/mysql2/databases.rb +2 -0
- data/lib/baza/drivers/mysql2/result.rb +3 -5
- data/lib/baza/drivers/mysql2.rb +21 -106
- data/lib/baza/drivers/mysql_java/database.rb +2 -0
- data/lib/baza/drivers/mysql_java/databases.rb +2 -0
- data/lib/baza/drivers/mysql_java.rb +16 -12
- data/lib/baza/drivers/sqlite3/column.rb +33 -33
- data/lib/baza/drivers/sqlite3/columns.rb +6 -6
- data/lib/baza/drivers/sqlite3/database.rb +2 -0
- data/lib/baza/drivers/sqlite3/databases.rb +25 -0
- data/lib/baza/drivers/sqlite3/index.rb +20 -6
- data/lib/baza/drivers/sqlite3/result.rb +16 -17
- data/lib/baza/drivers/sqlite3/sqlspecs.rb +1 -1
- data/lib/baza/drivers/sqlite3/table.rb +99 -100
- data/lib/baza/drivers/sqlite3/tables.rb +30 -23
- data/lib/baza/drivers/sqlite3/unbuffered_result.rb +2 -2
- data/lib/baza/drivers/sqlite3.rb +27 -14
- data/lib/baza/drivers/sqlite3_java/database.rb +2 -0
- data/lib/baza/drivers/sqlite3_java/unbuffered_result.rb +2 -2
- data/lib/baza/drivers/sqlite3_java.rb +12 -10
- data/lib/baza/drivers/sqlite3_rhodes.rb +9 -7
- data/lib/baza/dump.rb +55 -55
- data/lib/baza/errors.rb +5 -0
- data/lib/baza/idquery.rb +25 -25
- data/lib/baza/index.rb +6 -0
- data/lib/baza/jdbc_driver.rb +6 -8
- data/lib/baza/jdbc_result.rb +1 -1
- data/lib/baza/model.rb +299 -309
- data/lib/baza/model_custom.rb +74 -72
- data/lib/baza/model_handler.rb +244 -255
- data/lib/baza/model_handler_sqlhelper.rb +122 -132
- data/lib/baza/mysql_base_driver.rb +112 -0
- data/lib/baza/query_buffer.rb +23 -23
- data/lib/baza/result_base.rb +2 -2
- data/lib/baza/revision.rb +67 -67
- data/lib/baza/row.rb +82 -84
- data/lib/baza/sqlspecs.rb +1 -1
- data/lib/baza/table.rb +31 -0
- data/lib/baza.rb +43 -10
- data/shippable.yml +1 -0
- data/spec/cloner_spec.rb +4 -4
- data/spec/drivers/active_record_mysql2_spec.rb +3 -3
- data/spec/drivers/active_record_mysql_spec.rb +2 -2
- data/spec/drivers/active_record_sqlite3_spec.rb +2 -2
- data/spec/drivers/mysql2_spec.rb +1 -0
- data/spec/drivers/mysql_spec.rb +1 -0
- data/spec/drivers/sqlite3_spec.rb +4 -5
- data/spec/info_active_record_example.rb +4 -6
- data/spec/info_active_record_mysql.rb +6 -7
- data/spec/info_active_record_mysql2.rb +2 -4
- data/spec/info_active_record_mysql2_shippable.rb +2 -4
- data/spec/info_active_record_mysql_shippable.rb +2 -4
- data/spec/info_active_record_sqlite3.rb +5 -6
- data/spec/info_mysql2_example.rb +1 -1
- data/spec/info_mysql2_shippable.rb +1 -1
- data/spec/info_mysql_example.rb +1 -1
- data/spec/info_mysql_shippable.rb +1 -1
- data/spec/info_sqlite3.rb +4 -3
- data/spec/model_handler_spec.rb +102 -115
- data/spec/spec_helper.rb +5 -5
- data/spec/support/driver_collection.rb +98 -95
- data/spec/support/driver_columns_collection.rb +18 -22
- data/spec/support/driver_databases_collection.rb +29 -0
- data/spec/support/driver_indexes_collection.rb +7 -6
- data/spec/support/driver_tables_collection.rb +38 -26
- metadata +49 -3
@@ -1,6 +1,10 @@
|
|
1
|
+
Baza.load_driver("mysql")
|
2
|
+
|
1
3
|
class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
2
4
|
path = "#{File.dirname(__FILE__)}/mysql_java"
|
3
5
|
|
6
|
+
autoload :Database, "#{path}/database"
|
7
|
+
autoload :Databases, "#{path}/databases"
|
4
8
|
autoload :Table, "#{path}/table"
|
5
9
|
autoload :Tables, "#{path}/tables"
|
6
10
|
autoload :Column, "#{path}/column"
|
@@ -13,7 +17,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
13
17
|
|
14
18
|
attr_reader :conn, :conns
|
15
19
|
|
16
|
-
#Helper to enable automatic registering of database using Baza::Db.from_object
|
20
|
+
# Helper to enable automatic registering of database using Baza::Db.from_object
|
17
21
|
def self.from_object(args)
|
18
22
|
if args[:object].class.name == "Java::ComMysqlJdbc::JDBC4Connection"
|
19
23
|
return {
|
@@ -25,7 +29,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
25
29
|
}
|
26
30
|
end
|
27
31
|
|
28
|
-
|
32
|
+
nil
|
29
33
|
end
|
30
34
|
|
31
35
|
def initialize(baza)
|
@@ -36,7 +40,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
36
40
|
if @opts[:encoding]
|
37
41
|
@encoding = @opts[:encoding]
|
38
42
|
else
|
39
|
-
@encoding =
|
43
|
+
@encoding = "utf8"
|
40
44
|
end
|
41
45
|
|
42
46
|
if @baza.opts.key?(:port)
|
@@ -49,7 +53,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
49
53
|
reconnect
|
50
54
|
end
|
51
55
|
|
52
|
-
#Respawns the connection to the MySQL-database.
|
56
|
+
# Respawns the connection to the MySQL-database.
|
53
57
|
def reconnect
|
54
58
|
@mutex.synchronize do
|
55
59
|
if @baza.opts[:conn]
|
@@ -61,23 +65,23 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
61
65
|
end
|
62
66
|
|
63
67
|
query_no_result_set("SET SQL_MODE = ''")
|
64
|
-
query_no_result_set("SET NAMES '#{
|
68
|
+
query_no_result_set("SET NAMES '#{esc(@encoding)}'") if @encoding
|
65
69
|
end
|
66
70
|
end
|
67
71
|
|
68
|
-
#Returns the last inserted ID for the connection.
|
72
|
+
# Returns the last inserted ID for the connection.
|
69
73
|
def last_id
|
70
74
|
data = query("SELECT LAST_INSERT_ID() AS id").fetch
|
71
75
|
return data[:id].to_i if data[:id]
|
72
76
|
raise "Could not figure out last inserted ID."
|
73
77
|
end
|
74
78
|
|
75
|
-
#Closes the connection threadsafe.
|
79
|
+
# Closes the connection threadsafe.
|
76
80
|
def close
|
77
81
|
@mutex.synchronize { @conn.close }
|
78
82
|
end
|
79
83
|
|
80
|
-
#Destroyes the connection.
|
84
|
+
# Destroyes the connection.
|
81
85
|
def destroy
|
82
86
|
@conn = nil
|
83
87
|
@baza = nil
|
@@ -87,7 +91,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
87
91
|
@port = nil
|
88
92
|
end
|
89
93
|
|
90
|
-
#Inserts multiple rows in a table. Can return the inserted IDs if asked to in arguments.
|
94
|
+
# Inserts multiple rows in a table. Can return the inserted IDs if asked to in arguments.
|
91
95
|
def insert_multi(tablename, arr_hashes, args = nil)
|
92
96
|
sql = "INSERT INTO `#{tablename}` ("
|
93
97
|
|
@@ -103,7 +107,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
103
107
|
keys.each do |col_name|
|
104
108
|
sql << "," unless first
|
105
109
|
first = false if first
|
106
|
-
sql << "`#{
|
110
|
+
sql << "`#{escape_column(col_name)}`"
|
107
111
|
end
|
108
112
|
|
109
113
|
sql << ") VALUES ("
|
@@ -128,7 +132,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
128
132
|
sql << @baza.sqlval(val)
|
129
133
|
end
|
130
134
|
else
|
131
|
-
hash.each do |
|
135
|
+
hash.each do |_key, val|
|
132
136
|
if first_key
|
133
137
|
first_key = false
|
134
138
|
else
|
@@ -147,7 +151,7 @@ class Baza::Driver::MysqlJava < Baza::JdbcDriver
|
|
147
151
|
query_no_result_set(sql)
|
148
152
|
|
149
153
|
if args && args[:return_id]
|
150
|
-
first_id =
|
154
|
+
first_id = last_id
|
151
155
|
raise "Invalid ID: #{first_id}" if first_id.to_i <= 0
|
152
156
|
ids = [first_id]
|
153
157
|
1.upto(arr_hashes.length - 1) do |count|
|
@@ -1,30 +1,30 @@
|
|
1
|
-
#This class handels all the SQLite3-columns.
|
1
|
+
# This class handels all the SQLite3-columns.
|
2
2
|
class Baza::Driver::Sqlite3::Column < Baza::Column
|
3
3
|
attr_reader :args
|
4
4
|
|
5
|
-
#Constructor. This should not be called manually.
|
5
|
+
# Constructor. This should not be called manually.
|
6
6
|
def initialize(args)
|
7
7
|
@args = args
|
8
8
|
@db = @args[:db]
|
9
9
|
end
|
10
10
|
|
11
|
-
#Returns the name of the column.
|
11
|
+
# Returns the name of the column.
|
12
12
|
def name
|
13
|
-
|
13
|
+
@args[:data][:name]
|
14
14
|
end
|
15
15
|
|
16
16
|
def table_name
|
17
17
|
@args[:table_name]
|
18
18
|
end
|
19
19
|
|
20
|
-
#Returns the columns table-object.
|
20
|
+
# Returns the columns table-object.
|
21
21
|
def table
|
22
|
-
|
22
|
+
@db.tables[table_name]
|
23
23
|
end
|
24
24
|
|
25
|
-
#Returns the data of the column as a hash in knjdb-format.
|
25
|
+
# Returns the data of the column as a hash in knjdb-format.
|
26
26
|
def data
|
27
|
-
|
27
|
+
{
|
28
28
|
type: type,
|
29
29
|
name: name,
|
30
30
|
null: null?,
|
@@ -35,9 +35,9 @@ class Baza::Driver::Sqlite3::Column < Baza::Column
|
|
35
35
|
}
|
36
36
|
end
|
37
37
|
|
38
|
-
#Returns the type of the column.
|
38
|
+
# Returns the type of the column.
|
39
39
|
def type
|
40
|
-
|
40
|
+
unless @type
|
41
41
|
if match = @args[:data][:type].match(/^([A-z]+)$/)
|
42
42
|
@maxlength = false
|
43
43
|
type = match[0].to_sym
|
@@ -50,8 +50,8 @@ class Baza::Driver::Sqlite3::Column < Baza::Column
|
|
50
50
|
elsif match = @args[:data][:type].match(/^(.+)\((\d+)\)$/)
|
51
51
|
@maxlength = match[2]
|
52
52
|
type = match[1].to_sym
|
53
|
-
elsif @args[:data].key?(:type)
|
54
|
-
#A type can actually be empty in SQLite... Wtf?
|
53
|
+
elsif @args[:data].key?(:type) && @args[:data][:type].to_s == ""
|
54
|
+
# A type can actually be empty in SQLite... Wtf?
|
55
55
|
return @args[:data][:type]
|
56
56
|
end
|
57
57
|
|
@@ -64,23 +64,23 @@ class Baza::Driver::Sqlite3::Column < Baza::Column
|
|
64
64
|
raise "Still not type? (#{@args[:data]})" if @type.to_s.strip.empty?
|
65
65
|
end
|
66
66
|
|
67
|
-
|
67
|
+
@type
|
68
68
|
end
|
69
69
|
|
70
|
-
#Returns true if the column allows null. Otherwise false.
|
70
|
+
# Returns true if the column allows null. Otherwise false.
|
71
71
|
def null?
|
72
72
|
return false if @args[:data][:notnull].to_i == 1
|
73
|
-
|
73
|
+
true
|
74
74
|
end
|
75
75
|
|
76
|
-
#Returns the maxlength of the column.
|
76
|
+
# Returns the maxlength of the column.
|
77
77
|
def maxlength
|
78
|
-
|
78
|
+
type unless @maxlength
|
79
79
|
return @maxlength if @maxlength
|
80
|
-
|
80
|
+
false
|
81
81
|
end
|
82
82
|
|
83
|
-
#Returns the default value of the column.
|
83
|
+
# Returns the default value of the column.
|
84
84
|
def default
|
85
85
|
def_val = @args[:data][:dflt_value]
|
86
86
|
|
@@ -89,38 +89,38 @@ class Baza::Driver::Sqlite3::Column < Baza::Column
|
|
89
89
|
end
|
90
90
|
|
91
91
|
return false if @args[:data][:dflt_value].to_s.empty?
|
92
|
-
|
92
|
+
def_val
|
93
93
|
end
|
94
94
|
|
95
|
-
#Returns true if the column is the primary key.
|
95
|
+
# Returns true if the column is the primary key.
|
96
96
|
def primarykey?
|
97
97
|
return false if @args[:data][:pk].to_i == 0
|
98
|
-
|
98
|
+
true
|
99
99
|
end
|
100
100
|
|
101
|
-
#Returns true if the column is auto-increasing.
|
101
|
+
# Returns true if the column is auto-increasing.
|
102
102
|
def autoincr?
|
103
|
-
return true if @args[:data][:pk].to_i == 1 && @args[:data][:type].
|
104
|
-
|
103
|
+
return true if @args[:data][:pk].to_i == 1 && @args[:data][:type].to_s == "integer"
|
104
|
+
false
|
105
105
|
end
|
106
106
|
|
107
|
-
#Drops the column from the table.
|
107
|
+
# Drops the column from the table.
|
108
108
|
def drop
|
109
109
|
table.copy(drops: name)
|
110
110
|
end
|
111
111
|
|
112
112
|
def reload
|
113
|
-
@db.q("PRAGMA table_info(`#{@db.
|
114
|
-
next unless data
|
113
|
+
@db.q("PRAGMA table_info(`#{@db.escape_table(table_name)}`)") do |data|
|
114
|
+
next unless data.fetch(:name) == name
|
115
115
|
@args[:data] = data
|
116
116
|
@type = nil
|
117
|
-
return
|
117
|
+
return nil
|
118
118
|
end
|
119
119
|
|
120
|
-
raise "Could not find data for column: #{table_name}.#{name}"
|
120
|
+
raise Baza::Errors::ColumnNotFound, "Could not find data for column: #{table_name}.#{name}"
|
121
121
|
end
|
122
122
|
|
123
|
-
#Changes data on the column. Like the name, type, maxlength or whatever.
|
123
|
+
# Changes data on the column. Like the name, type, maxlength or whatever.
|
124
124
|
def change(data)
|
125
125
|
newdata = data.clone
|
126
126
|
|
@@ -136,11 +136,11 @@ class Baza::Driver::Sqlite3::Column < Baza::Column
|
|
136
136
|
|
137
137
|
new_table = table.copy(
|
138
138
|
alter_columns: {
|
139
|
-
name
|
139
|
+
name => newdata
|
140
140
|
}
|
141
141
|
)
|
142
142
|
|
143
|
-
@args[:data][:name] = newdata
|
143
|
+
@args[:data][:name] = newdata.fetch(:name).to_s
|
144
144
|
reload
|
145
145
|
end
|
146
146
|
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
#This class handels the SQLite3-specific behaviour for columns.
|
1
|
+
# This class handels the SQLite3-specific behaviour for columns.
|
2
2
|
class Baza::Driver::Sqlite3::Columns
|
3
3
|
attr_reader :db
|
4
4
|
|
5
|
-
#Constructor. This should not be called manually.
|
5
|
+
# Constructor. This should not be called manually.
|
6
6
|
def initialize(args)
|
7
7
|
@args = args
|
8
8
|
end
|
9
9
|
|
10
10
|
DATA_SQL_ALLOWED_KEYS = [:name, :type, :maxlength, :autoincr, :primarykey, :null, :default, :default_func, :renames, :after, :renames]
|
11
|
-
#Returns SQL for a knjdb-compatible hash.
|
11
|
+
# Returns SQL for a knjdb-compatible hash.
|
12
12
|
def data_sql(data)
|
13
|
-
data.
|
13
|
+
data.each_key do |key|
|
14
14
|
raise "Invalid key: '#{key}' (#{key.class.name})." unless DATA_SQL_ALLOWED_KEYS.include?(key)
|
15
15
|
end
|
16
16
|
|
@@ -33,7 +33,7 @@ class Baza::Driver::Sqlite3::Columns
|
|
33
33
|
|
34
34
|
if !data[:null] && data.key?(:null)
|
35
35
|
sql << " NOT NULL"
|
36
|
-
data[:default] = 0 if
|
36
|
+
data[:default] = 0 if !data.key?(:default) || !data[:default] && type == :int
|
37
37
|
end
|
38
38
|
|
39
39
|
if data.key?(:default_func)
|
@@ -42,6 +42,6 @@ class Baza::Driver::Sqlite3::Columns
|
|
42
42
|
sql << " DEFAULT '#{@args[:db].escape(data[:default])}'"
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
sql
|
46
46
|
end
|
47
47
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class Baza::Driver::Sqlite3::Databases
|
2
|
+
def initialize(args)
|
3
|
+
@db = args.fetch(:db)
|
4
|
+
raise "Db wasn't a baza object" unless @db.class.name.include?("Baza")
|
5
|
+
end
|
6
|
+
|
7
|
+
def [](name)
|
8
|
+
name = name.to_s
|
9
|
+
list.each do |database|
|
10
|
+
return database if database.name == name
|
11
|
+
end
|
12
|
+
|
13
|
+
raise Baza::Errors::DatabaseNotFound
|
14
|
+
end
|
15
|
+
|
16
|
+
def list
|
17
|
+
ArrayEnumerator.new do |yielder|
|
18
|
+
yielder << Baza::Driver::Sqlite3::Database.new(
|
19
|
+
name: "Main",
|
20
|
+
driver: self,
|
21
|
+
db: @db
|
22
|
+
)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -3,20 +3,21 @@ class Baza::Driver::Sqlite3::Index < Baza::Index
|
|
3
3
|
|
4
4
|
def initialize(args)
|
5
5
|
@args = args
|
6
|
+
@data = args.delete(:data)
|
6
7
|
@columns = []
|
7
8
|
@db = args[:db]
|
8
9
|
end
|
9
10
|
|
10
11
|
def name
|
11
|
-
|
12
|
+
@data.fetch(:name)
|
12
13
|
end
|
13
14
|
|
14
15
|
def table_name
|
15
|
-
|
16
|
+
@args.fetch(:table_name)
|
16
17
|
end
|
17
18
|
|
18
19
|
def table
|
19
|
-
|
20
|
+
@db.tables[table_name]
|
20
21
|
end
|
21
22
|
|
22
23
|
def drop
|
@@ -31,11 +32,11 @@ class Baza::Driver::Sqlite3::Index < Baza::Index
|
|
31
32
|
|
32
33
|
drop
|
33
34
|
table.create_indexes([create_args])
|
34
|
-
@
|
35
|
+
@data[:name] = newname
|
35
36
|
end
|
36
37
|
|
37
38
|
def data
|
38
|
-
|
39
|
+
{
|
39
40
|
name: name,
|
40
41
|
unique: unique?,
|
41
42
|
columns: @columns
|
@@ -47,6 +48,19 @@ class Baza::Driver::Sqlite3::Index < Baza::Index
|
|
47
48
|
end
|
48
49
|
|
49
50
|
def unique?
|
50
|
-
@
|
51
|
+
@data.fetch(:unique).to_i == 1
|
52
|
+
end
|
53
|
+
|
54
|
+
def reload
|
55
|
+
data = nil
|
56
|
+
@db.query("PRAGMA index_list(`#{@db.escape_table(name)}`)") do |d_indexes|
|
57
|
+
next unless d_indexes.fetch(:name) == name
|
58
|
+
data = d_indexes
|
59
|
+
break
|
60
|
+
end
|
61
|
+
|
62
|
+
raise Baza::Errors::IndexNotFound unless data
|
63
|
+
@data = data
|
64
|
+
self
|
51
65
|
end
|
52
66
|
end
|
@@ -8,7 +8,7 @@ class Baza::Driver::Sqlite3::Result < Baza::ResultBase
|
|
8
8
|
@statement.execute
|
9
9
|
@type_translation = driver.baza.opts[:type_translation]
|
10
10
|
@types = statement.types if @type_translation == true
|
11
|
-
@columns = statement.columns.map
|
11
|
+
@columns = statement.columns.map(&:to_sym)
|
12
12
|
read_results
|
13
13
|
@index = -1
|
14
14
|
ensure
|
@@ -19,16 +19,15 @@ class Baza::Driver::Sqlite3::Result < Baza::ResultBase
|
|
19
19
|
# Returns a single result.
|
20
20
|
def fetch
|
21
21
|
row = @results[@index += 1]
|
22
|
+
return unless row
|
22
23
|
|
23
|
-
if
|
24
|
-
if @types
|
25
|
-
|
26
|
-
|
27
|
-
row.map! { |value| value.to_s }
|
28
|
-
end
|
29
|
-
|
30
|
-
return Hash[*@columns.zip(row).flatten]
|
24
|
+
if @types
|
25
|
+
row.map!.with_index { |value, index| translate_type(value, @types[index]) } if @types
|
26
|
+
elsif @type_translation == :string
|
27
|
+
row.map!(&:to_s)
|
31
28
|
end
|
29
|
+
|
30
|
+
Hash[*@columns.zip(row).flatten]
|
32
31
|
end
|
33
32
|
|
34
33
|
# Loops over every result yielding them.
|
@@ -51,14 +50,14 @@ private
|
|
51
50
|
end
|
52
51
|
|
53
52
|
def translate_type(value, type)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
53
|
+
return unless value
|
54
|
+
|
55
|
+
if type == "datetime"
|
56
|
+
Time.parse(value)
|
57
|
+
elsif type == "date"
|
58
|
+
Date.parse(value)
|
59
|
+
else
|
60
|
+
value
|
62
61
|
end
|
63
62
|
end
|
64
63
|
end
|