imparcial 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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