imparcial 0.0.2 → 0.0.3
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.
- data/History.txt +5 -0
- data/Manifest.txt +5 -0
- data/README.txt +48 -0
- data/Rakefile +51 -0
- data/lib/imparcial.rb +7 -0
- metadata +37 -81
- data/lib/imparcial/driver/abstract/expression/base.rb +0 -111
- data/lib/imparcial/driver/abstract/expression/column.rb +0 -313
- data/lib/imparcial/driver/abstract/expression/constraint.rb +0 -149
- data/lib/imparcial/driver/abstract/expression/delete.rb +0 -88
- data/lib/imparcial/driver/abstract/expression/index.rb +0 -206
- data/lib/imparcial/driver/abstract/expression/insert.rb +0 -49
- data/lib/imparcial/driver/abstract/expression/lock.rb +0 -11
- data/lib/imparcial/driver/abstract/expression/record.rb +0 -41
- data/lib/imparcial/driver/abstract/expression/select.rb +0 -38
- data/lib/imparcial/driver/abstract/expression/sequence.rb +0 -260
- data/lib/imparcial/driver/abstract/expression/statement.rb +0 -128
- data/lib/imparcial/driver/abstract/expression/table.rb +0 -416
- data/lib/imparcial/driver/abstract/expression/transaction.rb +0 -143
- data/lib/imparcial/driver/abstract/expression/update.rb +0 -50
- data/lib/imparcial/driver/abstract/expression.rb +0 -24
- data/lib/imparcial/driver/abstract/result.rb +0 -95
- data/lib/imparcial/driver/abstract/sql/column.rb +0 -103
- data/lib/imparcial/driver/abstract/sql/constraint.rb +0 -42
- data/lib/imparcial/driver/abstract/sql/delete.rb +0 -22
- data/lib/imparcial/driver/abstract/sql/index.rb +0 -45
- data/lib/imparcial/driver/abstract/sql/insert.rb +0 -63
- data/lib/imparcial/driver/abstract/sql/record.rb +0 -19
- data/lib/imparcial/driver/abstract/sql/select.rb +0 -101
- data/lib/imparcial/driver/abstract/sql/sequence.rb +0 -55
- data/lib/imparcial/driver/abstract/sql/table.rb +0 -42
- data/lib/imparcial/driver/abstract/sql/transaction.rb +0 -43
- data/lib/imparcial/driver/abstract/sql/update.rb +0 -29
- data/lib/imparcial/driver/abstract/sql.rb +0 -21
- data/lib/imparcial/driver/abstract/typemap.rb +0 -168
- data/lib/imparcial/driver/abstract/util.rb +0 -53
- data/lib/imparcial/driver/abstract.rb +0 -255
- data/lib/imparcial/driver/mysql/expression/table.rb +0 -17
- data/lib/imparcial/driver/mysql/expression.rb +0 -11
- data/lib/imparcial/driver/mysql/result.rb +0 -33
- data/lib/imparcial/driver/mysql/sql/column.rb +0 -59
- data/lib/imparcial/driver/mysql/sql/constraint.rb +0 -39
- data/lib/imparcial/driver/mysql/sql/index.rb +0 -42
- data/lib/imparcial/driver/mysql/sql/sequence.rb +0 -39
- data/lib/imparcial/driver/mysql/sql/table.rb +0 -67
- data/lib/imparcial/driver/mysql/sql.rb +0 -15
- data/lib/imparcial/driver/mysql/typemap.rb +0 -13
- data/lib/imparcial/driver/mysql/util.rb +0 -13
- data/lib/imparcial/driver/mysql.rb +0 -49
- data/lib/imparcial/driver/postgre/expression.rb +0 -32
- data/lib/imparcial/driver/postgre/result.rb +0 -35
- data/lib/imparcial/driver/postgre/sql/column.rb +0 -53
- data/lib/imparcial/driver/postgre/sql/constraint.rb +0 -37
- data/lib/imparcial/driver/postgre/sql/index.rb +0 -53
- data/lib/imparcial/driver/postgre/sql/sequence.rb +0 -30
- data/lib/imparcial/driver/postgre/sql/table.rb +0 -46
- data/lib/imparcial/driver/postgre/sql.rb +0 -15
- data/lib/imparcial/driver/postgre/typemap.rb +0 -29
- data/lib/imparcial/driver/postgre/util.rb +0 -19
- data/lib/imparcial/driver/postgre.rb +0 -43
- data/lib/imparcial/driver.rb +0 -1
- data/lib/imparcial/exception.rb +0 -71
- data/lib/imparcial/initializer.rb +0 -62
@@ -1,260 +0,0 @@
|
|
1
|
-
module Imparcial
|
2
|
-
module Driver
|
3
|
-
module AbstractExpression
|
4
|
-
|
5
|
-
# It's important to be aware that some databases don't support sequences.
|
6
|
-
# Databases like Mysql, need to override those methods.
|
7
|
-
|
8
|
-
module Sequence
|
9
|
-
|
10
|
-
private
|
11
|
-
|
12
|
-
# Set default values.
|
13
|
-
|
14
|
-
def parse_sequence ( options )
|
15
|
-
|
16
|
-
options[:start_with] ||= 1
|
17
|
-
options[:min_value] ||= 1
|
18
|
-
options[:increment_by] ||= 1
|
19
|
-
options[:cycle] ||= false
|
20
|
-
|
21
|
-
end
|
22
|
-
|
23
|
-
###############################################
|
24
|
-
# #
|
25
|
-
# Creating Sequences #
|
26
|
-
# #
|
27
|
-
###############################################
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def expected_options_for_creating_sequence
|
32
|
-
|
33
|
-
{
|
34
|
-
:sequence_name => :required, :start_with => :optional, :min_value => :optional,
|
35
|
-
:max_value => :optional, :increment_by => :optional, :cycle => :optional,
|
36
|
-
:cache => :optional
|
37
|
-
}
|
38
|
-
|
39
|
-
end
|
40
|
-
|
41
|
-
public
|
42
|
-
|
43
|
-
# === Description
|
44
|
-
# Create a sequence.
|
45
|
-
#
|
46
|
-
# === Usage
|
47
|
-
# abstract_adapter.create_sequence :sequence_name => 'seq_id', :increment_by => 2
|
48
|
-
#
|
49
|
-
# === Options
|
50
|
-
# * :sequence_name
|
51
|
-
# * :start_with
|
52
|
-
# * :min_value
|
53
|
-
# * :max_value
|
54
|
-
# * :increment_by
|
55
|
-
# * :cache
|
56
|
-
# * :cycle
|
57
|
-
#
|
58
|
-
# === Returning
|
59
|
-
# nothing
|
60
|
-
|
61
|
-
def create_sequence ( options = {} )
|
62
|
-
|
63
|
-
check_options expected_options_for_creating_sequence, options
|
64
|
-
|
65
|
-
parse_sequence options
|
66
|
-
|
67
|
-
sql = sql_for_creating_sequence( options )
|
68
|
-
|
69
|
-
logger.warn sql if @sequence_logging
|
70
|
-
|
71
|
-
query sql
|
72
|
-
|
73
|
-
rescue adapter_specific_exception => ex
|
74
|
-
|
75
|
-
raise SequenceCreateError.new(ex.message)
|
76
|
-
|
77
|
-
end
|
78
|
-
|
79
|
-
# === Description
|
80
|
-
# Create a sequence without raising any exception.
|
81
|
-
#
|
82
|
-
# === Usage
|
83
|
-
# abstract_adapter.create_sequence_if_necessary :sequence_name => 'seq_id'
|
84
|
-
#
|
85
|
-
# === Options
|
86
|
-
# * :sequence_name
|
87
|
-
# * :start_with
|
88
|
-
# * :min_value
|
89
|
-
# * :max_value
|
90
|
-
# * :increment_by
|
91
|
-
# * :cache
|
92
|
-
# * :cycle
|
93
|
-
#
|
94
|
-
# === Returning
|
95
|
-
# nothing
|
96
|
-
|
97
|
-
def create_sequence_if_necessary ( options = {} )
|
98
|
-
|
99
|
-
create_sequence options
|
100
|
-
|
101
|
-
rescue SequenceCreateError => ex; end
|
102
|
-
|
103
|
-
###############################################
|
104
|
-
# #
|
105
|
-
# Dropping Sequences #
|
106
|
-
# #
|
107
|
-
###############################################
|
108
|
-
|
109
|
-
private
|
110
|
-
|
111
|
-
def expected_options_for_dropping_sequence
|
112
|
-
|
113
|
-
{:sequence_name => :required}
|
114
|
-
|
115
|
-
end
|
116
|
-
|
117
|
-
public
|
118
|
-
|
119
|
-
# === Description
|
120
|
-
# Drop a sequence.
|
121
|
-
#
|
122
|
-
# === Usage
|
123
|
-
# abstract_adapter.drop_sequence :sequence_name => 'seq_id'
|
124
|
-
#
|
125
|
-
# === Options
|
126
|
-
# * :sequence_name
|
127
|
-
#
|
128
|
-
# === Returning
|
129
|
-
# nothing
|
130
|
-
|
131
|
-
def drop_sequence ( options = {} )
|
132
|
-
|
133
|
-
check_options expected_options_for_dropping_sequence, options
|
134
|
-
|
135
|
-
sql = sql_for_dropping_sequence( options )
|
136
|
-
|
137
|
-
logger.warn sql if @sequence_logging
|
138
|
-
|
139
|
-
query sql
|
140
|
-
|
141
|
-
rescue adapter_specific_exception => ex
|
142
|
-
|
143
|
-
raise SequenceDropError.new(ex.message)
|
144
|
-
|
145
|
-
end
|
146
|
-
|
147
|
-
# === Description
|
148
|
-
# Drop a sequence without raising any exception.
|
149
|
-
#
|
150
|
-
# === Usage
|
151
|
-
# abstract_adapter.drop_sequence :sequence_name => 'seq_id'
|
152
|
-
#
|
153
|
-
# === Options
|
154
|
-
# * :sequence_name
|
155
|
-
#
|
156
|
-
# === Returning
|
157
|
-
# nothing
|
158
|
-
|
159
|
-
def drop_sequence_if_necessary ( options = {} )
|
160
|
-
|
161
|
-
drop_sequence options
|
162
|
-
|
163
|
-
rescue SequenceDropError; end
|
164
|
-
|
165
|
-
# === Description
|
166
|
-
# Drop all sequences.
|
167
|
-
#
|
168
|
-
# === Usage
|
169
|
-
# abstract_adapter.drop_all_sequences
|
170
|
-
#
|
171
|
-
# === Options
|
172
|
-
# no options
|
173
|
-
#
|
174
|
-
# === Returning
|
175
|
-
# nothing
|
176
|
-
|
177
|
-
def drop_all_sequences
|
178
|
-
|
179
|
-
for sequence in get_sequences
|
180
|
-
|
181
|
-
sql = sql_for_dropping_sequence( :sequence_name => sequence )
|
182
|
-
|
183
|
-
logger.warn sql if @sequence_logging
|
184
|
-
|
185
|
-
query sql
|
186
|
-
|
187
|
-
end
|
188
|
-
|
189
|
-
rescue adapter_specific_exception => ex
|
190
|
-
|
191
|
-
raise SequenceError.new(ex.message)
|
192
|
-
|
193
|
-
end
|
194
|
-
|
195
|
-
###############################################
|
196
|
-
# #
|
197
|
-
# Sequence Listing #
|
198
|
-
# #
|
199
|
-
###############################################
|
200
|
-
|
201
|
-
private
|
202
|
-
|
203
|
-
def expected_options_for_verifying_sequence_existance
|
204
|
-
|
205
|
-
{:sequence_name => :required}
|
206
|
-
|
207
|
-
end
|
208
|
-
|
209
|
-
public
|
210
|
-
|
211
|
-
# Ask for a sequence returning true or false
|
212
|
-
|
213
|
-
def sequence_exists? ( options = {} )
|
214
|
-
|
215
|
-
check_options expected_options_for_verifying_sequence_existance, options
|
216
|
-
|
217
|
-
sql = sql_for_sequence_exists?( options )
|
218
|
-
|
219
|
-
logger.warn sql if @sequence_logging
|
220
|
-
|
221
|
-
query sql
|
222
|
-
|
223
|
-
result.rows > 0
|
224
|
-
|
225
|
-
rescue adapter_specific_exception => ex
|
226
|
-
|
227
|
-
raise SequenceListError.new(ex.message)
|
228
|
-
|
229
|
-
end
|
230
|
-
|
231
|
-
# Retrieve all sequences. Similar to retrive_tables.
|
232
|
-
|
233
|
-
def get_sequences
|
234
|
-
|
235
|
-
sql = sql_for_getting_sequences
|
236
|
-
|
237
|
-
logger.warn sql if @sequence_logging
|
238
|
-
|
239
|
-
query sql
|
240
|
-
|
241
|
-
sequences = []
|
242
|
-
|
243
|
-
result.fetch do |name|
|
244
|
-
|
245
|
-
sequences << name.value
|
246
|
-
|
247
|
-
end
|
248
|
-
|
249
|
-
sequences
|
250
|
-
|
251
|
-
rescue adapter_specific_exception => ex
|
252
|
-
|
253
|
-
raise SequenceListError.new(ex.message)
|
254
|
-
|
255
|
-
end
|
256
|
-
|
257
|
-
end
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
@@ -1,128 +0,0 @@
|
|
1
|
-
module Imparcial
|
2
|
-
module Driver
|
3
|
-
module AbstractExpression
|
4
|
-
module Statement
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def parse_conditions ( conditions )
|
9
|
-
|
10
|
-
# No condition? no evaluation!
|
11
|
-
|
12
|
-
return '' unless conditions
|
13
|
-
|
14
|
-
ref = ' WHERE '
|
15
|
-
|
16
|
-
# ['id = ?', 1]
|
17
|
-
# ^ ^
|
18
|
-
# | |
|
19
|
-
# syntax values
|
20
|
-
|
21
|
-
syntax = conditions[0]
|
22
|
-
values = conditions[1..-1]
|
23
|
-
|
24
|
-
# Extract all args.
|
25
|
-
#
|
26
|
-
# for example:
|
27
|
-
#
|
28
|
-
# 'id = ? AND name = ?'
|
29
|
-
#
|
30
|
-
# It has two args:
|
31
|
-
# id = ?
|
32
|
-
# name = ?
|
33
|
-
|
34
|
-
ops = '=|!=|>|<|>=|<=|<>|IN|NOT IN'
|
35
|
-
aps = "\"\'"
|
36
|
-
log = "AND|OR"
|
37
|
-
|
38
|
-
args = syntax.scan(/([\w|\.]+) ?(#{ops}) ?(\?|[#{aps}]?[\w|\d]+[#{aps}]?) ?(#{log})?/)
|
39
|
-
index = -1
|
40
|
-
|
41
|
-
args.each do |arg|
|
42
|
-
|
43
|
-
name, operator, value, logical = arg
|
44
|
-
|
45
|
-
if value != '?'
|
46
|
-
|
47
|
-
column = quote(name) + ' ' + operator + ' ' + value
|
48
|
-
column += ' ' + logical + ' ' if logical
|
49
|
-
ref += column
|
50
|
-
next
|
51
|
-
|
52
|
-
end
|
53
|
-
|
54
|
-
index += 1
|
55
|
-
|
56
|
-
if values[index].class == Array
|
57
|
-
|
58
|
-
raise ConditionError if values[index].length == 0
|
59
|
-
|
60
|
-
op = 'IN' if operator == '='
|
61
|
-
op = 'NOT IN' if operator == '!='
|
62
|
-
column = quote(name) + " #{op} ("
|
63
|
-
|
64
|
-
for i in 0..values[index].length-1
|
65
|
-
values[index][i] = quote_value(values[index][i])
|
66
|
-
end
|
67
|
-
|
68
|
-
column += values[index].join(',')
|
69
|
-
|
70
|
-
column += ')'
|
71
|
-
column += ' ' + logical + ' ' if logical
|
72
|
-
|
73
|
-
ref += column
|
74
|
-
|
75
|
-
else
|
76
|
-
|
77
|
-
value = values[index] || 'NULL'
|
78
|
-
value = quote_value(value)
|
79
|
-
|
80
|
-
column = quote(name) + ' ' + operator + ' ' + value
|
81
|
-
column += ' ' + logical + ' ' if logical
|
82
|
-
|
83
|
-
ref += column
|
84
|
-
|
85
|
-
end
|
86
|
-
|
87
|
-
end #end of args.each
|
88
|
-
|
89
|
-
ref
|
90
|
-
|
91
|
-
end # end of parse_condition
|
92
|
-
|
93
|
-
def parse_limit ( limit )
|
94
|
-
|
95
|
-
# No limit? no evaluation!
|
96
|
-
|
97
|
-
return '' unless limit
|
98
|
-
|
99
|
-
if limit.class != Range
|
100
|
-
|
101
|
-
' LIMIT ' + limit.to_s
|
102
|
-
|
103
|
-
else
|
104
|
-
|
105
|
-
' LIMIT ' + limit.first.to_i.to_s + ',' + limit.last.to_i.to_s
|
106
|
-
|
107
|
-
end
|
108
|
-
|
109
|
-
end
|
110
|
-
|
111
|
-
def parse_order ( options )
|
112
|
-
|
113
|
-
# No order? no evaluation!
|
114
|
-
|
115
|
-
return '' if !options[:order_desc] && !options[:order_asc]
|
116
|
-
|
117
|
-
syntax = ' ORDER BY '
|
118
|
-
syntax += quote( options[:order_desc] || options[:order_asc])
|
119
|
-
syntax += options[:order_desc] ? ' DESC' : ' ASC'
|
120
|
-
|
121
|
-
syntax
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
|
-
end
|
126
|
-
end
|
127
|
-
end
|
128
|
-
end
|