imparcial 0.0.1 → 0.0.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.
Files changed (76) hide show
  1. data/lib/imparcial/driver/{base → abstract}/expression/base.rb +11 -4
  2. data/lib/imparcial/driver/abstract/expression/column.rb +313 -0
  3. data/lib/imparcial/driver/abstract/expression/constraint.rb +149 -0
  4. data/lib/imparcial/driver/abstract/expression/delete.rb +88 -0
  5. data/lib/imparcial/driver/{base → abstract}/expression/index.rb +103 -96
  6. data/lib/imparcial/driver/abstract/expression/insert.rb +49 -0
  7. data/lib/imparcial/driver/{base → abstract}/expression/lock.rb +1 -1
  8. data/lib/imparcial/driver/{base/expression/util.rb → abstract/expression/record.rb} +8 -12
  9. data/lib/imparcial/driver/{base → abstract}/expression/select.rb +6 -4
  10. data/lib/imparcial/driver/{base → abstract}/expression/sequence.rb +133 -62
  11. data/lib/imparcial/driver/{base → abstract}/expression/statement.rb +1 -1
  12. data/lib/imparcial/driver/abstract/expression/table.rb +416 -0
  13. data/lib/imparcial/driver/abstract/expression/transaction.rb +143 -0
  14. data/lib/imparcial/driver/{base → abstract}/expression/update.rb +20 -3
  15. data/lib/imparcial/driver/abstract/expression.rb +24 -0
  16. data/lib/imparcial/driver/{base → abstract}/result.rb +12 -11
  17. data/lib/imparcial/driver/abstract/sql/column.rb +103 -0
  18. data/lib/imparcial/driver/abstract/sql/constraint.rb +42 -0
  19. data/lib/imparcial/driver/{base → abstract}/sql/delete.rb +1 -1
  20. data/lib/imparcial/driver/{base → abstract}/sql/index.rb +3 -11
  21. data/lib/imparcial/driver/{base → abstract}/sql/insert.rb +1 -1
  22. data/lib/imparcial/driver/abstract/sql/record.rb +19 -0
  23. data/lib/imparcial/driver/{base → abstract}/sql/select.rb +2 -2
  24. data/lib/imparcial/driver/{base → abstract}/sql/sequence.rb +2 -2
  25. data/lib/imparcial/driver/{base/sql/table_operation.rb → abstract/sql/table.rb} +8 -15
  26. data/lib/imparcial/driver/{base → abstract}/sql/transaction.rb +5 -5
  27. data/lib/imparcial/driver/{base → abstract}/sql/update.rb +1 -1
  28. data/lib/imparcial/driver/abstract/sql.rb +21 -0
  29. data/lib/imparcial/driver/{base → abstract}/typemap.rb +43 -89
  30. data/lib/imparcial/driver/{base → abstract}/util.rb +17 -5
  31. data/lib/imparcial/driver/abstract.rb +255 -0
  32. data/lib/imparcial/driver/mysql/expression/table.rb +2 -11
  33. data/lib/imparcial/driver/mysql/expression.rb +4 -4
  34. data/lib/imparcial/driver/mysql/result.rb +1 -1
  35. data/lib/imparcial/driver/mysql/sql/column.rb +59 -0
  36. data/lib/imparcial/driver/mysql/sql/constraint.rb +39 -0
  37. data/lib/imparcial/driver/mysql/sql/index.rb +14 -23
  38. data/lib/imparcial/driver/mysql/sql/sequence.rb +1 -1
  39. data/lib/imparcial/driver/mysql/sql/{table_metadata.rb → table.rb} +29 -5
  40. data/lib/imparcial/driver/mysql/sql.rb +7 -7
  41. data/lib/imparcial/driver/mysql/typemap.rb +1 -1
  42. data/lib/imparcial/driver/mysql/util.rb +1 -1
  43. data/lib/imparcial/driver/mysql.rb +19 -18
  44. data/lib/imparcial/driver/postgre/expression.rb +26 -7
  45. data/lib/imparcial/driver/postgre/result.rb +1 -1
  46. data/lib/imparcial/driver/postgre/sql/column.rb +53 -0
  47. data/lib/imparcial/driver/postgre/sql/constraint.rb +37 -0
  48. data/lib/imparcial/driver/postgre/sql/index.rb +21 -21
  49. data/lib/imparcial/driver/postgre/sql/sequence.rb +6 -4
  50. data/lib/imparcial/driver/postgre/sql/{table_metadata.rb → table.rb} +8 -8
  51. data/lib/imparcial/driver/postgre/sql.rb +7 -7
  52. data/lib/imparcial/driver/postgre/typemap.rb +2 -2
  53. data/lib/imparcial/driver/postgre/util.rb +1 -1
  54. data/lib/imparcial/driver/postgre.rb +11 -11
  55. data/lib/imparcial/driver.rb +1 -1
  56. data/lib/imparcial/exception.rb +28 -18
  57. data/lib/imparcial/initializer.rb +62 -0
  58. data/lib/imparcial.rb +1 -74
  59. metadata +50 -50
  60. data/lib/imparcial/driver/base/expression/delete.rb +0 -72
  61. data/lib/imparcial/driver/base/expression/insert.rb +0 -33
  62. data/lib/imparcial/driver/base/expression/table_diff.rb +0 -154
  63. data/lib/imparcial/driver/base/expression/table_evolution.rb +0 -94
  64. data/lib/imparcial/driver/base/expression/table_metadata.rb +0 -122
  65. data/lib/imparcial/driver/base/expression/table_operation.rb +0 -137
  66. data/lib/imparcial/driver/base/expression/transaction.rb +0 -59
  67. data/lib/imparcial/driver/base/expression.rb +0 -37
  68. data/lib/imparcial/driver/base/sql/table_metadata.rb +0 -29
  69. data/lib/imparcial/driver/base/sql.rb +0 -25
  70. data/lib/imparcial/driver/base.rb +0 -156
  71. data/lib/imparcial/driver/mysql/expression/index.rb +0 -44
  72. data/lib/imparcial/driver/mysql/sql/table_operation.rb +0 -20
  73. data/lib/imparcial/driver/postgre/expression/index.rb +0 -10
  74. data/lib/imparcial/driver/postgre/expression/sequence.rb +0 -9
  75. data/lib/imparcial/driver/postgre/expression/table.rb +0 -20
  76. data/lib/imparcial/driver/postgre/sql/table_operation.rb +0 -9
