swift-db-postgres 0.2.6 → 0.2.7
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
CHANGED
@@ -127,15 +127,18 @@ VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
|
127
127
|
char **bind_args_data = 0;
|
128
128
|
int n, *bind_args_size = 0, *bind_args_fmt = 0;
|
129
129
|
PGresult *result;
|
130
|
-
VALUE sql, bind, data;
|
130
|
+
VALUE sql, bind, data, typecast_bind;
|
131
131
|
Adapter *a = db_postgres_adapter_handle_safe(self);
|
132
132
|
|
133
133
|
rb_scan_args(argc, argv, "10*", &sql, &bind);
|
134
134
|
if (!a->native)
|
135
135
|
sql = db_postgres_normalized_sql(sql);
|
136
136
|
|
137
|
+
typecast_bind = rb_ary_new();
|
138
|
+
rb_gc_register_address(&typecast_bind);
|
137
139
|
rb_gc_register_address(&sql);
|
138
140
|
rb_gc_register_address(&bind);
|
141
|
+
|
139
142
|
if (RARRAY_LEN(bind) > 0) {
|
140
143
|
bind_args_size = (int *) malloc(sizeof(int) * RARRAY_LEN(bind));
|
141
144
|
bind_args_fmt = (int *) malloc(sizeof(int) * RARRAY_LEN(bind));
|
@@ -155,8 +158,9 @@ VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
|
155
158
|
bind_args_fmt[n] = 0;
|
156
159
|
|
157
160
|
data = typecast_to_string(data);
|
161
|
+
rb_ary_push(typecast_bind, data);
|
158
162
|
bind_args_size[n] = RSTRING_LEN(data);
|
159
|
-
bind_args_data[n] =
|
163
|
+
bind_args_data[n] = RSTRING_PTR(data);
|
160
164
|
}
|
161
165
|
}
|
162
166
|
|
@@ -170,9 +174,6 @@ VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
|
170
174
|
};
|
171
175
|
|
172
176
|
result = (PGresult *)GVL_NOLOCK(nogvl_pq_exec_params, &q, RUBY_UBF_IO, 0);
|
173
|
-
for (n = 0; n < RARRAY_LEN(bind); n++)
|
174
|
-
if (bind_args_data[n])
|
175
|
-
free(bind_args_data[n]);
|
176
177
|
free(bind_args_size);
|
177
178
|
free(bind_args_data);
|
178
179
|
free(bind_args_fmt);
|
@@ -182,6 +183,7 @@ VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
|
182
183
|
result = (PGresult *)GVL_NOLOCK(nogvl_pq_exec, &q, RUBY_UBF_IO, 0);
|
183
184
|
}
|
184
185
|
|
186
|
+
rb_gc_unregister_address(&typecast_bind);
|
185
187
|
rb_gc_unregister_address(&sql);
|
186
188
|
rb_gc_unregister_address(&bind);
|
187
189
|
db_postgres_check_result(result);
|
@@ -6,12 +6,6 @@
|
|
6
6
|
#include <math.h>
|
7
7
|
#include <uuid/uuid.h>
|
8
8
|
|
9
|
-
char* CSTRING_PTR(VALUE value) {
|
10
|
-
char* result = malloc(RSTRING_LEN(value) + 1);
|
11
|
-
memcpy(result, RSTRING_PTR(value), RSTRING_LEN(value) + 1);
|
12
|
-
return result;
|
13
|
-
}
|
14
|
-
|
15
9
|
VALUE rb_uuid_string() {
|
16
10
|
size_t n;
|
17
11
|
uuid_t uuid;
|
@@ -22,7 +22,6 @@ extern VALUE cDPA, cDPS, cDPR;
|
|
22
22
|
extern VALUE eSwiftError, eSwiftArgumentError, eSwiftRuntimeError, eSwiftConnectionError;
|
23
23
|
extern VALUE cStringIO;
|
24
24
|
|
25
|
-
DLL_PRIVATE char* CSTRING_PTR(VALUE);
|
26
25
|
DLL_PRIVATE VALUE rb_uuid_string();
|
27
26
|
DLL_PRIVATE VALUE db_postgres_normalized_sql(VALUE);
|
28
27
|
DLL_PRIVATE void db_postgres_check_result(PGresult *);
|
@@ -100,14 +100,17 @@ VALUE db_postgres_statement_execute(int argc, VALUE *argv, VALUE self) {
|
|
100
100
|
PGconn *connection;
|
101
101
|
char **bind_args_data = 0;
|
102
102
|
int n, *bind_args_size = 0, *bind_args_fmt = 0;
|
103
|
-
VALUE bind, data;
|
103
|
+
VALUE bind, data, typecast_bind;
|
104
104
|
|
105
105
|
Statement *s = db_postgres_statement_handle_safe(self);
|
106
106
|
connection = db_postgres_adapter_handle_safe(s->adapter)->connection;
|
107
107
|
|
108
108
|
rb_scan_args(argc, argv, "00*", &bind);
|
109
109
|
|
110
|
+
typecast_bind = rb_ary_new();
|
111
|
+
rb_gc_register_address(&typecast_bind);
|
110
112
|
rb_gc_register_address(&bind);
|
113
|
+
|
111
114
|
if (RARRAY_LEN(bind) > 0) {
|
112
115
|
bind_args_size = (int *) malloc(sizeof(int) * RARRAY_LEN(bind));
|
113
116
|
bind_args_fmt = (int *) malloc(sizeof(int) * RARRAY_LEN(bind));
|
@@ -126,8 +129,9 @@ VALUE db_postgres_statement_execute(int argc, VALUE *argv, VALUE self) {
|
|
126
129
|
else
|
127
130
|
bind_args_fmt[n] = 0;
|
128
131
|
data = typecast_to_string(data);
|
132
|
+
rb_ary_push(typecast_bind, data);
|
129
133
|
bind_args_size[n] = RSTRING_LEN(data);
|
130
|
-
bind_args_data[n] =
|
134
|
+
bind_args_data[n] = RSTRING_PTR(data);
|
131
135
|
}
|
132
136
|
}
|
133
137
|
|
@@ -141,9 +145,6 @@ VALUE db_postgres_statement_execute(int argc, VALUE *argv, VALUE self) {
|
|
141
145
|
};
|
142
146
|
|
143
147
|
result = (PGresult *)GVL_NOLOCK(nogvl_pq_exec_prepared, &q, RUBY_UBF_IO, 0);
|
144
|
-
for (n = 0; n < RARRAY_LEN(bind); n++)
|
145
|
-
if (bind_args_data[n])
|
146
|
-
free(bind_args_data[n]);
|
147
148
|
free(bind_args_fmt);
|
148
149
|
free(bind_args_size);
|
149
150
|
free(bind_args_data);
|
@@ -160,6 +161,7 @@ VALUE db_postgres_statement_execute(int argc, VALUE *argv, VALUE self) {
|
|
160
161
|
result = (PGresult *)GVL_NOLOCK(nogvl_pq_exec_prepared, &q, RUBY_UBF_IO, 0);
|
161
162
|
}
|
162
163
|
|
164
|
+
rb_gc_unregister_address(&typecast_bind);
|
163
165
|
rb_gc_unregister_address(&bind);
|
164
166
|
db_postgres_check_result(result);
|
165
167
|
return db_postgres_result_load(db_postgres_result_allocate(cDPR), result);
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: swift-db-postgres
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -37,11 +37,11 @@ extra_rdoc_files: []
|
|
37
37
|
files:
|
38
38
|
- ext/swift/db/postgres/datetime.c
|
39
39
|
- ext/swift/db/postgres/result.c
|
40
|
-
- ext/swift/db/postgres/common.c
|
41
40
|
- ext/swift/db/postgres/adapter.c
|
42
41
|
- ext/swift/db/postgres/typecast.c
|
43
|
-
- ext/swift/db/postgres/
|
42
|
+
- ext/swift/db/postgres/common.c
|
44
43
|
- ext/swift/db/postgres/main.c
|
44
|
+
- ext/swift/db/postgres/statement.c
|
45
45
|
- ext/swift/db/postgres/typecast.h
|
46
46
|
- ext/swift/db/postgres/datetime.h
|
47
47
|
- ext/swift/db/postgres/result.h
|