XBSDB - Кросс-браузерная библиотека баз данных в JavaScript


Содержание


Чем является XBSDB и чем не является

XBSDB - это инструмент для работы с массивами данных в вашем JavaScript коде как с SQL-данными.

XBSDB хранит, упорядочивает и выбирает данные в ваших скриптах. Вы можете вставлять, удалять, обновлять и выбирать записи, вы можете использовать индексы чтобы сделать выборку быстрее. Основанные на JSON методы позволяют подготовить данные на одной стороне (браузер или веб-сервер) и загрузить их на другой (веб-сервер или браузер).

Использование XBSDB позволяет переместить некоторые операции БД с веб-сервера на клиентскую машину и сократить число запросов к веб-серверу.

Главная особенность XBSDB - это скроость операции 'select' на сложных WHERE-условиях. XBSDB разбирает WHERE-выражение в дерево простых условий всего 1 раз, затем это дерево используется для сокращения числа записей для обработки по каждому условию. Индексы также помогают сократить число обрабатываемых записей.

XBSDB состоит из 2-х частей - для браузера и для веб-сервера. Браузерная часть - это ядро библиотеки, веб-серверная лишь готовит данные для обмена. Браузерная часть написана на JavaScript, веб-серверная представленв в 2-х эквивалентных вариантах на Perl и PHP.

XBSDB - не SQL-сервер, так что она вообще не тратит время на разбор SQL-запросов. Создание парсера SQL-запросов не было целью разработки.


Системные требования

JavaScript - версия 1.5 и выше.
PHP - версия 5.x.x и выше, функции 'json_decode', 'json_encode'.
Perl - версия 5.x.x и выше, модуль 'JSON'.


Как использовать

Три базовых шага..

Шаг 1.

Подготовить данные на стороне веб-сервера, упаковать в JSON-строку. Это делается объектом класса XBSDB (ессно :-) на стороне веб-сервера. Оба класса в Perl и PHP функционально эквивалентны, имена методов одинаковы.

<?php
// простой PHP код использования XBSDB, обработка ошибок опущена для читабельности

require_once '/ваш/путь/к/lib-php/XBSDB.php';

$goods_name = 'shop_goods';

$goods_structure = array(
array("id","number"),
array("category","string"),
array("name","string")
);

$goods_data = array();
//... поместить данные (от SQL-сервера, например) в $goods_data ...

// определить буферную БД, она используется лишь для создания правильного объекта или JSON-строки для стороны браузера
$DB1 = new XBSDB();

// создать таблицу в буферной БД
$DB1->setTableStructure($goods_name, $goods_structure);

// наполнить её данными
$DB1->setTableData($goods_name, $goods_data);

// и упаковать в JSON-строку, готовую к передаче в браузерную часть библиотеки
// есть 2 пути для этого
// 1-й - использовать XBSDB метод toJSON, он возвращает JSON-строку
$goods_json = $DB1->toJSON($goods_name);
// 2-й - использовать XBSDB метод toHash, он возвращает ассоциативный массив (хэш)
$goods_hash = $DB1->toHash($goods_name);
// и затем упаковать этот хэш в JSON-строку как вам угодно - встроенными функциями, другими библиотеками и т.д.
$goods_json = your_favorite_JSON_function($goods_hash);

// теперь у вас есть данные, подготовленные как JSON-строка $goods_json для использования ядром библиотеки на сторне браузера
?>

Запомните: XBSDB не предоставляет никаких средств для приёма\передачи данных, она лишь готовит их. Вы можете использовать ваши любимые методы для приёма\передачи строк (или даже хэшей).

Шаг 2.

Загрузить принятые данные в БД на стороне браузера, как-то их обработать, создать результат и подготовить к отправке на сервер. Функциональность ядра доступна через единственный публичный JavaScript класс XBSDB (опять :-) Каждый объект этого класса содержит одну БД. Он может создавать\удалять таблицы, вставлять\удалять\изменять\выбирать записи, создавать\удалать индексы, загружать и выгружать таблицы и свю БД. Он не может изменять структуру таблиц. Таблицы не связаны, и множественные операции выборки недоступны (пока).