@@ -1,11 +1,16 @@
1
1
  module Imparcial
2
2
  module Driver
3
- module ExpressionBase
3
+ module AbstractExpression
4
4
  module Base
5
5
 
6
- private
7
-
8
- # Basically it validates every user's entered option.
6
+ public
7
+
8
+ # In order to make things easier to develop, we've adopted hashes
9
+ # as parameter. Furthermore, single parameters, like drop_table,
10
+ # must be in hashes too.
11
+ # By doing that, we can provide as many features as we want without
12
+ # blowing up the interface.
13
+ # Also, we can use this following method to apply some validations.
9
14
 
10
15
  def check_options ( expected_options , user_options )
11
16
 
@@ -98,6 +103,8 @@ module Imparcial
98
103
 
99
104
  end
100
105
 
106
+ module_function :check_options
107
+
101
108
  end
102
109
  end
103
110
  end
@@ -0,0 +1,313 @@
1
+ module Imparcial
2
+ module Driver
3
+ module AbstractExpression
4
+ module Column
5
+
6
+ ###########################################
7
+ # #
8
+ # Column Dropping #
9
+ # #
10
+ ###########################################
11
+
12
+ private
13
+
14
+ def expected_options_for_dropping_columns
15
+
16
+ {:table_name => :required, :fields => :required}
17
+
18
+ end
19
+
20
+ public
21
+
22
+ # === Description
23
+ # Drop some columns.
24
+ #
25
+ # === Usage
26
+ # abstract_adapter.drop_columns :table_name => 'person', :fields => ['id','name']
27
+ #
28
+ # === Options
29
+ # * :table_name
30
+ # * :fields
31
+ #
32
+ # === Returning
33
+ # nothing
34
+
35
+ def drop_columns ( options = {} )
36
+
37
+ check_options expected_options_for_dropping_columns, options
38
+
39
+ sql = sql_for_dropping_columns( options )
40
+
41
+ logger.warn sql if @column_logging
42
+
43
+ query sql
44
+
45
+ rescue adapter_specific_exception => ex
46
+
47
+ raise ColumnDropError.new(ex.message)
48
+
49
+ end
50
+
51
+ ###########################################
52
+ # #
53
+ # Column Creation #
54
+ # #
55
+ ###########################################
56
+
57
+ private
58
+
59
+ def expected_options_for_adding_columns
60
+
61
+ {:table_name => :required, :fields => :required}
62
+
63
+ end
64
+
65
+ public
66
+
67
+ # === Description
68
+ # Add some columns without dropping any table.
69
+ #
70
+ # === Usage
71
+ # abstract_adapter.add_columns :table_name => 'person',
72
+ # :fields => [{:name => :age, :type => :integer]
73
+ #
74
+ # === Options
75
+ # * :table_name
76
+ # * :fields
77
+ #
78
+ # === Returning
79
+ # nothing
80
+
81
+ def add_columns ( options = {} )
82
+
83
+ check_options expected_options_for_adding_columns, options
84
+
85
+ sql = sql_for_adding_columns( options )
86
+
87
+ logger.warn sql if @column_logging
88
+
89
+ query sql
90
+
91
+ rescue adapter_specific_exception => ex
92
+
93
+ raise ColumnCreateError.new(ex.message)
94
+
95
+ end
96
+
97
+ ###########################################
98
+ # #
99
+ # Column Listing #
100
+ # #
101
+ ###########################################
102
+
103
+ private
104
+
105
+ def expected_options_for_getting_columns_information
106
+
107
+ {:table_name => :required}
108
+
109
+ end
110
+
111
+ public
112
+
113
+ # === Description
114
+ # Get name,type and size from every column in a given table.
115
+ #
116
+ # === Usage
117
+ # abstract_adapter.get_columns_information :table_name => 'person'
118
+ #
119
+ # === Options
120
+ # * :table_name
121
+ #
122
+ # === Returning
123
+ # an array with hashes.
124
+ # * :name
125
+ # * :type
126
+ # * :size
127
+
128
+ def get_columns_information ( options = {} )
129
+
130
+ check_options expected_options_for_getting_columns_information, options
131
+
132
+ sql = sql_for_getting_columns_information( options )
133
+
134
+ logger.warn sql if @column_logging
135
+
136
+ query sql
137
+
138
+ fields = []
139
+
140
+ result.fetch do |name, type, size|
141
+
142
+ field = column_to_field :name => name.value, :type => type.value, :size => size.value
143
+
144
+ fields << field
145
+
146
+ end
147
+
148
+ fields
149
+
150
+ rescue adapter_specific_exception => ex
151
+
152
+ raise ColumnListError.new(ex.message)
153
+
154
+ end
155
+
156
+ private
157
+
158
+ def expected_options_for_getting_column_information
159
+
160
+ {:table_name => :required, :field_name => :required}
161
+
162
+ end
163
+
164
+ public
165
+
166
+ # === Description
167
+ # Get name,type and size from a column in a given table.
168
+ # See :get_columns_information
169
+
170
+ def get_column_information ( options = {} )
171
+
172
+ check_options expected_options_for_getting_column_information, options
173
+
174
+ sql = sql_for_getting_column_information options
175
+
176
+ logger.warn sql if @column_logging
177
+
178
+ query sql
179
+
180
+ name, type, size = result.fetch_first_row
181
+
182
+ column_to_field :name => name.value, :type => type.value, :size => size.value
183
+
184
+ end
185
+
186
+ ###########################################
187
+ # #
188
+ # Column Renaming #
189
+ # #
190
+ ###########################################
191
+
192
+ private
193
+
194
+ def expected_options_for_renaming_column
195
+
196
+ {:table_name => :required, :field => :required}
197
+
198
+ end
199
+
200
+ public
201
+
202
+ # === Description
203
+ # Rename a column.
204
+ #
205
+ # === Usage
206
+ # abstract_adapter.rename_column :table_name => 'person', :field => {:id => :super_id}
207
+ #
208
+ # === Options
209
+ # * :table_name
210
+ # * :fields
211
+ #
212
+ # === Returning
213
+ # nothing
214
+
215
+ def rename_column ( options = {} )
216
+
217
+ check_options expected_options_for_renaming_column, options
218
+
219
+ sql = sql_for_renaming_column( options )
220
+
221
+ logger.warn sql if @column_logging
222
+
223
+ query sql
224
+
225
+ rescue adapter_specific_exception => ex
226
+
227
+ raise ColumnRenameError.new(ex.message)
228
+
229
+ end
230
+
231
+ private
232
+
233
+ def expected_options_for_renaming_columns
234
+
235
+ {:table_name => :required, :fields => :required}
236
+
237
+ end
238
+
239
+ public
240
+
241
+ # === Description
242
+ # Rename a bunch of columns. See :rename_column for further info.
243
+
244
+ def rename_columns ( options = {} )
245
+
246
+ check_options expected_options_for_renaming_columns, options
247
+
248
+ options[:fields].each do |old_field,new_field|
249
+
250
+ sql = sql_for_renaming_column( :table_name => options[:table_name], :field => {old_field => new_field})
251
+
252
+ logger.warn sql if @column_logging
253
+
254
+ query sql
255
+
256
+ end
257
+
258
+ rescue adapter_specific_exception => ex
259
+
260
+ raise ColumnRenameError.new(ex.message)
261
+
262
+ end
263
+
264
+ ###########################################
265
+ # #
266
+ # Column Modification #
267
+ # #
268
+ ###########################################
269
+
270
+ private
271
+
272
+ def expected_options_for_modifying_columns
273
+
274
+ {:table_name => :required, :fields => :required}
275
+
276
+ end
277
+
278
+ public
279
+
280
+ # === Description
281
+ # Modify column type and size if needed.
282
+ #
283
+ # === Usage
284
+ # abstract_adapter.modify_columns :table_name => 'person',
285
+ # :fields => [{:name => :id, :type => :float}]
286
+ #
287
+ # === Options
288
+ # * :table_name
289
+ # * :fields
290
+ #
291
+ # === Returning
292
+ # nothing
293
+
294
+ def modify_columns ( options = {} )
295
+
296
+ check_options expected_options_for_modifying_columns, options
297
+
298
+ sql = sql_for_modifying_columns( options )
299
+
300
+ logger.warn sql if @column_logging
301
+
302
+ query sql
303
+
304
+ rescue adapter_specific_exception => ex
305
+
306
+ raise ColumnUpdateError.new(ex.message)
307
+
308
+ end
309
+
310
+ end
311
+ end
312
+ end
313
+ end
@@ -0,0 +1,149 @@
1
+ module Imparcial
2
+ module Driver
3
+ module AbstractExpression
4
+ module Constraint
5
+
6
+ ###########################################
7
+ # #
8
+ # Primary Key #
9
+ # #
10
+ ###########################################
11
+
12
+ private
13
+
14
+ def expected_options_for_adding_primary_key
15
+
16
+ {:table_name => :required, :fields => :required}
17
+
18
+ end
19
+
20
+ public
21
+
22
+ # === Description
23
+ # Make a bunch of fields primary key.
24
+ #
25
+ # === Usage
26
+ # abstract_adapter.primary_key :table_name => 'person',
27
+ # :fields => ['id','name']
28
+ #
29
+ # === Options
30
+ # * :table_name
31
+ # * :fields
32
+ #
33
+ # === Returning
34
+ # nothing
35
+
36
+ def add_primary_key ( options = {} )
37
+
38
+ check_options expected_options_for_adding_primary_key, options
39
+
40
+ sql = sql_for_adding_primary_key( options )
41
+
42
+ logger.warn sql if @column_logging
43
+
44
+ query sql
45
+
46
+ rescue adapter_specific_exception => ex
47
+
48
+ raise ColumnConstraintError.new(ex.message)
49
+
50
+ end
51
+
52
+ ###########################################
53
+ # #
54
+ # Auto Increment #
55
+ # #
56
+ ###########################################
57
+
58
+ private
59
+
60
+ def expected_options_for_adding_auto_increment
61
+
62
+ {:table_name => :required, :field => :required}
63
+
64
+ end
65
+
66
+ public
67
+
68
+ # === Description
69
+ # Make a bunch of fields auto increment.
70
+ #
71
+ # === Usage
72
+ # abstract_adapter.add_auto_increment :table_name => 'person',
73
+ # :fields => ['id','name']
74
+ #
75
+ # === Options
76
+ # * :table_name
77
+ # * :fields
78
+ #
79
+ # === Returning
80
+ # nothing
81
+
82
+ def add_auto_increment ( options = {} )
83
+
84
+ check_options expected_options_for_adding_auto_increment, options
85
+
86
+ add_primary_key :table_name => options[:table_name], :fields => [options[:field]]
87
+ sql = sql_for_adding_auto_increment( options )
88
+
89
+ logger.warn sql if @column_logging
90
+
91
+ query sql
92
+
93
+ rescue adapter_specific_exception => ex
94
+
95
+ raise ColumnConstraintError.new(ex.message)
96
+
97
+ end
98
+
99
+ ###########################################
100
+ # #
101
+ # Default Value #
102
+ # #
103
+ ###########################################
104
+
105
+ private
106
+
107
+ def expected_options_for_adding_default_value
108
+
109
+ {:table_name => :required, :fields => :required}
110
+
111
+ end
112
+
113
+ public
114
+
115
+ # === Description
116
+ # Add default value for some fields.
117
+ #
118
+ # === Usage
119
+ # abstract_adapter.add_default_value :table_name => 'person',
120
+ # :fields => {:id => 1, :name => 'jota'}
121
+ #
122
+ # === Options
123
+ # * :table_name
124
+ # * :fields
125
+ #
126
+ # === Returning
127
+ # nothing
128
+
129
+ def add_default_value ( options = {} )
130
+
131
+ check_options expected_options_for_adding_default_value, options
132
+
133
+ sql = sql_for_adding_default_value( options )
134
+
135
+ logger.warn sql if @column_logging
136
+
137
+ query sql
138
+
139
+ rescue adapter_specific_exception => ex
140
+
141
+ raise ColumnConstraintError.new(ex.message)
142
+
143
+ end
144
+
145
+ end
146
+ end
147
+ end
148
+ end
149
+
@@ -0,0 +1,88 @@
1
+ module Imparcial
2
+ module Driver
3
+ module AbstractExpression
4
+ module Delete
5
+
6
+ private
7
+
8
+ def expected_options_for_deleting
9
+
10
+ {:table_name => :required, :conditions => :required}
11
+
12
+ end
13
+
14
+ public
15
+
16
+ # === Description
17
+ # Delete some records. Besides, this function demands deleting
18
+ # with some conditions.
19
+ #
20
+ # === Usage
21
+ # abstract_adapter.delete :table_name => 'person', :conditions =>
22
+ # ['id = ?',1]
23
+ #
24
+ # === Options
25
+ # * :table_name
26
+ # * :conditions
27
+ #
28
+ # === Returning
29
+ # nothing
30
+
31
+ def delete ( options = {} )
32
+
33
+ check_options expected_options_for_deleting, options
34
+
35
+ sql = sql_for_deleting( options )
36
+
37
+ logger.warn sql if @delete_logging
38
+
39
+ query sql
40
+
41
+ rescue adapter_specific_exception => ex
42
+
43
+ raise DeleteError.new(ex.message)
44
+
45
+ end
46
+
47
+ private
48
+
49
+ def expected_options_for_deleting_all
50
+
51
+ {:table_name => :required}
52
+
53
+ end
54
+
55
+ public
56
+
57
+ # === Description
58
+ # Delete some records. Besides, this function demands no conditions.
59
+ #
60
+ # === Usage
61
+ # abstract_adapter.delete_all :table_name => 'person'
62
+ #
63
+ # === Options
64
+ # * :table_name
65
+ #
66
+ # === Returning
67
+ # nothing
68
+
69
+ def delete_all ( options = {} )
70
+
71
+ check_options expected_options_for_deleting_all, options
72
+
73
+ sql = sql_for_deleting( options )
74
+
75
+ logger.warn sql if @delete_logging
76
+
77
+ query sql
78
+
79
+ rescue adapter_specific_exception => ex
80
+
81
+ raise DeleteError.new(ex.message)
82
+
83
+ end
84
+
85
+ end
86
+ end
87
+ end
88
+ end