Futriix fbx

## Краткая документация модуля Futriix fdx

Содержание
  1. О модуле
  2. Использование
  3. Начало
  4. Загрузка
  5. Примеры
  6. CSV
  7. Лицензия
## О модуле Модуль "fbx" позволяет предоставить простой DML (Data Manipulation Language, подмножество языка SQL для манипулирования данными - это подъязык, отвечающий за добавление, редактирование или удаление данных из базы данных. В SQL этому языку соответствуют операторы INSERT, UPDATE, и DELETE ) и DQL (Data Query Language )- это подъязык, отвечающий за чтение или запрос данных из базы данных. В SQL этому языку соответствует оператор SELECT) для манипулирования хэшами в Futriix для пользователей SQL. Он преобразует входной оператор на языке SQL в набор чистых команд Futriix'а. Он не нуждается и не генерирует никаких промежуточных данных, которые занимали бы базы данных. Целевыми данными являются только ваши хэши. Он также предоставляет функцию импорта и экспорта данных из других субд в формате "CSV". ## Использование ```sql $ futriix-cli futriix:~> hmset phonebook:0001 name "Ivan Ivanov" tel "812-692-12-34" birth "1982-10-01" pos 3 gender "M" futriix:~> hmset phonebook:0002 name "Anna Kaverina" tel "812-444-99-11" birth "1009-12-01" pos 1 gender "F" futriix:~> hmset phonebook:0003 name "Bella Karetnikova" tel "812-682-24-41" birth "2004-01-31" pos 2 gender "F" futriix:~> hmset phonebook:0004 name "Maxim Levitsky tel "812-669-09-92" birth "2017-06-30" pos 4 gender "M" futriix:~> dbx select name,tel from phonebook where gender = "F" order by pos desc 1) 1) name 2) "Ivan Ivanov" 3) tel 4) "812-692-12-34" 2) 1) name 2) "Anna Kaverina" 3) tel 4) "812-444-99-11" ``` ## Начало ### Скачиваем пакет и собираем бинаный файл: ```sql $ git clone https://source.futriix.ru/fbx/fbx.git $ cd fbx/src && make ``` После успешной компиляции в директории пояаится файл "fbx.so" ## Загрузка 1. Загрузка модуля через клиента (команднуб строку) ```sql futriix:~> module load /path/to/dbx.so ``` 2. Запуск сервера с параметром "loadmodule" ```sql $ Futriix-server --loadmodule /path/to/fbx.so ``` 3.Добавление следующей строки в файл конфигурации Futriix "futriix.conf" с последующей перезагрузкой сервера, для применения вновь внесённых изменений через файл конфигурации. ```sql loadmodule /path/to/fbx.so ``` ## Примеры ### Выберетите оператор Вы можете указать несколько полей, разделенных запятой. ```sql futriix:~> dbx select name, gender, birth from phonebook 1) 1) name 2) "Betty Joan" 3) gender 4) "F" 5) birth 6) "2019-12-01" 2) 1) name 2) "Mattias Swensson" 3) gender 4) "M" 5) birth 6) "2017-06-30" 3) 1) name 2) "Peter Nelson" 3) gender 4) "M" 5) birth 6) "2019-10-01" 4) 1) name 2) "Bloody Mary" 3) gender 4) "F" 5) birth 6) "2018-01-31" ``` "*" Поддерживается ```sql futriix:~> dbx select * from phonebook where birth > '2019-11-11' 1) 1) "name" 2) "Betty Joan" 3) "tel" 4) "1-444-9999-1112" 5) "birth" 6) "2019-12-01" 7) "pos" 8) "1" 9) "gender" 10) "F" ``` Если вы хотите отобразить точные ключи, вы можете попробовать вызвать функцию rowid() ```sql futriix:~> dbx select rowid() from phonebook 1) 1) rowid() 2) "phonebook:1588299191-764848276" 2) 1) rowid() 2) "phonebook:1588299202-1052597574" 3) 1) rowid() 2) "phonebook:1588298418-551514504" 4) 1) rowid() 2) "phonebook:1588299196-2115347437" ``` ```sql futriix:~> keys phonebook* 1) "phonebook:1588298418-551514504" 2) "phonebook:1588299196-2115347437" 3) "phonebook:1588299202-1052597574" 4) "phonebook:1588299191-764848276" ``` Каждая запись представляет собой хеш, вы можете использовать простые команды, например, ``hget, hmget или hgetall`` для извлечения того же содержимого. #### Условия в операторе Where Вы можете указать =, >, <, >=, <=, <>, != или подобные условия в предложении where. Теперь модуль поддерживает только "and" для объединения нескольких условий. ```sql futriix:~> dbx select tel from phonebook where name like Son 1) 1) tel 2) "1-888-3333-1412" 2) 1) tel 2) "1-456-1246-3421" futriix:~> dbx select tel from phonebook where name like Son and pos = 4 1) 1) tel 2) "1-888-3333-1412" ``` #### Сортировки Сортировка может быть по возрастанию или по убыванию. Все сортировки являются альфа-сортировкой. ```sql futriix:~> dbx select name, pos from phonebook order by pos asc 1) 1) name 2) "Betty Joan" 3) pos 4) "1" 2) 1) name 2) "Bloody Mary" 3) pos 4) "2" 3) 1) name 2) "Peter Nelson" 3) pos 4) "3" 4) 1) name 2) "Mattias Swensson" 3) pos 4) "4" futriix:~> dbx select name from phonebook order by pos desc 1) 1) name 2) "Mattias Swensson" 2) 1) name 2) "Peter Nelson" 3) 1) name 2) "Bloody Mary" 4) 1) name 2) "Betty Joan" ``` #### СОртировка по возрастанию ```sql futriix:~> dbx select top 3 name, tel from phonebook order by pos desc 1) 1) name 2) "Mattias Swensson" 3) tel 4) "1-888-3333-1412" 2) 1) name 2) "Peter Nelson" 3) tel 4) "1-456-1246-3421" 3) 1) name 2) "Bloody Mary" 3) tel 4) "1-666-1234-9812" futriix:~> dbx select top 0 * from phonebook (empty list or set) ``` #### Предложение Into для копирования хэш-таблицы Вы можете создать еще одну хеш-таблицу с помощью предложения into. ```sql futriix:~> dbx select * into testbook from phonebook 1) testbook:1588325407-1751904058 2) testbook:1588325407-1751904059 3) testbook:1588325407-1751904060 4) testbook:1588325407-1751904061 futriix:~> keys testbook* 1) "testbook:1588325407-1751904061" 2) "testbook:1588325407-1751904059" 3) "testbook:1588325407-1751904058" 4) "testbook:1588325407-1751904060" futriix:~> dbx select * from testbook 1) 1) "name" 2) "Mattias Swensson" 3) "tel" 4) "1-888-3333-1412" 5) "birth" 6) "2017-06-30" 7) "pos" 8) "4" 9) "gender" 10) "M" 2) 1) "name" 2) "Peter Nelson" 3) "tel" 4) "1-456-1246-3421" 5) "birth" 6) "2019-10-01" 7) "pos" 8) "3" 9) "gender" 10) "M" 3) 1) "name" 2) "Bloody Mary" 3) "tel" 4) "1-666-1234-9812" 5) "birth" 6) "2018-01-31" 7) "pos" 8) "2" 9) "gender" 10) "F" 4) 1) "name" 2) "Betty Joan" 3) "tel" 4) "1-444-9999-1112" 5) "birth" 6) "2019-12-01" 7) "pos" 8) "1" 9) "gender" 10) "F" ``` ## CSV ```sql futriix:~> dbx select * into csv "/tmp/testbook.csv" from phonebook where pos > 2 1) Kevin Louis,111-2123-1233,2009-12-31,6,F 2) Kenneth Cheng,123-12134-123,2000-12-31,5,M futriix:~> quit $ cat /tmp/testbook.csv Kevin Louis,111-2123-1233,2009-12-31,6,F Kenneth Cheng,123-12134-123,2000-12-31,5,M $ ``` #### Оператор "From" для импорта CSV-файла Модуль обеспечивает простую функцию импорта, указав предложение from в операторе Insert. Он поддерживает только разделители-запятые. Убедитесь, что указанный файл импорта доступен серверу Futriix. ```bash $ cat > /tmp/test.csv << EOF "Kenneth Cheng","123-12134-123","2000-12-31","5","M" "Kevin Louis","111-2123-1233","2009-12-31","6","F" EOF $ Valkeys-cli futriix:~> dbx insert into phonebook (name, tel, birth, pos, gender) from "/tmp/test.csv" 1) "phonebook:1588509697-1579004777" 2) "phonebook:1588509697-1579004778" futriix:~> dbx select name from phonebook 1) 1) name 2) "Kenneth Cheng" 2) 1) name 2) "Kevin Louis" futriix:~> dbx delete from phonebook (integer) 2 futriix:~> quit $ cat > /tmp/testheader.csv << EOF name,tel,birth,pos,gender "Kenneth Cheng","123-12134-123","2000-12-31","5","M" "Kevin Louis","111-2123-1233","2009-12-31","6","F" EOF $ Valkeys-cli futriix:~> dbx insert into phonebook from "/tmp/testheader.csv" 1) "phonebook:1588509697-1579004779" 2) "phonebook:1588509697-1579004780" futriix:~> dbx select name from phonebook 1) 1) name 2) "Kenneth Cheng" 2) 1) name 2) "Kevin Louis" ``` #### Оператор "Delete" Вы также можете использовать операторы Insert и Delete для работы с хешем. Если вы не предоставите предложение where, он удалит все записи указанного префикса ключа. (т.е. телефонная книга) ```sql futriix:~> dbx delete from phonebook where gender = F (integer) 2 futriix:~> dbx delete from phonebook (integer) 2 ``` #### Оператор "Insert" Модуль предоставляет простой оператор Insert, который аналогичен функции команды Futriix hmset. Он добавит случайную строку к предоставленному вами ключу (например, телефонной книге). Если операция прошла успешно, он вернет имя ключа. ```sql futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Peter Nelson' ,1-456-1246-3421, 2019-10-01, 3, M) "phonebook:1588298418-551514504" futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Betty Joan' ,1-444-9999-1112, 2019-12-01, 1, F) "phonebook:1588299191-764848276" futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Bloody Mary' ,1-666-1234-9812, 2018-01-31, 2, F) "phonebook:1588299196-2115347437" futriix:~> dbx insert into phonebook (name,tel,birth,pos,gender) values ('Mattias Swensson' ,1-888-3333-1412, 2017-06-30, 4, M) "phonebook:1588299202-1052597574" futriix:~> hgetall phonebook:1588298418-551514504 1) "name" 2) "Peter Nelson" 3) "tel" 4) "1-456-1246-3421" 5) "birth" 6) "2019-10-01" 7) "pos" 8) "3" 9) "gender" 10) "M" futriix:~> ``` Обратите внимание, что Futriix требует по крайней мере один пробел после аргументов в одинарных и двойных кавычках, в противном случае вы получите ошибку ``Недопустимый аргумент(ы)``. Если вы не хотите этим заниматься, вы можете заключить весь оператор SQL в двойные кавычки, как показано ниже: ```sql futriix:~> dbx "insert into phonebook (name,tel,birth,pos,gender) values ('Peter Nelson','1-456-1246-3421','2019-10-01',3, 'M')" ``` ### Проблема вызова команды из оболочки Bash ```sql $ futriix-cli dbx select "*" from phonebook where gender = M order by pos desc 1) 1) "name" 2) "Mattias Swensson" 3) "tel" 4) "1-888-3333-1412" 5) "birth" 6) "2017-06-30" 7) "pos" 8) "4" 9) "gender" 10) "M" 2) 1) "name" 2) "Peter Nelson" 3) "tel" 4) "1-456-1246-3421" 5) "birth" 6) "2019-10-01" 7) "pos" 8) "3" 9) "gender" 10) "M" $ futriix-cli dbx select name from phonebook where tel like 9812 1) 1) name 2) "Bloody Mary" ``` Обратите внимание, что "*" требует двойных кавычек, иначе будут переданы все имена файлов в текущем каталоге. Конечно, вы можете заключить в кавычки весь оператор SQL. ```sql $ futriix-cli dbx "select * from phonebook where gender = M order by pos desc" ``` ## Лицензия Модуль "fdx" распространяется под лицензией MIT.