<!--
простой JavaScript код использования XBSDB, обработка ошибок опущена для читабельности
-->
<SCRIPT type="text/javascript" language="JavaScript1.5" src="/lib-js/xbseparser.js"></SCRIPT>
<SCRIPT type="text/javascript" language="JavaScript1.5" src="/lib-js/xbskey.js"></SCRIPT>
<SCRIPT type="text/javascript" language="JavaScript1.5" src="/lib-js/xbstable.js"></SCRIPT>
<SCRIPT type="text/javascript" language="JavaScript1.5" src="/lib-js/xbsdb.js"></SCRIPT>
<SCRIPT type="text/javascript" language="JavaScript1.5" src="/lib-js/xbsdb_en.js"></SCRIPT>
<SCRIPT type="text/javascript" language="JavaScript1.5">

// создать объект БД
var DB1 = new XBSDB('en');

// предположим, что содержимое таблицы 'shop_goods' находится в $goods_data как JSON-строка
DB1.LoadTable('shop_goods', $goods_data);

// создать другую таблицу
var aCartStructure = [
['goods_id','number'],
['goods_quantity','number']
];
DB1.CreateTable('shop_cart', aCartStructure);

// функции для работы со списком товаров

function GoodsShowByCategSorted($cat){
return DB1.Select('shop_goods', ['name'], "category = '" + $cat + "'", 'name'); // возвращает массив названий товаров одной категории сортированный по названию
}

function GoodsSelectAllSortedOnce(){
return DB1.SelectToRecordSet('shop_goods', null, 'name'); // 2-й аргумент (WHERE-выражение) - null, возвращает множество записей (массив номеров записей)
}
var $current_shop_recordset = GoodsSelectAllSortedOnce(); // сохранить его в глобальной переменной

function GoodsShowRange($offset, $limit){ // полезно для постраничного вывода
return DB1.SelectFromRecordSet('shop_goods', $current_shop_recordset, ['name','category'], $offset, $limit); // возвращает массив записей в соответствии со срезом множества записей
}

// функции для работы с корзиной покупок

function CartAdd($id, $quan){
DB1.InsertOne('shop_cart', $id, $quan);
}

function CartUpdate($id, $new_quan){
var aNewValues = new Array();
aNewValues[0] = $new_quan;
DB1.Update('shop_cart', aNewValues, ['goods_quantity'], 'goods_id = ' + $id); // 4-й аргумент - WHERE-выражение
}

function CartDelete($id){
DB1.Delete('shop_cart', 'goods_id = ' + $id); // 2-й аргумент - WHERE-выражение
}

function CartClear($id){
DB1.Delete('shop_cart'); // отсутствие WHERE-выражения означает все записи
}

function CartShow(){
return DB1.Select('shop_cart'); // возвращает несортированный массив всех записей, поля расположены как в структуре
}

function CartDump2JSON(){
return DB1.DumpTable('shop_cart', 'string'); // возвращает JSON-строку со структурой и данными таблицы
}
// конечно вы можете выгрузить таблицу в объект и затем упаковать её вашим любимым способом
function CartDump2Object(){
return DB1.DumpTable('shop_cart'); // возвращает обеъкт со структурой и данными таблицы, это поведение по умолчанию
}

// теперь вы можете заполнить корзину товарами и послать её на сервер

</SCRIPT>

Шаг 3.

Загрузить полученные клиентские данные в БД на стороне веб-сервера, экспортировать их. Это делается объектами того же класса. Напомню, Perl и PHP классы функционально эквивалентны.

#!/usr/bin/perl
# простой Perl код использования XBSDB, обработка ошибок опущена для читабельности
require '/ваш/пудь/к/lib-perl/XBSDB.pm';

use CGI qw/:standard/;

# предположим, что скрипт получает содержимое таблицы как JSON-строку в параметре 'content'
my $cart_name = 'shop_cart';
my $cart_json = param('content');

# определить буферную БД
my $DB1 = XBSDB->new();

# создать таблицу путём загрузки всего содержимого (структуры и данных)
$DB1->fromJSON($cart_json, $cart_name);
# 2-й путь также доступен
my $cart_content_hash_ref = your_favorite_JSON_function($cart_json);
$DB1->fromHash($cart_content_hash_ref, $cart_name);

# экспортировать данные в вашу переменную
my $cart_data_ref = $DB1->getTableData($cart_name);

# теперь $cart_data_ref содержит массив массивов значений полей

Запомните: Класс Perl оперирует со ссылками, класс PHP - с переменными.

