From ccc2c08ec0413819b71464f4c536a6e295c0c6fe Mon Sep 17 00:00:00 2001 From: rbochenski Date: Tue, 8 Nov 2011 14:05:10 +0100 Subject: [PATCH 1/4] Nodejs 0.6.x Fixing sources to work with nodes 0.6.x --- node_modules/extend/index.js | 81 ++++++++++++++++ node_modules/extend/package.json | 18 ++++ src/database.cc | 29 +++--- src/database.h | 13 +-- src/events.cc | 29 ++++++ src/events.h | 21 +++++ src/node_defs.h | 155 +++++++++++++++++++++++++++++++ src/sqlite3_bindings.cc | 2 +- src/statement.cc | 24 ++--- src/statement.h | 12 ++- wscript | 2 +- 11 files changed, 340 insertions(+), 46 deletions(-) create mode 100644 node_modules/extend/index.js create mode 100644 node_modules/extend/package.json create mode 100644 src/events.cc create mode 100644 src/events.h create mode 100644 src/node_defs.h diff --git a/node_modules/extend/index.js b/node_modules/extend/index.js new file mode 100644 index 0000000..60be4b0 --- /dev/null +++ b/node_modules/extend/index.js @@ -0,0 +1,81 @@ +function isPlainObject(obj) { + if (!obj || toString.call(obj) !== '[object Object]' || obj.nodeType || obj.setInterval) + return false; + + var has_own_constructor = hasOwnProperty.call(obj, 'constructor'); + var has_is_property_of_method = hasOwnProperty.call(obj.constructor.prototype, 'isPrototypeOf'); + // Not own constructor property must be Object + if (obj.constructor && !has_own_constructor && !has_is_property_of_method) + return false; + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own. + var key; + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); +}; + +module.exports = function () { + var options, name, src, copy, copyIsArray, clone, + target = arguments[0] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + target = arguments[1] || {}; + // skip the boolean and the target + i = 2; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && typeof target !== "function") { + target = {}; + } + + // extend jQuery itself if only one argument is passed + if ( length === i ) { + target = this; + --i; + } + + for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values + if ( (options = arguments[ i ]) != null ) { + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( isPlainObject(copy) || (copyIsArray = Array.isArray(copy)) ) ) { + if ( copyIsArray ) { + copyIsArray = false; + clone = src && Array.isArray(src) ? src : []; + + } else { + clone = src && isPlainObject(src) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; diff --git a/node_modules/extend/package.json b/node_modules/extend/package.json new file mode 100644 index 0000000..ce4b330 --- /dev/null +++ b/node_modules/extend/package.json @@ -0,0 +1,18 @@ +{ + "name": "extend", + "version": "1.0.0", + "description": "Port of jQuery.extend for Node.js", + "main": "./index", + "keywords": [ + "extend", + "clone", + "merge" + ], + + "author": "Stefan Thomas (http://www.justmoon.net)", + + "repository" : { + "type" : "git", + "url" : "https://github.com/justmoon/node-extend.git" + } +} diff --git a/src/database.cc b/src/database.cc index b48c2ed..486cc2c 100644 --- a/src/database.cc +++ b/src/database.cc @@ -17,7 +17,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include #include -#include +//#include #include "sqlite3_bindings.h" #include "database.h" @@ -32,7 +32,7 @@ void Database::Init(v8::Handle target) { Local t = FunctionTemplate::New(New); constructor_template = Persistent::New(t); - constructor_template->Inherit(EventEmitter::constructor_template); +// constructor_template->Inherit(EventEmitter::constructor_template); constructor_template->InstanceTemplate()->SetInternalFieldCount(1); constructor_template->SetClassName(String::NewSymbol("Database")); @@ -59,6 +59,7 @@ Handle Database::New(const Arguments& args) { return args.This(); } + int Database::EIO_AfterOpen(eio_req *req) { ev_unref(EV_DEFAULT_UC); HandleScope scope; @@ -80,15 +81,16 @@ int Database::EIO_AfterOpen(eio_req *req) { FatalException(try_catch); } - open_req->dbo->Emit(String::New("ready"), 0, NULL); + //v8::Local event(String::New("ready")); + open_req->dbo->Emit("ready", 0, NULL); open_req->cb.Dispose(); free(open_req); - + return 0; } -int Database::EIO_Open(eio_req *req) { +void Database::EIO_Open(eio_req *req) { struct open_request *open_req = (struct open_request *)(req->data); sqlite3 **dbptr = open_req->dbo->GetDBPtr(); @@ -109,8 +111,6 @@ int Database::EIO_Open(eio_req *req) { // sqlite3_commit_hook(db, CommitHook, open_req->dbo); // sqlite3_rollback_hook(db, RollbackHook, open_req->dbo); // sqlite3_update_hook(db, UpdateHook, open_req->dbo); - - return 0; } Handle Database::Open(const Arguments& args) { @@ -172,12 +172,11 @@ int Database::EIO_AfterClose(eio_req *req) { return 0; } -int Database::EIO_Close(eio_req *req) { +void Database::EIO_Close(eio_req *req) { struct close_request *close_req = (struct close_request *)(req->data); Database* dbo = close_req->dbo; req->result = sqlite3_close(dbo->db_); dbo->db_ = NULL; - return 0; } Handle Database::Close(const Arguments& args) { @@ -299,11 +298,11 @@ int Database::EIO_AfterPrepareAndStep(eio_req *req) { prep_req->cb.Dispose(); free(prep_req); - + return 0; } -int Database::EIO_PrepareAndStep(eio_req *req) { +void Database::EIO_PrepareAndStep(eio_req *req) { struct prepare_request *prep_req = (struct prepare_request *)(req->data); prep_req->stmt = NULL; @@ -340,8 +339,6 @@ int Database::EIO_PrepareAndStep(eio_req *req) { prep_req->lastInsertId = sqlite3_last_insert_rowid(db); if (prep_req->mode & EXEC_AFFECTED_ROWS) prep_req->affectedRows = sqlite3_changes(db); - - return 0; } Handle Database::PrepareAndStep(const Arguments& args) { @@ -416,10 +413,10 @@ int Database::EIO_AfterPrepare(eio_req *req) { prep_req->cb.Dispose(); free(prep_req); - + return 0; } -int Database::EIO_Prepare(eio_req *req) { +void Database::EIO_Prepare(eio_req *req) { struct prepare_request *prep_req = (struct prepare_request *)(req->data); prep_req->stmt = NULL; @@ -439,8 +436,6 @@ int Database::EIO_Prepare(eio_req *req) { prep_req->lastInsertId = sqlite3_last_insert_rowid(db); if (prep_req->mode & EXEC_AFFECTED_ROWS) prep_req->affectedRows = sqlite3_changes(db); - - return 0; } // Statement#prepare(sql, [ options ,] callback); diff --git a/src/database.h b/src/database.h index 9aa4ff3..a2a6bde 100644 --- a/src/database.h +++ b/src/database.h @@ -19,12 +19,13 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include - +#include +#include "events.h" #include using namespace v8; using namespace node; +using namespace node_db; class Database : public EventEmitter { public: @@ -42,20 +43,20 @@ class Database : public EventEmitter { static Handle New(const Arguments& args); static int EIO_AfterOpen(eio_req *req); - static int EIO_Open(eio_req *req); + static void EIO_Open(eio_req *req); static Handle Open(const Arguments& args); static int EIO_AfterClose(eio_req *req); - static int EIO_Close(eio_req *req); + static void EIO_Close(eio_req *req); static Handle Close(const Arguments& args); // static Handle LastInsertRowid(const Arguments& args); static int EIO_AfterPrepareAndStep(eio_req *req); - static int EIO_PrepareAndStep(eio_req *req); + static void EIO_PrepareAndStep(eio_req *req); static Handle PrepareAndStep(const Arguments& args); static int EIO_AfterPrepare(eio_req *req); - static int EIO_Prepare(eio_req *req); + static void EIO_Prepare(eio_req *req); static Handle Prepare(const Arguments& args); // Return a pointer to the Sqlite handle pointer so that EIO_Open can diff --git a/src/events.cc b/src/events.cc new file mode 100644 index 0000000..d77796f --- /dev/null +++ b/src/events.cc @@ -0,0 +1,29 @@ +// Copyright 2011 Mariano Iglesias +#include "./events.h" + +node_db::EventEmitter::EventEmitter() : node::ObjectWrap() { +} + +void node_db::EventEmitter::Init() { +} + +bool node_db::EventEmitter::Emit(const char* event, int argc, v8::Handle argv[]) { + v8::HandleScope scope; + + int nArgc = argc + 1; + v8::Handle* nArgv = new v8::Handle[nArgc]; + if (nArgv == NULL) { + return false; + } + + nArgv[0] = v8::String::New(event); + for (int i=0; i < argc; i++) { + nArgv[i + 1] = argv[i]; + } + + node::MakeCallback(this->handle_, "emit", nArgc, nArgv); + + delete [] nArgv; + + return true; +} diff --git a/src/events.h b/src/events.h new file mode 100644 index 0000000..cbe7be3 --- /dev/null +++ b/src/events.h @@ -0,0 +1,21 @@ +// Copyright 2011 Mariano Iglesias +#ifndef EVENTS_H_ +#define EVENTS_H_ + +#include +#include +#include +#include "./node_defs.h" + +namespace node_db { +class EventEmitter : public node::ObjectWrap { + public: + static void Init(); + + protected: + EventEmitter(); + bool Emit(const char* event, int argc, v8::Handle argv[]); +}; +} + +#endif // BINDING_H_ diff --git a/src/node_defs.h b/src/node_defs.h new file mode 100644 index 0000000..0f7c6bb --- /dev/null +++ b/src/node_defs.h @@ -0,0 +1,155 @@ +// Copyright 2011 Mariano Iglesias +#ifndef NODE_DEFS_H_ +#define NODE_DEFS_H_ + +#include + +#define NODE_CONSTANT(constant) v8::Integer::New(constant) + +#define NODE_ADD_PROTOTYPE_METHOD(templ, name, callback) \ +do { \ + v8::Local __callback##_SIG = v8::Signature::New(templ); \ + v8::Local __callback##_TEM = \ + v8::FunctionTemplate::New(callback, v8::Handle(), \ + __callback##_SIG); \ + templ->PrototypeTemplate()->Set(v8::String::NewSymbol(name), \ + __callback##_TEM); \ +} while (0) + +#define NODE_ADD_CONSTANT(target, name, constant) \ + (target)->Set(v8::String::NewSymbol(#name), \ + v8::Integer::New(constant), \ + static_cast(v8::ReadOnly|v8::DontDelete)) + +#define THROW_EXCEPTION(message) \ + return v8::ThrowException(v8::Exception::Error(v8::String::New(message))); + +#define ARG_CHECK_OPTIONAL_STRING(I, VAR) \ + if (args.Length() > I && !args[I]->IsString()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid string") \ + } + +#define ARG_CHECK_STRING(I, VAR) \ + if (args.Length() <= I) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \ + } else if (!args[I]->IsString()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid string") \ + } + +#define ARG_CHECK_OPTIONAL_BOOL(I, VAR) \ + if (args.Length() > I && !args[I]->IsBoolean()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid boolean") \ + } + +#define ARG_CHECK_BOOL(I, VAR) \ + if (args.Length() <= I) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \ + } else if (!args[I]->IsBoolean()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid boolean") \ + } + +#define ARG_CHECK_OPTIONAL_UINT32(I, VAR) \ + if (args.Length() > I && !args[I]->IsUint32()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid UINT32") \ + } + +#define ARG_CHECK_UINT32(I, VAR) \ + if (args.Length() <= I) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \ + } else if (!args[I]->IsUint32()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid UINT32") \ + } + +#define ARG_CHECK_OPTIONAL_OBJECT(I, VAR) \ + if (args.Length() > I && (!args[I]->IsObject() || args[I]->IsFunction() || args[I]->IsUndefined())) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid object") \ + } + +#define ARG_CHECK_OBJECT(I, VAR) \ + if (args.Length() <= I) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \ + } else if (!args[I]->IsObject() || args[I]->IsFunction() || args[I]->IsArray() || args[I]->IsDate() || args[I]->IsUndefined()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid object") \ + } + +#define ARG_CHECK_OPTIONAL_FUNCTION(I, VAR) \ + if (args.Length() > I && !args[I]->IsFunction()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid function") \ + } + +#define ARG_CHECK_FUNCTION(I, VAR) \ + if (args.Length() <= I) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \ + } else if (!args[I]->IsFunction()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid function") \ + } + +#define ARG_CHECK_OPTIONAL_ARRAY(I, VAR) \ + if (args.Length() > I && !args[I]->IsArray()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid array") \ + } + +#define ARG_CHECK_ARRAY(I, VAR) \ + if (args.Length() <= I) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" is mandatory") \ + } else if (!args[I]->IsArray()) { \ + THROW_EXCEPTION("Argument \"" #VAR "\" must be a valid array") \ + } + +#define ARG_CHECK_OBJECT_ATTR_STRING(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (!VAR->Has(KEY##_##key)) { \ + THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \ + } else if (!VAR->Get(KEY##_##key)->IsString()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid string") \ + } + +#define ARG_CHECK_OBJECT_ATTR_OPTIONAL_STRING(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsString()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid string") \ + } + +#define ARG_CHECK_OBJECT_ATTR_UINT32(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (!VAR->Has(KEY##_##key)) { \ + THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \ + } else if (!VAR->Get(KEY##_##key)->IsUint32()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid UINT32") \ + } + +#define ARG_CHECK_OBJECT_ATTR_OPTIONAL_UINT32(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsUint32()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid UINT32") \ + } + +#define ARG_CHECK_OBJECT_ATTR_BOOL(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (!VAR->Has(KEY##_##key)) { \ + THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \ + } else if (!VAR->Get(KEY##_##key)->IsBoolean()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid boolean") \ + } + +#define ARG_CHECK_OBJECT_ATTR_OPTIONAL_BOOL(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsBoolean()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid boolean") \ + } + +#define ARG_CHECK_OBJECT_ATTR_FUNCTION(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (!VAR->Has(KEY##_##key)) { \ + THROW_EXCEPTION("Option \"" #KEY "\" is mandatory") \ + } else if (!VAR->Get(KEY##_##key)->IsFunction()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid function") \ + } + +#define ARG_CHECK_OBJECT_ATTR_OPTIONAL_FUNCTION(VAR, KEY) \ + v8::Local KEY##_##key = v8::String::New("" #KEY ""); \ + if (VAR->Has(KEY##_##key) && !VAR->Get(KEY##_##key)->IsFunction()) { \ + THROW_EXCEPTION("Option \"" #KEY "\" must be a valid function") \ + } + +#endif // NODE_DEFS_H_ diff --git a/src/sqlite3_bindings.cc b/src/sqlite3_bindings.cc index 16de66b..84d6648 100644 --- a/src/sqlite3_bindings.cc +++ b/src/sqlite3_bindings.cc @@ -16,7 +16,7 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include +//#include #include "sqlite3_bindings.h" #include "database.h" diff --git a/src/statement.cc b/src/statement.cc index 83b3c34..4e55e0e 100644 --- a/src/statement.cc +++ b/src/statement.cc @@ -33,7 +33,6 @@ void Statement::Init(v8::Handle target) { Local t = FunctionTemplate::New(New); constructor_template = Persistent::New(t); - constructor_template->Inherit(EventEmitter::constructor_template); constructor_template->InstanceTemplate()->SetInternalFieldCount(1); constructor_template->SetClassName(String::NewSymbol("Statement")); @@ -63,6 +62,7 @@ Handle Statement::New(const Arguments& args) { return args.This(); } + int Statement::EIO_AfterBindArray(eio_req *req) { ev_unref(EV_DEFAULT_UC); @@ -106,7 +106,7 @@ int Statement::EIO_AfterBindArray(eio_req *req) { return 0; } -int Statement::EIO_BindArray(eio_req *req) { +void Statement::EIO_BindArray(eio_req *req) { struct bind_request *bind_req = (struct bind_request *)(req->data); Statement *sto = bind_req->sto; int rc(0); @@ -132,7 +132,7 @@ int Statement::EIO_BindArray(eio_req *req) { if (!index) { req->result = SQLITE_MISMATCH; - return 0; + return; } int rc = 0; @@ -157,10 +157,8 @@ int Statement::EIO_BindArray(eio_req *req) { if (rc) { req->result = rc; - return 0; } - return 0; } Handle Statement::BindObject(const Arguments& args) { @@ -429,14 +427,12 @@ int Statement::EIO_AfterFinalize(eio_req *req) { return 0; } -int Statement::EIO_Finalize(eio_req *req) { +void Statement::EIO_Finalize(eio_req *req) { Statement *sto = (class Statement *)(req->data); assert(sto->stmt_); req->result = sqlite3_finalize(sto->stmt_); sto->stmt_ = NULL; - - return 0; } Handle Statement::Finalize(const Arguments& args) { @@ -581,7 +577,7 @@ void Statement::InitializeColumns(void) { } } -int Statement::EIO_Step(eio_req *req) { +void Statement::EIO_Step(eio_req *req) { Statement *sto = (class Statement *)(req->data); sqlite3_stmt *stmt = sto->stmt_; assert(stmt); @@ -670,8 +666,6 @@ int Statement::EIO_Step(eio_req *req) { sto->error_ = true; sto->cells = NULL; } - - return 0; } Handle Statement::Step(const Arguments& args) { @@ -812,7 +806,7 @@ int Statement::EIO_AfterFetchAll(eio_req *req) { return 0; } -int Statement::EIO_FetchAll(eio_req *req) { +void Statement::EIO_FetchAll(eio_req *req) { struct fetchall_request *fetchall_req = (struct fetchall_request *)(req->data); @@ -834,7 +828,7 @@ int Statement::EIO_FetchAll(eio_req *req) { req->result = -1; fetchall_req->rows = NULL; fetchall_req->error = (char *) mpool_strerror(ret); - return 0; + return; } } else { @@ -942,13 +936,11 @@ int Statement::EIO_FetchAll(eio_req *req) { fetchall_req->error = (char *) mpool_strerror(ret); } req->result = -1; - return 0; + return; } req->result = 0; fetchall_req->rows = head; - - return 0; } Handle Statement::FetchAll(const Arguments& args) { diff --git a/src/statement.h b/src/statement.h index e9f99aa..25d0c28 100644 --- a/src/statement.h +++ b/src/statement.h @@ -19,9 +19,10 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. #include #include -#include +#include #include #include +#include "events.h" extern "C" { #include @@ -29,6 +30,7 @@ extern "C" { using namespace v8; using namespace node; +using namespace node_db; struct cell_node { void *value; @@ -72,22 +74,22 @@ class Statement : public EventEmitter { static Handle Bind(const Arguments &args); static Handle BindObject(const Arguments &args); static Handle BindArray(const Arguments &args); - static int EIO_BindArray(eio_req *req); + static void EIO_BindArray(eio_req *req); static int EIO_AfterBindArray(eio_req *req); static int EIO_AfterFinalize(eio_req *req); - static int EIO_Finalize(eio_req *req); + static void EIO_Finalize(eio_req *req); static Handle Finalize(const Arguments &args); static Handle Reset(const Arguments &args); static Handle ClearBindings(const Arguments &args); static int EIO_AfterStep(eio_req *req); - static int EIO_Step(eio_req *req); + static void EIO_Step(eio_req *req); static Handle Step(const Arguments &args); static int EIO_AfterFetchAll(eio_req *req); - static int EIO_FetchAll(eio_req *req); + static void EIO_FetchAll(eio_req *req); static Handle FetchAll(const Arguments &args); void InitializeColumns(void); diff --git a/wscript b/wscript index 774d24e..29e6b15 100644 --- a/wscript +++ b/wscript @@ -36,7 +36,7 @@ def build(bld): obj = bld.new_task_gen("cxx", "shlib", "node_addon") obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", "-D_LARGEFILE_SOURCE", "-Wall", "-I../deps/sqlite"] obj.target = "sqlite3_bindings" - obj.source = "src/sqlite3_bindings.cc src/database.cc src/statement.cc" + obj.source = "src/sqlite3_bindings.cc src/database.cc src/statement.cc src/events.cc" obj.uselib = "MPOOL" obj.uselib_local = "sqlite3" From e01b1e1b788be88bd29a919380f88ed3fa71d38c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Boche=C5=84ski?= Date: Tue, 8 Nov 2011 14:46:25 +0100 Subject: [PATCH 2/4] Fixing possible coredump. --- sqlite.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sqlite.js b/sqlite.js index cb11df7..e391d67 100644 --- a/sqlite.js +++ b/sqlite.js @@ -17,6 +17,8 @@ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. var sys = require("sys"); var sqlite = require("./sqlite3_bindings"); +var event = require('events'); +var extend = require ('extend'); var Database = exports.Database = function () { var self = this; @@ -32,6 +34,8 @@ Database.prototype = { constructor: Database, }; +extend (true, Database.prototype, new event.EventEmitter ()); + Database.prototype.query = function(sql, bindings, rowCallback) { var self = this; From 675d965188afe41d6b8d884e9f47c2f71efd49de Mon Sep 17 00:00:00 2001 From: Jimmy Bergman Date: Thu, 2 Feb 2012 11:30:31 +0100 Subject: [PATCH 3/4] Make it work after npm install without warning. * Add deps/mpool-2.1.0 build output to .gitignore * Remove unused reference to deprecated sys module * Create sqlite3_bindings symlink in build --- .gitignore | 1 + sqlite.js | 1 - wscript | 2 ++ 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 2ad9094..9daa2a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ build/ .lock-wscript sqlite3_bindings.node +deps/mpool-2.1.0/* diff --git a/sqlite.js b/sqlite.js index e391d67..80582f0 100644 --- a/sqlite.js +++ b/sqlite.js @@ -15,7 +15,6 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -var sys = require("sys"); var sqlite = require("./sqlite3_bindings"); var event = require('events'); var extend = require ('extend'); diff --git a/wscript b/wscript index 29e6b15..a5c24b3 100644 --- a/wscript +++ b/wscript @@ -40,6 +40,8 @@ def build(bld): obj.uselib = "MPOOL" obj.uselib_local = "sqlite3" + system("ln -s build/Release/sqlite3_bindings.node .") + t = 'sqlite3_bindings.node' def shutdown(): # HACK to get binding.node out of build directory. From d14ef66ed56eca6220bef7c249e38d666d27daeb Mon Sep 17 00:00:00 2001 From: Jimmy Bergman Date: Thu, 2 Feb 2012 11:43:08 +0100 Subject: [PATCH 4/4] Fix .gitignore so that it only ignores build output in mpool dependency --- .gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 9daa2a1..4bd5a17 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ build/ .lock-wscript sqlite3_bindings.node -deps/mpool-2.1.0/* +deps/mpool-2.1.0/libmpool.a +deps/mpool-2.1.0/mpool.o