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
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4.3
3
3
  specification_version: 1
4
4
  name: imparcial
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.1
7
- date: 2007-08-22 00:00:00 -03:00
6
+ version: 0.0.2
7
+ date: 2007-09-12 00:00:00 -03:00
8
8
  summary: Standard Database Interface for ruby
9
9
  require_paths:
10
10
  - lib
@@ -30,74 +30,74 @@ authors:
30
30
  - Guilherme Antoniolo Ferreira
31
31
  files:
32
32
  - lib/imparcial
33
- - lib/imparcial.rb
34
33
  - lib/imparcial/driver
35
- - lib/imparcial/driver.rb
36
- - lib/imparcial/exception.rb
37
- - lib/imparcial/driver/base.rb
38
- - lib/imparcial/driver/base
34
+ - lib/imparcial/driver/abstract
35
+ - lib/imparcial/driver/abstract/expression
36
+ - lib/imparcial/driver/abstract/expression/select.rb
37
+ - lib/imparcial/driver/abstract/expression/record.rb
38
+ - lib/imparcial/driver/abstract/expression/base.rb
39
+ - lib/imparcial/driver/abstract/expression/table.rb
40
+ - lib/imparcial/driver/abstract/expression/transaction.rb
41
+ - lib/imparcial/driver/abstract/expression/constraint.rb
42
+ - lib/imparcial/driver/abstract/expression/delete.rb
43
+ - lib/imparcial/driver/abstract/expression/sequence.rb
44
+ - lib/imparcial/driver/abstract/expression/insert.rb
45
+ - lib/imparcial/driver/abstract/expression/index.rb
46
+ - lib/imparcial/driver/abstract/expression/column.rb
47
+ - lib/imparcial/driver/abstract/expression/lock.rb
48
+ - lib/imparcial/driver/abstract/expression/statement.rb
49
+ - lib/imparcial/driver/abstract/expression/update.rb
50
+ - lib/imparcial/driver/abstract/result.rb
51
+ - lib/imparcial/driver/abstract/typemap.rb
52
+ - lib/imparcial/driver/abstract/expression.rb
53
+ - lib/imparcial/driver/abstract/util.rb
54
+ - lib/imparcial/driver/abstract/sql
55
+ - lib/imparcial/driver/abstract/sql/select.rb
56
+ - lib/imparcial/driver/abstract/sql/record.rb
57
+ - lib/imparcial/driver/abstract/sql/table.rb
58
+ - lib/imparcial/driver/abstract/sql/transaction.rb
59
+ - lib/imparcial/driver/abstract/sql/constraint.rb
60
+ - lib/imparcial/driver/abstract/sql/delete.rb
61
+ - lib/imparcial/driver/abstract/sql/sequence.rb
62
+ - lib/imparcial/driver/abstract/sql/insert.rb
63
+ - lib/imparcial/driver/abstract/sql/index.rb
64
+ - lib/imparcial/driver/abstract/sql/column.rb
65
+ - lib/imparcial/driver/abstract/sql/update.rb
66
+ - lib/imparcial/driver/abstract/sql.rb
67
+ - lib/imparcial/driver/abstract.rb
39
68
  - lib/imparcial/driver/postgre.rb
40
69
  - lib/imparcial/driver/mysql.rb
41
70
  - lib/imparcial/driver/mysql
42
- - lib/imparcial/driver/postgre
43
- - lib/imparcial/driver/base/expression
44
- - lib/imparcial/driver/base/result.rb
45
- - lib/imparcial/driver/base/typemap.rb
46
- - lib/imparcial/driver/base/expression.rb
47
- - lib/imparcial/driver/base/util.rb
48
- - lib/imparcial/driver/base/sql
49
- - lib/imparcial/driver/base/sql.rb
50
- - lib/imparcial/driver/base/expression/select.rb
51
- - lib/imparcial/driver/base/expression/base.rb
52
- - lib/imparcial/driver/base/expression/table_diff.rb
53
- - lib/imparcial/driver/base/expression/transaction.rb
54
- - lib/imparcial/driver/base/expression/delete.rb
55
- - lib/imparcial/driver/base/expression/sequence.rb
56
- - lib/imparcial/driver/base/expression/insert.rb
57
- - lib/imparcial/driver/base/expression/table_operation.rb
58
- - lib/imparcial/driver/base/expression/index.rb
59
- - lib/imparcial/driver/base/expression/lock.rb
60
- - lib/imparcial/driver/base/expression/statement.rb
61
- - lib/imparcial/driver/base/expression/util.rb
62
- - lib/imparcial/driver/base/expression/table_metadata.rb
63
- - lib/imparcial/driver/base/expression/update.rb
64
- - lib/imparcial/driver/base/expression/table_evolution.rb
65
- - lib/imparcial/driver/base/sql/select.rb
66
- - lib/imparcial/driver/base/sql/transaction.rb
67
- - lib/imparcial/driver/base/sql/delete.rb
68
- - lib/imparcial/driver/base/sql/sequence.rb
69
- - lib/imparcial/driver/base/sql/insert.rb
70
- - lib/imparcial/driver/base/sql/table_operation.rb
71
- - lib/imparcial/driver/base/sql/index.rb
72
- - lib/imparcial/driver/base/sql/table_metadata.rb
73
- - lib/imparcial/driver/base/sql/update.rb
74
71
  - lib/imparcial/driver/mysql/expression
