Class: Swift::DB::Pool
- Inherits:
-
Object
- Object
- Swift::DB::Pool
- Defined in:
- ext/pool.cc
Instance Method Summary collapse
Constructor Details
#initialize(n, options) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'ext/pool.cc', line 21
VALUE pool_init(VALUE self, VALUE n, VALUE options) {
VALUE db = rb_hash_aref(options, ID2SYM(rb_intern("db")));
VALUE user = rb_hash_aref(options, ID2SYM(rb_intern("user")));
VALUE driver = rb_hash_aref(options, ID2SYM(rb_intern("driver")));
if (NIL_P(db)) rb_raise(eSwiftArgumentError, "Pool#new called without :db");
if (NIL_P(driver)) rb_raise(eSwiftArgumentError, "#new called without :driver");
user = NIL_P(user) ? rb_str_new2(getlogin()) : user;
if (NUM2INT(n) < 1) rb_raise(eSwiftArgumentError, "Pool#new called with invalid pool size.");
try {
DATA_PTR(self) = new dbi::ConnectionPool(
NUM2INT(n),
CSTRING(driver),
CSTRING(user),
CSTRING(rb_hash_aref(options, ID2SYM(rb_intern("password")))),
CSTRING(db),
CSTRING(rb_hash_aref(options, ID2SYM(rb_intern("host")))),
CSTRING(rb_hash_aref(options, ID2SYM(rb_intern("port"))))
);
rb_iv_set(self, "@timezone", rb_hash_aref(options, ID2SYM(rb_intern("timezone"))));
}
CATCH_DBI_EXCEPTIONS();
return Qnil;
}
|
Instance Method Details
#execute(*args) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'ext/pool.cc', line 61
VALUE pool_execute(int argc, VALUE *argv, VALUE self) {
int n;
VALUE sql;
VALUE bind_values;
VALUE callback;
VALUE request = Qnil;
dbi::ConnectionPool *pool = pool_handle(self);
rb_scan_args(argc, argv, "1*&", &sql, &bind_values, &callback);
// The only way to pass timezone to the C callback routine.
if (NIL_P(callback))
rb_raise(eSwiftArgumentError, "No block given in Pool#execute");
else
rb_iv_set(callback, "@timezone", rb_iv_get(self, "@timezone"));
try {
Query query;
query_bind_values(&query, bind_values, pool->driver());
request = request_alloc(cSwiftRequest);
DATA_PTR(request) = pool->execute(CSTRING(sql), query.bind, pool_callback, (void*)callback);
return request;
}
CATCH_DBI_EXCEPTIONS();
}
|