Ух, тяжелые выдались месяцы, но достигнут колосальный прогресс.
Начну попорядку:
1. После месяцы кропотливой работы по переписыванию ядер всех основных проектов, в SSQL появились некоторые полезные и очень приятные особенности, такие как кеш, расширенный и гибкий синтаксис, вложенные операторы...и....
ПОДДЕРЖКА XML!!!!!!!!!!
2. До v0.9b осталось совсем не много(решил не зависать не бетах, т.к уже всё почти готово, одна бета, пару релиз контидатов, пре релиз и финалку думаю можно будет выпускать в свет): переписать основные модули и по возможности добавить ещё с десяток, обновить документацию.
Теперь по порядку о новых возможностях:
1. Кеш.
Идея вынужденная, и реализована в целях попытки уменьшения времени. Кеш можно отключить, при работе с кешем на статическом сайте время потраченное на обработку запросов уменьшается до времени загрузки данных из кеша, т.к фукнции парсинга даже не подключаются.
2. Расширенный и гибкий синтаксис
Это собственно то, над чем я сижу последние несколько дней и наконец-то почти закончил.
Несколько примеров:
Код:
"LOAD 'mobile.db' FORMAT 0#1#2:'#' AS firma#id#cost AND 'config.xml' TYPE XML ENCODING 'windows-1251'"
Собственно небольшой запросик на загрузку двух файлов, один как текстовая база, другой xml.
Первое время расширенный синтаксис может казаться не удобным, покажу как можно переделать данный запрос используя новые возможности
PHP:
//Давайте возьмём один массив и напихаем туда всякой нужной нам информации
$info=array("file"=>"mobile",
"file_ext"=>"db",
"first_id_patch1"=>"FIR",
"first_id_patch2"=>"MA",
"encoding"=>"windows",
"windows"=>"windows-1251"
);
//теперь немножно переделаем запрос и подключим наш массив в 3-й необязательный аргумент:
print_r(ssql_query("LOAD {[PARAMS_ARR>>file].[PARAMS_ARR>>{file_ext}]} FORMAT 0#1#2:'#' AS (strtolower,{[PARAMS_ARR>>first_id_patch1][PARAMS_ARR>>first_id_patch2]})#id#cost AND 'config.xml' TYPE XML ENCODING [PARAMS_ARR>>[PARAMS_ARR>>encoding]]",false,$info));
В итоге на экране будет:
Код:
Array
(
[0] => Array
(
[firma] => SonyEricsson
[id] => Z800
[cost] => 9840
)
[1] => Array
(
[firma] => Nokia
[id] => N90
[cost] => 19690
)
[2] => Array
(
[firma] => Nokia
[id] => N80
[cost] => 21829
)
.....................
[999] => Array
(
[firma] => Philips
[id] => Xenium 9@9s
[cost] => 0
)
[load] => Array
(
[template] => Array
(
[0] => Array
(
[@attributes] => Array
(
[maxCnt] => 2
[useCache] =>
)
)
[1] => Array
(
[@attributes] => Array
(
[explodeCnt] => 3
[use] => 3
)
[@value] => 1
)
)
[flags] => Array
(
[format] => Array
(
[template] => Array
(
[@attributes] => Array
(
[explodeCnt] => 2
[use] => 2
)
[@value] => flags
)
[flags] => Array
(
[as] => Array
(
[@attributes] => Array
(
[useCache] =>
)
)
)
)
)
)
В конце xml, но об этом чуть позже.....
3. Вложенные операторы
Собственно внутри запроса могут быть ещё запросы, например когда нужно вставить не просто элемент массива или значение, а результат какого либо действия, например объединения массивов, то это можно сделать так:
Код:
(array_merge_recursive,~!LOAD 'mobile.db' FORMAT ALL:'#' AS firma#id#cost!~,~!LOAD 'file1.xml' TYPE XML ENCODING 'windows-1251'!~)
4. Поддержка XML
Поддерживается генерация валидного кода из xml в массив и обратная, файлы выглядят следующим образов:
Код:
Исходный файл (файл полученный из массива аналогичен)
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<units>
<load>
<template maxCnt="2" useCache="false"/>
<template explodeCnt="3" use="3">true</template>
<flags>
<format>
<template explodeCnt="2" use="2">flags</template>
<flags>
<as useCache="false"/>
</flags>
</format>
</flags>
</load>
</units>
Получившейся массив:
[load] => Array
(
[template] => Array
(
[0] => Array
(
[@attributes] => Array
(
[maxCnt] => 2
[useCache] =>
)
)
[1] => Array
(
[@attributes] => Array
(
[explodeCnt] => 3
[use] => 3
)
[@value] => 1
)
)
[flags] => Array
(
[format] => Array
(
[template] => Array
(
[@attributes] => Array
(
[explodeCnt] => 2
[use] => 2
)
[@value] => flags
)
[flags] => Array
(
[as] => Array
(
[@attributes] => Array
(
[useCache] =>
)
)
)
)
)
)
Стоит заметить что для удобства слова true,false,null заменяюццо на соответствующие константы.
Далее с таким массивом можно работать с использованием обычных SSQL функций.
Собственно пока всё что хотел сказать....остальное увидите в следующей бете...Планирую до 4-го февраля, но как получится, не обещаю.