Для более детальной информации см. раздел API, для рабочего кода - демонстрационные примеры.


Выражения: Разбор и обработка

Верное WHERE-выражение может содержать скобки, ключевые слова 'and' и 'or', арифметические и логические операции, имена полей и числовые и строковые константы. Функции не допускаются. Лишние скобки тоже.

Парсер превращает WHERE-выражение в дерево объектов условий в несколько шагов:

Верное выражение полей может содержать скобки, арифметические операции, имена полей одной таблицы и числовые и строковые константы. Функции не допускаются.

При обработке WHERE-выражения XBSDB создаёт начальное множество, содержащее все записи.

Затем XBSDB уменьшает это множество по каждому OR- и AND-выражению в дереве:

Есть оптимизация - проверка на пустое множество и тд. Наконец, XBSDB возвращает уменьшенное начальное множество записей как результат.

Совет: чтобы повысить скорость обработки сложных WHERE-выражений ставьте более сильные условия первыми, это уменьшит число записей для обработке в самом её начале.


Индексы

JavaScript

Индексы могут быть построены по любому верному выражению полей. Индексы могут повысить скорость выборки, а могут и нет - зависит от клиентского движка JavaScript. В некоторых случаях они делают операцию выборки быстрее до 7 раз. Конечно, каждый индекс делает операции вставки и замены медленнее.

<SCRIPT type="text/javascript" language="JavaScript1.5">

DB1.CreateIndex('shop_cart', 'goods_quantity'); // создать индекс который будет использоваться в каждой основанной на WHERE операции с полем 'goods_quantity'

</SCRIPT>

Ещё раз - используйте индексы только и только если вы уверены что они полезны в вашем конкретном случае.

Perl, PHP

Сейчас не существует методов создания верного JavaScript индекса. Но вы можете создавать их: данные индекса - это просто массив номеров записей, сортированный по выражению индекса..

<?php
// получить сортированный массив номеров записей
$array_shop_key_by_name = your_function_to_get_sorted_record_numbers_by_name_field($goods_data);

// создать индекс с выражением = 'name' и заполнить его массивом, ядро XBSDB возмёт этот массив как данные индекса без ВСЯКОЙ проверки, будьте внимательны
$DB1->setTableKey('shop_goods', 'name', $array_shop_key_by_name);

// создать пустой индекс с выражением = 'name', ядром XBSDB заполнит его автоматически
$DB1->setTableKey('shop_goods', 'category');
?>

Типы полей

JavaScript

Верные типы полей на сегодня - это 'number' и 'string'.

Perl, PHP

Классы веб-серверной части не делают никакой проверки типов, так что будьте уверены, что типы значений соответствуют типам полей, описанным в структуре.


Локали

JavaScript

Локаль по умолчению - английская ('en'). Локали должны быть определены как свойства переменной класса XBSDB.prototype.Text типа объект. Для более детальной информации см. файлы локалей. Могут быть разные БД с разными установками локали. Локаль проявляется лшь в языке сервисных сообщений. Также присутствует русская локаль ('ru'). Другие файлы локалей приветствуются.

Perl, PHP

Не существует методов локалей на стороне веб-сервера, т.к. локаль БД - особенность только ядра XBSDB.


Обработка ошибок

JavaScript

Почти все методы возвращают false по ошибке. Публичное поле sResultCode хранит строку кода результата: 'OK' значит OK, всё остальное - ошибка. Вы можете использовать метод ResultText для получения описания результата в текущей локали БД.

Perl

Все методы возвращают 0 по ошибке. Публичное поле sResultCode хранит строку кода результата: 'OK' значит OK, всё остальное - ошибка.

PHP

Все методы возвращают false по ошибке. Публичное поле sResultCode хранит строку кода результата: 'OK' значит OK, всё остальное - ошибка.


API

API is OOP based. There are objects only. No functions and globals at all - just class methods and object fields.
Class name is XBSDB in all platforms - JavaScript, Perl and PHP.


API: JavaScript

Объект XBSDB - Публичные поля


sResultCode - строка кода результата последней операции, по умолчанию 'OK'.

Описание:
sResultCode может содержать не только одно значение, но и строку с несколькими кодами ошибок, например, при разборе выражений. См. файлы локалей (например, xbsdb_ru.js) для действительных кодов ошибок.


Класс XBSDB - Публичные методы


Конструктор

