Bug 1336944 - Change Sqlite.jsm to bind TypedArrays as Blobs, not common Arrays. r=Gijs

Currently an Array is bound as a blob. Unfortunately this occupies the best javascript
code path to bind an array to an IN clause in the future.
We would like Arrays to bind to IN lists, while still keeping a nice interface to bind blobs.
This patch makes Uint8Array bind to blob, while Array is left available for future use.

MozReview-Commit-ID: 7xzumBs8JTe

--HG--
extra : rebase_source : e9f63f06892d9db801951243648eddd148646426
This commit is contained in:
Marco Bonardo 2017-02-06 19:30:19 +01:00
parent 7a50a4d668
commit f8239567d1
3 changed files with 5 additions and 4 deletions

View File

@ -80,7 +80,7 @@ var crypto = new OSCrypto();
var dbConn;
function promiseSetPassword(login) {
let passwordValue = crypto.stringToArray(crypto.encryptData(login.password));
let passwordValue = new Uint8Array(crypto.stringToArray(crypto.encryptData(login.password)));
return dbConn.execute(`UPDATE logins
SET password_value = :password_value
WHERE rowid = :rowid

View File

@ -680,7 +680,8 @@ ConnectionData.prototype = Object.freeze({
}
function bindParam(obj, key, val) {
let isBlob = Array.isArray(val);
let isBlob = val && typeof val == "object" &&
val.constructor.name == "Uint8Array";
let args = [key, val].concat(isBlob ? [val.length] : []);
let methodName =
`bind${isBlob ? "Blob" : ""}By${typeof key == "number" ? "Index" : "Name"}`;

View File

@ -1103,7 +1103,7 @@ add_task(function* test_datatypes() {
null_col: null,
integer_col: 12345,
text_col: "qwerty",
blob_col: new Array(256).fill(undefined).map( (value, index) => index % 256 ),
blob_col: new Uint8Array(256).map( (value, index) => index % 256 ),
real_col: 3.14159265359,
numeric_col: true
},
@ -1111,7 +1111,7 @@ add_task(function* test_datatypes() {
null_col: null,
integer_col: -12345,
text_col: "",
blob_col: new Array(256 * 2).fill(undefined).map( (value, index) => index % 256 ),
blob_col: new Uint8Array(256 * 2).map( (value, index) => index % 256 ),
real_col: Number.NEGATIVE_INFINITY,
numeric_col: false
}