Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
N
node-sqlite3
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
俞永鹏
node-sqlite3
Commits
b72f6bcd
Commit
b72f6bcd
authored
Mar 10, 2010
by
Orlando Vazquez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
get query working now. should even be able to handle multi statement queries!
parent
88a01961
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
81 additions
and
64 deletions
+81
-64
sqlite.js
sqlite.js
+63
-64
sqlite3_bindings.cc
sqlite3_bindings.cc
+3
-0
test3.js
test3.js
+15
-0
No files found.
sqlite.js
View file @
b72f6bcd
/*
/*
Copyright (c) 2009, Eric Fredricksen <e@fredricksen.net>
Copyright (c) 2009, Eric Fredricksen <e@fredricksen.net>
Copyright (c) 2010, Orlando Vazquez <ovazquez@gmail.com>
Permission to use, copy, modify, and/or distribute this software for any
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
purpose with or without fee is hereby granted, provided that the above
...
@@ -14,31 +15,15 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
...
@@ -14,31 +15,15 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
*/
// TODO: async
var
sys
=
require
(
"sys"
);
var
puts
=
sys
.
puts
;
var
sqlite
=
require
(
"./sqlite3_bindings"
);
var
bindings
=
require
(
"./sqlite3_bindings"
);
var
Database
=
exports
.
Database
=
sqlite
.
Database
;
process
.
mixin
(
GLOBAL
,
bindings
);
process
.
mixin
(
exports
,
bindings
);
Database
.
prototype
.
query
=
function
(
sql
,
bindings
,
queryCallback
)
{
var
self
=
this
;
// Conform somewhat to http://dev.w3.org/html5/webdatabase/#sql
exports
.
SQLITE_DELETE
=
9
;
exports
.
SQLITE_INSERT
=
18
;
exports
.
SQLITE_UPDATE
=
23
;
exports
.
openDatabaseSync
=
function
(
name
,
version
,
displayName
,
estimatedSize
,
creationCallback
)
{
// 2nd-4th parameters are ignored
var
db
=
new
DatabaseSync
(
name
);
if
(
creationCallback
)
creationCallback
(
db
);
return
db
;
}
DatabaseSync
.
prototype
.
query
=
function
(
sql
,
bindings
,
callback
)
{
// TODO: error callback
if
(
typeof
(
bindings
)
==
"function"
)
{
if
(
typeof
(
bindings
)
==
"function"
)
{
var
tmp
=
bindings
;
var
tmp
=
bindings
;
bindings
=
callback
;
bindings
=
callback
;
...
@@ -47,58 +32,73 @@ DatabaseSync.prototype.query = function (sql, bindings, callback) {
...
@@ -47,58 +32,73 @@ DatabaseSync.prototype.query = function (sql, bindings, callback) {
var
all
=
[];
var
all
=
[];
var
stmt
=
this
.
prepare
(
sql
);
// Iterate over the list of bindings. Since we can't use something as
while
(
stmt
)
{
// simple as a for or while loop, we'll use the event loop
if
(
bindings
)
{
function
doBindingsByIndex
(
statement
,
bindings
,
queryCallback
,
startIndex
)
{
if
(
Object
.
prototype
.
toString
.
call
(
bindings
)
===
"[object Array]"
)
{
(
function
(
statement
,
bindings
,
startIndex
)
{
for
(
var
i
=
0
;
i
<
stmt
.
bindParameterCount
();
++
i
)
var
innerFunction
=
arguments
.
callee
;
stmt
.
bind
(
i
+
1
,
bindings
.
shift
());
if
(
!
bindings
.
length
)
{
}
else
{
process
.
nextTick
(
function
()
{
for
(
var
key
in
bindings
)
queryCallback
(
statement
);
if
(
bindings
.
hasOwnProperty
(
key
))
});
stmt
.
bind
(
key
,
bindings
[
key
]);
return
;
}
}
}
var
rows
=
[];
startIndex
=
startIndex
||
1
;
var
value
=
bindings
.
shift
();
while
(
true
)
{
puts
(
"setting index "
+
startIndex
+
" to "
+
value
);
var
row
=
stmt
.
step
();
process
.
nextTick
(
function
()
{
if
(
!
row
)
break
;
statement
.
bind
(
startIndex
,
value
,
function
()
{
rows
.
push
(
row
);
innerFunction
(
statement
,
bindings
,
startIndex
+
1
);
});
});
})(
statement
,
bindings
,
startIndex
);
}
}
rows
.
rowsAffected
=
this
.
changes
();
function
queryDone
(
statement
,
rows
)
{
rows
.
insertId
=
this
.
lastInsertRowid
();
if
(
statement
.
tail
)
{
puts
(
"omg it has a tail"
);
all
.
push
(
rows
);
self
.
prepare
(
statement
.
tail
,
onPrepare
);
}
queryCallback
(
undefined
,
rows
);
}
stmt
.
finalize
();
function
doStep
(
statement
)
{
stmt
=
this
.
prepare
(
stmt
.
tail
);
var
rows
=
[];
(
function
()
{
var
innerFunction
=
arguments
.
callee
;
statement
.
step
(
function
(
error
,
row
)
{
if
(
error
)
throw
error
;
if
(
!
row
)
{
// rows.rowsAffected = this.changes();
// rows.insertId = this.lastInsertRowid();
process
.
nextTick
(
function
()
{
queryDone
(
statement
,
rows
);
});
return
;
}
rows
.
push
(
row
);
puts
(
"added "
+
inspect
(
row
));
process
.
nextTick
(
innerFunction
);
});
})();
}
}
if
(
all
.
length
==
0
)
{
function
onPrepare
(
error
,
statement
)
{
var
result
=
null
;
puts
(
"prep args "
+
inspect
(
arguments
))
;
}
else
{
if
(
bindings
)
{
for
(
var
i
=
0
;
i
<
all
.
length
;
++
i
)
{
if
(
Object
.
prototype
.
toString
.
call
(
bindings
)
===
"[object Array]"
)
{
var
resultset
=
all
[
i
]
;
doBindingsByIndex
(
statement
,
bindings
,
doStep
)
;
resultset
.
all
=
all
;
}
resultset
.
rows
=
{
item
:
function
(
index
)
{
return
resultset
[
index
];
},
else
{
length
:
resultset
.
length
};
// TODO index by keys
}
}
var
result
=
all
[
0
];
}
}
if
(
typeof
(
callback
)
==
"function"
)
{
callback
.
apply
(
result
,
all
);
}
}
return
result
;
}
// TODO: void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
// TODO: void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
this
.
prepare
(
sql
,
onPrepare
);
}
function
SQLTransactionSync
(
db
,
txCallback
,
errCallback
,
successCallback
)
{
function
SQLTransactionSync
(
db
,
txCallback
,
errCallback
,
successCallback
)
{
this
.
database
=
db
;
this
.
database
=
db
;
...
@@ -133,11 +133,10 @@ function SQLTransactionSync(db, txCallback, errCallback, successCallback) {
...
@@ -133,11 +133,10 @@ function SQLTransactionSync(db, txCallback, errCallback, successCallback) {
}
}
Database
Sync
.
prototype
.
transaction
=
function
(
txCallback
,
errCallback
,
Database
.
prototype
.
transaction
=
function
(
txCallback
,
errCallback
,
successCallback
)
{
successCallback
)
{
var
tx
=
new
SQLTransactionSync
(
this
,
txCallback
,
var
tx
=
new
SQLTransactionSync
(
this
,
txCallback
,
errCallback
,
successCallback
);
errCallback
,
successCallback
);
}
}
// TODO: readTransaction()
// TODO: readTransaction()
sqlite3_bindings.cc
View file @
b72f6bcd
...
@@ -878,6 +878,9 @@ protected:
...
@@ -878,6 +878,9 @@ protected:
}
}
}
}
}
}
else
if
(
SQLITE_DONE
)
{
// no more results
}
else
{
else
{
step_req
->
error_msg
=
(
char
*
)
step_req
->
error_msg
=
(
char
*
)
sqlite3_errmsg
(
sqlite3_db_handle
(
*
sto
));
sqlite3_errmsg
(
sqlite3_db_handle
(
*
sto
));
...
...
test3.js
0 → 100644
View file @
b72f6bcd
var
fs
=
require
(
"fs"
);
process
.
mixin
(
GLOBAL
,
require
(
"assert"
));
process
.
mixin
(
GLOBAL
,
require
(
"sys"
));
var
sqlite
=
require
(
"./sqlite"
);
var
db
=
new
sqlite
.
Database
();
db
.
open
(
"mydatabase.db"
,
function
()
{
puts
(
"opened the db"
);
db
.
query
(
"SELECT * FROM foo WHERE baz < ? OR baz > ?; SELECT 1;"
,
[
6
,
3
],
function
(
error
,
result
)
{
puts
(
inspect
(
arguments
));
puts
(
"query callback "
+
inspect
(
result
));
});
});
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment