Skip to content

Commit 769f42d

Browse files
committed
Some Result Set cleanup
1 parent 812c6aa commit 769f42d

File tree

6 files changed

+64
-35
lines changed

6 files changed

+64
-35
lines changed

src/njs/src/njsConnection.cpp

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -742,8 +742,11 @@ void Connection::Async_Execute (uv_work_t *req)
742742
executeBaton->numCols = executeBaton->dpistmt->numCols();
743743
executeBaton->columnNames = new std::string[executeBaton->numCols];
744744
Connection::CopyMetaData( executeBaton->columnNames, meta,
745-
executeBaton->numCols );
746-
if( executeBaton->getRS ) goto exitAsyncExecute;
745+
executeBaton->numCols );
746+
747+
if ( executeBaton->getRS )
748+
goto exitAsyncExecute;
749+
747750
Connection::DoDefines(executeBaton, meta, executeBaton->numCols);
748751
Connection::DoFetch(executeBaton);
749752
}
@@ -1046,22 +1049,22 @@ void Connection::DoFetch (eBaton* executeBaton)
10461049
{
10471050
executeBaton->dpistmt->fetch(executeBaton->maxRows);
10481051
executeBaton->rowsFetched = executeBaton->dpistmt->rowsFetched();
1049-
Connection::Descr2Dbl ( executeBaton->defines,
1050-
executeBaton->numCols,
1051-
executeBaton->rowsFetched,
1052-
executeBaton->getRS );
1052+
Connection::Descr2Double ( executeBaton->defines,
1053+
executeBaton->numCols,
1054+
executeBaton->rowsFetched,
1055+
executeBaton->getRS );
10531056
}
10541057

10551058
/*****************************************************************************/
10561059
/*
10571060
DESCRIPTION
1058-
Special processing for datetime, as it is obtained as descriptors
1061+
Special processing for datetime to convert descriptors to double value.
10591062
10601063
PARAMETERS:
10611064
Define struct, numCols
10621065
*/
1063-
void Connection::Descr2Dbl( Define* defines, unsigned int numCols,
1064-
unsigned int rowsFetched, bool getRS )
1066+
void Connection::Descr2Double( Define* defines, unsigned int numCols,
1067+
unsigned int rowsFetched, bool getRS )
10651068
{
10661069
for (unsigned int col = 0; col < numCols; col ++ )
10671070
{

src/njs/src/njsConnection.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -205,9 +205,9 @@ class Connection: public ObjectWrap
205205
unsigned int numCols );
206206
static void DoFetch (eBaton* executeBaton);
207207
static void CopyMetaData ( std::string*, const dpi::MetaData*, unsigned int );
208-
static void Descr2Dbl ( Define* defines, unsigned int numCols,
209-
unsigned int rowsFetched, bool getRS );
210-
bool getIsValid() { return isValid_; }
208+
static void Descr2Double ( Define* defines, unsigned int numCols,
209+
unsigned int rowsFetched, bool getRS );
210+
bool isValid() { return isValid_; }
211211

212212
private:
213213
static NAN_METHOD(New);

src/njs/src/njsMessages.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ static const char *errMsg[] =
5353
"NJS-016: buffer is too small for OUT binds",
5454
"NJS-017: concurrent operations on resultSet are not allowed",
5555
"NJS-018: invalid result set",
56-
"NJS-019: resultSet cannot be true for non-queries",
56+
"NJS-019: resultSet cannot be returned for non-query statements",
5757
};
5858

5959
string NJSMessages::getErrorMsg ( NJSErrorType err, ... )

src/njs/src/njsOracle.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -365,7 +365,7 @@ NAN_SETTER(Oracledb::SetStmtCacheSize)
365365
NAN_PROPERTY_GETTER(Oracledb::GetPrefetchRows)
366366
{
367367
NanScope();
368-
Oracledb* oracledb = ObjectWrap::Unwrap<Oracledb>(args.Holder());
368+
Oracledb* oracledb = ObjectWrap::Unwrap<Oracledb>(args.Holder());
369369
Local<Integer> value = NanNew<v8::Integer>(oracledb->prefetchRows_);
370370
NanReturnValue(value);
371371
}

src/njs/src/njsResultSet.cpp

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,24 @@ NAN_METHOD(ResultSet::New)
129129
NAN_PROPERTY_GETTER(ResultSet::GetMetaData)
130130
{
131131
NanScope();
132-
ResultSet* njsResultSet = ObjectWrap::Unwrap<ResultSet>(args.Holder());
132+
ResultSet* njsResultSet = ObjectWrap::Unwrap<ResultSet>(args.Holder());
133+
string msg;
134+
135+
if(!njsResultSet->njsconn_->isValid())
136+
{
137+
msg = NJSMessages::getErrorMsg ( errInvalidConnection );
138+
NJS_SET_EXCEPTION(msg.c_str(), (int) msg.length());
139+
NanReturnUndefined();
140+
}
141+
else if(njsResultSet->state_ == INVALID)
142+
{
143+
msg = NJSMessages::getErrorMsg ( errInvalidResultSet );
144+
NJS_SET_EXCEPTION(msg.c_str(), (int) msg.length());
145+
NanReturnUndefined();
146+
}
133147
std::string *columnNames = new std::string[njsResultSet->numCols_];
134148
Connection::CopyMetaData ( columnNames, njsResultSet->meta_,
135-
njsResultSet->numCols_ );
149+
njsResultSet->numCols_ );
136150
Handle<Value> meta;
137151
meta = Connection::GetMetaData( columnNames,
138152
njsResultSet->numCols_ );
@@ -149,7 +163,10 @@ NAN_SETTER(ResultSet::SetMetaData)
149163
NanScope();
150164
ResultSet* njsResultSet = ObjectWrap::Unwrap<ResultSet>(args.Holder());
151165
string msg;
152-
if(njsResultSet->state_ == INVALID)
166+
167+
if(!njsResultSet->njsconn_->isValid())
168+
msg = NJSMessages::getErrorMsg ( errInvalidConnection );
169+
else if(njsResultSet->state_ == INVALID)
153170
msg = NJSMessages::getErrorMsg(errInvalidResultSet);
154171
else
155172
msg = NJSMessages::getErrorMsg(errReadOnly, "metaData");
@@ -190,7 +207,7 @@ NAN_METHOD(ResultSet::GetRows)
190207
getRowsBaton->njsRS = njsResultSet;
191208
getRowsBaton->ebaton = new eBaton;
192209