Синтаксис:
XBSDB([sLocale])

Параметры:
[string sLocale] - строка локали или null (то есть 'en')

Возвращаемые значения:
object - объект XBSDB

Описание:
Создаёт объект XBSDB. Затем проверяет параметр локали. sLocale должен быть равен одному из свойств объекта XBSDB.prototype.Text. Иначе конструктор устанавливает локаль в 'en' и делает sResultCode = 'DB_LOCALE_NOT_DEFINED'. Вы можете сделать любую строку свойством объекта XBSDB.prototype.Text, поэтому вы можете определить любую локаль - XBSDB это поймёт. Если sLocale не строка, то конструктор устанавливает локаль в 'en' и делает sResultCode = 'DB_LOCALE_NOT_STRING'.


LoadDB - загружает БД целиком из дампа импорта БД

Синтаксис:
LoadDB(vDatabase)

Параметры:
object или string vDatabase - объект дампа импорта БД или его JSON-строка

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Очищает множество таблиц в БД, разбирает дамп, если он верен, то создаёт таблицы, заполняет данными, если есть, определяет индексы, если есть, и заполняет их данными. Дамп может быть объектом или JSON-строкой объекта.
LoadDB никак не проверяет данные, этот метод предназначен для быстрой загрузки. Используйте CreateTable, CreateIndex, InsertMany и InsertOne для той же операции с проверкой данных.


DumpDB - выдаёт всю БД (все таблицы) в дамп БД

Синтаксис:
DumpDB([sType])

Параметры:
[string sType] - тип дампа, 'object' или 'string' или null (то есть 'object')

Возвращаемые значения:
object или string при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Выдаёт все таблицы со структурой, данными и без индексов в объект (по умолчанию) или в JSON-строку.


LoadTable - загружает структуру, данные и индексы таблицы из дампа таблицы

Синтаксис:
LoadTable(sTableName, vTable)

Параметры:
string sTableName - имя таблицы
object or string vTable - table dump object or its JSON-string

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Разбирает дамп, если дамп верен, то очищат структуру, данные и индексы таблицы, устанавливает новую сртуктуру таблицы, заполняет её данными, если есть, определяет индексы, если есть и заполняет их данными. Дамп может быть объектом или JSON-строкой объекта.
LoadTable никак не проверяет данные, этот метод предназначен для быстрой загрузки. Используйте CreateTable, CreateIndex, InsertMany и InsertOne для той же операции с проверкой данных.


LoadTableData - загружает данные и индексы таблицы из дампа данных таблицы

Синтаксис:
LoadTableData(sTableName, vTable)

Параметры:
string sTableName - имя таблицы
object or string vTable - table dump object or its JSON-string

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Разбирает дамп, если дамп верен, то очищат данные и индексы таблицы, заполняет её данными, если есть, определяет индексы, если есть и заполняет их данными. Дамп может быть объектом или JSON-строкой объекта.
LoadTableData никак не проверяет данные, этот метод предназначен для быстрой загрузки. Используйте CreateIndex, InsertMany и InsertOne для той же операции с проверкой данных.


DumpTable - выдаёт таблицу без индексов в дамп таблицы

Синтаксис:
DumpTable(sTableName, [sType])

Параметры:
string sTableName - имя таблицы
[string sType] - тип дампа, 'object' или 'string' или null (то есть 'object')

Возвращаемые значения:
object или string при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Выдаёт таблицу со структурой, данными и без индексов в объект (по умолчанию) или в JSON-строку.


CreateTable - создаёт новую таблицу в БД

Синтаксис:
CreateTable(sTableName, aTableStructure)

Параметры:
string sTableName - имя таблицы
array aTableStructure - структура таблицы

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Создаёт новую таблиуц, если не существует, и устанавливает её структуру.


IsTable - проверяет есть таблица или нет

Синтаксис:
IsTable(sTableName)

Параметры:
string sTableName - имя таблицы

Возвращаемые значения:
true если таблица есть
false если таблицы нет
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает true если параметр - не пустая строка и таблица с этим именем есть.
Возвращает false если параметр - не пустая строка и таблицы с этим именем нет.
Иначе возвращает false и устанавливает sResultCode в код ошибки.


ShowTables - выдаёт список всех таблиц БД

Синтаксис:
ShowTables()

Параметры:
нет

