Skip to content

Commit

Permalink
fix for exec procedure returning no result were generating segfault
Browse files Browse the repository at this point in the history
  • Loading branch information
xdenser committed Dec 16, 2012
1 parent 70b82e2 commit 92b212f
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 14 deletions.
18 changes: 12 additions & 6 deletions src/fb-bindings-connection.cc
Expand Up @@ -806,7 +806,8 @@ void Connection::EIO_After_Query(uv_work_t *req)
HandleScope scope;
struct query_request *q_req = (struct query_request *)(req->data);
delete req;


printf("in after query\n");
Local<Value> argv[3];

if (!q_req->result) {
Expand All @@ -822,20 +823,21 @@ void Connection::EIO_After_Query(uv_work_t *req)
Local<Object> js_result(FBResult::constructor_template->
GetFunction()->NewInstance(3, argv));

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


TryCatch try_catch;

printf("before callback \n");
q_req->callback->Call(Context::GetCurrent()->Global(), 2, argv);

printf("after callbackn");

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

printf("out aft query\n");

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

}
Expand All @@ -854,6 +859,7 @@ 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->statement_type));

delete q_req->Query;
return;
}
Expand Down Expand Up @@ -890,7 +896,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 Down
12 changes: 4 additions & 8 deletions src/fb-bindings-fbresult.cc
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

0 comments on commit 92b212f

Please sign in to comment.