193-
if(!njsResultSet->njsconn_->getIsValid())
210+
if(!njsResultSet->njsconn_->isValid())
194211
{
195212
getRowsBaton->error = NJSMessages::getErrorMsg ( errInvalidConnection );
196213
goto exitGetRows;
@@ -253,12 +270,13 @@ void ResultSet::Async_GetRows(uv_work_t *req)
253270
Connection::CopyMetaData ( ebaton->columnNames, njsRS->meta_,
254271
njsRS->numCols_ );
255272
ebaton->numCols = njsRS->numCols_;
256-
if( njsRS->defineBuffers_ == NULL ||
273+
if( !njsRS->defineBuffers_ ||
257274
njsRS->fetchRowCount_ < getRowsBaton->numRows )
258275
{
259-
if(njsRS->defineBuffers_ != NULL)
276+
if( njsRS->defineBuffers_ )
260277
{
261278
ResultSet::clearFetchBuffer(njsRS->defineBuffers_, njsRS->numCols_);
279+
getRowsBaton-> njsRS-> defineBuffers_ = NULL;
262280
}
263281
Connection::DoDefines(ebaton, njsRS->meta_, njsRS->numCols_);
264282
njsRS->fetchRowCount_ = getRowsBaton->numRows;
@@ -355,7 +373,7 @@ NAN_METHOD(ResultSet::Close)
355373

356374
NJS_CHECK_NUMBER_OF_ARGS ( closeBaton->error, args, 1, 1, exitClose );
357375

358-
if(!njsResultSet->njsconn_->getIsValid())
376+
if(!njsResultSet->njsconn_->isValid())
359377
{
360378
closeBaton->error = NJSMessages::getErrorMsg ( errInvalidConnection );
361379
goto exitClose;
@@ -402,9 +420,12 @@ void ResultSet::Async_Close(uv_work_t *req)
402420
try
403421
{
404422
closeBaton-> njsRS-> dpistmt_-> release ();
423+
405424
Define* defineBuffers = closeBaton-> njsRS-> defineBuffers_;
406425
unsigned int numCols = closeBaton-> njsRS-> numCols_;
426+
407427
ResultSet::clearFetchBuffer(defineBuffers, numCols);
428+
closeBaton-> njsRS-> defineBuffers_ = NULL;
408429
}
409430
catch(dpi::Exception& e)
410431
{

src/njs/src/njsResultSet.h

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -64,18 +64,22 @@ using namespace node;
6464

6565
class ResultSet;
6666

67+
/**
68+
* Baton for Asynchronous ResultSet methods
69+
**/
6770
typedef struct rsBaton
6871
{
6972
uv_work_t req;
70-
bool fetchMultiple;
7173
std::string error;
74+
bool fetchMultiple; // set for getRows() method.
7275
eBaton *ebaton;
73-
unsigned int numRows;
76+
unsigned int numRows; // rows to be fetched.
7477
Persistent<Function> cb;
75-
ResultSet* njsRS;
78+
ResultSet* njsRS; // resultset object.
7679

7780
rsBaton()
78-
: fetchMultiple(false), error(""), ebaton(NULL), numRows(0)
81+
: error(""), fetchMultiple(false), ebaton(NULL), numRows(0),
82+
njsRS(NULL)
7983
{}
8084

8185
~rsBaton()
@@ -86,6 +90,7 @@ typedef struct rsBaton
8690

8791
}rsBaton;
8892

93+
//ResultSet Class
8994
class ResultSet: public ObjectWrap {
9095
public:
9196
ResultSet(){}
@@ -122,16 +127,16 @@ class ResultSet: public ObjectWrap {
122127
unsigned int numCols );
123128

124129

125-
dpi::Stmt *dpistmt_;
126-
dpi::Env *dpienv_;
127-
Connection *njsconn_;
128-
State state_;
129-
bool rsEmpty_;
130-
Define *defineBuffers_;
131-
unsigned int numCols_;
132-
unsigned int fetchRowCount_;
133-
unsigned int outFormat_;
134-
const dpi::MetaData *meta_;
130+
dpi::Stmt *dpistmt_;
131+
dpi::Env *dpienv_;
132+
Connection *njsconn_;
133+
State state_;
134+
bool rsEmpty_;
135+
Define *defineBuffers_;
136+
unsigned int numCols_;
137+
unsigned int fetchRowCount_;
138+
unsigned int outFormat_;
139+
const dpi::MetaData *meta_;
135140
};
136141

137142

0 commit comments

Comments
 (0)