2020-04-30 19:51:09 +08:00
2020-05-03 22:32:41 +08:00
2020-05-01 10:38:05 +08:00
2025-04-02 19:32:55 +00:00
2025-04-02 18:12:26 +00:00
2025-04-02 20:05:19 +00:00
2020-04-30 19:51:09 +08:00


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".

Использование

$ 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"

Начало

Скачиваем пакет и собираем бинаный файл:

$ git clone https://source.futriix.ru/fbx/fbx.git
$ cd fbx/src && make

После успешной компиляции в директории пояаится файл "fbx.so"

Загрузка

  1. Загрузка модуля через клиента (команднуб строку)
futriix:~> module load /path/to/dbx.so
  1. Запуск сервера с параметром "loadmodule"
$ Futriix-server --loadmodule /path/to/fbx.so

3.Добавление следующей строки в файл конфигурации Futriix "futriix.conf" с последующей перезагрузкой сервера, для применения вновь внесённых изменений через файл конфигурации.

loadmodule /path/to/fbx.so

Примеры

Выберетите оператор

Вы можете указать несколько полей, разделенных запятой.

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"

"*" Поддерживается

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()

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"
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" для объединения нескольких условий.

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"

Сортировки

Сортировка может быть по возрастанию или по убыванию. Все сортировки являются альфа-сортировкой.

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"

СОртировка по возрастанию

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.

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

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.

$ 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, он удалит все записи указанного префикса ключа. (т.е. телефонная книга)

futriix:~> dbx delete from phonebook where gender = F
(integer) 2
futriix:~> dbx delete from phonebook
(integer) 2

Оператор "Insert"

Модуль предоставляет простой оператор Insert, который аналогичен функции команды Futriix hmset. Он добавит случайную строку к предоставленному вами ключу (например, телефонной книге). Если операция прошла успешно, он вернет имя ключа.

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 в двойные кавычки, как показано ниже:

futriix:~> dbx "insert into phonebook (name,tel,birth,pos,gender) values ('Peter Nelson','1-456-1246-3421','2019-10-01',3, 'M')"

Проблема вызова команды из оболочки Bash

$ 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.

$ futriix-cli dbx "select * from phonebook where gender = M order by pos desc"

Лицензия

Модуль "fdx" распространяется под лицензией MIT.

Description
Модуль, добавляющий возможности языка SQL в Futriix
https://futriix.ru
Readme MIT 210 KiB
Languages
C 97.7%
C++ 1.3%
Makefile 1%