Параметр bind blob в узле-sqlite3
У меня есть таблица SQLite3 с первичным ключом BLOB (id
):
CREATE TABLE item (
id BLOB PRIMARY KEY,
title VARCHAR(100)
);
В моделях JavaScript первичный ключ (id
) представляется в виде строки Javascript (один байт HEX на символ):
var item = {
id: "2202D1B511604790922E5A090C81E169",
title: "foo"
}
Когда я запускаю запрос ниже, id
параметр связывается как строка. Но мне нужно, чтобы это было связано как BLOB.
db.run('INSERT INTO item (id, title) VALUES ($id, $title)', {
$id: item.id,
$title: item.title
});
Для иллюстрации приведенный выше код генерирует следующий SQL:
INSERT INTO item (id, title) VALUES ("2202D1B511604790922E5A090C81E169", "foo");
Что мне нужно, это:
INSERT INTO item (id, title) VALUES (X'2202D1B511604790922E5A090C81E169', "foo");
2 ответа
Решение
По-видимому, строку необходимо преобразовать в буфер:
db.run('INSERT INTO item (id, title) VALUES ($id, $title)', {
$id: Buffer.from(item.id, 'hex'),
$title: item.title
});
Попробуйте привести строку как блоб:
INSERT INTO item(id, title) VALUES(CAST(id_string AS BLOB), 'foo');
Также обратите внимание, что правильный способ заключать строки в кавычки в SQL - это использовать одинарные кавычки.