Skip to content
This repository has been archived by the owner on Jun 10, 2024. It is now read-only.

Commit

Permalink
Merge branch 'cjlucas/resultset-leak'
Browse files Browse the repository at this point in the history
  • Loading branch information
cjlucas committed Aug 17, 2015
2 parents ac0ccea + c50d76a commit 3b7b5a0
Show file tree
Hide file tree
Showing 5 changed files with 73 additions and 19 deletions.
24 changes: 24 additions & 0 deletions lib/src/helpers.cc
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,30 @@ oracle::occi::Date NewOracleDateFromDateTime(Dart_Handle dateTime) {
return date;
}

Dart_Handle NewByteDataFromOracleBytes(oracle::occi::Bytes bytes) {
if (bytes.isNull()) {
return Dart_Null();
}

Dart_Handle byteData = HandleError(Dart_NewTypedData(Dart_TypedData_kByteData,
bytes.length()));

for (int i = 0; i < bytes.length(); i++) {
Dart_Handle b = HandleError(Dart_NewInteger(bytes.byteAt(i)));

HandleError(Dart_Invoke(byteData,
Dart_NewStringFromCString("setUint8"),
1,
&b));
}

return byteData;
}

oracle::occi::Bytes NewOracleBytesFromByteData(Dart_Handle byteData) {

}


void printDartToString(Dart_Handle dh) {
char *tostr;
Expand Down
3 changes: 3 additions & 0 deletions lib/src/helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@ oracle::occi::Timestamp NewOracleTimestampFromDateTime(Dart_Handle dateTime);
Dart_Handle NewDateTimeFromOracleDate(oracle::occi::Date date);
oracle::occi::Date NewOracleDateFromDateTime(Dart_Handle dateTime);

Dart_Handle NewByteDataFromOracleBytes(oracle::occi::Bytes bytes);
oracle::occi::Bytes NewOracleBytesFromByteData(Dart_Handle byteData);

template<typename T>
T* getPeer(Dart_NativeArguments args, int index){
T* p;
Expand Down
29 changes: 12 additions & 17 deletions lib/src/resultset.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,16 @@

namespace occi = oracle::occi;

void OracleResultSet_Finalizer(void * isolate_callback_data,
void OracleResultSet_finalizer(void * isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer) {
Dart_EnterScope();

auto p = (std::pair<occi::Statement *, occi::ResultSet *> *)peer;
p->first->closeResultSet(p->second);

Dart_ExitScope();
delete (ResultSet *)peer;
}

void OracleResultSet_getColumnListMetadata(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
std::vector<occi::MetaData> data;

try {
Expand Down Expand Up @@ -55,7 +50,7 @@ void OracleResultSet_getColumnListMetadata(Dart_NativeArguments args) {
void OracleResultSet_cancel(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;

try {
rs->cancel();
Expand All @@ -71,7 +66,7 @@ void OracleResultSet_getBFile(Dart_NativeArguments args) {
void OracleResultSet_getBlob(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand All @@ -94,7 +89,7 @@ void OracleResultSet_getBlob(Dart_NativeArguments args) {
void OracleResultSet_getClob(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand All @@ -121,7 +116,7 @@ void OracleResultSet_getBytes(Dart_NativeArguments args) {
void OracleResultSet_getString(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand All @@ -142,7 +137,7 @@ void OracleResultSet_getString(Dart_NativeArguments args) {
void OracleResultSet_getInt(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand All @@ -160,7 +155,7 @@ void OracleResultSet_getInt(Dart_NativeArguments args) {
void OracleResultSet_getDouble(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand All @@ -181,7 +176,7 @@ void OracleResultSet_getNum(Dart_NativeArguments args) {
void OracleResultSet_getDate(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

occi::Date date;
Expand All @@ -201,7 +196,7 @@ void OracleResultSet_getDate(Dart_NativeArguments args) {
void OracleResultSet_getTimestamp(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand All @@ -220,7 +215,7 @@ void OracleResultSet_getRowID(Dart_NativeArguments args) {
void OracleResultSet_next(Dart_NativeArguments args) {
Dart_EnterScope();

auto rs = getThis<occi::ResultSet>(args);
auto rs = getThis<ResultSet>(args)->resultSet;
int64_t index = getDartArg<int64_t>(args, 1);

try {
Expand Down
22 changes: 22 additions & 0 deletions lib/src/resultset.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,29 @@

#include <dart_api.h>

#include "statement.h"

#include <stdio.h>

namespace occi = oracle::occi;

struct ResultSet {
std::shared_ptr<Statement> stmt;
occi::ResultSet *resultSet;

ResultSet(std::shared_ptr<Statement> stmt,
occi::ResultSet *resultSet) : stmt(stmt), resultSet(resultSet) {
}

~ResultSet() {
//printf("In ~ResultSet\n");
stmt.get()->stmt->closeResultSet(resultSet);
}
};

void OracleResultSet_finalizer(void * isolate_callback_data,
Dart_WeakPersistentHandle handle,
void* peer);
void OracleResultSet_getColumnListMetadata(Dart_NativeArguments arguments);
void OracleResultSet_cancel(Dart_NativeArguments arguments);
void OracleResultSet_getBFile(Dart_NativeArguments arguments);
Expand Down
14 changes: 12 additions & 2 deletions lib/src/statement.cc
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@
// This file is part of oracle.dart, and is released under LGPL v3.

#include "statement.h"

#include "helpers.h"
#include "resultset.h"

void OracleStatement_finalizer(void* isolate_callback_data,
Dart_WeakPersistentHandle handle,
Expand Down Expand Up @@ -71,12 +73,20 @@ void OracleStatement_status(Dart_NativeArguments args){
void OracleStatement_executeQuery(Dart_NativeArguments args) {
Dart_EnterScope();

auto statement = getThis<std::shared_ptr<Statement>>(args)->get()->stmt;
auto stmt_sp_p = getThis<std::shared_ptr<Statement>>(args);
auto statement = stmt_sp_p->get()->stmt;

try {
occi::ResultSet* rs = statement->executeQuery();
occi::ResultSet* oraResultSet = statement->executeQuery();

auto rs = new ResultSet(*stmt_sp_p, oraResultSet);
auto dh = NewInstanceWithPeer("ResultSet", rs);

Dart_NewWeakPersistentHandle(dh,
rs,
sizeof(rs),
OracleResultSet_finalizer);

Dart_SetReturnValue(args, dh);
} CATCH_SQL_EXCEPTION

Expand Down

0 comments on commit 3b7b5a0

Please sign in to comment.