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
@@ -0,0 +1,157 @@
|
|
1
|
+
|
2
|
+
|
3
|
+
# This configuration was generated by
|
4
|
+
# `rubocop --auto-gen-config`
|
5
|
+
# on 2015-12-20 21:21:20 +0100 using RuboCop version 0.35.1.
|
6
|
+
# The point is for the user to remove these configuration records
|
7
|
+
# one by one as the offenses are removed from the code base.
|
8
|
+
# Note that changes in the inspected code, or installation of new
|
9
|
+
# versions of RuboCop, may require this file to be generated again.
|
10
|
+
|
11
|
+
# Offense count: 43
|
12
|
+
# Configuration parameters: AllowSafeAssignment.
|
13
|
+
Lint/AssignmentInCondition:
|
14
|
+
Enabled: false
|
15
|
+
|
16
|
+
# Offense count: 1
|
17
|
+
Lint/ConditionPosition:
|
18
|
+
Exclude:
|
19
|
+
- 'lib/baza/model_handler.rb'
|
20
|
+
|
21
|
+
# Offense count: 2
|
22
|
+
Lint/HandleExceptions:
|
23
|
+
Exclude:
|
24
|
+
- 'spec/model_handler_spec.rb'
|
25
|
+
|
26
|
+
# Offense count: 1
|
27
|
+
Lint/NonLocalExitFromIterator:
|
28
|
+
Exclude:
|
29
|
+
- 'lib/baza/drivers/sqlite3/column.rb'
|
30
|
+
|
31
|
+
# Offense count: 8
|
32
|
+
Lint/ShadowingOuterLocalVariable:
|
33
|
+
Exclude:
|
34
|
+
- 'lib/baza/drivers/mysql/table.rb'
|
35
|
+
- 'lib/baza/drivers/sqlite3/table.rb'
|
36
|
+
- 'lib/baza/model_handler.rb'
|
37
|
+
- 'lib/baza/model_handler_sqlhelper.rb'
|
38
|
+
- 'lib/baza/revision.rb'
|
39
|
+
- 'spec/model_handler_spec.rb'
|
40
|
+
|
41
|
+
# Offense count: 1
|
42
|
+
Lint/UselessAccessModifier:
|
43
|
+
Exclude:
|
44
|
+
- 'lib/baza/model.rb'
|
45
|
+
|
46
|
+
# Offense count: 34
|
47
|
+
Lint/UselessAssignment:
|
48
|
+
Enabled: false
|
49
|
+
|
50
|
+
# Offense count: 51
|
51
|
+
Metrics/AbcSize:
|
52
|
+
Max: 558
|
53
|
+
|
54
|
+
# Offense count: 22
|
55
|
+
Metrics/BlockNesting:
|
56
|
+
Max: 6
|
57
|
+
|
58
|
+
# Offense count: 7
|
59
|
+
# Configuration parameters: CountComments.
|
60
|
+
Metrics/ClassLength:
|
61
|
+
Max: 684
|
62
|
+
|
63
|
+
# Offense count: 67
|
64
|
+
Metrics/CyclomaticComplexity:
|
65
|
+
Max: 128
|
66
|
+
|
67
|
+
# Offense count: 31
|
68
|
+
# Configuration parameters: AllowURI, URISchemes.
|
69
|
+
Metrics/LineLength:
|
70
|
+
Max: 311
|
71
|
+
|
72
|
+
# Offense count: 8
|
73
|
+
# Configuration parameters: CountComments.
|
74
|
+
Metrics/MethodLength:
|
75
|
+
Max: 382
|
76
|
+
|
77
|
+
# Offense count: 66
|
78
|
+
Metrics/PerceivedComplexity:
|
79
|
+
Max: 160
|
80
|
+
|
81
|
+
# Offense count: 1
|
82
|
+
Style/AccessorMethodName:
|
83
|
+
Exclude:
|
84
|
+
- 'lib/baza/db.rb'
|
85
|
+
|
86
|
+
# Offense count: 1
|
87
|
+
Style/AsciiComments:
|
88
|
+
Exclude:
|
89
|
+
- 'lib/baza/db.rb'
|
90
|
+
|
91
|
+
# Offense count: 1
|
92
|
+
Style/CaseEquality:
|
93
|
+
Exclude:
|
94
|
+
- 'lib/baza/drivers/mysql/result.rb'
|
95
|
+
|
96
|
+
# Offense count: 3
|
97
|
+
Style/ClassVars:
|
98
|
+
Exclude:
|
99
|
+
- 'lib/baza/model.rb'
|
100
|
+
- 'lib/baza/model_custom.rb'
|
101
|
+
|
102
|
+
# Offense count: 1
|
103
|
+
Style/EndOfLine:
|
104
|
+
Exclude:
|
105
|
+
- 'lib/baza/drivers/mysql.rb'
|
106
|
+
|
107
|
+
# Offense count: 1
|
108
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
109
|
+
Style/FormatString:
|
110
|
+
Exclude:
|
111
|
+
- 'lib/baza/row.rb'
|
112
|
+
|
113
|
+
# Offense count: 11
|
114
|
+
# Configuration parameters: AllowedVariables.
|
115
|
+
Style/GlobalVars:
|
116
|
+
Exclude:
|
117
|
+
- 'lib/baza/db.rb'
|
118
|
+
- 'lib/baza/model_custom.rb'
|
119
|
+
- 'lib/baza/row.rb'
|
120
|
+
|
121
|
+
# Offense count: 16
|
122
|
+
# Configuration parameters: MinBodyLength.
|
123
|
+
Style/GuardClause:
|
124
|
+
Exclude:
|
125
|
+
- 'lib/baza/db.rb'
|
126
|
+
- 'lib/baza/drivers/mysql/result.rb'
|
127
|
+
- 'lib/baza/drivers/sqlite3/result.rb'
|
128
|
+
- 'lib/baza/drivers/sqlite3_java/unbuffered_result.rb'
|
129
|
+
- 'lib/baza/idquery.rb'
|
130
|
+
- 'lib/baza/model.rb'
|
131
|
+
- 'lib/baza/model_handler.rb'
|
132
|
+
- 'lib/baza/query_buffer.rb'
|
133
|
+
- 'lib/baza/row.rb'
|
134
|
+
|
135
|
+
# Offense count: 1
|
136
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
137
|
+
Style/MethodName:
|
138
|
+
Enabled: false
|
139
|
+
|
140
|
+
# Offense count: 9
|
141
|
+
# Configuration parameters: NamePrefix, NamePrefixBlacklist, NameWhitelist.
|
142
|
+
Style/PredicateName:
|
143
|
+
Exclude:
|
144
|
+
- 'lib/baza/model.rb'
|
145
|
+
- 'lib/baza/model_custom.rb'
|
146
|
+
- 'lib/baza/row.rb'
|
147
|
+
|
148
|
+
# Offense count: 2
|
149
|
+
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
150
|
+
Style/RaiseArgs:
|
151
|
+
Enabled: false
|
152
|
+
|
153
|
+
# Offense count: 1
|
154
|
+
# Cop supports --auto-correct.
|
155
|
+
# Configuration parameters: WordRegex.
|
156
|
+
Style/WordArray:
|
157
|
+
MinSize: 2
|
data/lib/baza/base_sql_driver.rb
CHANGED
@@ -2,7 +2,7 @@ class Baza::BaseSqlDriver
|
|
2
2
|
attr_reader :baza, :conn, :sep_table, :sep_col, :sep_val
|
3
3
|
attr_accessor :tables, :cols, :indexes
|
4
4
|
|
5
|
-
def self.from_object(
|
5
|
+
def self.from_object(_args)
|
6
6
|
end
|
7
7
|
|
8
8
|
def initialize(baza)
|
@@ -14,40 +14,95 @@ class Baza::BaseSqlDriver
|
|
14
14
|
end
|
15
15
|
|
16
16
|
def escape(string)
|
17
|
-
|
18
|
-
case
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
17
|
+
string.to_s.gsub(/([\0\n\r\032\'\"\\])/) do
|
18
|
+
case Regexp.last_match(1)
|
19
|
+
when "\0" then "\\0"
|
20
|
+
when "\n" then "\\n"
|
21
|
+
when "\r" then "\\r"
|
22
|
+
when "\032" then "\\Z"
|
23
|
+
else "\\#{Regexp.last_match(1)}"
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
|
29
|
-
|
28
|
+
alias_method :esc, :escape
|
29
|
+
alias_method :escape_alternative, :escape
|
30
30
|
|
31
|
-
#Escapes a string to be used as a column.
|
32
|
-
def
|
31
|
+
# Escapes a string to be used as a column.
|
32
|
+
def escape_column(string)
|
33
33
|
string = string.to_s
|
34
|
-
raise "Invalid column-string: #{string}"
|
35
|
-
|
34
|
+
raise "Invalid column-string: #{string}" unless string.index(@sep_col).nil?
|
35
|
+
string
|
36
36
|
end
|
37
|
-
|
38
|
-
alias
|
37
|
+
alias escape_table escape_column
|
38
|
+
alias escape_database escape_column
|
39
39
|
|
40
40
|
def transaction
|
41
|
-
|
41
|
+
@baza.q("BEGIN TRANSACTION")
|
42
42
|
|
43
43
|
begin
|
44
44
|
yield @baza
|
45
|
-
|
45
|
+
@baza.q("COMMIT")
|
46
46
|
rescue => e
|
47
|
-
|
47
|
+
@baza.q("ROLLBACK")
|
48
48
|
end
|
49
49
|
end
|
50
50
|
|
51
|
+
# Simply inserts data into a table.
|
52
|
+
#
|
53
|
+
#===Examples
|
54
|
+
# db.insert(:users, name: "John", lastname: "Doe")
|
55
|
+
# id = db.insert(:users, {name: "John", lastname: "Doe"}, return_id: true)
|
56
|
+
# sql = db.insert(:users, {name: "John", lastname: "Doe"}, return_sql: true) #=> "INSERT INTO `users` (`name`, `lastname`) VALUES ('John', 'Doe')"
|
57
|
+
def insert(tablename, arr_insert, args = nil)
|
58
|
+
sql = "INSERT INTO #{@sep_table}#{escape_table(tablename)}#{@sep_table}"
|
59
|
+
|
60
|
+
if !arr_insert || arr_insert.empty?
|
61
|
+
# This is the correct syntax for inserting a blank row in MySQL.
|
62
|
+
if @baza.opts.fetch(:type).to_s.include?("mysql")
|
63
|
+
sql << " VALUES ()"
|
64
|
+
elsif @baza.opts.fetch(:type).to_s.include?("sqlite3")
|
65
|
+
sql << " DEFAULT VALUES"
|
66
|
+
else
|
67
|
+
raise "Unknown database-type: '#{@baza.opts.fetch(:type)}'."
|
68
|
+
end
|
69
|
+
else
|
70
|
+
sql << " ("
|
71
|
+
|
72
|
+
first = true
|
73
|
+
arr_insert.each_key do |key|
|
74
|
+
if first
|
75
|
+
first = false
|
76
|
+
else
|
77
|
+
sql << ", "
|
78
|
+
end
|
79
|
+
|
80
|
+
sql << "#{@baza.sep_col}#{@baza.escape_column(key)}#{@baza.sep_col}"
|
81
|
+
end
|
82
|
+
|
83
|
+
sql << ") VALUES ("
|
84
|
+
|
85
|
+
first = true
|
86
|
+
arr_insert.each_value do |value|
|
87
|
+
if first
|
88
|
+
first = false
|
89
|
+
else
|
90
|
+
sql << ", "
|
91
|
+
end
|
92
|
+
|
93
|
+
sql << @baza.sqlval(value)
|
94
|
+
end
|
95
|
+
|
96
|
+
sql << ")"
|
97
|
+
end
|
98
|
+
|
99
|
+
return sql if args && args[:return_sql]
|
100
|
+
|
101
|
+
@baza.query(sql)
|
102
|
+
return @baza.last_id if args && args[:return_id]
|
103
|
+
nil
|
104
|
+
end
|
105
|
+
|
51
106
|
def insert_multi(tablename, arr_hashes, args = nil)
|
52
107
|
sql = [] if args && args[:return_sql]
|
53
108
|
|
@@ -59,6 +114,10 @@ class Baza::BaseSqlDriver
|
|
59
114
|
end
|
60
115
|
|
61
116
|
return sql if args && args[:return_sql]
|
62
|
-
|
117
|
+
nil
|
118
|
+
end
|
119
|
+
|
120
|
+
def supports_multiple_databases?
|
121
|
+
false
|
63
122
|
end
|
64
123
|
end
|
data/lib/baza/cloner.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
class Baza::Cloner
|
2
2
|
def self.from_active_record_connection(connection)
|
3
|
-
if connection.class.name.include?(
|
3
|
+
if connection.class.name.include?("Mysql2Adapter")
|
4
4
|
connection = connection.instance_variable_get(:@connection)
|
5
5
|
|
6
6
|
config = connection.instance_variable_get(:@query_options)
|
@@ -15,7 +15,7 @@ class Baza::Cloner
|
|
15
15
|
}
|
16
16
|
|
17
17
|
Baza::Db.new(db_args)
|
18
|
-
elsif connection.class.name.include?(
|
18
|
+
elsif connection.class.name.include?("MysqlAdapter")
|
19
19
|
connection = connection.instance_variable_get(:@connection)
|
20
20
|
|
21
21
|
db_args = {
|
data/lib/baza/column.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
class Baza::Column
|
2
|
+
include Baza::DatabaseModelFunctionality
|
3
|
+
|
2
4
|
def to_s
|
3
5
|
"#<#{self.class.name} name=\"#{name}\" type=\"#{type}\" maxlength=\"#{maxlength}\" autoincr=\"#{autoincr?}\" primarykey=\"#{primarykey?}\">"
|
4
6
|
end
|
@@ -6,4 +8,8 @@ class Baza::Column
|
|
6
8
|
def inspect
|
7
9
|
to_s
|
8
10
|
end
|
11
|
+
|
12
|
+
def to_param
|
13
|
+
name
|
14
|
+
end
|
9
15
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
class Baza::Database
|
2
|
+
include Baza::DatabaseModelFunctionality
|
3
|
+
|
4
|
+
attr_reader :db, :driver, :name_was
|
5
|
+
attr_accessor :name
|
6
|
+
|
7
|
+
def initialize(args)
|
8
|
+
@db = args.fetch(:db)
|
9
|
+
@driver = args.fetch(:driver)
|
10
|
+
@name = args.fetch(:name)
|
11
|
+
@name_was = @name
|
12
|
+
end
|
13
|
+
|
14
|
+
def tables
|
15
|
+
ArrayEnumerator.new do |yielder|
|
16
|
+
@db.tables.list(database: name) do |table|
|
17
|
+
yielder << table
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def table(name)
|
23
|
+
@db.tables[name]
|
24
|
+
end
|
25
|
+
|
26
|
+
def save!
|
27
|
+
raise Baza::Errors::NotImplemented
|
28
|
+
end
|
29
|
+
|
30
|
+
def to_param
|
31
|
+
name
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# Used for link-methods in Rails apps
|
2
|
+
class Baza::DatabaseModel
|
3
|
+
def initialize(instance)
|
4
|
+
@instance = instance
|
5
|
+
end
|
6
|
+
|
7
|
+
def model_name
|
8
|
+
Baza::DatabaseModelName.new(@instance)
|
9
|
+
end
|
10
|
+
|
11
|
+
def persisted?
|
12
|
+
true
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_param
|
16
|
+
if @instance.respond_to?(:to_param)
|
17
|
+
@instance.try(:to_param)
|
18
|
+
else
|
19
|
+
@instance.name
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def id
|
24
|
+
@instance.name
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Used for link-methods in Rails apps
|
2
|
+
class Baza::DatabaseModelName
|
3
|
+
def initialize(instance)
|
4
|
+
@instance = instance
|
5
|
+
end
|
6
|
+
|
7
|
+
def singular_route_key
|
8
|
+
route_key = human.underscore
|
9
|
+
route_key = "indexes" if route_key == "indices"
|
10
|
+
route_key
|
11
|
+
end
|
12
|
+
|
13
|
+
def human
|
14
|
+
@instance.class.name.split("::").last
|
15
|
+
end
|
16
|
+
end
|