Наконец допилил версию 3.8! Кроме исправления различных багов в новой версии появились следующие фичи:
- Появился новый метод query, который принимает на вход запрос в SQL синтаксисе;
- Добавлена поддержка querySelectorAll (нативный DOM драйвер);
- Увеличена скорость работы некоторых методов;
- Теперь Collection сжимается в "продвинутом режиме" GCC;
- Рефакторинг кода и комментариев (теперь комментарии полностью на русском языке, решил не выпендриваться );
- Теперь this в колбеках ссылается на инстанс объекта, а для ссылки на саму функцию была добавлена локальная переменная callee.
Сайт снова работает, однако пока выпилил раздел доки, т.к. хочу её улучшить (пока можно читать комменты в исходниках, тем более, что дока генерится по ним), также пока нету главы в учебнике по методу query, но он, как и дока появится уже в течении недели.
Теперь на главной страничке сайта можно поиграться с консолью
По поводу метода query: сейчас он поддерживает только запросы типа SELECT. Есть поддержка переменных (через AS), INNER/LEFT/RIGHT JOIN, GROUP BY, ORDER BY, WHERE, HAVING, TOP, LIMIT, INTO, стат функции SUM/AVG/COUNT и множество строковых функций (можно добавлять свои), а также выполнения сразу нескольких запросов в одном методе (через ; ).
Примеры:
var db = new Collection();
db.pushCollection({
users: [
{id: 1, name: 'Kobezzza', lvl: 50},
{id: 2, name: 'Onky', lvl: 55},
{id: 3, name: 'Drobila', lvl: 60},
{id: 4, name: 'Over', lvl: 70},
{id: 5, name: 'Ten', lvl: 60}
],
skils: [
{
sid: 1,
uid: 1,
value: 'moto'
},
{
sid: 2,
uid: 2,
value: 'auto'
},
{
sid: 3,
uid: 1,
value: 'dance'
}
],
buf: [
{
bid: 1,
uid: 1,
b_value: 'ice'
},
{
bid: 2,
uid: 2,
b_value: 'fire'
},
{
bid: 3,
uid: 1,
b_value: 'water'
}
]
});
db.query('SELECT * FROM `users`');
db.query('SELECT el.name, el.lvl FROM `users`');
db.query('SELECT el.name AS nm, el.lvl AS power FROM `users`');
db.query('SELECT * FROM `users`, `skils`');
db.query('SELECT * FROM `users` INNER JOIN `skils` ON id=uid INNER JOIN `buf` ON id=uid');
db.query('\
SELECT TRIM(el.name) AS name, el.lvl, SUM(el.lvl) AS sum FROM `users`\
INNER JOIN `skils` ON id=uid\
INNER JOIN `buf` ON id=uid\
GROUP BY lvl\
HAVING sum > 55\
');
db.query('SELECT * FROM `users` WHERE el.lvl > 50 LIMIT 1, 1');
db.query('SELECT TOP 1 * FROM `users` WHERE el.lvl > 50');
db.query('SELECT * INTO `test` FROM `users` WHERE el.lvl > 50');
Буду рад услышать критику и замечания, а также отвечу на любые вопросы
Спасибо за внимание.
ЗЫ: в версии 3.9 я добавлю поддержку новых хранилищ в браузере (IndexedDB, FlashStorage и т.д., чтобы была возможность хранить большие объёмы данных, вместо 5мб LocalStorage), поддержку популярных шаблонизаторов и закончу систему модульной сборки (можно будет через сайт подключать необходимые модули, чтобы не тащить лишний код).
ЗЫЗЫ: кому интересна логика работы метода query, то копать
https://github.com/kobezzza/Collecti...ter/files/csql.