Возвращаемые значения:
array при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает несортированный массив строк - имён всех существующих таблиц в БД.


DropTable - удаляет таблицу из БД

Синтаксис:
DropTable(sTableName)

Параметры:
string sTableName - имя таблицы

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Проверяет, есть ли таблица, если есть - удаляет её и возвращает true.


ShowFields - выдаёт структуру таблицы

Синтаксис:
ShowFields(sTableName)

Параметры:
string sTableName - имя таблицы

Возвращаемые значения:
array при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Проверяет, есль ли таблица, если есть - возвращает её структуру - имена и типы полей как массив 2-х элементных массивов [имя, тип].


InsertOne - вставляет одну запись в таблицу

Синтаксис:
InsertOne(sTableName, aFieldValues, [aFieldNames])

Параметры:
string sTableName - имя таблицы
array aFieldValues - массив значений полей
[array aFieldNames] - массив имён полей или null

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Вставляет одну запись, потом перестраивает все индексы. Самый медленный способ вставить данные. Если aFieldNames опущено, то поля используются в порядке структуры.


InsertMany - вставляет несколько записей в таблицу за 1 раз

Синтаксис:
InsertMany(sTableName, aRows, [aFieldNames])

Параметры:
string sTableName - имя таблицы
array aRows - массив массивов значений полей
[array aFieldNames] - массив имён полей или null

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Вставляет несколько записей, потом перестраивает все индексы. Если aFieldNames опущено, то поля используются в порядке структуры.


Update - обновляет данные в таблице

Синтаксис:
Update(sTableName, aFieldValues, [aFieldNames], [sWhereExpr])

Параметры:
string sTableName - имя таблицы
array aFieldValues - массив значений полей
[array aFieldNames] - массив имён полей или null
[string sWhereExpr] - WHERE-выражение или null

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Устанавливает новые значения полей, потом перестраивает все индексы, связанные с каджым используемым полем. При большом количестве индексов операция медленная.
Если aFieldNames опущено, то поля используются в порядке структуры.
Если sWhereExpr опущено, то обновятся все записи.


Delete - удаляет данные из таблицы

Синтаксис:
Delete(sTableName, [sWhereExpr])

Параметры:
string sTableName - имя таблицы
[string sWhereExpr] - WHERE-выражение или null

Возвращаемые значения:
number - число удалённых записей при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Удаляет записи, если sWhereExpr опущено, то удалятся все записи.


Select - выбирает данные из таблицы

Синтаксис:
Select(sTableName, [aFieldNames], [sWhereExpr], [sOrderByExpr], [bDescFlag], [sGroupByExpr])

Параметры:
string sTableName - имя таблицы
[array aFieldNames] - массив имён полей результата или null
[string sWhereExpr] - WHERE-выражение или null
[string sOrderByExpr] - ORDER BY выражение для сортироваки вывода или null
[boolean bDescFlag] - DESC флаг обратной сортировки или null, действует только когда sOrderByExpr не пусто
[string sGroupByExpr] - GROUP BY выражение для группировки вывода или null

Возвращаемые значения:
array - массив массивов значений полей записей при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Выбирает записи и возвращает значения выбранных. Если aFieldNames опущено, то поля используются в порядке структуры. Если sWhereExpr опущено, то выберутся все записи.


SelectToRecordSet - выдаёт массив идентификаторов записей из таблицы

Синтаксис:
SelectToRecordSet(sTableName, [sWhereExpr], [sOrderByExpr], [bDescFlag], [sGroupByExpr])

Параметры:
string sTableName - имя таблицы
[string sWhereExpr] - WHERE-выражение или null
[string sOrderByExpr] - ORDER BY выражение для сортироваки вывода или null
[boolean bDescFlag] - DESC флаг обратной сортировки или null, действует только когда sOrderByExpr не пусто
[string sGroupByExpr] - GROUP BY выражение для группировки вывода или null

Возвращаемые значения:
array - массив идентификаторов записей при успехе
false по ошибке (sResultCode != 'OK')

Описание:
SelectToRecordSet выбирает записи и возвращает массиы подходящих идентфикаторов, который может использоваться в SelectFromRecordSet, возвращающем значения полей. Этот метод предназначен для постраничного вывода - SelectToRecordSet обрабатывает sWhereExpr один раз, SelectFromRecordSet выбирает нужный диапазон.


SelectFromRecordSet - выбирает данные из массива индентификаторов

