Как стать автором
Обновить

Комментарии 21

Не знаю. Мне все-таки ближе реализации функционала хранилища на подобие Ext.Data или TaffyDB. SQL на стороне клиента, на мой взгляд не нужен.
Мне тоже интереснее этот функционал на сервере. Благо на node.js он работает :)
Было бы здорово, иметь возможность рендерить скомпилированные LINQ (.net) запросы в подобный JS код. Один раз написал запрос, и пользуйся им потом и на клиенте, и в кеш сервере, и в БД.

Технически возможность есть…
По-моему синтаксис получается нереально раздутым. Понимаю, конечно, что иначе наверное никак, но каждый раз писать

OrderBy( function(item) { return item.name } )

вместо

order by name

мне бы очень быстро надоело.
Сперва

    var ItemName = function(item) { return item.name; }

Затем

    OrderBy(ItemName)
Это если сортировать по одному и тому же параметру многократно. А если всего один раз, то получается еще длиннее
можно реализовать JSON-QL
структура
Book = {id:'int', name:'string', price:'float', publish:'datetime'}
Shop = {id:'int', books:'list<Book>'}

выборка
var criteria = {books:{lt:{price:100},gt:{publish:'2010-04-01 10:20:00'}}};
select('Shop', criteria)

на обычном SQL это длинный запрос с JOIN

пример реализации
Я бы относился к этому не как к «SQL» а как к удобной библиотеке функционального стиля для работы с коллекциями. И это очень удобно!
То ли пример неудачный, то ли задумка какая-то странная. Синтаксис вывернут наизнанку: сначала Where, затем Select. И логика примера тоже подозрительная — какой смысл искать FirstName, если мы его уже знаем. На нормальном SQL, я так понимаю, это будет:
select FirstName
from sampleData
where FirstName = 'Chris'
order by 1


Во втором случае вообще замес страшный. Затрудняюсь в нормальный SQL перевести.
Имхо, стоит сделать обертку — парсер из нормального SQL в этот SQL-like, и только тогда начинать пользоваться. Тогда в приложениях можно будет писать запросы на переносимом SQL без всяких вывертов.
Упоминание SQL совершенно неуместно в этой статье, это обычные функции высшего порядка на Javascript, только и всего.
Да вот тоже подумал, что с SQL общего только названия конструкций — select, where, order и т.п. В принципе, это даже хорошо — назначение функции понятно. Но одни названия не дают права называться SQL.
На самом деле, порядок операторов LINQ не очень читаем, зато полностью соответствует порядку их выполнения базой данных. Инструкция select выполняется в самую последнюю очередь, когда все остальные параметры уже заданы.
Спасибо, это многое объясняет. По сути собирается конвейер обработки JS объекта.
Если присмотреться к исходникам проекта, то можно обнаружить, что операторы являются энергичными, а не ленивыми как в LINQ. Where сразу бежит по массиву, рожая новый, то есть совсем другой behavior по сравнению LINQ…

Кстати, где-то видел анонимные функции в JS из одного expression в такой вот записи (ну прямо лямбды), вроде даже тестировал и вроде даже где-то работало:
var sample = JSLINQ(sampleData)
.Where(function (x) x.FirstName == "Chris")
.Select(function (x) x.FirstName)
.OrderBy(function (x) x);


Если такое существует, то может кто подкинет ссылку, с каких версий, в каких бразуерах и т.п.
Существует в Firefox 3+
Насчет других браузеров — не натыкался, вроде нет.
Парсер Хабрахабра заменил «c» в слове «script», так что гиперссылка Ваша неработоспособна.
Благодарю. Жаль, что фича не распространена…
вроде в jLinq подобное имеется, можно лямбды в стиле C# писать:
.select('x => x * 2')
Оно тупо парсит текст на аргументы и тело, а потом конструирует функцию конструктором Function(args, body). Из минусов — кавычки литералов, потеря подсветки кода и невозможность замкнуться на что-либо…
А оно нужно только для простых вроде этих функций когда лень писать :)
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории