db2_query 0.2.2 → 0.3.2
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/MIT-LICENSE +1 -1
- data/README.md +453 -110
- data/Rakefile +3 -2
- data/lib/db2_query.rb +41 -15
- data/lib/db2_query/base.rb +16 -5
- data/lib/db2_query/config.rb +20 -17
- data/lib/db2_query/core.rb +68 -55
- data/lib/db2_query/db_client.rb +56 -0
- data/lib/db2_query/db_connection.rb +67 -0
- data/lib/db2_query/db_statements.rb +87 -0
- data/lib/db2_query/definitions.rb +79 -0
- data/lib/db2_query/error.rb +81 -0
- data/lib/db2_query/field_type.rb +31 -0
- data/lib/db2_query/helper.rb +49 -0
- data/lib/db2_query/logger.rb +52 -0
- data/lib/db2_query/query.rb +117 -0
- data/lib/db2_query/quoting.rb +102 -0
- data/lib/db2_query/railtie.rb +5 -7
- data/lib/db2_query/result.rb +51 -31
- data/lib/db2_query/sql_statement.rb +34 -0
- data/lib/db2_query/tasks.rb +29 -0
- data/lib/db2_query/tasks/database.rake +2 -50
- data/lib/db2_query/tasks/init.rake +1 -1
- data/lib/db2_query/tasks/initializer.rake +2 -34
- data/lib/db2_query/tasks/templates/database.rb.tt +19 -0
- data/lib/db2_query/tasks/templates/initializer.rb.tt +8 -0
- data/lib/db2_query/type/binary.rb +19 -0
- data/lib/db2_query/type/boolean.rb +41 -0
- data/lib/db2_query/type/date.rb +34 -0
- data/lib/db2_query/type/decimal.rb +15 -0
- data/lib/db2_query/type/integer.rb +15 -0
- data/lib/db2_query/type/string.rb +30 -0
- data/lib/db2_query/type/text.rb +11 -0
- data/lib/db2_query/type/time.rb +30 -0
- data/lib/db2_query/type/timestamp.rb +30 -0
- data/lib/db2_query/type/value.rb +29 -0
- data/lib/db2_query/version.rb +2 -2
- data/lib/rails/generators/query/USAGE +15 -0
- data/lib/rails/generators/query/query_generator.rb +70 -0
- data/lib/rails/generators/query/templates/query.rb.tt +26 -0
- data/lib/rails/generators/query/templates/query_definitions.rb.tt +12 -0
- data/lib/rails/generators/query/templates/unit_test.rb.tt +9 -0
- metadata +62 -49
- data/lib/db2_query/connection.rb +0 -163
- data/lib/db2_query/connection_handling.rb +0 -112
- data/lib/db2_query/database_statements.rb +0 -93
- data/lib/db2_query/formatter.rb +0 -27
- data/lib/db2_query/odbc_connector.rb +0 -40
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Query
|
4
|
+
module Type
|
5
|
+
class String < Value
|
6
|
+
DEFAULT = { trim: false }
|
7
|
+
|
8
|
+
def initialize(options = DEFAULT)
|
9
|
+
super(options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def type
|
13
|
+
:string
|
14
|
+
end
|
15
|
+
|
16
|
+
def deserialize(value)
|
17
|
+
value.strip! if options[:trim]
|
18
|
+
case value
|
19
|
+
when ::String then
|
20
|
+
if value == "null"
|
21
|
+
nil
|
22
|
+
else
|
23
|
+
::String.new(value)
|
24
|
+
end
|
25
|
+
else value.to_s
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Query
|
4
|
+
module Type
|
5
|
+
class Time < Value
|
6
|
+
def type
|
7
|
+
:time
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize(value)
|
11
|
+
if value.is_a?(::String)
|
12
|
+
case value
|
13
|
+
when /\A(\d\d)[:,.](\d\d)[:,.](\d\d)\z/
|
14
|
+
quote(value)
|
15
|
+
else
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
elsif value.is_a?(::Time)
|
19
|
+
quote(value.strftime("%T"))
|
20
|
+
else
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def deserialize(value)
|
26
|
+
value.strftime("%H:%M:%S")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Query
|
4
|
+
module Type
|
5
|
+
class Timestamp < Value
|
6
|
+
def type
|
7
|
+
:time
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize(value)
|
11
|
+
if value.is_a?(::String)
|
12
|
+
case value
|
13
|
+
when /\A(\d{4})-(\d\d)-(\d\d)-(\d\d).(\d\d).(\d\d).(\d{1,6})\z/
|
14
|
+
quote(value)
|
15
|
+
else
|
16
|
+
nil
|
17
|
+
end
|
18
|
+
elsif value.is_a?(::DateTime) || value.is_a?(::Time)
|
19
|
+
quote(value.strftime("%F-%H.%M.%S.%6N"))
|
20
|
+
else
|
21
|
+
nil
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def deserialize(value)
|
26
|
+
value
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Db2Query
|
4
|
+
module Type
|
5
|
+
class Value
|
6
|
+
attr_reader :options
|
7
|
+
|
8
|
+
def initialize(options = {})
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def type_name
|
13
|
+
:value
|
14
|
+
end
|
15
|
+
|
16
|
+
def serialize(value)
|
17
|
+
value
|
18
|
+
end
|
19
|
+
|
20
|
+
def deserialize(value)
|
21
|
+
value
|
22
|
+
end
|
23
|
+
|
24
|
+
def quote(value)
|
25
|
+
"'#{value}'"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
data/lib/db2_query/version.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
Description:
|
2
|
+
Stubs out a new query. Pass the query name, either
|
3
|
+
CamelCased or under_scored, and an optional list of its methods as arguments.
|
4
|
+
|
5
|
+
To create a query within a module, just use namespace pattern as the other rails generators do.
|
6
|
+
|
7
|
+
To create query class methods, you can use 3 options:
|
8
|
+
1. Plain SQL methods --defines
|
9
|
+
2. Query Methods with SQL string, --queries
|
10
|
+
3. Query Methods with lambda, --lambdas
|
11
|
+
|
12
|
+
Example:
|
13
|
+
$ rails g query NameSpace::Name --queries query_1 --defines query_2 --lambdas query_3
|
14
|
+
create app/queries/name_space/name_query.rb
|
15
|
+
create test/queries/name_space/name_query_test.rb
|
@@ -0,0 +1,70 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "rails/generators"
|
4
|
+
require "fileutils"
|
5
|
+
|
6
|
+
module Rails
|
7
|
+
module Generators
|
8
|
+
class QueryGenerator < Rails::Generators::NamedBase
|
9
|
+
source_root File.expand_path("../templates", __FILE__)
|
10
|
+
|
11
|
+
class_option :skip_unit_test, type: :boolean, default: false, desc: "Skip unit test file creation"
|
12
|
+
class_option :defines, type: :array, default: [], desc: "Plain query method options"
|
13
|
+
class_option :queries, type: :array, default: [], desc: "Query method SQL options"
|
14
|
+
class_option :lambdas, type: :array, default: [], desc: "Query method with callable args"
|
15
|
+
|
16
|
+
def create_query_file
|
17
|
+
template "query.rb", File.join("app/queries", class_path, "#{file_name}_query.rb")
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_query_definitions_file
|
21
|
+
template "query_definitions.rb", File.join("app/queries/definitions", class_path, "#{file_name}_query_definitions.rb")
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_query_test_file
|
25
|
+
unless options[:skip_unit_test]
|
26
|
+
template "unit_test.rb", File.join("test/queries", class_path, "#{file_name}_query_test.rb")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def assign_names!(name)
|
32
|
+
super(name)
|
33
|
+
@method_options = options.slice("defines", "queries", "lambdas")
|
34
|
+
@query_methods = @method_options.map { |key, val| val }.flatten
|
35
|
+
end
|
36
|
+
|
37
|
+
def query_class_name
|
38
|
+
"#{file_name.camelize}Query"
|
39
|
+
end
|
40
|
+
|
41
|
+
def namespaced_query?
|
42
|
+
!class_path.empty?
|
43
|
+
end
|
44
|
+
|
45
|
+
def namespaced_names
|
46
|
+
class_path
|
47
|
+
end
|
48
|
+
|
49
|
+
def namespaced_content(content)
|
50
|
+
namespaced_names.reverse_each do |namespace_name|
|
51
|
+
content = "module #{namespace_name.camelize}\n#{indent(content)}\nend"
|
52
|
+
end
|
53
|
+
content
|
54
|
+
end
|
55
|
+
|
56
|
+
def module_namespacing(&block)
|
57
|
+
content = capture(&block)
|
58
|
+
content = namespaced_content(content) if namespaced_query?
|
59
|
+
concat(content)
|
60
|
+
end
|
61
|
+
|
62
|
+
def module_definitions_namespacing(&block)
|
63
|
+
content = capture(&block)
|
64
|
+
content = namespaced_content(content) if namespaced_query?
|
65
|
+
definitions_namespace_content = "module Definitions\n#{indent(content)}\nend"
|
66
|
+
concat(definitions_namespace_content)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
<% module_namespacing do -%>
|
4
|
+
class <%= query_class_name %> < <%= "Db2Query::Base" -%>
|
5
|
+
<% if @query_methods.empty? %>
|
6
|
+
<%= indent("query :to_do, <<-SQL\n") %>
|
7
|
+
<%= indent("SQL\n") %>
|
8
|
+
<%= indent("def to_do_sql\n") %>
|
9
|
+
<%= indent("end") %>
|
10
|
+
<% end -%>
|
11
|
+
<% @method_options.each do |key, val| -%>
|
12
|
+
<% val.each_with_index do |option, index| -%>
|
13
|
+
<% case key when 'defines' -%>
|
14
|
+
<%= indent("def #{option}_sql\n") %>
|
15
|
+
<%= indent("end") %>
|
16
|
+
<% when 'queries' %>
|
17
|
+
<%= indent("query :#{option}, <<-SQL\n") %>
|
18
|
+
<%= indent("SQL") %>
|
19
|
+
<% when 'lambdas' %>
|
20
|
+
<%= indent("query :#{option}, -> args {\n") %>
|
21
|
+
<%= indent("}") %>
|
22
|
+
<% end -%>
|
23
|
+
<% end -%>
|
24
|
+
<% end -%>
|
25
|
+
<%= 'end' -%>
|
26
|
+
<% end %>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
<% module_definitions_namespacing do -%>
|
4
|
+
class <%= query_class_name %>Definitions < <%= "Db2Query::Definitions" %>
|
5
|
+
<%= indent("def describe") -%>
|
6
|
+
<% @query_methods.each do |method| %>
|
7
|
+
<%= indent("query_definition :#{method} do |c|\n") %>
|
8
|
+
<%= indent("end") %>
|
9
|
+
<% end -%>
|
10
|
+
<%= indent("end") %>
|
11
|
+
<%= 'end' -%>
|
12
|
+
<% end %>
|
metadata
CHANGED
@@ -1,57 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: db2_query
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yohanes_l
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-08-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - "~>"
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.99999'
|
20
|
-
type: :runtime
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - "~>"
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0.99999'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: activesupport
|
14
|
+
name: tty-progressbar
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
30
16
|
requirements:
|
31
|
-
- - "
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: 6.0.3
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: 6.0.3
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: activerecord
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
17
|
+
- - ">="
|
46
18
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
48
|
-
type: :
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
49
21
|
prerelease: false
|
50
22
|
version_requirements: !ruby/object:Gem::Requirement
|
51
23
|
requirements:
|
52
|
-
- - "
|
24
|
+
- - ">="
|
53
25
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
26
|
+
version: '0'
|
55
27
|
- !ruby/object:Gem::Dependency
|
56
28
|
name: rubocop
|
57
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -109,7 +81,7 @@ dependencies:
|
|
109
81
|
- !ruby/object:Gem::Version
|
110
82
|
version: '0'
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
|
-
name:
|
84
|
+
name: byebug
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
87
|
- - ">="
|
@@ -123,7 +95,7 @@ dependencies:
|
|
123
95
|
- !ruby/object:Gem::Version
|
124
96
|
version: '0'
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
98
|
+
name: rails
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - ">="
|
@@ -137,22 +109,37 @@ dependencies:
|
|
137
109
|
- !ruby/object:Gem::Version
|
138
110
|
version: '0'
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
112
|
+
name: connection_pool
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 2.2.5
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 2.2.5
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: ruby-odbc
|
141
127
|
requirement: !ruby/object:Gem::Requirement
|
142
128
|
requirements:
|
143
129
|
- - ">="
|
144
130
|
- !ruby/object:Gem::Version
|
145
131
|
version: '0'
|
146
|
-
type: :
|
132
|
+
type: :runtime
|
147
133
|
prerelease: false
|
148
134
|
version_requirements: !ruby/object:Gem::Requirement
|
149
135
|
requirements:
|
150
136
|
- - ">="
|
151
137
|
- !ruby/object:Gem::Version
|
152
138
|
version: '0'
|
153
|
-
description: A Rails
|
139
|
+
description: A Rails 5 & Rails 6 plugin for handling Db2 SQL SIUD statement (SELECT,
|
140
|
+
INSERT, UPDATE, DELETE) by using ODBC connection.
|
154
141
|
email:
|
155
|
-
- yohanes.lumentut@
|
142
|
+
- yohanes.lumentut@gmail.com
|
156
143
|
executables: []
|
157
144
|
extensions: []
|
158
145
|
extra_rdoc_files: []
|
@@ -163,23 +150,49 @@ files:
|
|
163
150
|
- lib/db2_query.rb
|
164
151
|
- lib/db2_query/base.rb
|
165
152
|
- lib/db2_query/config.rb
|
166
|
-
- lib/db2_query/connection.rb
|
167
|
-
- lib/db2_query/connection_handling.rb
|
168
153
|
- lib/db2_query/core.rb
|
169
|
-
- lib/db2_query/
|
170
|
-
- lib/db2_query/
|
171
|
-
- lib/db2_query/
|
154
|
+
- lib/db2_query/db_client.rb
|
155
|
+
- lib/db2_query/db_connection.rb
|
156
|
+
- lib/db2_query/db_statements.rb
|
157
|
+
- lib/db2_query/definitions.rb
|
158
|
+
- lib/db2_query/error.rb
|
159
|
+
- lib/db2_query/field_type.rb
|
160
|
+
- lib/db2_query/helper.rb
|
161
|
+
- lib/db2_query/logger.rb
|
162
|
+
- lib/db2_query/query.rb
|
163
|
+
- lib/db2_query/quoting.rb
|
172
164
|
- lib/db2_query/railtie.rb
|
173
165
|
- lib/db2_query/result.rb
|
166
|
+
- lib/db2_query/sql_statement.rb
|
167
|
+
- lib/db2_query/tasks.rb
|
174
168
|
- lib/db2_query/tasks/database.rake
|
175
169
|
- lib/db2_query/tasks/init.rake
|
176
170
|
- lib/db2_query/tasks/initializer.rake
|
171
|
+
- lib/db2_query/tasks/templates/database.rb.tt
|
172
|
+
- lib/db2_query/tasks/templates/initializer.rb.tt
|
173
|
+
- lib/db2_query/type/binary.rb
|
174
|
+
- lib/db2_query/type/boolean.rb
|
175
|
+
- lib/db2_query/type/date.rb
|
176
|
+
- lib/db2_query/type/decimal.rb
|
177
|
+
- lib/db2_query/type/integer.rb
|
178
|
+
- lib/db2_query/type/string.rb
|
179
|
+
- lib/db2_query/type/text.rb
|
180
|
+
- lib/db2_query/type/time.rb
|
181
|
+
- lib/db2_query/type/timestamp.rb
|
182
|
+
- lib/db2_query/type/value.rb
|
177
183
|
- lib/db2_query/version.rb
|
184
|
+
- lib/rails/generators/query/USAGE
|
185
|
+
- lib/rails/generators/query/query_generator.rb
|
186
|
+
- lib/rails/generators/query/templates/query.rb.tt
|
187
|
+
- lib/rails/generators/query/templates/query_definitions.rb.tt
|
188
|
+
- lib/rails/generators/query/templates/unit_test.rb.tt
|
178
189
|
homepage: https://github.com/yohaneslumentut/db2_query
|
179
190
|
licenses:
|
180
191
|
- MIT
|
181
192
|
metadata:
|
182
|
-
|
193
|
+
homepage_uri: https://github.com/yohaneslumentut/db2_query
|
194
|
+
source_code_uri: https://github.com/yohaneslumentut/db2_query
|
195
|
+
changelog_uri: https://github.com/yohaneslumentut/db2_query
|
183
196
|
post_install_message:
|
184
197
|
rdoc_options: []
|
185
198
|
require_paths:
|
@@ -198,5 +211,5 @@ requirements: []
|
|
198
211
|
rubygems_version: 3.0.3
|
199
212
|
signing_key:
|
200
213
|
specification_version: 4
|
201
|
-
summary:
|
214
|
+
summary: Rails Db2 ODBC plugin
|
202
215
|
test_files: []
|