imparcial 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +5 -0
  3. data/README.txt +48 -0
  4. data/Rakefile +51 -0
  5. data/lib/imparcial.rb +7 -0
  6. metadata +37 -81
  7. data/lib/imparcial/driver/abstract/expression/base.rb +0 -111
  8. data/lib/imparcial/driver/abstract/expression/column.rb +0 -313
  9. data/lib/imparcial/driver/abstract/expression/constraint.rb +0 -149
  10. data/lib/imparcial/driver/abstract/expression/delete.rb +0 -88
  11. data/lib/imparcial/driver/abstract/expression/index.rb +0 -206
  12. data/lib/imparcial/driver/abstract/expression/insert.rb +0 -49
  13. data/lib/imparcial/driver/abstract/expression/lock.rb +0 -11
  14. data/lib/imparcial/driver/abstract/expression/record.rb +0 -41
  15. data/lib/imparcial/driver/abstract/expression/select.rb +0 -38
  16. data/lib/imparcial/driver/abstract/expression/sequence.rb +0 -260
  17. data/lib/imparcial/driver/abstract/expression/statement.rb +0 -128
  18. data/lib/imparcial/driver/abstract/expression/table.rb +0 -416
  19. data/lib/imparcial/driver/abstract/expression/transaction.rb +0 -143
  20. data/lib/imparcial/driver/abstract/expression/update.rb +0 -50
  21. data/lib/imparcial/driver/abstract/expression.rb +0 -24
  22. data/lib/imparcial/driver/abstract/result.rb +0 -95
  23. data/lib/imparcial/driver/abstract/sql/column.rb +0 -103
  24. data/lib/imparcial/driver/abstract/sql/constraint.rb +0 -42
  25. data/lib/imparcial/driver/abstract/sql/delete.rb +0 -22
  26. data/lib/imparcial/driver/abstract/sql/index.rb +0 -45
  27. data/lib/imparcial/driver/abstract/sql/insert.rb +0 -63
  28. data/lib/imparcial/driver/abstract/sql/record.rb +0 -19
  29. data/lib/imparcial/driver/abstract/sql/select.rb +0 -101
  30. data/lib/imparcial/driver/abstract/sql/sequence.rb +0 -55
  31. data/lib/imparcial/driver/abstract/sql/table.rb +0 -42
  32. data/lib/imparcial/driver/abstract/sql/transaction.rb +0 -43
  33. data/lib/imparcial/driver/abstract/sql/update.rb +0 -29
  34. data/lib/imparcial/driver/abstract/sql.rb +0 -21
  35. data/lib/imparcial/driver/abstract/typemap.rb +0 -168
  36. data/lib/imparcial/driver/abstract/util.rb +0 -53
  37. data/lib/imparcial/driver/abstract.rb +0 -255
  38. data/lib/imparcial/driver/mysql/expression/table.rb +0 -17
  39. data/lib/imparcial/driver/mysql/expression.rb +0 -11
  40. data/lib/imparcial/driver/mysql/result.rb +0 -33
  41. data/lib/imparcial/driver/mysql/sql/column.rb +0 -59
  42. data/lib/imparcial/driver/mysql/sql/constraint.rb +0 -39
  43. data/lib/imparcial/driver/mysql/sql/index.rb +0 -42
  44. data/lib/imparcial/driver/mysql/sql/sequence.rb +0 -39
  45. data/lib/imparcial/driver/mysql/sql/table.rb +0 -67
  46. data/lib/imparcial/driver/mysql/sql.rb +0 -15
  47. data/lib/imparcial/driver/mysql/typemap.rb +0 -13
  48. data/lib/imparcial/driver/mysql/util.rb +0 -13
  49. data/lib/imparcial/driver/mysql.rb +0 -49
  50. data/lib/imparcial/driver/postgre/expression.rb +0 -32
  51. data/lib/imparcial/driver/postgre/result.rb +0 -35
  52. data/lib/imparcial/driver/postgre/sql/column.rb +0 -53
  53. data/lib/imparcial/driver/postgre/sql/constraint.rb +0 -37
  54. data/lib/imparcial/driver/postgre/sql/index.rb +0 -53
  55. data/lib/imparcial/driver/postgre/sql/sequence.rb +0 -30
  56. data/lib/imparcial/driver/postgre/sql/table.rb +0 -46
  57. data/lib/imparcial/driver/postgre/sql.rb +0 -15
  58. data/lib/imparcial/driver/postgre/typemap.rb +0 -29
  59. data/lib/imparcial/driver/postgre/util.rb +0 -19
  60. data/lib/imparcial/driver/postgre.rb +0 -43
  61. data/lib/imparcial/driver.rb +0 -1
  62. data/lib/imparcial/exception.rb +0 -71
  63. 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