wowsql-sdk 1.0.0 → 1.2.0
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/lib/wowmysql.rb +10 -0
- data/lib/wowsql/query_builder.rb +106 -13
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: fea41521e87c3c13e013565585a0a6b28b08fc513a06ed322655882ffe06067e
|
|
4
|
+
data.tar.gz: 5e786bf298711641ef85070bdcf9a4809553bbeec58dbc23af95a36ead37b4d4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 87bf0a5a1f4b5498b186bc6786153e249ca66b1b5788f18a3055c35c02f9edc7a8820560b57dc0c569b3cbf966943394150b3f4e3a5afed363c53ea22051c8cf
|
|
7
|
+
data.tar.gz: 69ca7517b578825d126b16e02cf78e2a7aff73a2d17393ee8b596668c1d21bb8c8dce3a8f80d49438e01b717d306c2a79e918c02b7b31fecfd83621b170ebe83
|
data/lib/wowmysql.rb
ADDED
data/lib/wowsql/query_builder.rb
CHANGED
|
@@ -5,14 +5,15 @@ module WOWSQL
|
|
|
5
5
|
@client = client
|
|
6
6
|
@table_name = table_name
|
|
7
7
|
@params = {}
|
|
8
|
+
@select_columns = nil
|
|
9
|
+
@filters = []
|
|
10
|
+
@group_by = nil
|
|
11
|
+
@having = []
|
|
12
|
+
@order_items = nil
|
|
8
13
|
end
|
|
9
14
|
|
|
10
15
|
def select(*columns)
|
|
11
|
-
|
|
12
|
-
@params['select'] = '*'
|
|
13
|
-
else
|
|
14
|
-
@params['select'] = columns.join(',')
|
|
15
|
-
end
|
|
16
|
+
@select_columns = columns
|
|
16
17
|
self
|
|
17
18
|
end
|
|
18
19
|
|
|
@@ -52,7 +53,47 @@ module WOWSQL
|
|
|
52
53
|
end
|
|
53
54
|
|
|
54
55
|
def is_null(column)
|
|
55
|
-
|
|
56
|
+
@filters << { column: column, operator: 'is', value: nil, logical_op: 'AND' }
|
|
57
|
+
self
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
def in(column, values)
|
|
61
|
+
@filters << { column: column, operator: 'in', value: values, logical_op: 'AND' }
|
|
62
|
+
self
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def not_in(column, values)
|
|
66
|
+
@filters << { column: column, operator: 'not_in', value: values, logical_op: 'AND' }
|
|
67
|
+
self
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def between(column, min, max)
|
|
71
|
+
@filters << { column: column, operator: 'between', value: [min, max], logical_op: 'AND' }
|
|
72
|
+
self
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def not_between(column, min, max)
|
|
76
|
+
@filters << { column: column, operator: 'not_between', value: [min, max], logical_op: 'AND' }
|
|
77
|
+
self
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def or(column, operator, value)
|
|
81
|
+
@filters << { column: column, operator: operator, value: value, logical_op: 'OR' }
|
|
82
|
+
self
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
def group_by(*columns)
|
|
86
|
+
@group_by = columns
|
|
87
|
+
self
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
def having(column, operator, value)
|
|
91
|
+
@having << { column: column, operator: operator, value: value }
|
|
92
|
+
self
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def order_by_multiple(*items)
|
|
96
|
+
@order_items = items
|
|
56
97
|
self
|
|
57
98
|
end
|
|
58
99
|
|
|
@@ -73,7 +114,22 @@ module WOWSQL
|
|
|
73
114
|
end
|
|
74
115
|
|
|
75
116
|
def get
|
|
76
|
-
|
|
117
|
+
# Check if we need POST endpoint (advanced features)
|
|
118
|
+
has_advanced_features =
|
|
119
|
+
(@group_by && !@group_by.empty?) ||
|
|
120
|
+
!@having.empty? ||
|
|
121
|
+
(@order_items && !@order_items.empty?) ||
|
|
122
|
+
@filters.any? { |f| ['in', 'not_in', 'between', 'not_between'].include?(f[:operator]) }
|
|
123
|
+
|
|
124
|
+
if has_advanced_features
|
|
125
|
+
# Use POST endpoint for advanced queries
|
|
126
|
+
body = build_query_body
|
|
127
|
+
@client.request('POST', "/#{@table_name}/query", nil, body)
|
|
128
|
+
else
|
|
129
|
+
# Use GET endpoint for simple queries (backward compatibility)
|
|
130
|
+
build_get_params
|
|
131
|
+
@client.request('GET', "/#{@table_name}", @params, nil)
|
|
132
|
+
end
|
|
77
133
|
end
|
|
78
134
|
|
|
79
135
|
def first
|
|
@@ -84,12 +140,49 @@ module WOWSQL
|
|
|
84
140
|
private
|
|
85
141
|
|
|
86
142
|
def add_filter(column, op, value)
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
143
|
+
@filters << { column: column, operator: op, value: value, logical_op: 'AND' }
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
def build_query_body
|
|
147
|
+
body = {}
|
|
148
|
+
|
|
149
|
+
body['select'] = @select_columns if @select_columns && !@select_columns.empty?
|
|
150
|
+
|
|
151
|
+
body['filters'] = @filters if !@filters.empty?
|
|
152
|
+
|
|
153
|
+
body['group_by'] = @group_by if @group_by && !@group_by.empty?
|
|
154
|
+
|
|
155
|
+
body['having'] = @having if !@having.empty?
|
|
156
|
+
|
|
157
|
+
if @order_items && !@order_items.empty?
|
|
158
|
+
body['order_by'] = @order_items.map do |item|
|
|
159
|
+
if item.is_a?(Hash)
|
|
160
|
+
item
|
|
161
|
+
else
|
|
162
|
+
{ column: item[0], direction: item[1] }
|
|
163
|
+
end
|
|
164
|
+
end
|
|
165
|
+
elsif @params['order']
|
|
166
|
+
body['order_by'] = @params['order']
|
|
167
|
+
body['order_direction'] = @params['order_direction'] || 'asc'
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
body['limit'] = @params['limit'].to_i if @params['limit']
|
|
171
|
+
body['offset'] = @params['offset'].to_i if @params['offset']
|
|
172
|
+
|
|
173
|
+
body
|
|
174
|
+
end
|
|
175
|
+
|
|
176
|
+
def build_get_params
|
|
177
|
+
@params['select'] = @select_columns.join(',') if @select_columns && !@select_columns.empty?
|
|
178
|
+
|
|
179
|
+
simple_filters = @filters.reject { |f| ['in', 'not_in', 'between', 'not_between'].include?(f[:operator]) }
|
|
180
|
+
if !simple_filters.empty?
|
|
181
|
+
filter_strings = simple_filters.map do |f|
|
|
182
|
+
value_str = f[:value] || 'null'
|
|
183
|
+
"#{f[:column]}.#{f[:operator]}.#{value_str}"
|
|
184
|
+
end
|
|
185
|
+
@params['filter'] = filter_strings.join(',')
|
|
93
186
|
end
|
|
94
187
|
end
|
|
95
188
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: wowsql-sdk
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- WOWSQL Team
|
|
@@ -75,6 +75,7 @@ extra_rdoc_files: []
|
|
|
75
75
|
files:
|
|
76
76
|
- LICENSE
|
|
77
77
|
- README.md
|
|
78
|
+
- lib/wowmysql.rb
|
|
78
79
|
- lib/wowsql.rb
|
|
79
80
|
- lib/wowsql/client.rb
|
|
80
81
|
- lib/wowsql/exceptions.rb
|