# group

#### 1.Notes

组Group是整个GDB数据库的基础,和其相关的接口主要是用于向GDB数据库中添加组,这里的response只给出了正确 响应时data字段的内容,组的操作不支持并发写操作,因为SQLite是RwMutex,所以支持并发的读,并发写的时候会造成数据库被锁住

#### 2.APi

## 添加组

<mark style="color:green;">`POST`</mark> `/group/addGroups`

&#x20;1\) 添加组的操作具有原子性,即如果一次性添加多个组,但是有组添加失败,则此次添加会全部失败. \
&#x20;2\) 添加已存在的组会失败\
&#x20;3\) 添加的groupName不能是预定义的关键字(不区分大小写),否则会失败\
&#x20;4\) 添加的时候会去除groupName两端的空格 \
&#x20;5\) 所有group的item都有默认的id(primary key)和itemName两列,所以此两列不需要在ColumnNames 中定义,否则会添加失败.同时也不能是空字符串

#### Request Body

| Name | Type   | Description                                                                                             |
| ---- | ------ | ------------------------------------------------------------------------------------------------------- |
|      | object | \[{"groupName": string, columnNames:\[columnName1, columnName2]}...],groupNames为要添加的组名,groupNames为对应的列名 |

{% tabs %}
{% tab title="200 " %}

```
{"effectedRows": in 
```

{% endtab %}
{% endtabs %}

## 删除组

<mark style="color:green;">`POST`</mark> `/group/deleteGroups`

删除组名,操作具有原子性

#### Request Body

| Name       | Type  | Description |
| ---------- | ----- | ----------- |
| groupNames | array |             |

{% tabs %}
{% tab title="200 " %}

```
{"effectedRows": int}
```

{% endtab %}
{% endtabs %}

## 获取所有已经存在的组名

<mark style="color:green;">`POST`</mark> `/group/getGroups`

{% tabs %}
{% tab title="200 " %}

```
{"groupNames": []string}
```

{% endtab %}
{% endtabs %}

## &#x20;获取group的属性

<mark style="color:green;">`POST`</mark> `/group/getGroupProperty`

获取指定groupName中的列名以及其中item的数目

#### Request Body

| Name       | Type  | Description |
| ---------- | ----- | ----------- |
| groupNames | array |             |

{% tabs %}
{% tab title="200 " %}

```
{"groupName1": {"itemCount": int, "itemColumnNames": []}}
```

{% endtab %}
{% endtabs %}

## &#x20;修改组名

<mark style="color:green;">`POST`</mark> `/group/updateGroupNames`

操作具有原子性

#### Request Body

| Name | Type   | Description                                            |
| ---- | ------ | ------------------------------------------------------ |
|      | object | \[{"oldGroupName": string, "newGroupName": string}...] |

{% tabs %}
{% tab title="200 " %}

```
{"effectedRows": int}
```

{% endtab %}
{% endtabs %}

## &#x20;更新组中的列名

<mark style="color:green;">`POST`</mark> `/group/updateGroupColumnNames`

操作具有原子性

#### Request Body

| Name           | Type   | Description |
| -------------- | ------ | ----------- |
| groupName      | string |             |
| oldColumnNames | array  |             |
| newColumnNames | array  |             |

{% tabs %}
{% tab title="200 " %}

```
{"effectedCols": int}
```

{% endtab %}
{% endtabs %}

## &#x20;删除group中的列

<mark style="color:green;">`POST`</mark> `/group/deleteGroupColumns`

操作具有原子性

#### Request Body

| Name        | Type   | Description |
| ----------- | ------ | ----------- |
| groupName   | string |             |
| columnNames | array  |             |

{% tabs %}
{% tab title="200 " %}

```
{"effectedCols": int}
```

{% endtab %}
{% endtabs %}

## &#x20;向group中增加列

<mark style="color:green;">`POST`</mark> `/group/addGroupColumns`&#x20;

操作具有原子性

#### Request Body

| Name        | Type   | Description |
| ----------- | ------ | ----------- |
| groupName   | string |             |
| columnNames | array  |             |

{% tabs %}
{% tab title="200 " %}

```
{"effectedCols": int}
```

{% endtab %}
{% endtabs %}

#### 3.预定义的关键字

```
gdbKeyWords = 
break      default       func     interface       select
case       defer         go       map             struct
chan       else          goto     package         switch
const      fallthrough   if       range           type
continue   for           import   return          var
gdb        from          where    char            varchar
int        smallint      numeric  real            double 
precision  float         primary  key             foreign 
references not           null     create          table
insert     into          values   delete          update
set        where         drop     alter           add
truncate   distinct      all      and             or
join       as            *        order           by
desc       asc           between  union           except
is         avg           min      max             sum
count      group         having   realtimedata historicaldata
```

&#x20;                                                                                    [*fork me on github*](https://github.com/JustKeepSilence/gdb)
