swift-db-postgres 0.2.1 → 0.2.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 +4 -0
- data/ext/swift/db/postgres/adapter.c +5 -6
- data/ext/swift/db/postgres/result.c +3 -5
- data/ext/swift/db/postgres/statement.c +4 -5
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -39,7 +39,6 @@ VALUE db_postgres_adapter_deallocate(Adapter *a) {
|
|
39
39
|
|
40
40
|
VALUE db_postgres_adapter_allocate(VALUE klass) {
|
41
41
|
Adapter *a = (Adapter*)malloc(sizeof(Adapter));
|
42
|
-
|
43
42
|
memset(a, 0, sizeof(Adapter));
|
44
43
|
return Data_Wrap_Struct(klass, 0, db_postgres_adapter_deallocate, a);
|
45
44
|
}
|
@@ -125,7 +124,7 @@ VALUE nogvl_pq_exec_params(void *ptr) {
|
|
125
124
|
VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
126
125
|
char **bind_args_data = 0;
|
127
126
|
int n, *bind_args_size = 0, *bind_args_fmt = 0;
|
128
|
-
PGresult *
|
127
|
+
PGresult *result;
|
129
128
|
VALUE sql, bind, data;
|
130
129
|
Adapter *a = db_postgres_adapter_handle_safe(self);
|
131
130
|
|
@@ -167,7 +166,7 @@ VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
|
167
166
|
.format = bind_args_fmt
|
168
167
|
};
|
169
168
|
|
170
|
-
|
169
|
+
result = (PGresult *)rb_thread_blocking_region(nogvl_pq_exec_params, &q, RUBY_UBF_IO, 0);
|
171
170
|
rb_gc_unregister_address(&bind);
|
172
171
|
free(bind_args_size);
|
173
172
|
free(bind_args_data);
|
@@ -175,11 +174,11 @@ VALUE db_postgres_adapter_execute(int argc, VALUE *argv, VALUE self) {
|
|
175
174
|
}
|
176
175
|
else {
|
177
176
|
Query q = {.connection = a->connection, .command = CSTRING(sql)};
|
178
|
-
|
177
|
+
result = (PGresult *)rb_thread_blocking_region(nogvl_pq_exec, &q, RUBY_UBF_IO, 0);
|
179
178
|
}
|
180
179
|
|
181
|
-
db_postgres_check_result(
|
182
|
-
return db_postgres_result_load(db_postgres_result_allocate(cDPR),
|
180
|
+
db_postgres_check_result(result);
|
181
|
+
return db_postgres_result_load(db_postgres_result_allocate(cDPR), result);
|
183
182
|
}
|
184
183
|
|
185
184
|
VALUE db_postgres_adapter_begin(int argc, VALUE *argv, VALUE self) {
|
@@ -11,7 +11,6 @@ typedef struct Result {
|
|
11
11
|
PGresult *result;
|
12
12
|
VALUE fields;
|
13
13
|
VALUE types;
|
14
|
-
VALUE rows;
|
15
14
|
size_t selected;
|
16
15
|
size_t affected;
|
17
16
|
size_t insert_id;
|
@@ -98,6 +97,7 @@ VALUE db_postgres_result_load(VALUE self, PGresult *result) {
|
|
98
97
|
}
|
99
98
|
|
100
99
|
VALUE db_postgres_result_each(VALUE self) {
|
100
|
+
VALUE tuple;
|
101
101
|
int row, col, status;
|
102
102
|
Result *r = db_postgres_result_handle(self);
|
103
103
|
|
@@ -105,7 +105,7 @@ VALUE db_postgres_result_each(VALUE self) {
|
|
105
105
|
return Qnil;
|
106
106
|
|
107
107
|
for (row = 0; row < PQntuples(r->result); row++) {
|
108
|
-
|
108
|
+
tuple = rb_hash_new();
|
109
109
|
for (col = 0; col < PQnfields(r->result); col++) {
|
110
110
|
if (PQgetisnull(r->result, row, col))
|
111
111
|
rb_hash_aset(tuple, rb_ary_entry(r->fields, col), Qnil);
|
@@ -121,13 +121,11 @@ VALUE db_postgres_result_each(VALUE self) {
|
|
121
121
|
);
|
122
122
|
}
|
123
123
|
}
|
124
|
-
rb_gc_register_address(&tuple);
|
125
124
|
rb_protect(rb_yield, tuple, &status);
|
126
|
-
rb_gc_unregister_address(&tuple);
|
127
125
|
if (status != 0)
|
128
126
|
rb_jump_tag(status);
|
129
127
|
}
|
130
|
-
return
|
128
|
+
return Qnil;
|
131
129
|
}
|
132
130
|
|
133
131
|
VALUE db_postgres_result_selected_rows(VALUE self) {
|
@@ -15,7 +15,7 @@ VALUE db_postgres_result_load(VALUE, PGresult*);
|
|
15
15
|
Adapter* db_postgres_adapter_handle_safe(VALUE);
|
16
16
|
|
17
17
|
typedef struct Statement {
|
18
|
-
char id[
|
18
|
+
char id[128];
|
19
19
|
VALUE adapter;
|
20
20
|
} Statement;
|
21
21
|
|
@@ -57,9 +57,8 @@ VALUE db_postgres_statement_initialize(VALUE self, VALUE adapter, VALUE sql) {
|
|
57
57
|
Statement *s = db_postgres_statement_handle(self);
|
58
58
|
Adapter *a = db_postgres_adapter_handle_safe(adapter);
|
59
59
|
|
60
|
-
snprintf(s->id,
|
60
|
+
snprintf(s->id, 128, "s%s", CSTRING(rb_uuid_string()));
|
61
61
|
s->adapter = adapter;
|
62
|
-
rb_gc_mark(s->adapter);
|
63
62
|
|
64
63
|
if (!a->native)
|
65
64
|
sql = db_postgres_normalized_sql(sql);
|
@@ -71,7 +70,7 @@ VALUE db_postgres_statement_initialize(VALUE self, VALUE adapter, VALUE sql) {
|
|
71
70
|
}
|
72
71
|
|
73
72
|
VALUE db_postgres_statement_release(VALUE self) {
|
74
|
-
char command[
|
73
|
+
char command[256];
|
75
74
|
PGresult *result;
|
76
75
|
PGconn *connection;
|
77
76
|
|
@@ -79,7 +78,7 @@ VALUE db_postgres_statement_release(VALUE self) {
|
|
79
78
|
connection = db_postgres_adapter_handle_safe(s->adapter)->connection;
|
80
79
|
|
81
80
|
if (connection && PQstatus(connection) == CONNECTION_OK) {
|
82
|
-
snprintf(command,
|
81
|
+
snprintf(command, 256, "deallocate %s", s->id);
|
83
82
|
result = PQexec(connection, command);
|
84
83
|
db_postgres_check_result(result);
|
85
84
|
PQclear(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.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -36,12 +36,12 @@ extensions:
|
|
36
36
|
extra_rdoc_files: []
|
37
37
|
files:
|
38
38
|
- ext/swift/db/postgres/datetime.c
|
39
|
-
- ext/swift/db/postgres/
|
39
|
+
- ext/swift/db/postgres/result.c
|
40
40
|
- ext/swift/db/postgres/adapter.c
|
41
41
|
- ext/swift/db/postgres/typecast.c
|
42
42
|
- ext/swift/db/postgres/common.c
|
43
43
|
- ext/swift/db/postgres/main.c
|
44
|
-
- ext/swift/db/postgres/
|
44
|
+
- ext/swift/db/postgres/statement.c
|
45
45
|
- ext/swift/db/postgres/typecast.h
|
46
46
|
- ext/swift/db/postgres/common.h
|
47
47
|
- ext/swift/db/postgres/datetime.h
|