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
@@ -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
|
@@ -0,0 +1,206 @@
|
|
1
|
+
module Imparcial
|
2
|
+
module Driver
|
3
|
+
module AbstractExpression
|
4
|
+
module Index
|
5
|
+
|
6
|
+
###########################################
|
7
|
+
# #
|
8
|
+
# Index Creation #
|
9
|
+
# #
|
10
|
+
###########################################
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def expected_options_for_creating_index
|
15
|
+
|
16
|
+
{
|
17
|
+
:index_name => :required, :index_type => :optional, :table_name => :required,
|
18
|
+
:column_name => :required
|
19
|
+
}
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
public
|
24
|
+
|
25
|
+
# === Description
|
26
|
+
# Create an index.
|
27
|
+
#
|
28
|
+
# === Usage
|
29
|
+
# abstract_adapter.create_index :index_name => 'idx', :table_name = 'person'
|
30
|
+
# ,:column_name => :id
|
31
|
+
#
|
32
|
+
# === Options
|
33
|
+
# * :index_name
|
34
|
+
# * :table_name
|
35
|
+
# * :column_name
|
36
|
+
# * :index_type
|
37
|
+
#
|
38
|
+
# === Returning
|
39
|
+
# nothing
|
40
|
+
|
41
|
+
def create_index ( options = {} )
|
42
|
+
|
43
|
+
check_options expected_options_for_creating_index, options
|
44
|
+
|
45
|
+
sql = sql_for_creating_index( options )
|
46
|
+
|
47
|
+
logger.warn sql if @index_logging
|
48
|
+
|
49
|
+
query sql
|
50
|
+
|
51
|
+
rescue adapter_specific_exception => ex
|
52
|
+
|
53
|
+
raise IndexCreateError.new(ex.message)
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
###########################################
|
58
|
+
# #
|
59
|
+
# Index Dropping #
|
60
|
+
# #
|
61
|
+
###########################################
|
62
|
+
|
63
|
+
private
|
64
|
+
|
65
|
+
def expected_options_for_dropping_index
|
66
|
+
|
67
|
+
{:table_name => :required, :index_name => :required}
|
68
|
+
|
69
|
+
end
|
70
|
+
|
71
|
+
public
|
72
|
+
|
73
|
+
def drop_index ( options = {} )
|
74
|
+
|
75
|
+
check_options expected_options_for_dropping_index, options
|
76
|
+
|
77
|
+
sql = sql_for_dropping_index( options )
|
78
|
+
|
79
|
+
logger.warn sql if @index_logging
|
80
|
+
|
81
|
+
query sql
|
82
|
+
|
83
|
+
rescue adapter_specific_exception => ex
|
84
|
+
|
85
|
+
raise IndexDropError.new(ex.message)
|
86
|
+
|
87
|
+
end
|
88
|
+
|
89
|
+
def expected_options_for_dropping_all_indexes
|
90
|
+
|
91
|
+
{:table_name => :required}
|
92
|
+
|
93
|
+
end
|
94
|
+
|
95
|
+
public
|
96
|
+
|
97
|
+
def drop_all_indexes ( options = {} )
|
98
|
+
|
99
|
+
check_options expected_options_for_dropping_all_indexes, options
|
100
|
+
|
101
|
+
for index in get_indexes(:table_name => options[:table_name])
|
102
|
+
|
103
|
+
drop_index :table_name => index[:table], :index_name => index[:name]
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
end
|
108
|
+
|
109
|
+
###########################################
|
110
|
+
# #
|
111
|
+
# Index Listing #
|
112
|
+
# #
|
113
|
+
###########################################
|
114
|
+
|
115
|
+
private
|
116
|
+
|
117
|
+
def expected_options_for_getting_indexes
|
118
|
+
|
119
|
+
{:table_name => :required}
|
120
|
+
|
121
|
+
end
|
122
|
+
|
123
|
+
public
|
124
|
+
|
125
|
+
# === Description
|
126
|
+
# Get metadata about all indexes.
|
127
|
+
#
|
128
|
+
# === Usage
|
129
|
+
# abstract_adapter.retrieve_indexes
|
130
|
+
#
|
131
|
+
# === Options
|
132
|
+
# No options
|
133
|
+
#
|
134
|
+
# === Returning
|
135
|
+
# an array with hashes.
|
136
|
+
|
137
|
+
def get_indexes ( options = {} )
|
138
|
+
|
139
|
+
check_options expected_options_for_getting_indexes, options
|
140
|
+
|
141
|
+
sql = sql_for_getting_indexes options
|
142
|
+
|
143
|
+
logger.warn sql if @index_logging
|
144
|
+
|
145
|
+
query sql
|
146
|
+
|
147
|
+
indexes = []
|
148
|
+
|
149
|
+
result.fetch do |table, column, index|
|
150
|
+
|
151
|
+
indexes << {:table => table.value,:column => column.value,:name => index.value}
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
indexes
|
156
|
+
|
157
|
+
rescue adapter_specific_exception => ex
|
158
|
+
|
159
|
+
raise IndexListError.new(ex.message)
|
160
|
+
|
161
|
+
end
|
162
|
+
|
163
|
+
private
|
164
|
+
|
165
|
+
def expected_options_for_verifying_index_existance
|
166
|
+
|
167
|
+
{:index_name => :required, :table_name => :required}
|
168
|
+
|
169
|
+
end
|
170
|
+
|
171
|
+
public
|
172
|
+
|
173
|
+
# === Description
|
174
|
+
# Verify if a given index exists.
|
175
|
+
#
|
176
|
+
# === Usage
|
177
|
+
# abstract_adapter.retrieve_indexes
|
178
|
+
#
|
179
|
+
# === Options
|
180
|
+
# No options
|
181
|
+
#
|
182
|
+
# === Returning
|
183
|
+
# true or false.
|
184
|
+
|
185
|
+
def index_exists? ( options = {} )
|
186
|
+
|
187
|
+
check_options expected_options_for_verifying_index_existance, options
|
188
|
+
|
189
|
+
sql = sql_for_index_exists?( options )
|
190
|
+
|
191
|
+
logger.warn sql if @index_logging
|
192
|
+
|
193
|
+
query sql
|
194
|
+
|
195
|
+
result.rows > 0
|
196
|
+
|
197
|
+
rescue adapter_specific_exception => ex
|
198
|
+
|
199
|
+
raise IndexDropError.new(ex.message)
|
200
|
+
|
201
|
+
end
|
202
|
+
|
203
|
+
end
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Imparcial
|
2
|
+
module Driver
|
3
|
+
module AbstractExpression
|
4
|
+
module Insert
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def expected_options_for_inserting
|
9
|
+
|
10
|
+
{:table_name => :required, :values => :required}
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
public
|
15
|
+
|
16
|
+
# === Description
|
17
|
+
# Insert some records.
|
18
|
+
#
|
19
|
+
# === Usage
|
20
|
+
# abstract_adapter.insert :table_name => 'person', :values =>
|
21
|
+
# {:id => 1, :name => 'ronaldinho'}
|
22
|
+
#
|
23
|
+
# === Options
|
24
|
+
# * :table_name
|
25
|
+
# * :values
|
26
|
+
#
|
27
|
+
# === Returning
|
28
|
+
# nothing
|
29
|
+
|
30
|
+
def insert ( options = {} )
|
31
|
+
|
32
|
+
check_options expected_options_for_inserting, options
|
33
|
+
|
34
|
+
sql = sql_for_inserting( options )
|
35
|
+
|
36
|
+
logger.warn sql if @insert_logging
|
37
|
+
|
38
|
+
query sql
|
39
|
+
|
40
|
+
rescue adapter_specific_exception => ex
|
41
|
+
|
42
|
+
raise InsertError.new(ex.message)
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Imparcial
|
2
|
+
module Driver
|
3
|
+
module AbstractExpression
|
4
|
+
module Record
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def expected_options_for_total_of_records
|
9
|
+
|
10
|
+
{:table_name => :required}
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
public
|
15
|
+
|
16
|
+
# Retrieve the total of records in a table.
|
17
|
+
|
18
|
+
def total_of_records ( options = {} )
|
19
|
+
|
20
|
+
check_options expected_options_for_total_of_records, options
|
21
|
+
|
22
|
+
sql = sql_for_couting_records( options )
|
23
|
+
|
24
|
+
logger.warn sql if @record_logging
|
25
|
+
|
26
|
+
query sql
|
27
|
+
|
28
|
+
result.fetch_first_row.value
|
29
|
+
|
30
|
+
rescue adapter_specific_exception => ex
|
31
|
+
|
32
|
+
raise ExpressionError.new(ex.message)
|
33
|
+
|
34
|
+
end
|
35
|
+
alias_method :num_of_records, :total_of_records
|
36
|
+
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Imparcial
|
2
|
+
module Driver
|
3
|
+
module AbstractExpression
|
4
|
+
module Select
|
5
|
+
|
6
|
+
private
|
7
|
+
|
8
|
+
def expected_options_for_selecting
|
9
|
+
|
10
|
+
{
|
11
|
+
:table_name => :optional, :joins => :optional, :fields => :optional,
|
12
|
+
:conditions => :optional, :limit => :optional, :order_asc => :optional,
|
13
|
+
:order_desc => :optional
|
14
|
+
}
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
public
|
20
|
+
|
21
|
+
def select ( options = {} )
|
22
|
+
|
23
|
+
sql = sql_for_selecting( options )
|
24
|
+
|
25
|
+
logger.warn sql if @select_logging
|
26
|
+
|
27
|
+
query sql
|
28
|
+
|
29
|
+
rescue adapter_specific_exception => ex
|
30
|
+
|
31
|
+
raise SelectError.new(ex.message)
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,260 @@
|
|
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
|