imparcial 0.0.4 → 0.0.5
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/History.txt +2 -5
- data/Manifest.txt +79 -5
- data/README.txt +71 -7
- data/Rakefile +1 -1
- 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/abstract/expression/index.rb +206 -0
- data/lib/imparcial/driver/abstract/expression/insert.rb +49 -0
- data/lib/imparcial/driver/abstract/expression/lock.rb +11 -0
- data/lib/imparcial/driver/abstract/expression/record.rb +41 -0
- data/lib/imparcial/driver/abstract/expression/select.rb +38 -0
- data/lib/imparcial/driver/abstract/expression/sequence.rb +260 -0
- data/lib/imparcial/driver/abstract/expression/statement.rb +128 -0
- data/lib/imparcial/driver/abstract/expression/table.rb +416 -0
- data/lib/imparcial/driver/abstract/expression/transaction.rb +143 -0
- data/lib/imparcial/driver/abstract/expression/update.rb +50 -0
- data/lib/imparcial/driver/abstract/expression.rb +23 -0
- data/lib/imparcial/driver/abstract/result.rb +95 -0
- data/lib/imparcial/driver/abstract/sql/column.rb +103 -0
- data/lib/imparcial/driver/abstract/sql/constraint.rb +42 -0
- data/lib/imparcial/driver/abstract/sql/delete.rb +22 -0
- data/lib/imparcial/driver/abstract/sql/index.rb +45 -0
- data/lib/imparcial/driver/abstract/sql/insert.rb +63 -0
- data/lib/imparcial/driver/abstract/sql/record.rb +19 -0
- data/lib/imparcial/driver/abstract/sql/select.rb +101 -0
- data/lib/imparcial/driver/abstract/sql/sequence.rb +55 -0
- data/lib/imparcial/driver/abstract/sql/table.rb +42 -0
- data/lib/imparcial/driver/abstract/sql/transaction.rb +43 -0
- data/lib/imparcial/driver/abstract/sql/update.rb +29 -0
- data/lib/imparcial/driver/abstract/sql.rb +21 -0
- data/lib/imparcial/driver/abstract/typemap.rb +168 -0
- data/lib/imparcial/driver/abstract/util.rb +53 -0
- data/lib/imparcial/driver/abstract.rb +255 -0
- data/lib/imparcial/driver/mysql/expression/table.rb +17 -0
- data/lib/imparcial/driver/mysql/expression.rb +11 -0
- data/lib/imparcial/driver/mysql/result.rb +33 -0
- 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 +42 -0
- data/lib/imparcial/driver/mysql/sql/sequence.rb +39 -0
- data/lib/imparcial/driver/mysql/sql/table.rb +67 -0
- data/lib/imparcial/driver/mysql/sql.rb +15 -0
- data/lib/imparcial/driver/mysql/typemap.rb +13 -0
- data/lib/imparcial/driver/mysql/util.rb +13 -0
- data/lib/imparcial/driver/mysql.rb +49 -0
- data/lib/imparcial/driver/postgre/expression.rb +32 -0
- data/lib/imparcial/driver/postgre/result.rb +35 -0
- 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 +53 -0
- data/lib/imparcial/driver/postgre/sql/sequence.rb +30 -0
- data/lib/imparcial/driver/postgre/sql/table.rb +46 -0
- data/lib/imparcial/driver/postgre/sql.rb +15 -0
- data/lib/imparcial/driver/postgre/typemap.rb +36 -0
- data/lib/imparcial/driver/postgre/util.rb +19 -0
- data/lib/imparcial/driver/postgre.rb +43 -0
- data/lib/imparcial/driver.rb +1 -0
- data/lib/imparcial/exception.rb +71 -0
- data/lib/imparcial/extension.rb +90 -0
- data/lib/imparcial/initializer.rb +30 -0
- data/lib/imparcial.rb +1 -1
- data/test/unit/base/common/tc_quote.rb +30 -0
- data/test/unit/base/expression/tc_column.rb +84 -0
- data/test/unit/base/expression/tc_constraint.rb +39 -0
- data/test/unit/base/expression/tc_delete.rb +51 -0
- data/test/unit/base/expression/tc_index.rb +43 -0
- data/test/unit/base/expression/tc_insert.rb +44 -0
- data/test/unit/base/expression/tc_select.rb +142 -0
- data/test/unit/base/expression/tc_sequence.rb +48 -0
- data/test/unit/base/expression/tc_table.rb +68 -0
- data/test/unit/base/expression/tc_table_diff.rb +41 -0
- data/test/unit/base/expression/tc_transaction.rb +46 -0
- data/test/unit/base/expression/tc_update.rb +29 -0
- data/test/unit/base/statement/tc_conditions.rb +84 -0
- data/test/unit/base/statement/tc_limit.rb +25 -0
- data/test/unit/base/statement/tc_order.rb +25 -0
- data/test/unit/helper.rb +64 -0
- data/test/unit/mysql/tc_sequence.rb +41 -0
- metadata +102 -10
data/History.txt
CHANGED
data/Manifest.txt
CHANGED
@@ -1,5 +1,79 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
./Manifest.txt
|
2
|
+
./Rakefile
|
3
|
+
./History.txt
|
4
|
+
./test/unit/base/expression/tc_select.rb
|
5
|
+
./test/unit/base/expression/tc_table_diff.rb
|
6
|
+
./test/unit/base/expression/tc_constraint.rb
|
7
|
+
./test/unit/base/expression/tc_transaction.rb
|
8
|
+
./test/unit/base/expression/tc_update.rb
|
9
|
+
./test/unit/base/expression/tc_sequence.rb
|
10
|
+
./test/unit/base/expression/tc_column.rb
|
11
|
+
./test/unit/base/expression/tc_index.rb
|
12
|
+
./test/unit/base/expression/tc_insert.rb
|
13
|
+
./test/unit/base/expression/tc_table.rb
|
14
|
+
./test/unit/base/expression/tc_delete.rb
|
15
|
+
./test/unit/base/common/tc_quote.rb
|
16
|
+
./test/unit/base/statement/tc_limit.rb
|
17
|
+
./test/unit/base/statement/tc_conditions.rb
|
18
|
+
./test/unit/base/statement/tc_order.rb
|
19
|
+
./test/unit/helper.rb
|
20
|
+
./test/unit/mysql/tc_sequence.rb
|
21
|
+
./lib/imparcial/extension.rb
|
22
|
+
./lib/imparcial/driver/abstract/expression/select.rb
|
23
|
+
./lib/imparcial/driver/abstract/expression/record.rb
|
24
|
+
./lib/imparcial/driver/abstract/expression/table.rb
|
25
|
+
./lib/imparcial/driver/abstract/expression/transaction.rb
|
26
|
+
./lib/imparcial/driver/abstract/expression/constraint.rb
|
27
|
+
./lib/imparcial/driver/abstract/expression/delete.rb
|
28
|
+
./lib/imparcial/driver/abstract/expression/sequence.rb
|
29
|
+
./lib/imparcial/driver/abstract/expression/insert.rb
|
30
|
+
./lib/imparcial/driver/abstract/expression/index.rb
|
31
|
+
./lib/imparcial/driver/abstract/expression/column.rb
|
32
|
+
./lib/imparcial/driver/abstract/expression/lock.rb
|
33
|
+
./lib/imparcial/driver/abstract/expression/statement.rb
|
34
|
+
./lib/imparcial/driver/abstract/expression/update.rb
|
35
|
+
./lib/imparcial/driver/abstract/result.rb
|
36
|
+
./lib/imparcial/driver/abstract/typemap.rb
|
37
|
+
./lib/imparcial/driver/abstract/expression.rb
|
38
|
+
./lib/imparcial/driver/abstract/util.rb
|
39
|
+
./lib/imparcial/driver/abstract/sql/select.rb
|
40
|
+
./lib/imparcial/driver/abstract/sql/record.rb
|
41
|
+
./lib/imparcial/driver/abstract/sql/table.rb
|
42
|
+
./lib/imparcial/driver/abstract/sql/transaction.rb
|
43
|
+
./lib/imparcial/driver/abstract/sql/constraint.rb
|
44
|
+
./lib/imparcial/driver/abstract/sql/delete.rb
|
45
|
+
./lib/imparcial/driver/abstract/sql/sequence.rb
|
46
|
+
./lib/imparcial/driver/abstract/sql/insert.rb
|
47
|
+
./lib/imparcial/driver/abstract/sql/index.rb
|
48
|
+
./lib/imparcial/driver/abstract/sql/column.rb
|
49
|
+
./lib/imparcial/driver/abstract/sql/update.rb
|
50
|
+
./lib/imparcial/driver/abstract/sql.rb
|
51
|
+
./lib/imparcial/driver/abstract.rb
|
52
|
+
./lib/imparcial/driver/postgre.rb
|
53
|
+
./lib/imparcial/driver/mysql.rb
|
54
|
+
./lib/imparcial/driver/mysql/expression/table.rb
|
55
|
+
./lib/imparcial/driver/mysql/result.rb
|
56
|
+
./lib/imparcial/driver/mysql/typemap.rb
|
57
|
+
./lib/imparcial/driver/mysql/expression.rb
|
58
|
+
./lib/imparcial/driver/mysql/util.rb
|
59
|
+
./lib/imparcial/driver/mysql/sql/table.rb
|
60
|
+
./lib/imparcial/driver/mysql/sql/constraint.rb
|
61
|
+
./lib/imparcial/driver/mysql/sql/sequence.rb
|
62
|
+
./lib/imparcial/driver/mysql/sql/index.rb
|
63
|
+
./lib/imparcial/driver/mysql/sql/column.rb
|
64
|
+
./lib/imparcial/driver/mysql/sql.rb
|
65
|
+
./lib/imparcial/driver/postgre/result.rb
|
66
|
+
./lib/imparcial/driver/postgre/typemap.rb
|
67
|
+
./lib/imparcial/driver/postgre/expression.rb
|
68
|
+
./lib/imparcial/driver/postgre/util.rb
|
69
|
+
./lib/imparcial/driver/postgre/sql/table.rb
|
70
|
+
./lib/imparcial/driver/postgre/sql/constraint.rb
|
71
|
+
./lib/imparcial/driver/postgre/sql/sequence.rb
|
72
|
+
./lib/imparcial/driver/postgre/sql/index.rb
|
73
|
+
./lib/imparcial/driver/postgre/sql/column.rb
|
74
|
+
./lib/imparcial/driver/postgre/sql.rb
|
75
|
+
./lib/imparcial/driver.rb
|
76
|
+
./lib/imparcial/initializer.rb
|
77
|
+
./lib/imparcial/exception.rb
|
78
|
+
./lib/imparcial.rb
|
79
|
+
./README.txt
|
data/README.txt
CHANGED
@@ -1,26 +1,90 @@
|
|
1
|
-
Imparcial
|
1
|
+
Imparcial, Database Abstraction Layer
|
2
2
|
by Guilherme Antoniolo Ferreira
|
3
|
-
url
|
4
3
|
|
5
4
|
== DESCRIPTION:
|
6
5
|
|
7
|
-
Database Abstraction Layer for Ruby
|
6
|
+
Imparcial is a Database Abstraction Layer for Ruby. It's designed not only to
|
7
|
+
be a connection and result-set wrapping, one can also manipulate databases'
|
8
|
+
mechanisms with ruby structures as well as by using SQL syntaxes.
|
9
|
+
Furthermore, Imparcial is primarly intented to be a library for developing
|
10
|
+
ORMs, although one can use it in any application as long as that application
|
11
|
+
needs an abstraction layer.
|
8
12
|
|
9
13
|
== FEATURES/PROBLEMS:
|
10
14
|
|
11
|
-
*
|
15
|
+
* API may change;
|
12
16
|
|
13
|
-
==
|
17
|
+
== SUPPORTED DATABASES:
|
14
18
|
|
15
|
-
|
19
|
+
* PostgreSQL
|
20
|
+
* MySQL
|
21
|
+
|
22
|
+
== USAGE:
|
23
|
+
|
24
|
+
* Initializing the adapter:
|
25
|
+
adapter = Imparcial::Initializer.adapter(:mysql) do |config|
|
26
|
+
|
27
|
+
config.username = 'batman'
|
28
|
+
config.password = 'joker_suckz'
|
29
|
+
config.database = 'batcave'
|
30
|
+
config.logger = Logger.new(STDERR)
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
adapter.connect
|
35
|
+
|
36
|
+
And that's all. You may also specify :port, :host
|
37
|
+
|
38
|
+
* Getting Tables from a specific database:
|
39
|
+
abstract_adapter
|
40
|
+
|
41
|
+
adapter.get_tables # => ['person', 'invoice', 'product', 'supplier']
|
42
|
+
|
43
|
+
* Creating a Table
|
44
|
+
adapter.create_table :table_name => 'user', :fields => [{:name => :id, :type => :integer},
|
45
|
+
{:name => :name, :type => :string}]
|
46
|
+
|
47
|
+
adapter.table_exists? :table_name => 'user' # => true
|
48
|
+
|
49
|
+
* Inserting Records
|
50
|
+
adapter.insert :table_name => 'user', :values => {:id => 1, :name => 'robin'}
|
51
|
+
adapter.insert :table_name => 'user', :values => {:id => 2, :name => 'penguim'}
|
52
|
+
|
53
|
+
* Deleting Records
|
54
|
+
adapter.delete :table_name => 'user', :conditions => ['id = ?', 1]
|
55
|
+
|
56
|
+
* Selecting Records
|
57
|
+
adapter.select :table_name => 'user'
|
58
|
+
adapter.result.each do |id, name|
|
59
|
+
puts 'displaying info:'
|
60
|
+
puts "#{id.column_name} = #{id.column_value}"
|
61
|
+
puts "#{name.column_name} = "#{name.column_value}"
|
62
|
+
end
|
63
|
+
|
64
|
+
* Dropping a Table
|
65
|
+
adapter.drop_table :table_name => 'user'
|
66
|
+
|
67
|
+
Make sure to check the API for more features!
|
16
68
|
|
17
69
|
== REQUIREMENTS:
|
18
70
|
|
19
71
|
* facets
|
72
|
+
* rake
|
73
|
+
* hoe
|
20
74
|
|
21
75
|
== INSTALL:
|
76
|
+
Always get the lastest version!
|
77
|
+
|
78
|
+
Firstly, install the adapter's specific driver.
|
79
|
+
* gem install mysql
|
80
|
+
|
81
|
+
Secondly, install the dependencies:
|
82
|
+
* gem install facets
|
83
|
+
* gem install rake
|
84
|
+
* gem install hoe
|
22
85
|
|
23
|
-
|
86
|
+
Now, the lib:
|
87
|
+
* gem install imparcial
|
24
88
|
|
25
89
|
== LICENSE:
|
26
90
|
|
data/Rakefile
CHANGED
@@ -41,7 +41,7 @@ Hoe.new('imparcial', Imparcial::VERSION) do |s|
|
|
41
41
|
s.author = 'Guilherme Antoniolo Ferreira'
|
42
42
|
s.email = 'antonio@gmail.com'
|
43
43
|
|
44
|
-
s.extra_deps << 'facets'
|
44
|
+
s.extra_deps << 'facets' << 'rake' << 'hoe'
|
45
45
|
s.remote_rdoc_dir = ''
|
46
46
|
s.changes = s.paragraphs_of('History.txt', 0..1).join("\n\n")
|
47
47
|
|
@@ -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
|
+
|