28.04.2012, 09:29
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
На самом деле синтаксис очень простой, постараюсь в двух словах объяснить
Допустим у нас есть коллекция:
var db = new Collection([1, 2, 3, 4, [1, 2, 3]]);
Первый способ, обращение по прямой ссылке:
// обратимся к первому элементу вложенного массива
// функция eq выбирает элемент не по ключу, а по порядку
// минус указывает, что отсчёт идёт с конца
// знак > указывает родительское отношение
db.get('eq(-1) > 0');
Второй способ, итеративный поиск с помощью функции callback:
// выберем элементы с чётными индексами
db.get(function (el, key, data, i, length, cObj, id) {
return i % 2 === 0;
});
Третий способ схож со вторым, т.к. здесь тоже итеративный обход, но вместо прямого указания функции, мы пишем её, строчное сокращение:
// знак : обозначает, что это идёт строчное сокращение, т.е. в нашем случае оно равносильно return
db.get(':i % 2 === 0');
// логично, что мы можем написать и так
db.get(':i % 2 === 0 && el !== 2');
// или так, но здесь компилятор уже создаст 2 разных функции
// вложенность скобок не ограниченна, можно использовать операторы логики: !, &&, ||
db.get('(:i % 2 === 0) && (:el !== 2)');
// также фильтр можно заранее сохранить в стеки (как и многое другое) и обращаться по ИД
// функцию можно указывать в строчном или в явном виде, функция может содержать другие функции
db.pushFilter('odd', ':i % 2 === 0');
// используем фильтр odd и дополнительное условие
db.get('odd && (:el !== 2)');
// вызов фильтра в фильтре
db.pushFilter('filter2', 'odd && (:i % 2 === 0)');
db.get('filter2');
А последний способ - это указание контекста для фильтра, формула написания такова: контекст + >> + условие. Разумеется - это лишь малая часть возможностей, но сегодня буду писать статью на Хабр, где всё ёмкостно опишу в 1-й статье, а для подробного изучения есть мануал и дока.
|
|
28.04.2012, 09:39
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от Kolyaj
|
А как это на сервере работает? Всё в памяти хранится?
|
Сама БД крутится в оперативе, хранится в файлах на жёстком диске, принцип позаимствовал у нашего метража)
Сообщение от Gozar
|
А потом я наткнулся на такую строчку:
':el == <:i:>'
|
про :el - описал выше, а <:i:> - это короткий вызов переменной из стека. Дело в том, что для многих параметров Collection есть своё хранилище (стек), чтобы можно было инкапсулировать все данные внутри экземпляра и есть стек переменных, куда мы можем пихать всё, что угодно, например:
db.pushVariable({
CONST1: 1,
CONST2: 2
});
// выбрать все элементы, где значения элементов равны CONST1
db.get(':el === <:CONST1:>');
// или так
db.get(':el === this.getVariable("CONST1")');
// или так
db.get(function (el) {
return el === this.getVariable('CONST1');
});
Последний раз редактировалось kobezzza, 28.10.2012 в 23:59.
|
|
28.04.2012, 09:43
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от Gozar
|
Может я не нашел, но в учебнике напрочь отсутствует сгруппированное объяснение всех этих конструкций: ':el', '<:i:>'
и принцип парсера строки(как например в доке mysql) или просьба ткнуть меня носом.
Ещё у меня вопрос:
collection умеет работать с типами: "дата","время"?
|
В главах 1, 2 и 9, хотя действительно, может логично сделать про это отдельную главу.
По второму вопросу: кстати нет, и это действительно упущение, спасибо за наводку!
Последний раз редактировалось kobezzza, 28.04.2012 в 09:47.
|
|
28.04.2012, 09:44
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
Сообщение от kobezzza
|
Сама БД крутится в оперативе, хранится в файлах на жёстком диске
|
А если большая будет? Она же будет большая, иначе какая это БД.
Как часто на диск сбрасывается?
|
|
28.04.2012, 09:46
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от Kolyaj
|
А если большая будет? Она же будет большая, иначе какая это БД.
Как часто на диск сбрасывается?
|
Ну этот вариант точно не подходит на все случаи жизни, а только в конкретных, сам механизм сохранения пока в процессе, смотрю как делают всякие там MongoDB и т.д.
|
|
28.04.2012, 09:58
|
|
猫
|
|
Регистрация: 07.06.2007
Сообщений: 7,504
|
|
Спасибо за пояснение, теперь стал более понятен синтаксис. Про хранение бд, тоже интересно.
Сообщение от kobezzza
|
буду писать статью на Хабр, где всё ёмкостно опишу в 1-й статье, а для подробного изучения есть мануал и дока.
|
Я бы хотел видеть объяснение на твоем сайте, на Хабре всё потеряется со временем. jQuery мануал же не на Хабре храниться Я врядли вспомню где на хабре видел статью с описанием, а вот твой сайт найду быстрее и возможно очень много людей сделает точно также как я.
А в остальном, мне понравилось и буду следить за развитием проекта.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
|
|
28.04.2012, 09:59
|
Новичок на форуме
|
|
Регистрация: 19.02.2008
Сообщений: 9,177
|
|
|
|
28.04.2012, 10:04
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Спасибо за поддержку! В 4-й версии добавлю волшебный метод query, который на вход будет принимать SQL запрос. Интепретатор уже написан, но пока содержит много багов, будут вложенные запросы, переменные, стат функции, триггеры, хранимые процедуры и т.д. За стандарт SQL взял MySQL
|
|
02.05.2012, 15:32
|
|
Студент
|
|
Регистрация: 30.04.2012
Сообщений: 1,113
|
|
Есть SQLite в браузере
Какое то сравнение с ней можете сделать?
Dom storage наcколько я помню ограничена 5 mb
а в database storage (SQLite) ограничений не ннашел-реально храню до 100 mb
Последний раз редактировалось vadim5june, 02.05.2012 в 15:39.
|
|
02.05.2012, 17:58
|
|
Быдлокодер;)
|
|
Регистрация: 19.11.2010
Сообщений: 4,338
|
|
Сообщение от vadim5june
|
Есть SQLite в браузере
Какое то сравнение с ней можете сделать?
Dom storage наcколько я помню ограничена 5 mb
а в database storage (SQLite) ограничений не ннашел-реально храню до 100 mb
|
Ну во первых от SQL Lite отказались в пользу Indexed DB, потом это чудо есть только в новых браузерах и с JS оно взаимодействует с помощью специального внешнего АПИ, т.е. это часть окружения JS, а именно браузера.
Мою же библиотеку можно рассматривать с разных сторон: как мега-интерфейс для различных операций с объектами и массивами, либо абстрактно представить как СУБД. Тип использования, как и структура данных полностью на усмотрения разработчика. Ядро библиотеки не использует специфичных объектов окружения, поэтому без проблем будет работать как в браузере, на сервере или как дополнение к ОСи.
Насколько я изучал, то у Indexed DB асинхронный интерфейс вызова и это может быть не удобно в некоторых случаях, а у меня интерфейс полностью синхронный, что упрощает написание кода, НО я специально предусмотрел возможность создания асинхронных надстроек, так что написать расширение не составит труда.
ЗЫ: DOM storage можно расширять, а также можно без труда написать любой другой интерфейс для хранения данных.
ЗЫЗЫ: почти закончил работу над обзорной статьёй и небольшим обновлением
Последний раз редактировалось kobezzza, 02.05.2012 в 18:06.
|
|
|
|