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.
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