ruby-informix 0.7.1 → 0.7.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/Changelog +10 -0
- data/README +5 -9
- data/ext/extconf.rb +8 -7
- data/ext/informixc.c +454 -471
- data/ext/informixc.ec +65 -79
- data/lib/informix.rb +13 -9
- data/lib/informix/exceptions.rb +2 -2
- data/lib/informix/interval.rb +2 -2
- data/lib/informix/scrollcursor.rb +2 -2
- data/lib/informix/seqcursor.rb +2 -2
- data/test/ifx_all.rb +0 -0
- data/test/ifx_test_create_table.rb +0 -0
- data/test/ifx_test_errinfo.rb +0 -0
- data/test/ifx_test_exceptions.rb +0 -0
- data/test/ifx_test_fetch_n_each.rb +0 -0
- data/test/ifx_test_insert.rb +0 -0
- data/test/ifx_test_select.rb +0 -0
- data/test/testcase.rb +0 -0
- metadata +43 -37
data/ext/informixc.ec
CHANGED
@@ -1,4 +1,3 @@
|
|
1
|
-
/* $Id: informixc.ec,v 1.29 2008/04/03 00:50:20 santana Exp $ */
|
2
1
|
/*
|
3
2
|
* Copyright (c) 2006-2008, Gerardo Santana Gomez Garrido <gerardo.santana@gmail.com>
|
4
3
|
* All rights reserved.
|
@@ -28,8 +27,6 @@
|
|
28
27
|
* POSSIBILITY OF SUCH DAMAGE.
|
29
28
|
*/
|
30
29
|
|
31
|
-
static const char rcsid[] = "$Id: informixc.ec,v 1.29 2008/04/03 00:50:20 santana Exp $";
|
32
|
-
|
33
30
|
#include "ruby.h"
|
34
31
|
|
35
32
|
#include <sqlstype.h>
|
@@ -49,8 +46,6 @@ static VALUE rb_cStatement, rb_cCursorBase;
|
|
49
46
|
static VALUE rb_cSequentialCursor, rb_cScrollCursor, rb_cInsertCursor;
|
50
47
|
static VALUE rb_cIfxVersion;
|
51
48
|
|
52
|
-
static VALUE rb_cArray;
|
53
|
-
|
54
49
|
/* Exceptions */
|
55
50
|
static VALUE rb_eError, rb_eWarning, rb_eInternalError;
|
56
51
|
static VALUE rb_eProgrammingError, rb_eOperationalError, rb_eDatabaseError;
|
@@ -180,82 +175,74 @@ rbifx_ext_exception(VALUE exception_class)
|
|
180
175
|
mint i;
|
181
176
|
EXEC SQL END DECLARE SECTION;
|
182
177
|
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
rb_class2name(rb_eError));
|
195
|
-
}
|
196
|
-
|
197
|
-
EXEC SQL GET DIAGNOSTICS :exc_count = NUMBER;
|
198
|
-
|
199
|
-
if (exc_count == 0) { /* Something went wrong */
|
200
|
-
char message[128];
|
201
|
-
snprintf(message,
|
202
|
-
sizeof(message),
|
203
|
-
"SQL ERROR: SQLCODE %d (sorry, no GET DIAGNOSTICS information available)",
|
204
|
-
SQLCODE);
|
205
|
-
|
206
|
-
{
|
207
|
-
VALUE argv[] = { rb_str_new2(message) };
|
208
|
-
return rb_class_new_instance(NUM_ELEMS(argv), argv, rb_eOperationalError);
|
209
|
-
}
|
210
|
-
}
|
211
|
-
|
212
|
-
for (i = 0; i < exc_count; ++i) {
|
213
|
-
sql_exception_number = i + 1;
|
214
|
-
|
215
|
-
EXEC SQL GET DIAGNOSTICS EXCEPTION :sql_exception_number
|
216
|
-
:sql_code = INFORMIX_SQLCODE,
|
217
|
-
:sql_state = RETURNED_SQLSTATE,
|
218
|
-
:class_origin_val = CLASS_ORIGIN,
|
219
|
-
:subclass_origin_val = SUBCLASS_ORIGIN,
|
220
|
-
:message = MESSAGE_TEXT,
|
221
|
-
:message_len = MESSAGE_LENGTH,
|
222
|
-
:server_name = SERVER_NAME,
|
223
|
-
:connection_name = CONNECTION_NAME
|
224
|
-
;
|
225
|
-
|
226
|
-
TRIM_BLANKS(class_origin_val);
|
227
|
-
TRIM_BLANKS(subclass_origin_val);
|
228
|
-
TRIM_BLANKS(server_name);
|
229
|
-
TRIM_BLANKS(connection_name);
|
230
|
-
message[message_len - 1] = '\0';
|
231
|
-
TRIM_BLANKS(message);
|
232
|
-
|
233
|
-
{
|
234
|
-
VALUE sprintf_args[] = { rb_str_new2(message), rb_str_new2(sqlca.sqlerrm) };
|
235
|
-
VALUE argv[] = {
|
236
|
-
INT2FIX(sql_code),
|
237
|
-
rb_str_new2(sql_state),
|
238
|
-
rb_str_new2(class_origin_val),
|
239
|
-
rb_str_new2(subclass_origin_val),
|
240
|
-
rb_f_sprintf(NUM_ELEMS(sprintf_args), sprintf_args),
|
241
|
-
rb_str_new2(server_name),
|
242
|
-
rb_str_new2(connection_name)
|
243
|
-
};
|
244
|
-
|
245
|
-
rb_funcall(new_instance, s_add_info, 1, rb_ary_new4(7, argv));
|
246
|
-
}
|
247
|
-
}
|
178
|
+
new_instance = rb_class_new_instance(0, 0, exception_class);
|
179
|
+
|
180
|
+
/* Check that instance of exception_class is derived from Informix::Error */
|
181
|
+
if (!rb_obj_is_kind_of(new_instance, rb_eError) &&
|
182
|
+
!rb_obj_is_kind_of(new_instance, rb_eWarning)) {
|
183
|
+
rb_raise(rb_eRuntimeError, "Can't instantiate exception from %s, "
|
184
|
+
"only from %s or %s or their children",
|
185
|
+
rb_class2name(exception_class),
|
186
|
+
rb_class2name(rb_eWarning),
|
187
|
+
rb_class2name(rb_eError));
|
188
|
+
}
|
248
189
|
|
249
|
-
|
190
|
+
EXEC SQL GET DIAGNOSTICS :exc_count = NUMBER;
|
191
|
+
|
192
|
+
if (exc_count == 0) { /* Something went wrong */
|
193
|
+
char message[128];
|
194
|
+
snprintf(message, sizeof(message), "SQL ERROR: SQLCODE %d "
|
195
|
+
"(sorry, no GET DIAGNOSTICS information available)", SQLCODE);
|
196
|
+
{
|
197
|
+
VALUE argv[] = { rb_str_new2(message) };
|
198
|
+
return rb_class_new_instance(NUM_ELEMS(argv),argv,rb_eOperationalError);
|
199
|
+
}
|
200
|
+
}
|
201
|
+
|
202
|
+
for (i = 0; i < exc_count; ++i) {
|
203
|
+
sql_exception_number = i + 1;
|
204
|
+
|
205
|
+
EXEC SQL GET DIAGNOSTICS EXCEPTION :sql_exception_number
|
206
|
+
:sql_code = INFORMIX_SQLCODE,
|
207
|
+
:sql_state = RETURNED_SQLSTATE,
|
208
|
+
:class_origin_val = CLASS_ORIGIN,
|
209
|
+
:subclass_origin_val = SUBCLASS_ORIGIN,
|
210
|
+
:message = MESSAGE_TEXT,
|
211
|
+
:message_len = MESSAGE_LENGTH,
|
212
|
+
:server_name = SERVER_NAME,
|
213
|
+
:connection_name = CONNECTION_NAME
|
214
|
+
;
|
215
|
+
|
216
|
+
TRIM_BLANKS(class_origin_val);
|
217
|
+
TRIM_BLANKS(subclass_origin_val);
|
218
|
+
TRIM_BLANKS(server_name);
|
219
|
+
TRIM_BLANKS(connection_name);
|
220
|
+
message[message_len - 1] = '\0';
|
221
|
+
TRIM_BLANKS(message);
|
222
|
+
|
223
|
+
{
|
224
|
+
VALUE sprintf_args[] = { rb_str_new2(message), rb_str_new2(sqlca.sqlerrm) };
|
225
|
+
VALUE argv[] = {
|
226
|
+
INT2FIX(sql_code),
|
227
|
+
rb_str_new2(sql_state),
|
228
|
+
rb_str_new2(class_origin_val),
|
229
|
+
rb_str_new2(subclass_origin_val),
|
230
|
+
rb_f_sprintf(NUM_ELEMS(sprintf_args), sprintf_args),
|
231
|
+
rb_str_new2(server_name),
|
232
|
+
rb_str_new2(connection_name)
|
233
|
+
};
|
234
|
+
|
235
|
+
rb_funcall(new_instance, s_add_info, 1, rb_ary_new4(7, argv));
|
236
|
+
}
|
237
|
+
}
|
238
|
+
|
239
|
+
return new_instance;
|
250
240
|
}
|
251
241
|
|
252
|
-
/*
|
253
|
-
* C helper functions (see ifx_except.h for documentation)
|
254
|
-
*/
|
255
242
|
static void
|
256
243
|
raise_ifx_extended(void)
|
257
244
|
{
|
258
|
-
|
245
|
+
rb_exc_raise(rbifx_ext_exception(rb_eDatabaseError));
|
259
246
|
}
|
260
247
|
/*
|
261
248
|
*****************************************************************************
|
@@ -1511,7 +1498,7 @@ free_output_slots(cursor_t *c)
|
|
1511
1498
|
{
|
1512
1499
|
if (c->daOutput != NULL) {
|
1513
1500
|
struct sqlvar_struct *var = c->daOutput->sqlvar;
|
1514
|
-
if (var) {
|
1501
|
+
if (var != NULL) {
|
1515
1502
|
register int i;
|
1516
1503
|
for (i = 0; i < c->daOutput->sqld; i++, var++) {
|
1517
1504
|
if (ISBLOBTYPE(var->sqltype)) {
|
@@ -1522,6 +1509,7 @@ free_output_slots(cursor_t *c)
|
|
1522
1509
|
if (ISSMARTBLOB(var->sqltype, var->sqlxid))
|
1523
1510
|
xfree(var->sqldata);
|
1524
1511
|
}
|
1512
|
+
c->daOutput->sqlvar = NULL;
|
1525
1513
|
}
|
1526
1514
|
xfree(c->daOutput);
|
1527
1515
|
c->daOutput = NULL;
|
@@ -2925,7 +2913,7 @@ static void
|
|
2925
2913
|
cursorbase_close_or_free(cursor_t *c, short op)
|
2926
2914
|
{
|
2927
2915
|
EXEC SQL begin declare section;
|
2928
|
-
char *cid, *
|
2916
|
+
char *cid, *did;
|
2929
2917
|
EXEC SQL end declare section;
|
2930
2918
|
|
2931
2919
|
if (op == 1 && !c->is_open)
|
@@ -3381,8 +3369,6 @@ void Init_informixc(void)
|
|
3381
3369
|
rb_define_singleton_method(rb_mCursor, "new0", rb_cursor_s_new0, -1);
|
3382
3370
|
|
3383
3371
|
/* Global constants --------------------------------------------------- */
|
3384
|
-
rb_cArray = rb_const_get(rb_cObject, rb_intern("Array"));
|
3385
|
-
|
3386
3372
|
rb_require("date");
|
3387
3373
|
rb_cDate = rb_const_get(rb_cObject, rb_intern("Date"));
|
3388
3374
|
|
data/lib/informix.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
#--
|
3
2
|
# Copyright (c) 2008, Gerardo Santana Gomez Garrido <gerardo.santana@gmail.com>
|
4
3
|
# All rights reserved.
|
5
4
|
#
|
@@ -26,13 +25,14 @@
|
|
26
25
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27
26
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#++
|
29
29
|
|
30
30
|
require 'informixc'
|
31
31
|
require 'informix/seqcursor'
|
32
32
|
require 'informix/scrollcursor'
|
33
33
|
|
34
34
|
module Informix
|
35
|
-
VERSION = "0.7.
|
35
|
+
VERSION = "0.7.2"
|
36
36
|
VERSION.freeze
|
37
37
|
|
38
38
|
# Shortcut to create a +Database+ object connected to +dbname+ as
|
@@ -195,35 +195,39 @@ module Informix
|
|
195
195
|
# Examples:
|
196
196
|
#
|
197
197
|
# Iterating over a table:
|
198
|
-
# db.
|
198
|
+
# db.foreach('select * from customer') do |cust|
|
199
199
|
# # do something with cust
|
200
200
|
# puts "#{cust[0] cust[1]}"
|
201
201
|
# end
|
202
202
|
# Same thing, using input parameters:
|
203
203
|
# query = 'select * from orders where order_date = ?'
|
204
|
-
# db.
|
204
|
+
# db.foreach(query, :params => [Date.today]) do |order|
|
205
205
|
# # do something with order
|
206
206
|
# end
|
207
|
-
def
|
207
|
+
def foreach(query, options = nil, &block)
|
208
208
|
Cursor.open(self, query, options) {|cur| cur.each(&block)}
|
209
209
|
self
|
210
210
|
end
|
211
|
+
|
212
|
+
alias each foreach
|
211
213
|
|
212
|
-
# Similar to +Database#
|
214
|
+
# Similar to +Database#foreach+, except that retrieves records as hashes
|
213
215
|
# instead of arrays.
|
214
216
|
#
|
215
217
|
# Examples:
|
216
218
|
#
|
217
219
|
# Iterating over a table:
|
218
|
-
# db.
|
220
|
+
# db.foreach_hash('select * from customer') do |cust|
|
219
221
|
# # do something with cust
|
220
222
|
# puts "#{cust['fname'] cust['lname']}"
|
221
223
|
# end
|
222
|
-
def
|
224
|
+
def foreach_hash(query, options = nil, &block)
|
223
225
|
Cursor.open(self, query, options) {|cur| cur.each_hash(&block)}
|
224
226
|
self
|
225
227
|
end
|
226
228
|
|
229
|
+
alias each_hash foreach_hash
|
230
|
+
|
227
231
|
# Shortcut to create a +Slob+ object.
|
228
232
|
#
|
229
233
|
# The +Slob+ object is passed to the block if it's given, and
|
data/lib/informix/exceptions.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
#--
|
3
2
|
# Copyright (c) 2008, Gerardo Santana Gomez Garrido <gerardo.santana@gmail.com>
|
4
3
|
# All rights reserved.
|
5
4
|
#
|
@@ -26,6 +25,7 @@
|
|
26
25
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27
26
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#++
|
29
29
|
|
30
30
|
#--
|
31
31
|
# The following code is a translation of the original C code written
|
data/lib/informix/interval.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
#--
|
3
2
|
# Copyright (c) 2008, Gerardo Santana Gomez Garrido <gerardo.santana@gmail.com>
|
4
3
|
# All rights reserved.
|
5
4
|
#
|
@@ -26,6 +25,7 @@
|
|
26
25
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27
26
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#++
|
29
29
|
|
30
30
|
module Informix
|
31
31
|
# The +IntervalBase+ class is used for sending and retrieving INTERVAL
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
#--
|
3
2
|
# Copyright (c) 2008, Gerardo Santana Gomez Garrido <gerardo.santana@gmail.com>
|
4
3
|
# All rights reserved.
|
5
4
|
#
|
@@ -26,6 +25,7 @@
|
|
26
25
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27
26
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#++
|
29
29
|
|
30
30
|
require 'informixc'
|
31
31
|
|
data/lib/informix/seqcursor.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
#
|
1
|
+
#--
|
3
2
|
# Copyright (c) 2008, Gerardo Santana Gomez Garrido <gerardo.santana@gmail.com>
|
4
3
|
# All rights reserved.
|
5
4
|
#
|
@@ -26,6 +25,7 @@
|
|
26
25
|
# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
27
26
|
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
28
27
|
# POSSIBILITY OF SUCH DAMAGE.
|
28
|
+
#++
|
29
29
|
|
30
30
|
require 'informixc'
|
31
31
|
|
data/test/ifx_all.rb
CHANGED
File without changes
|
File without changes
|
data/test/ifx_test_errinfo.rb
CHANGED
File without changes
|
data/test/ifx_test_exceptions.rb
CHANGED
File without changes
|
File without changes
|
data/test/ifx_test_insert.rb
CHANGED
File without changes
|
data/test/ifx_test_select.rb
CHANGED
File without changes
|
data/test/testcase.rb
CHANGED
File without changes
|
metadata
CHANGED
@@ -1,42 +1,34 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.4
|
3
|
-
specification_version: 1
|
4
2
|
name: ruby-informix
|
5
3
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.7.
|
7
|
-
date: 2008-04-02 00:00:00 -06:00
|
8
|
-
summary: Ruby library for IBM Informix
|
9
|
-
require_paths:
|
10
|
-
- lib
|
11
|
-
email: gerardo.santana@gmail.com
|
12
|
-
homepage: http://santanatechnotes.blogspot.com
|
13
|
-
rubyforge_project: ruby-informix
|
14
|
-
description: Ruby library for connecting to IBM Informix 7 and above
|
15
|
-
autorequire: informix
|
16
|
-
default_executable:
|
17
|
-
bindir: bin
|
18
|
-
has_rdoc: true
|
19
|
-
required_ruby_version: !ruby/object:Gem::Version::Requirement
|
20
|
-
requirements:
|
21
|
-
- - ">"
|
22
|
-
- !ruby/object:Gem::Version
|
23
|
-
version: 0.0.0
|
24
|
-
version:
|
4
|
+
version: 0.7.2
|
25
5
|
platform: ruby
|
26
|
-
signing_key:
|
27
|
-
cert_chain:
|
28
|
-
post_install_message:
|
29
6
|
authors:
|
30
7
|
- Gerardo Santana Gomez Garrido
|
8
|
+
autorequire: informix
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-11-21 00:00:00 -06:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: Ruby library for connecting to IBM Informix 7 and above
|
17
|
+
email: gerardo.santana@gmail.com
|
18
|
+
executables: []
|
19
|
+
|
20
|
+
extensions:
|
21
|
+
- ext/extconf.rb
|
22
|
+
extra_rdoc_files:
|
23
|
+
- README
|
24
|
+
- ext/informixc.c
|
31
25
|
files:
|
32
26
|
- ext/informixc.ec
|
33
27
|
- lib/informix.rb
|
28
|
+
- lib/informix/exceptions.rb
|
34
29
|
- lib/informix/interval.rb
|
35
30
|
- lib/informix/scrollcursor.rb
|
36
31
|
- lib/informix/seqcursor.rb
|
37
|
-
- lib/informix/CVS
|
38
|
-
- lib/informix/exceptions.rb
|
39
|
-
- test/testcase.rb
|
40
32
|
- test/ifx_all.rb
|
41
33
|
- test/ifx_test_create_table.rb
|
42
34
|
- test/ifx_test_errinfo.rb
|
@@ -44,12 +36,14 @@ files:
|
|
44
36
|
- test/ifx_test_fetch_n_each.rb
|
45
37
|
- test/ifx_test_insert.rb
|
46
38
|
- test/ifx_test_select.rb
|
39
|
+
- test/testcase.rb
|
47
40
|
- COPYRIGHT
|
48
41
|
- Changelog
|
49
42
|
- README
|
50
43
|
- ext/informixc.c
|
51
|
-
|
52
|
-
|
44
|
+
has_rdoc: true
|
45
|
+
homepage: http://santanatechnotes.blogspot.com
|
46
|
+
post_install_message:
|
53
47
|
rdoc_options:
|
54
48
|
- --title
|
55
49
|
- Ruby/Informix -- Ruby library for IBM Informix
|
@@ -61,14 +55,26 @@ rdoc_options:
|
|
61
55
|
- --line-numbers
|
62
56
|
- --main
|
63
57
|
- README
|
64
|
-
|
65
|
-
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
58
|
+
require_paths:
|
59
|
+
- lib
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
version: "0"
|
65
|
+
version:
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: "0"
|
71
|
+
version:
|
71
72
|
requirements: []
|
72
73
|
|
73
|
-
|
74
|
+
rubyforge_project: ruby-informix
|
75
|
+
rubygems_version: 1.2.0
|
76
|
+
signing_key:
|
77
|
+
specification_version: 2
|
78
|
+
summary: Ruby library for IBM Informix
|
79
|
+
test_files: []
|
74
80
|
|