Фильтр persistence.js с использованием оператора "in" - PullRequest
0 голосов
/ 13 декабря 2011

Я испытываю интересное поведение при использовании метода фильтра для коллекции запросов, возвращенной в persistence.js (http://persistencejs.org/)

Вот пример кода, который я запустил в отладчике:

Bookmark.all().list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root`  WHERE 1=1 []
0
1
2

Очевидно, в базе данных сохранено три Bookmark объекта, каждый с идентификатором 0, 1 и 2.

Однако, когда я пытаюсь отфильтровать объекты с помощью оператора, "in"Он начинает возвращать некоторые интересные результаты.

Bookmark.all().filter('id','in',[0,1,2]).list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root`  WHERE (1=1 AND `root`.`id` IN (?, ?, ?)) [0, 1, 2]

Результаты этого запроса ничего не значат, сам фильтр ничего не возвращает, что немного странно, учитывая, что я только что подтвердил, что в базе данных были определенные объекты, соответствующиеэти параметры. Я также попробовал простой тест на равенство.

Bookmark.all().filter('id','=',0).list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root`  WHERE (1=1 AND `root`.`id` = ?) [0]

Опять же, нет попаданий. Что, пожалуй, самое странное, если я выполню это:

Bookmark.all().filter('id','<',2).list(function(items){items.forEach(function(item){console.log(item.id)})})
undefined
SELECT `root`.id AS bookmarks_shs_id, `root`.`name` AS `bookmarks_shs_name`, `root`.`url` AS `bookmarks_shs_url` FROM `bookmarks_shs` AS `root`  WHERE (1=1 AND `root`.`id` < ?) [2]
0
1
2

Но 2 определенно неменьше 2. Я делаю что-то не так? Кажется странным, что функция фильтра не будет работать так, особенно когда она выводит соответствующие запросы SQL.

ОБНОВЛЕНИЕ похоже, что это комбинация решения @nrabinowitz.Я немного покопался, и оказалось, что по умолчанию idType, объявленный в исходном коде файла persistence.js, называется VARCHAR (32).Это объясняет нежелательное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...