72
+ - lib/imparcial/driver/mysql/expression/table.rb
75
73
  - lib/imparcial/driver/mysql/result.rb
76
74
  - lib/imparcial/driver/mysql/typemap.rb
77
75
  - lib/imparcial/driver/mysql/expression.rb
78
76
  - lib/imparcial/driver/mysql/util.rb
79
77
  - lib/imparcial/driver/mysql/sql
80
- - lib/imparcial/driver/mysql/sql.rb
81
- - lib/imparcial/driver/mysql/expression/table.rb
82
- - lib/imparcial/driver/mysql/expression/index.rb
78
+ - lib/imparcial/driver/mysql/sql/table.rb
79
+ - lib/imparcial/driver/mysql/sql/constraint.rb
83
80
  - lib/imparcial/driver/mysql/sql/sequence.rb
84
- - lib/imparcial/driver/mysql/sql/table_operation.rb
85
81
  - lib/imparcial/driver/mysql/sql/index.rb
86
- - lib/imparcial/driver/mysql/sql/table_metadata.rb
82
+ - lib/imparcial/driver/mysql/sql/column.rb
83
+ - lib/imparcial/driver/mysql/sql.rb
84
+ - lib/imparcial/driver/postgre
87
85
  - lib/imparcial/driver/postgre/expression
88
86
  - lib/imparcial/driver/postgre/result.rb
89
87
  - lib/imparcial/driver/postgre/typemap.rb
90
88
  - lib/imparcial/driver/postgre/expression.rb
91
89
  - lib/imparcial/driver/postgre/util.rb
92
90
  - lib/imparcial/driver/postgre/sql
93
- - lib/imparcial/driver/postgre/sql.rb
94
- - lib/imparcial/driver/postgre/expression/table.rb
95
- - lib/imparcial/driver/postgre/expression/sequence.rb
96
- - lib/imparcial/driver/postgre/expression/index.rb
91
+ - lib/imparcial/driver/postgre/sql/table.rb
92
+ - lib/imparcial/driver/postgre/sql/constraint.rb
97
93
  - lib/imparcial/driver/postgre/sql/sequence.rb
98
- - lib/imparcial/driver/postgre/sql/table_operation.rb
99
94
  - lib/imparcial/driver/postgre/sql/index.rb
100
- - lib/imparcial/driver/postgre/sql/table_metadata.rb
95
+ - lib/imparcial/driver/postgre/sql/column.rb
96
+ - lib/imparcial/driver/postgre/sql.rb
97
+ - lib/imparcial/driver.rb
98
+ - lib/imparcial/initializer.rb
99
+ - lib/imparcial/exception.rb
100
+ - lib/imparcial.rb
101
101
  test_files: []
102
102
 
103
103
  rdoc_options: []
