baza 0.0.19 → 0.0.20
Sign up to get free protection for your applications and to get access to all the features.
- 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
|