fbx/README.md

402 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- Improved compatibility of К началу link: See: https://github.com/othneildrew/Best-README-Template/pull/73 -->
<a id="readme-top"></a>
<!--
*** Thanks for checking out the Best-README-Template. If you have a suggestion
*** that would make this better, please fork the repo and create a pull request
*** or simply open an issue with the tag "enhancement".
*** Don't forget to give the project a star!
*** Thanks again! Now go create something AMAZING! :D
-->
<!-- PROJECT LOGO -->
<br />
<div align="center">
<!-- <a href="https://github.com/othneildrew/Best-README-Template"> -->
<img src="Logo-Futriix.png" height=100></img>
</a>
<h3 align="center">Futriix fdx</h3>
## Краткая документация модуля Futriix fdx
</div>
<!-- TABLE OF CONTENTS -->
<br>
<details>
<summary><b>Содержание</b></summary>
<ol>
<li>
<a href="#о-модуле">О модуле</a>
<li><a href="#использование">Использование</a></li>
<li><a href="#начало">Начало</a></li>
<li><a href="#загрузка">Загрузка</a></li>
<li><a href="#примеры">Примеры</a></li>
<li><a href="csv">CSV</a></li>
</ol>
</details>
<!-- ABOUT THE PROJECT -->
## О модуле
Модуль "fdx" позволяет предоставить простой 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
$ Valkeys-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
$
```
### Delete statement
You may also use Insert and Delete statement to operate the hash. If you does not provide the where clause, it will delete all the records of the specified key prefix. (i.e. phonebook)
```sql
futriix:~> dbx delete from phonebook where gender = F
(integer) 2
futriix:~> dbx delete from phonebook
(integer) 2
```
### Insert statement
The module provides simple Insert statement which same as the function of the ValkeyS command hmset. It will append a random string to your provided key (i.e. phonebook). If operation is successful, it will return the key name.
```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:~>
```
Note that Valkeys requires at least one space after the single and double quoted arguments, otherwise you will get ``Invalid argument(s)`` error. If you don't want to take care of this, you could quote the whole SQL statement by double quote as below:
```sql
futriix:~> dbx "insert into phonebook (name,tel,birth,pos,gender) values ('Peter Nelson','1-456-1246-3421','2019-10-01',3, 'M')"
```
#### From clause for importing CSV file
The module provides simple import function by specifying from clause in Insert statement. It only support comma deliminated. Please make sure that the specified import file can be accessed by Valkeys server.
```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"
```
### Issue command from BASH shell
```sql
$ Valkeys-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"
$ Valkeys-cli dbx select name from phonebook where tel like 9812
1) 1) name
2) "Bloody Mary"
```
Note that "*" requires double quoted otherwise it will pass all the filename in current directory. Of course you could quote the whole SQL statement.
```sql
$ Futriix-cli dbx "select * from phonebook where gender = M order by pos desc"
```
## License
MIT