@@ -1,72 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module ExpressionBase
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
- def expected_options_for_deleting_all
15
-
16
- {:table_name => :required}
17
-
18
- end
19
-
20
- public
21
-
22
- # Delete some records. Except, this function only supports
23
- # deleting with conditions. Otherwise an exception shall be
24
- # raised.
25
-
26
- def delete ( options = {} )
27
-
28
- check_options expected_options_for_deleting, options
29
-
30
- query sql_for_deleting( options )
31
-
32
- rescue adapter_specific_exception => ex
33
-
34
- raise DeleteError.new(ex.message)
35
-
36
- end
37
-
38
- # Delete all records. This function doesn't support conditions.
39
- # If you provide one, an exception shall be raised.
40
-
41
- def delete_all ( options = {} )
42
-
43
- check_options expected_options_for_deleting_all, options
44
-
45
- query sql_for_deleting( options )
46
-
47
- rescue adapter_specific_exception => ex
48
-
49
- raise DeleteError.new(ex.message)
50
-
51
- end
52
-
53
- # Delete records without raising any exception.
54
-
55
- def delete_if_necessary ( options = {} )
56
-
57
- delete options
58
-
59
- rescue DeleteError; end
60
-
61
- # Delete all records without raising any exception.
62
-
63
- def delete_all_if_necessary ( options = {} )
64
-
65
- delete_all options
66
-
67
- rescue DeleteError; end
68
-
69
- end
70
- end
71
- end
72
- end
@@ -1,33 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module ExpressionBase
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
- # Insert records in a table. Values are must.
17
-
18
- def insert ( options = {} )
19
-
20
- check_options expected_options_for_inserting, options
21
-
22
- query sql_for_inserting( options )
23
-
24
- rescue adapter_specific_exception => ex
25
-
26
- raise InsertError.new(ex.message)
27
-
28
- end
29
-
30
- end
31
- end
32
- end
33
- end
@@ -1,154 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module ExpressionBase
4
- module TableDiff
5
-
6
- private
7
-
8
- def expected_options_for_reporting
9
-
10
- {:table_name => :required, :fields => :required}
11
-
12
- end
13
-
14
- public
15
-
16
- def diff_columns ( options = {} )
17
-
18
- modified = report_modified_columns options
19
- new = report_new_columns options
20
- old = report_old_columns options
21
-
22
- [modified, new, old]
23
-
24
- end
25
-
26
- # Execute a diff by comparing existent fields.
27
- # If you eventually try to insert a non-existent field,
28
- # an exception shall be raised.
29
-
30
- def report_modified_columns ( options = {} )
31
-
32
- check_options expected_options_for_reporting, options
33
-
34
- modified_fields = options[:fields]
35
-
36
- modified_columns = []
37
- current_fields = retrieve_columns :table_name => options[:table_name]
38
-
39
- parse_fields modified_fields do |modified_field|
40
-
41
- current_fields.each do |current_field|
42
-
43
- if modified_field[:name] == current_field[:name]
44
-
45
- # We gotta check every attribute to see if a modification can occur.
46
-
47
- if modified_field[:type] != current_field[:type] || modified_field[:default_value] != current_field[:default_value]\
48
- || modified_field[:allow_null] != current_field[:allow_null] || modified_field[:pk] != current_field[:pk]\
49
- || modified_field[:sequence] != current_field[:sequenec] || modified_field[:size] != current_field[:size]
50
-
51
- modified_columns << current_field
52
-
53
- end
54
-
55
- end
56
-
57
- end
58
-
59
- end #end of parse_fields
60
-
61
- modified_columns
62
-
63
- end
64
-
65
- # Execute a diff by comparing new fields.
66
- # If you eventually try to insert an existent field,
67
- # an exception shall be raised.
68
-
69
- def report_new_columns ( options = {} )
70
-
71
- check_options expected_options_for_reporting, options
72
-
73
- new_fields = options[:fields]
74
-
75
- new_columns = []
76
- no_new_field = false
77
-
78
- current_fields = retrieve_columns :table_name => options[:table_name]
79
-
80
- parse_fields new_fields do |new_field|
81
-
82
- current_fields.each do |current_field|
83
-
84
- if new_field[:name] == current_field[:name]
85
-
86
- no_new_field = true
87
- break
88
-
89
- end
90
-
91
- end
92
-
93
- if no_new_field
94
-
95
- no_new_field = false
96
- next
97
-
98
- end
99
-
100
- new_columns << new_field
101
-
102
- end
103
-
104
- new_columns
105
-
106
- end
107
-
108
- # Execute a diff by comparing new fields with current ones.
109
- # Legacy fields will be showed.
110
- # Shall be raised an exception if trying to compare modifying fields.
111
-
112
- def report_old_columns ( options )
113
-
114
- check_options expected_options_for_reporting, options
115
-
116
- new_fields = options[:fields]
117
-
118
- legacy_fields = []
119
- no_old_field = false
120
-
121
- current_fields = retrieve_columns :table_name => options[:table_name]
122
-
123
- current_fields.each do |current_field|
124
-
125
- parse_fields new_fields do |new_field|
126
-
127
- if new_field[:name] == current_field[:name]
128
-
129
- no_old_field = true
130
- break
131
-
132
- end
133
-
134
- if no_old_field == true
135
-
136
- no_old_field = false
137
- next
138
-
139
- end
140
-
141
- legacy_fields << current_field
142
-
143
- end #end of parse_fields
144
-
145
- end
146
-
147
- legacy_fields
148
-
149
- end
150
-
151
- end
152
- end
153
- end
154
- end
@@ -1,94 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module ExpressionBase
4
- module TableEvolution
5
-
6
- =begin
7
- # Execute the alter table statement by only insert new fields.
8
- # An exception shall be raised if trying to insert modified fields.
9
-
10
- def add_columns ( table_name, fields )
11
-
12
- # Let's see if it's necessary to alter a table.
13
-
14
- affected_columns = report_new_columns table_name, fields, true
15
-
16
- syntax = ''
17
-
18
- if affected_columns.length > 0
19
-
20
- syntax += 'ALTER TABLE ' + quote_table(table_name) + ' ADD COLUMN'
21
- syntax += '('
22
-
23
- fields_to_columns affected_columns do |column|
24
-
25
- syntax += column + ','
26
-
27
- end
28
-
29
- syntax.chop!
30
-
31
- syntax += ')'
32
-
33
- end
34
-
35
- query syntax
36
-
37
- syntax
38
-
39
- end
40
-
41
- def drop_columns ( table_name, fields_by_name )
42
-
43
- syntax = ''
44
-
45
- if fields_by_name.length > 0
46
-
47
- syntax += 'ALTER TABLE ' + quote_table(table_name)
48
-
49
- fields_by_name.each do |name|
50
-
51
- syntax += ' DROP COLUMN ' + quote_column(name) + ','
52
-
53
- end
54
-
55
- syntax.chop!
56
-
57
- end
58
-
59
- begin
60
-
61
- query syntax
62
-
63
- rescue Object => ex
64
-
65
- raise TableError.new(ex.message)
66
-
67
- end
68
-
69
- syntax
70
-
71
- end
72
-
73
- def modify_columns ( table_name, fields )
74
-
75
- syntax = 'ALTER TABLE ' + quote_table(table_name) + ' '
76
-
77
- fields_to_columns fields do |column|
78
-
79
- syntax += 'MODIFY COLUMN ' + column + ','
80
-
81
- end
82
-
83
- syntax.chop!
84
-
85
- query syntax
86
-
87
- syntax
88
-
89
- end
90
- =end
91
- end
92
- end
93
- end
94
- end
@@ -1,122 +0,0 @@
1
- module Imparcial
2
- module Driver
3
- module ExpressionBase
4
- module TableMetadata
5
-
6
- private
7
-
8
- def expected_options_for_retrieving_columns
9
-
10
- {:table_name => :required}
11
-
12
- end
13
-
14
- def expected_options_for_verifying_existence
15
-
16
- {:table_name => :required}
17
-
18
- end
19
-
20
- ###########################################
21
- # #
22
- # Couple of Table features #
23
- # #
24
- ###########################################
25
-
26
- public
27
-
28
- # Return all avaliable tables by name in a specific database
29
- # Return is a array of names.
30
-
31
- def retrieve_tables
32
-
33
- query sql_for_retrieving_tables
34
-
35
- tables = []
36
-
37
- result.fetch do |table_name_column|
38
-
39
- tables << table_name_column.value
40
-
41
- end
42
-
43
- tables
44
-
45
- rescue adapter_specific_exception => ex
46
-
47
- raise TableRetrieveError.new(ex.message)
48
-
49
- end
50
-
51
- # Check if a table exists, returning true or false.
52
-
53
- def table_exists? ( options = {} )
54
-
55
- check_options expected_options_for_verifying_existence, options
56
-
57
- tables = retrieve_tables
58
-
59
- tables.each do |name|
60
-
61
- return true if name == options[:table_name]
62
-
63
- end
64
-
65
- return false
66
-
67
- end
68
-
69
- # The opposite of above.
70
-
71
- def table_not_exists? ( options = {} )
72
-
73
- not table_exists? options
74
-
75
- end
76
-
77
- public
78
-
79
- # Return metadata about columns from a specific table.
80
- # It Requires a table name as parameter.
81
- # If there's no table, it will raise an error.
82
-
83
- def retrieve_columns ( options = {} )
84
-
85
- check_options expected_options_for_retrieving_columns, options
86
-
87
- query sql_for_retrieving_columns( options )
88
-
89
- columns = []
90
-
91
- result.fetch do |name, type, size, allow_null, pk, default_value, auto_inc, indexed|
92
-
93
- column = {}
94
- column[:name] = name.value
95
- column[:type] = type.value
96
- column[:size] = size.value
97
- column[:allow_null] = allow_null.value
98
- column[:pk] = pk.value
99
- column[:default_value] = default_value.value
100
- column[:auto_increment] = auto_inc.value
101
- column[:indexed] = indexed.value
102
-
103
- # Transform SQL columns into RDBAL's ones.
104
-
105
- parse_column column
106
-
107
- columns << column
108
-
109
- end
110
-
111
- columns
112
-
113
- rescue adapter_specific_exception => ex
114
-
115
- raise TableRetrieveError.new(ex.message)
116
-
117
- end
118
-
119
- end
120
- end
121
- end
122
- end