Синтаксис:
SelectFromRecordSet(sTableName, aRecords, [aFieldNames], [nOffset], [nLimit])

Параметры:
string sTableName - имя таблицы
array aRecords - массив идентификаторов записей
[array aFieldNames] - массив имён полей результата или null
[number nOffset] - смещение записей результата или null
[number nLimit] - лимит записей результата или null

Возвращаемые значения:
array - массив массивов значений полей записей при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает значения полей не более nLimit записей из массива индентификаторов, начиная с nOffset. aRecords должен быть результатом SelectToRecordSet. Этот метод предназначен для постраничного вывода - SelectToRecordSet обрабатывает sWhereExpr один раз, SelectFromRecordSet выбирает нужный диапазон.


Rows2String - получает строку из массива массивов значений полей записей, используя toString

Синтаксис:
Rows2String(aRows, sRowBefore, sRowAfter, sValueBefore, sValueAfter, sValueEmpty)

Параметры:
array aRows - массив массивов значений полей записей
string sRowBefore - строка для размещения перед каждой записью
string sRowAfter - строка для размещения после каждой записи
string sValueBefore - строка для размещения перед каждым полем
string sValueAfter - строка для размещения после каждого поля
string sEmptyString - строка для отображения пустого значения поля

Возвращаемые значения:
string при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Метод для лёгкого вывода массива, возвращённого методами Select и SelectFromRecordSet.


Rows2LocaleString - получает строку из массива массивов значений полей записей, используя toLocaleString

Синтаксис:
Rows2LocaleString(aRows, sRowBefore, sRowAfter, sValueBefore, sValueAfter, sValueEmpty)

Параметры:

array aRows - массив массивов значений полей записей
string sRowBefore - строка для размещения перед каждой записью
string sRowAfter - строка для размещения после каждой записи
string sValueBefore - строка для размещения перед каждым полем
string sValueAfter - строка для размещения после каждого поля
string sEmptyString - строка для отображения пустого значения поля

Возвращаемые значения:
string при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Тоже метод для лёгкого вывода массива, полученного от методов Select и SelectFromRecordSet. Использует toLocaleString, так что помните о форматах.


CreateIndex - создаёт новый ключ в таблице

Синтаксис:
CreateIndex(sTableName, sKeyExpr)

Параметры:
string sTableName - имя таблицы
string sKeyExpr - ключевое выражение

Возвращаемые значения:
string - идентификатор ключа (нормализованное ключевое выражение) при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Нормализует sKeyExpr, создаёт новый ключ, если нет, и потом строит его.


IsIndex - проверяет есть ключ или нет

Синтаксис:
IsIndex(sTableName, sKeyID)

Параметры:
string sTableName - имя таблицы
string sKeyID - идентификатор ключа

Возвращаемые значения:
true если ключ есть
false если ключа нет
false по ошибке (sResultCode != 'OK')

Описание:
Нормализует sKeyExp, проверяет наличие ключа с таким же идентификатором.


ShowIndexes - получает список всех ключей таблицы

Синтаксис:
ShowIndexes(sTableName)

Параметры:
string sTableName - имя таблицы

Возвращаемые значения:
array при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает несортированный массив идентификаторов ключей - нормализованных ключевых выражений.


DropIndex - удаляет ключ из таблицы

Синтаксис:
DropIndex(sTableName, sKeyID)

Параметры:
string sTableName - имя таблицы
string sKeyID - идентификатор ключа

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Нормализует sKeyExp, удаляет ключ с таким идентификатором, если есть.


ResultText - возвращает текст последнего результата в текущей локали БД

Синтаксис:
ResultText()

Параметры:
нет

Возвращаемые значения:
string

Описание:
Использует поле sResultCode field. Берёт значение sResultCode, замещает всё коды ошибок на сообщения, исходя из текущкей локали, и возвращает его.


SetLocale - устанавливает локаль БД

Синтаксис:
SetLocale(sLocale)

Параметры:
string sLocale - строка локали

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Устанавливает новую локаль, если параметр - строка, и определён в XBSDB.prototype.Text включаемым файлом.


GetLocale - получает локаль БД

Синтаксис:
GetLocale()

Параметры:
нет

Возвращаемые значения:
string при успехе

Описание:
Возвращает текущую локали БД.


API: Perl

