Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 28.04.2012, 09:29
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 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-й статье, а для подробного изучения есть мануал и дока.
__________________
kobezzza
code monkey
Ответить с цитированием
  #12 (permalink)  
Старый 28.04.2012, 09:39
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 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
code monkey

Последний раз редактировалось kobezzza, 28.10.2012 в 23:59.
Ответить с цитированием
  #13 (permalink)  
Старый 28.04.2012, 09:43
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Gozar Посмотреть сообщение
Может я не нашел, но в учебнике напрочь отсутствует сгруппированное объяснение всех этих конструкций: ':el', '<:i:>'
и принцип парсера строки(как например в доке mysql) или просьба ткнуть меня носом.

Ещё у меня вопрос:
collection умеет работать с типами: "дата","время"?
В главах 1, 2 и 9, хотя действительно, может логично сделать про это отдельную главу.

По второму вопросу: кстати нет, и это действительно упущение, спасибо за наводку!
__________________
kobezzza
code monkey

Последний раз редактировалось kobezzza, 28.04.2012 в 09:47.
Ответить с цитированием
  #14 (permalink)  
Старый 28.04.2012, 09:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Сообщение от kobezzza
Сама БД крутится в оперативе, хранится в файлах на жёстком диске
А если большая будет? Она же будет большая, иначе какая это БД.
Как часто на диск сбрасывается?
Ответить с цитированием
  #15 (permalink)  
Старый 28.04.2012, 09:46
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Kolyaj Посмотреть сообщение
А если большая будет? Она же будет большая, иначе какая это БД.
Как часто на диск сбрасывается?
Ну этот вариант точно не подходит на все случаи жизни, а только в конкретных, сам механизм сохранения пока в процессе, смотрю как делают всякие там MongoDB и т.д.
__________________
kobezzza
code monkey
Ответить с цитированием
  #16 (permalink)  
Старый 28.04.2012, 09:58
Аватар для Gozar
Отправить личное сообщение для Gozar Посмотреть профиль Найти все сообщения от Gozar
 
Регистрация: 07.06.2007
Сообщений: 7,504

Спасибо за пояснение, теперь стал более понятен синтаксис. Про хранение бд, тоже интересно.
Сообщение от kobezzza
буду писать статью на Хабр, где всё ёмкостно опишу в 1-й статье, а для подробного изучения есть мануал и дока.
Я бы хотел видеть объяснение на твоем сайте, на Хабре всё потеряется со временем. jQuery мануал же не на Хабре храниться Я врядли вспомню где на хабре видел статью с описанием, а вот твой сайт найду быстрее и возможно очень много людей сделает точно также как я.

А в остальном, мне понравилось и буду следить за развитием проекта.
__________________
Последний раз редактировалось Gozar, Сегодня в 24:14.
Ответить с цитированием
  #17 (permalink)  
Старый 28.04.2012, 09:59
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Можно вот ещё покопать https://github.com/sergeyksv/alfred
Ответить с цитированием
  #18 (permalink)  
Старый 28.04.2012, 10:04
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Спасибо за поддержку! В 4-й версии добавлю волшебный метод query, который на вход будет принимать SQL запрос. Интепретатор уже написан, но пока содержит много багов, будут вложенные запросы, переменные, стат функции, триггеры, хранимые процедуры и т.д. За стандарт SQL взял MySQL
__________________
kobezzza
code monkey
Ответить с цитированием
  #19 (permalink)  
Старый 02.05.2012, 15:32
Аватар для vadim5june
Студент
Отправить личное сообщение для vadim5june Посмотреть профиль Найти все сообщения от vadim5june
 
Регистрация: 30.04.2012
Сообщений: 1,113

Есть SQLite в браузере
Какое то сравнение с ней можете сделать?
Dom storage наcколько я помню ограничена 5 mb
а в database storage (SQLite) ограничений не ннашел-реально храню до 100 mb

Последний раз редактировалось vadim5june, 02.05.2012 в 15:39.
Ответить с цитированием
  #20 (permalink)  
Старый 02.05.2012, 17:58
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 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
code monkey

Последний раз редактировалось kobezzza, 02.05.2012 в 18:06.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Блокирование кнопок управления окном браузера usernew Events/DOM/Window 5 08.12.2009 09:20
Модуль для работы с модулями JSprog Ваши сайты и скрипты 29 02.09.2009 13:31
Возможности JavaScript для управления hardware-объектом AZbest Общие вопросы Javascript 19 28.10.2008 17:45