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.
- data/lib/imparcial/driver/{base → abstract}/expression/base.rb +11 -4
- data/lib/imparcial/driver/abstract/expression/column.rb +313 -0
- data/lib/imparcial/driver/abstract/expression/constraint.rb +149 -0
- data/lib/imparcial/driver/abstract/expression/delete.rb +88 -0
- data/lib/imparcial/driver/{base → abstract}/expression/index.rb +103 -96
- data/lib/imparcial/driver/abstract/expression/insert.rb +49 -0
- data/lib/imparcial/driver/{base → abstract}/expression/lock.rb +1 -1
- data/lib/imparcial/driver/{base/expression/util.rb → abstract/expression/record.rb} +8 -12
- data/lib/imparcial/driver/{base → abstract}/expression/select.rb +6 -4
- data/lib/imparcial/driver/{base → abstract}/expression/sequence.rb +133 -62
- data/lib/imparcial/driver/{base → abstract}/expression/statement.rb +1 -1
- data/lib/imparcial/driver/abstract/expression/table.rb +416 -0
- data/lib/imparcial/driver/abstract/expression/transaction.rb +143 -0
- data/lib/imparcial/driver/{base → abstract}/expression/update.rb +20 -3
- data/lib/imparcial/driver/abstract/expression.rb +24 -0
- data/lib/imparcial/driver/{base → abstract}/result.rb +12 -11
- data/lib/imparcial/driver/abstract/sql/column.rb +103 -0
- data/lib/imparcial/driver/abstract/sql/constraint.rb +42 -0
- data/lib/imparcial/driver/{base → abstract}/sql/delete.rb +1 -1
- data/lib/imparcial/driver/{base → abstract}/sql/index.rb +3 -11
- data/lib/imparcial/driver/{base → abstract}/sql/insert.rb +1 -1
- data/lib/imparcial/driver/abstract/sql/record.rb +19 -0
- data/lib/imparcial/driver/{base → abstract}/sql/select.rb +2 -2
- data/lib/imparcial/driver/{base → abstract}/sql/sequence.rb +2 -2
- data/lib/imparcial/driver/{base/sql/table_operation.rb → abstract/sql/table.rb} +8 -15
- data/lib/imparcial/driver/{base → abstract}/sql/transaction.rb +5 -5
- data/lib/imparcial/driver/{base → abstract}/sql/update.rb +1 -1
- data/lib/imparcial/driver/abstract/sql.rb +21 -0
- data/lib/imparcial/driver/{base → abstract}/typemap.rb +43 -89
- data/lib/imparcial/driver/{base → abstract}/util.rb +17 -5
- data/lib/imparcial/driver/abstract.rb +255 -0
- data/lib/imparcial/driver/mysql/expression/table.rb +2 -11
- data/lib/imparcial/driver/mysql/expression.rb +4 -4
- data/lib/imparcial/driver/mysql/result.rb +1 -1
- data/lib/imparcial/driver/mysql/sql/column.rb +59 -0
- data/lib/imparcial/driver/mysql/sql/constraint.rb +39 -0
- data/lib/imparcial/driver/mysql/sql/index.rb +14 -23
- data/lib/imparcial/driver/mysql/sql/sequence.rb +1 -1
- data/lib/imparcial/driver/mysql/sql/{table_metadata.rb → table.rb} +29 -5
- data/lib/imparcial/driver/mysql/sql.rb +7 -7
- data/lib/imparcial/driver/mysql/typemap.rb +1 -1
- data/lib/imparcial/driver/mysql/util.rb +1 -1
- data/lib/imparcial/driver/mysql.rb +19 -18
- data/lib/imparcial/driver/postgre/expression.rb +26 -7
- data/lib/imparcial/driver/postgre/result.rb +1 -1
- data/lib/imparcial/driver/postgre/sql/column.rb +53 -0
- data/lib/imparcial/driver/postgre/sql/constraint.rb +37 -0
- data/lib/imparcial/driver/postgre/sql/index.rb +21 -21
- data/lib/imparcial/driver/postgre/sql/sequence.rb +6 -4
- data/lib/imparcial/driver/postgre/sql/{table_metadata.rb → table.rb} +8 -8
- data/lib/imparcial/driver/postgre/sql.rb +7 -7
- data/lib/imparcial/driver/postgre/typemap.rb +2 -2
- data/lib/imparcial/driver/postgre/util.rb +1 -1
- data/lib/imparcial/driver/postgre.rb +11 -11
- data/lib/imparcial/driver.rb +1 -1
- data/lib/imparcial/exception.rb +28 -18
- data/lib/imparcial/initializer.rb +62 -0
- data/lib/imparcial.rb +1 -74
- metadata +50 -50
- data/lib/imparcial/driver/base/expression/delete.rb +0 -72
- data/lib/imparcial/driver/base/expression/insert.rb +0 -33
- data/lib/imparcial/driver/base/expression/table_diff.rb +0 -154
- data/lib/imparcial/driver/base/expression/table_evolution.rb +0 -94
- data/lib/imparcial/driver/base/expression/table_metadata.rb +0 -122
- data/lib/imparcial/driver/base/expression/table_operation.rb +0 -137
- data/lib/imparcial/driver/base/expression/transaction.rb +0 -59
- data/lib/imparcial/driver/base/expression.rb +0 -37
- data/lib/imparcial/driver/base/sql/table_metadata.rb +0 -29
- data/lib/imparcial/driver/base/sql.rb +0 -25
- data/lib/imparcial/driver/base.rb +0 -156
- data/lib/imparcial/driver/mysql/expression/index.rb +0 -44
- data/lib/imparcial/driver/mysql/sql/table_operation.rb +0 -20
- data/lib/imparcial/driver/postgre/expression/index.rb +0 -10
- data/lib/imparcial/driver/postgre/expression/sequence.rb +0 -9
- data/lib/imparcial/driver/postgre/expression/table.rb +0 -20
- 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
|
|
3
|
+
module AbstractExpression
|
|
4
4
|
module Base
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
#
|
|
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
|