Объект XBSDB - Публичные поля


sResultCode - строка кода результата последней операции, по умолчанию 'OK'

Описание:
Коды ошибок:
'JSON_ERROR' - ошибка в in JSON-преобразовании
'PARAM_EMPTY' - параметр пуст
'PARAM_TYPE_MISMATCH' - тип параметра не соответствует
'TABLE_NO_DATA' - таблица без данных
'TABLE_NO_STRUCTURE' - таблица без структуры
'TABLE_NOT_EXIST' - таблица не существует


Класс XBSDB - Публичные методы


new - конструктор

Синтаксис:
new()

Параметры:
нет

Возвращаемые значения:
ссылка, привязанная к классу XBSDB

Описание:
Создаёт объект класса XBSDB.


setTableStructure - задаёт структуру таблицы с заданным именем

Синтаксис:
setTableStructure($name, \@structure)

Параметры:
string $name - имя таблицы
ref \@structure - структура таблицы как ссылка на массив пар [имя,тип]

Возвращаемые значения:
1 при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Очищает структуру, данные и индексы таблицы, если она существует, если нет - создаёт новую таблиицу с заданным именем. Устанавливает структуру таблицы на заданную. Метод никак не проверяет структуру.


getTableStructure - выдаёт структуру таблицы с заданным именем

Синтаксис:
getTableStructure($name)

Параметры:
string $name - имя таблицы

Возвращаемые значения:
ref \@ при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Возвращает структуру таблицы как ссылку на массив пар [имя,тип]


setTableData - задаёт данные таблицы с заданным именем

Синтаксис:
setTableData($name, \@data)

Параметры:
string $name - имя таблицы
ref \@data - данные таблицы как ссылка на массив массивов значений полей

Возвращаемые значения:
1 при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Очищает данные и индексы таблицы, если она существует. Устанавливает данные таблицы на заданные. Метод никак не проверяет данные.


getTableData - выдаёт данные таблицы с заданным именем

Синтаксис:
getTableData($name)

Параметры:
string $name - имя таблицы

Возвращаемые значения:
ref \@ при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Возвращает данные таблицы как ссылку на массив массивов значений полей.


setTableKey - задаёт индекс таблицы с заданным именем

Синтаксис:
setTableKey($name, $expression, [\@data])

Параметры:
string $name - имя таблицы
string $expression - правильное индексное JavaScript выражение
[ref \@data] - данные индекса как ссылка на сортированный массив номеров записей или null (то есть нет данных, будут созданы ядром XBSDB на стороне браузера)

Возвращаемые значения:
1 при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Добавляет индекс если таблица существует. Существующий индекс с таким же выражением будет перезаписан.
Метод никак не проверяет индекс и не нормализует $expression, оно будет нормализовано автоматически на стороне браузера.


unsetTable - удаляет таблицу с заданным именем из БД

Синтаксис:
unsetTable($name)

Параметры:
string $name - имя таблицы

Возвращаемые значения:
1 при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Удаляет таблицу, если есть.


toHash - возвращает верный хэш БД или таблицы

Синтаксис:
toHash([$name])

Параметры:
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
ref \% при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Возвращает верный хэш, содержащий структуру, данные и индексы одной таблицы или всю БД. Такой хэш может быть передан ядру XBSDB.


toJSON - возвращает верную JSON-строку хэша БД или таблицы

Синтаксис:
toJSON([$name])

Параметры:
[string $name] - имя таблицы or null (то есть вся БД)

Возвращаемые значения:
string при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Возвращает верную JSON-строку хэша, содержащего структуру, данные и индексы одной таблицы или всю БД. Такая строка может быть передана ядру XBSDB.


fromHash - загружает БД или таблицу из хэша

Синтаксис:
fromHash(\%hash, [$name])

Параметры:
ref \%hash - хэш, представляющий БД или таблицу
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
1 при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Устанавливает всю БД или одну таблицу равной заданному хэшу. Метод никак не проверяет хэш.


fromJSON - загружает БД или таблицу из верной JSON-строки

Синтаксис:
fromJSON($json_str, [$name])

Параметры:
string $json_str - JSON-строка хэша, представляющего БД или таблицу
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
1 при успехе
0 по ошибке (sResultCode ne 'OK')

Описание:
Превращает JSON-строку в хэш, при успехе устанавливает всю БД или одну таблицу равной этому хэшу. Метод никак не проверяет хэш.


