Commit 6357f7d2 by Orlando Vazquez

free column_data once we receive SQLITE_DONE

parent 31d6ecf5
...@@ -7,7 +7,7 @@ db.execute("CREATE TABLE t1 (alpha INTEGER)") do |row| ...@@ -7,7 +7,7 @@ db.execute("CREATE TABLE t1 (alpha INTEGER)") do |row|
end end
count = 100000; count = 1000000;
t0 = Time.new; t0 = Time.new;
1.upto(count) do 1.upto(count) do
......
...@@ -492,7 +492,7 @@ protected: ...@@ -492,7 +492,7 @@ protected:
if (stmt_) sqlite3_finalize(stmt_); if (stmt_) sqlite3_finalize(stmt_);
if (column_types_) free(column_types_); if (column_types_) free(column_types_);
if (column_names_) free(column_names_); if (column_names_) free(column_names_);
if (column_data_) free(column_data_); if (column_data_) FreeColumnData();
} }
// //
...@@ -824,13 +824,31 @@ protected: ...@@ -824,13 +824,31 @@ protected:
} }
if (req->result == SQLITE_DONE && sto->column_count_) { if (req->result == SQLITE_DONE && sto->column_count_) {
free(sto->column_data_); sto->FreeColumnData();
sto->column_data_ = NULL;
} }
return 0; return 0;
} }
void FreeColumnData(void) {
if (!column_count_) return;
for (int i = 0; i < column_count_; i++) {
switch (column_types_[i]) {
// XXX why does using String::New make v8 croak here?
case SQLITE_INTEGER:
free(column_data_[i]);
break;
case SQLITE_FLOAT:
free(column_data_[i]);
break;
}
column_data_[i] = NULL;
}
free(column_data_);
column_data_ = NULL;
}
static int EIO_Step(eio_req *req) { static int EIO_Step(eio_req *req) {
Statement *sto = (class Statement *)(req->data); Statement *sto = (class Statement *)(req->data);
sqlite3_stmt *stmt = sto->stmt_; sqlite3_stmt *stmt = sto->stmt_;
...@@ -875,7 +893,6 @@ protected: ...@@ -875,7 +893,6 @@ protected:
switch(sto->column_types_[i]) { switch(sto->column_types_[i]) {
case SQLITE_INTEGER: case SQLITE_INTEGER:
// XXX reuse this space instead of allocating every time
sto->column_data_[i] = (int *) malloc(sizeof(int)); sto->column_data_[i] = (int *) malloc(sizeof(int));
break; break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment