Skip to content

Commit

Permalink
Merge pull request #16 from mariuz/master
Browse files Browse the repository at this point in the history
merge modifs for v0.8 and v0.10
  • Loading branch information
xdenser committed Jan 27, 2014
2 parents d61a077 + 613b5e3 commit 3427852
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 50 deletions.
16 changes: 16 additions & 0 deletions binding.gyp
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
'targets': [
{
'target_name': 'binding',
'sources': [ './src/fb-bindings.cc', './src/fb-bindings-blob.cc',
'./src/fb-bindings-fbresult.cc',
'./src/fb-bindings-connection.cc','./src/fb-bindings-eventblock.cc',
'./src/fb-bindings-fbeventemitter.cc',
'./src/fb-bindings-statement.cc' ],
'include_dirs': [
'/usr/include/'
],
'libraries': [ '-L/usr/lib -lfbclient' ]
}
]
}
8 changes: 4 additions & 4 deletions src/fb-bindings-blob.cc
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ Handle<Value> FBblob::ReadSync(const Arguments& args)

void FBblob::EIO_After_Read(uv_work_t *req)
{
uv_unref(uv_default_loop());
// uv_unref(uv_default_loop());
HandleScope scope;
struct rw_request *r_req = (struct rw_request *)(req->data);
delete req;
Expand Down Expand Up @@ -209,7 +209,7 @@ Handle<Value> FBblob::Read(const Arguments& args)
uv_queue_work(uv_default_loop(), req, EIO_Read, EIO_After_Read);


uv_ref(uv_default_loop());
//uv_ref(uv_default_loop());
blob->Ref();

return Undefined();
Expand Down Expand Up @@ -279,7 +279,7 @@ FBblob::WriteSync(const Arguments& args)

void FBblob::EIO_After_Write(uv_work_t *req)
{
uv_unref(uv_default_loop());
//uv_unref(uv_default_loop());
HandleScope scope;
struct rw_request *w_req = (struct rw_request *)(req->data);
delete req;
Expand Down Expand Up @@ -366,7 +366,7 @@ Handle<Value>
uv_queue_work(uv_default_loop(), req, EIO_Write, EIO_After_Write);


uv_ref(uv_default_loop());
//uv_ref(uv_default_loop());
blob->Ref();

return Undefined();
Expand Down
74 changes: 46 additions & 28 deletions src/fb-bindings-connection.cc
Original file line number Diff line number Diff line change
Expand Up @@ -105,14 +105,14 @@ bool Connection::Close(){

}

bool Connection::process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle *stmtp)
bool Connection::process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle *stmtp, int *statement_type)
{
XSQLDA *sqlda;
XSQLVAR *var;
static char stmt_info[] = { isc_info_sql_stmt_type };
char info_buffer[20];
short l, num_cols, i, length, alignment, type, offset;
int statement_type;
// int statement_type;
int sqlda_size;


Expand Down Expand Up @@ -147,13 +147,12 @@ bool Connection::process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle
sizeof (info_buffer), info_buffer))
{
l = (short) isc_vax_integer((char *) info_buffer + 1, 2);
statement_type = isc_vax_integer((char *) info_buffer + 3, l);
*statement_type = isc_vax_integer((char *) info_buffer + 3, l);
}