API: PHP

Объект XBSDB - Публичные поля


sResultCode - строка кода результата последней операции, по умолчанию 'OK'

Описание:
Коды ошибок:
'JSON_ERROR' - ошибка в in JSON-преобразовании
'JSON_ERROR_CTRL_CHAR' - json_last_error() возвращает JSON_ERROR_CTRL_CHAR
'JSON_ERROR_DEPTH' - json_last_error() возвращает JSON_ERROR_DEPTH
'JSON_ERROR_SYNTAX' - json_last_error() возвращает JSON_ERROR_SYNTAX
'PARAM_EMPTY' - параметр пуст
'PARAM_TYPE_MISMATCH' - тип параметра не соответствует
'TABLE_NO_DATA' - таблица без данных
'TABLE_NO_STRUCTURE' - таблица без структуры
'TABLE_NOT_EXIST' - таблица не существует


Класс XBSDB - Публичные методы


setTableStructure - задаёт структуру таблицы с заданным именем

Синтаксис:
setTableStructure($name, $structure)

Параметры:
string $name - имя таблицы
array $structure - структура таблицы как массив пар [имя,тип]

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Очищает структуру, данные и индексы таблицы, если она существует, если нет - создаёт новую таблиицу с заданным именем. Устанавливает структуру таблицы на заданную. Метод никак не проверяет структуру.


getTableStructure - выдаёт структуру таблицы с заданным именем

Синтаксис:
getTableStructure($name)

Параметры:
string $name - имя таблицы

Возвращаемые значения:
array при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает структуру таблицы как массив пар [имя,тип]


setTableData - задаёт данные таблицы с заданным именем

Синтаксис:
setTableData($name, $data)

Параметры:
string $name - имя таблицы
array $data - данные таблицы как массив массивов значений полей

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Очищает данные и индексы таблицы, если она существует. Устанавливает данные таблицы на заданные. Метод никак не проверяет данные.


getTableData - выдаёт данные таблицы с заданным именем

Синтаксис:
getTableData($name)

Параметры:
string $name - имя таблицы

Возвращаемые значения:
array при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает данные таблицы как массив массивов значений полей.


setTableKey - задаёт индекс таблицы с заданным именем

Синтаксис:
setTableKey($name, $expression, [$data])

Параметры:
string $name - имя таблицы
string $expression - правильное индексное JavaScript выражение
[array $data] - данные индекса как сортированный массив номеров записей или null (то есть нет данных, будут созданы ядром XBSDB на стороне браузера)

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Добавляет индекс если таблица существует. Существующий индекс с таким же выражением будет перезаписан.
Метод никак не проверяет индекс и не нормализует $expression, оно будет нормализовано автоматически на стороне браузера.


unsetTable - удаляет таблицу с заданным именем из БД

Синтаксис:
unsetTable($name)

Параметры:
string $name - имя таблицы

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Удаляет таблицу, если есть.


toHash - возвращает верный объект БД или таблицы

Синтаксис:
toHash([$name])

Параметры:
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
object при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает верный объект, содержащий структуру, данные и индексы одной таблицы или всю БД. Такой объект может быть передан ядру XBSDB.


toJSON - возвращает верную JSON-строку хэша БД или таблицы

Синтаксис:
toJSON([$name])

Параметры:
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
string при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Возвращает верную JSON-строку объекта, содержащего структуру, данные и индексы одной таблицы или всю БД. Такая строка может быть передана ядру XBSDB.


fromHash - загружает БД или таблицу из объекта

Синтаксис:
fromHash($hash, [$name])

Параметры:
object $hash - объект, представляющий БД или таблицу
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Устанавливает всю БД или одну таблицу равной заданному объекту. Метод никак не проверяет объект.


fromJSON - загружает БД или таблицу из верной JSON-строки

Синтаксис:
fromJSON($json_str, [$name])

Параметры:
string $json_str - JSON-строка объекта, представляющего БД или таблицу
[string $name] - имя таблицы или null (то есть вся БД)

Возвращаемые значения:
true при успехе
false по ошибке (sResultCode != 'OK')

Описание:
Превращает JSON-строку в объект, при успехе устанавливает всю БД или одну таблицу равной этому объекту. Метод никак не проверяет объект.


Алексей Знаев, 2010, znaeff@mail.ru