// It is statement w\o resultset
if (!sqlda->sqld)
{

free(sqlda);
*sqldap = NULL;

Expand All @@ -164,7 +163,7 @@ bool Connection::process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle

/* Commit DDL statements if that is what sql_info says */

if (trans && (statement_type == isc_info_sql_stmt_ddl))
if (trans && (*statement_type == isc_info_sql_stmt_ddl))
{
//printf("it is ddl !");
if (isc_commit_transaction(status, &trans))
Expand Down Expand Up @@ -206,11 +205,19 @@ bool Connection::process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle
*/
if(!FBResult::prepare_sqlda(sqlda)) return false;


if (isc_dsql_execute(status, &trans, stmtp, SQL_DIALECT_V6, NULL))
{
return false;
}
if(*statement_type == isc_info_sql_stmt_select){
if (isc_dsql_execute(status, &trans, stmtp, SQL_DIALECT_V6, NULL))
{
return false;
}
}
else {
if (isc_dsql_execute2(status, &trans, stmtp, SQL_DIALECT_V6, NULL, sqlda)){
return false;
}
}


return true;

}
Expand Down Expand Up @@ -417,7 +424,7 @@ Handle<Value>

void Connection::EIO_After_Connect(uv_work_t *req)
{
uv_unref(uv_default_loop());
// uv_unref(uv_default_loop());
HandleScope scope;
struct connect_request *conn_req = (struct connect_request *)(req->data);
delete req;
Expand Down Expand Up @@ -500,7 +507,7 @@ Handle<Value>
uv_queue_work(uv_default_loop(), req, EIO_Connect, EIO_After_Connect);


uv_ref(uv_default_loop());
// uv_ref(uv_default_loop());
conn->Ref();

return Undefined();
Expand Down Expand Up @@ -595,7 +602,7 @@ Handle<Value>

void Connection::EIO_After_TransactionRequest(uv_work_t *req)
{
uv_unref(uv_default_loop());
// uv_unref(uv_default_loop());
HandleScope scope;
struct transaction_request *tr_req = (struct transaction_request *)(req->data);
delete req;
Expand Down Expand Up @@ -672,7 +679,7 @@ Handle<Value>
uv_queue_work(uv_default_loop(), req, EIO_TransactionRequest, EIO_After_TransactionRequest);


uv_ref(uv_default_loop());
//uv_ref(uv_default_loop());
conn->Ref();

return Undefined();
Expand Down Expand Up @@ -708,7 +715,7 @@ Handle<Value>
req->data = tr_req;
uv_queue_work(uv_default_loop(), req, EIO_TransactionRequest, EIO_After_TransactionRequest);

uv_ref(uv_default_loop());
// uv_ref(uv_default_loop());
conn->Ref();

return Undefined();
Expand Down Expand Up @@ -744,7 +751,7 @@ Handle<Value>
req->data = tr_req;
uv_queue_work(uv_default_loop(), req, EIO_TransactionRequest, EIO_After_TransactionRequest);

uv_ref(uv_default_loop());
// uv_ref(uv_default_loop());
conn->Ref();

return Undefined();
Expand All @@ -754,6 +761,7 @@ Handle<Value>
Connection::QuerySync(const Arguments& args)
{
Connection *connection = ObjectWrap::Unwrap<Connection>(args.This());
int statement_type;

HandleScope scope;

Expand All @@ -766,21 +774,26 @@ Handle<Value>

XSQLDA *sqlda = NULL;
isc_stmt_handle stmt = NULL;
bool r = connection->process_statement(&sqlda,*Query, &stmt);
bool r = connection->process_statement(&sqlda,*Query, &stmt, &statement_type);
if(!r) {
return ThrowException(Exception::Error(
String::Concat(String::New("In querySync - "),ERR_MSG(connection, Connection))));
}



Local<Value> argv[3];

argv[0] = External::New(sqlda);
argv[1] = External::New(&stmt);
argv[2] = External::New(connection);
Local<Object> js_result(FBResult::constructor_template->
GetFunction()->NewInstance(3, argv));

if(statement_type==isc_info_sql_stmt_exec_procedure){
FBResult *fb_res = ObjectWrap::Unwrap<FBResult>(js_result);
Local<Value> js_value = fb_res->getCurrentRow(true);
return scope.Close(js_value);
}


return scope.Close(js_result);

Expand All @@ -793,9 +806,9 @@ void Connection::EIO_After_Query(uv_work_t *req)
HandleScope scope;
struct query_request *q_req = (struct query_request *)(req->data);
delete req;



Local<Value> argv[3];

if (!q_req->result) {
argv[0] = Exception::Error(
String::Concat(String::New("While query - "),ERR_MSG(q_req->conn, Connection)));
Expand All @@ -808,17 +821,20 @@ void Connection::EIO_After_Query(uv_work_t *req)

Local<Object> js_result(FBResult::constructor_template->
GetFunction()->NewInstance(3, argv));

argv[1] = Local<Value>::New(js_result);

if(q_req->statement_type==isc_info_sql_stmt_exec_procedure ){
FBResult *fb_res = ObjectWrap::Unwrap<FBResult>(js_result);
argv[1] = fb_res->getCurrentRow(true);
}
else argv[1] = Local<Value>::New(js_result);
argv[0] = Local<Value>::New(Null());
}


TryCatch try_catch;

q_req->callback->Call(Context::GetCurrent()->Global(), 2, argv);


if (try_catch.HasCaught()) {
node::FatalException(try_catch);
}
Expand All @@ -827,6 +843,7 @@ void Connection::EIO_After_Query(uv_work_t *req)
q_req->conn->stop_async();
q_req->conn->Unref();
free(q_req);

// scope.Close(argv[1]);

}
Expand All @@ -835,7 +852,8 @@ void Connection::EIO_Query(uv_work_t *req)
{
struct query_request *q_req = (struct query_request *)(req->data);

q_req->result = q_req->conn->process_statement(&q_req->sqlda,**(q_req->Query), &q_req->stmt);
q_req->result = q_req->conn->process_statement(&q_req->sqlda,**(q_req->Query), &q_req->stmt, &(q_req->statement_type));

delete q_req->Query;
return;
}
Expand Down Expand Up @@ -872,7 +890,7 @@ Handle<Value>
uv_work_t* req = new uv_work_t();
req->data = q_req;
uv_queue_work(uv_default_loop(), req, EIO_Query, EIO_After_Query);


//uv_ref(uv_default_loop());
conn->Ref();
Expand All @@ -898,7 +916,7 @@ Handle<Value>

if(!event_block::FindBlock(conn->fb_events, *Event)){

event_block* eb;
// event_block* eb;

return event_block::RegEvent(&(conn->fb_events), *Event, conn, &conn->db);

Expand Down
3 changes: 2 additions & 1 deletion src/fb-bindings-connection.h
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ class Connection : public FBEventEmitter {

bool Close();

bool process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle *stmtp);
bool process_statement(XSQLDA **sqldap, char *query, isc_stmt_handle *stmtp, int *statement_type);

bool prepare_statement(XSQLDA **insqlda, XSQLDA **outsqlda, char *query, isc_stmt_handle *stmtp);

Expand Down Expand Up @@ -129,6 +129,7 @@ class Connection : public FBEventEmitter {
String::Utf8Value *Query;
XSQLDA *sqlda;
isc_stmt_handle stmt;
int statement_type;
bool result;
};

Expand Down
2 changes: 1 addition & 1 deletion src/fb-bindings-eventblock.cc
Original file line number Diff line number Diff line change
Expand Up @@ -333,7 +333,7 @@ Handle<Value>
res->event_->data = res;
uv_async_init(uv_default_loop(),res->event_, event_block::event_notification);
// uv_async_start(EV_DEFAULT_UC_ res->event_);
uv_unref(uv_default_loop());
// uv_unref(uv_default_loop());

// Set links
if(root) root->next = res;
Expand Down
18 changes: 7 additions & 11 deletions src/fb-bindings-fbresult.cc
Original file line number Diff line number Diff line change
Expand Up @@ -555,18 +555,14 @@ Local<Object>
FBResult::getCurrentRow(bool asObject)
{
short i, num_cols;
// XSQLDA *sqlda;

// sqlda = sqldap;

num_cols = sqldap->sqld;



HandleScope scope;
Local<Object> js_result_row;
Local<Value> js_field;

// if(!sqldap){ return scope.Close(js_result_row);}
if(!sqldap) num_cols = 0;
else num_cols = sqldap->sqld;


if(asObject)
js_result_row = Object::New();
Expand Down Expand Up @@ -675,7 +671,7 @@ Handle<Value>

void FBResult::EIO_After_Fetch(uv_work_t *req)
{
uv_unref(uv_default_loop());
// uv_unref(uv_default_loop());
HandleScope scope;
struct fetch_request *f_req = (struct fetch_request *)(req->data);
delete req;
Expand Down Expand Up @@ -728,7 +724,7 @@ void FBResult::EIO_After_Fetch(uv_work_t *req)
uv_queue_work(uv_default_loop(), req, EIO_Fetch, EIO_After_Fetch);


uv_ref(uv_default_loop());
//uv_ref(uv_default_loop());
return;
}
else
Expand Down Expand Up @@ -848,7 +844,7 @@ Handle<Value>
req->data = f_req;
uv_queue_work(uv_default_loop(), req, EIO_Fetch, EIO_After_Fetch);

uv_ref(uv_default_loop());
//uv_ref(uv_default_loop());
res->Ref();

return Undefined();
Expand Down
4 changes: 2 additions & 2 deletions src/fb-bindings-statement.cc
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ Handle<Value>

void FBStatement::EIO_After_Exec(uv_work_t *req)
{
uv_unref(uv_default_loop());
//uv_unref(uv_default_loop());
HandleScope scope;

struct exec_request *e_req = (struct exec_request *)(req->data);
Expand Down Expand Up @@ -258,7 +258,7 @@ Handle<Value>
uv_queue_work(uv_default_loop(), req, EIO_Exec, EIO_After_Exec);


uv_ref(uv_default_loop());
// uv_ref(uv_default_loop());
fb_stmt->Ref();

return Undefined();
Expand Down
4 changes: 2 additions & 2 deletions tests/config.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ See license text in LICENSE file

exports.cfg = {
// Database connection settings
db: "test.fdb",
// db: "192.168.80.143:test4.fdb",
// db: "test.fdb",
db: "192.168.80.128:test.fdb",
user: "sysdba",
password: "masterkey",
role: ""
Expand Down
2 changes: 1 addition & 1 deletion tools/nodeunit
Submodule nodeunit updated 1160 files

0 comments on commit 3427852

Please sign in to comment.