1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2026-04-30 20:49:04 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot)
2026-01-13 21:44:57 +03:00
parent 67d59d1fd2
commit faeea425ac
79 changed files with 15905 additions and 10630 deletions
+1 -1
View File
@@ -1 +1 @@
07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426
020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A
@@ -0,0 +1 @@
{"URL":"http://localhost:9101","Login":"bayselonarrend","Password":"12we..."}
@@ -0,0 +1 @@
{"URL":"http://localhost:8123","Login":"bayselonarrend","Password":"12we..."}
+34 -14
View File
@@ -5,12 +5,14 @@
Authorization = New Structure(Login, Password);
// Connection creation
ConnectionSettings = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
Connection = OPI_ClickHouse.CreateGRPCConnection(ConnectionSettings);
// Request (simple)
// Request via open connection (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -22,9 +24,9 @@
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request (with data)
// Data insertion
QueryText = "INSERT INTO events FORMAT JSON";
QueryText = "INSERT INTO events_grpc FORMAT JSON";
DataFormat = "JSON";
DataArray = New Array;
@@ -38,15 +40,7 @@
Record1.Insert("event_type", "click");
Record1.Insert("payload" , "{}");
Record2 = New Structure;
Record2.Insert("id" , 2);
Record2.Insert("timestamp" , CurrentDate);
Record2.Insert("user_id" , 200);
Record2.Insert("event_type", "hover");
Record2.Insert("payload" , "{}");
DataArray.Add(Record1);
DataArray.Add(Record2);
Meta = New Array;
Meta.Add(New Structure("name,type", "id" , "UInt64"));
@@ -56,8 +50,34 @@
Meta.Add(New Structure("name,type", "payload" , "String"));
Data = New Structure("meta,data", Meta, DataArray);
Database = "default";
RequestID = String(New UUID());
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Request = OPI_ClickHouse.GetRequestSettings(QueryText, "default", RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Selection
SelectionText = "SELECT * FROM events_grpc";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request with external table via gRPC
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext_grpc", ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_grpc";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
+32 -3
View File
@@ -9,9 +9,9 @@
Connection = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
// Request (simple)
// Request (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -23,7 +23,7 @@
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request (with data)
// Request (data insertion)
QueryText = "INSERT INTO events FORMAT JSON";
@@ -62,3 +62,32 @@
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request with external table
TableName = "ext_users";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane
|3" + Tab + "Bob";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_users WHERE id > 1";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Selection
SelectionText = "SELECT * FROM events";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
@@ -0,0 +1,15 @@
// Minimal structure
TableName = "external_data";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct);
// With TSV data
TableData = StrTemplate("1%1Test
|2%2Test2", Chars.Tab);
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
@@ -0,0 +1,33 @@
URL = "http://localhost:9101";
// No authorization
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL);
// With basic authorization
Login = "bayselonarrend";
Password = "12we...";
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, JWT);
// With metadata
Meta = New Map;
Meta.Insert("custom-meta", "value");
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, Meta);
// With TLS settings
Tls = OPI_ClickHouse.GetTlsSettings(True);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, , Tls);
@@ -0,0 +1,27 @@
URL = "http://localhost:8123";
// No authorization
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL);
// With basic authorization
Login = "bayselonarrend";
Password = "12we...";
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, JWT);
// With additional headers
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("X-Custom-Header", "CustomValue");
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization, AdditionalHeaders);
+29
View File
@@ -0,0 +1,29 @@
// Minimal request
QueryText = "SELECT 1";
Result = OPI_ClickHouse.GetRequestSettings(QueryText);
// Full request
RequestID = String(New UUID());
Data = New Structure("meta,data", New Array, New Array);
Database = "default";
ResponseFormat = "CSV";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
ColoumnsStruct = New Structure("id,name", "UInt64", "String");
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext", ColoumnsStruct);
TableArray = New Array;
TableArray.Add(ExternalTable);
Result = OPI_ClickHouse.GetRequestSettings(QueryText
, Database
, RequestID
, Data
, ResponseFormat
, TableArray
, AdditionalSettings);
+5
View File
@@ -0,0 +1,5 @@
SessionID = String(New UUID);
Check = True;
Timeout = 120;
Result = OPI_ClickHouse.GetSessionSettings(SessionID, Check, Timeout);
+1
View File
@@ -0,0 +1 @@
Result = OPI_ClickHouse.GetTlsSettings(False);
+32 -3
View File
@@ -37,9 +37,9 @@ import TabItem from '@theme/TabItem';
Connection = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
// Request (simple)
// Request (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -51,7 +51,7 @@ import TabItem from '@theme/TabItem';
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request (with data)
// Request (data insertion)
QueryText = "INSERT INTO events FORMAT JSON";
@@ -90,6 +90,35 @@ import TabItem from '@theme/TabItem';
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request with external table
TableName = "ext_users";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane
|3" + Tab + "Bob";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_users WHERE id > 1";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Selection
SelectionText = "SELECT * FROM events";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 5
sidebar_position: 4
description: Get external table structure and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
@@ -26,7 +26,23 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
// Minimal structure
TableName = "external_data";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct);
// With TSV data
TableData = StrTemplate("1%1Test
|2%2Test2", Chars.Tab);
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
```
@@ -25,7 +25,35 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
URL = "http://localhost:8123";
// No authorization
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL);
// With basic authorization
Login = "bayselonarrend";
Password = "12we...";
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, JWT);
// With additional headers
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("X-Custom-Header", "CustomValue");
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization, AdditionalHeaders);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 4
sidebar_position: 3
description: Get request settings and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
@@ -35,7 +35,37 @@ The response body can be returned as a collection (for JSON) or as binary data (
<br/>
```bsl title="1C:Enterprise/OneScript code example"
// Minimal request
QueryText = "SELECT 1";
Result = OPI_ClickHouse.GetRequestSettings(QueryText);
// Full request
RequestID = String(New UUID());
Data = New Structure("meta,data", New Array, New Array);
Database = "default";
ResponseFormat = "CSV";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
ColoumnsStruct = New Structure("id,name", "UInt64", "String");
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext", ColoumnsStruct);
TableArray = New Array;
TableArray.Add(ExternalTable);
Result = OPI_ClickHouse.GetRequestSettings(QueryText
, Database
, RequestID
, Data
, ResponseFormat
, TableArray
, AdditionalSettings);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 5
description: Get session settings and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
@@ -25,7 +25,13 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
SessionID = String(New UUID);
Check = True;
Timeout = 120;
Result = OPI_ClickHouse.GetSessionSettings(SessionID, Check, Timeout);
```
+35 -15
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 1
sidebar_position: 2
description: Create GRPC connection and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
@@ -36,12 +36,14 @@ import TabItem from '@theme/TabItem';
Authorization = New Structure(Login, Password);
// Connection creation
ConnectionSettings = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
Connection = OPI_ClickHouse.CreateGRPCConnection(ConnectionSettings);
// Request (simple)
// Request via open connection (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -53,9 +55,9 @@ import TabItem from '@theme/TabItem';
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request (with data)
// Data insertion
QueryText = "INSERT INTO events FORMAT JSON";
QueryText = "INSERT INTO events_grpc FORMAT JSON";
DataFormat = "JSON";
DataArray = New Array;
@@ -69,15 +71,7 @@ import TabItem from '@theme/TabItem';
Record1.Insert("event_type", "click");
Record1.Insert("payload" , "{}");
Record2 = New Structure;
Record2.Insert("id" , 2);
Record2.Insert("timestamp" , CurrentDate);
Record2.Insert("user_id" , 200);
Record2.Insert("event_type", "hover");
Record2.Insert("payload" , "{}");
DataArray.Add(Record1);
DataArray.Add(Record2);
Meta = New Array;
Meta.Add(New Structure("name,type", "id" , "UInt64"));
@@ -87,10 +81,36 @@ import TabItem from '@theme/TabItem';
Meta.Add(New Structure("name,type", "payload" , "String"));
Data = New Structure("meta,data", Meta, DataArray);
Database = "default";
RequestID = String(New UUID());
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Request = OPI_ClickHouse.GetRequestSettings(QueryText, "default", RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Selection
SelectionText = "SELECT * FROM events_grpc";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// Request with external table via gRPC
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext_grpc", ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_grpc";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 3
sidebar_position: 1
description: Get gRPC connection settings and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
@@ -26,7 +26,41 @@ import TabItem from '@theme/TabItem';
```bsl title="1C:Enterprise/OneScript code example"
URL = "http://localhost:9101";
// No authorization
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL);
// With basic authorization
Login = "bayselonarrend";
Password = "12we...";
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, JWT);
// With metadata
Meta = New Map;
Meta.Insert("custom-meta", "value");
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, Meta);
// With TLS settings
Tls = OPI_ClickHouse.GetTlsSettings(True);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, , Tls);
```
+4 -2
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 2
sidebar_position: 6
description: Get TLS Settings and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
@@ -28,7 +28,9 @@ Tls settings can only be set when a connection is created: explicitly, by using
<br/>
```bsl title="1C:Enterprise/OneScript code example"
Result = OPI_ClickHouse.GetTlsSettings(False);
```
@@ -0,0 +1,37 @@
---
sidebar_position: 5
description: Open bidirectional GRPC stream and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Open bidirectional GRPC stream
Initializes a bidirectional stream for exchange
`Function OpenBidirectionalGRPCStream(Val Connection, Val Timeout = 10000) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Connection | - | Arbitrary | &#x2714; | GRPC connection object |
| Timeout | - | Number | &#x2716; | Timeout (in ms) |
Returns: Map Of KeyAndValue - Processing result
:::caution
**NOCLI:** this method is not available in CLI version
:::
<br/>
+37
View File
@@ -0,0 +1,37 @@
---
sidebar_position: 3
description: Open client GRPC stream and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Open client GRPC stream
Initializes a client stream for exchange
`Function OpenClientGRPCStream(Val Connection, Val Timeout = 10000) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Connection | - | Arbitrary | &#x2714; | GRPC connection object |
| Timeout | - | Number | &#x2716; | Timeout (in ms) |
Returns: Map Of KeyAndValue - Processing result
:::caution
**NOCLI:** this method is not available in CLI version
:::
<br/>
+39
View File
@@ -0,0 +1,39 @@
---
sidebar_position: 4
description: Open server GRPC stream and other functions to work with ClickHouse in the Open Integration Package, a free open-source integration library for 1C:Enterprise 8, OneScript and CLI
keywords: [1C, 1С, 1С:Enterprise, 1С:Enterprise 8.3, API, Integration, Services, Exchange, OneScript, CLI, ClickHouse]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Open server GRPC stream
Initializes a server stream for exchange
`Function OpenServerGRPCStream(Val Connection, Val Request = Undefined, Val Session = Undefined, Val Timeout = 10000) Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Connection | - | Arbitrary | &#x2714; | GRPC connection object |
| Request | - | Structure Of KeyAndValue | &#x2716; | Request data. See GetRequestSettings |
| Session | - | Structure Of KeyAndValue | &#x2716; | Session settings. See GetSessionSettings |
| Timeout | - | Number | &#x2716; | Timeout (in ms) |
Returns: Map Of KeyAndValue - Processing result
:::caution
**NOCLI:** this method is not available in CLI version
:::
<br/>
@@ -0,0 +1 @@
{"URL":"http://localhost:9101","Логин":"bayselonarrend","Пароль":"12we..."}
@@ -0,0 +1 @@
{"URL":"http://localhost:8123","Логин":"bayselonarrend","Пароль":"12we..."}
@@ -9,9 +9,9 @@
Соединение = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация);
// Запрос (простой)
// Запрос (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -23,7 +23,7 @@
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос (с данными)
// Запрос (вставка данных)
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
@@ -62,3 +62,32 @@
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, БазаДанных, IDЗапроса, Данные, ФорматДанных);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос с внешней таблицей
ИмяТаблицы = "ext_users";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane
|3" + Таб + "Bob";
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок, ДанныеТаблицы, "TSV");
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_users WHERE id > 1";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", МассивВнешнихТаблиц);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Выборка
ТекстВыборки = "SELECT * FROM events";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
@@ -5,12 +5,14 @@
Авторизация = Новый Структура(Логин, Пароль);
// Открытие соединения
НастройкиСоединения = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация);
Соединение = OPI_ClickHouse.ОткрытьСоединениеGRPC(НастройкиСоединения);
// Запрос (простой)
// Запрос через открытое соединение (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -22,9 +24,9 @@
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос (с данными)
// Вставка данных
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
ТекстЗапроса = "INSERT INTO events_grpc FORMAT JSON";
ФорматДанных = "JSON";
МассивДанных = Новый Массив;
@@ -38,15 +40,7 @@
Запись1.Вставить("event_type", "click");
Запись1.Вставить("payload" , "{}");
Запись2 = Новый Структура;
Запись2.Вставить("id" , 2);
Запись2.Вставить("timestamp" , ТекущаяДата);
Запись2.Вставить("user_id" , 200);
Запись2.Вставить("event_type", "hover");
Запись2.Вставить("payload" , "{}");
МассивДанных.Добавить(Запись1);
МассивДанных.Добавить(Запись2);
Мета = Новый Массив;
Мета.Добавить(Новый Структура("name,type", "id" , "UInt64"));
@@ -55,9 +49,35 @@
Мета.Добавить(Новый Структура("name,type", "event_type", "String"));
Мета.Добавить(Новый Структура("name,type", "payload" , "String"));
Данные = Новый Структура("meta,data", Мета, МассивДанных);
БазаДанных = "default";
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Мета, МассивДанных);
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, БазаДанных, IDЗапроса, Данные, ФорматДанных);
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, "default", IDЗапроса, Данные, ФорматДанных);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Выборка
ТекстВыборки = "SELECT * FROM events_grpc";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос с внешней таблицей через gRPC
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane";
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext_grpc", СтруктураКолонок, ДанныеТаблицы, "TSV");
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_grpc";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", МассивВнешнихТаблиц);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
@@ -0,0 +1 @@
Результат = OPI_ClickHouse.ПолучитьНастройкиTls(Ложь);
@@ -0,0 +1,29 @@
// Минимальный запрос
ТекстЗапроса = "SELECT 1";
Результат = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
// Полный запрос
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Новый Массив, Новый Массив);
БазаДанных = "default";
ФорматОтвета = "CSV";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
СтруктураКолонок = Новый Структура("id,name", "UInt64", "String");
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext", СтруктураКолонок);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить(ВнешняяТаблица);
Результат = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса
, БазаДанных
, IDЗапроса
, Данные
, ФорматОтвета
, МассивТаблиц
, ДопНастройки);
@@ -0,0 +1,5 @@
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
Результат = OPI_ClickHouse.ПолучитьНастройкиСессии(IDСессии, Проверять, Таймаут);
@@ -0,0 +1,33 @@
URL = "http://localhost:9101";
// Без авторизации
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL);
// С basic авторизацией
Логин = "bayselonarrend";
Пароль = "12we...";
Авторизация = Новый Структура(Логин, Пароль);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация);
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, JWT);
// С метаданными
Meta = Новый Соответствие;
Meta.Вставить("custom-meta", "value");
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация, Meta);
// С TLS настройками
Tls = OPI_ClickHouse.ПолучитьНастройкиTls(Истина);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация, , Tls);
@@ -0,0 +1,27 @@
URL = "http://localhost:8123";
// Без авторизации
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL);
// С basic авторизацией
Логин = "bayselonarrend";
Пароль = "12we...";
Авторизация = Новый Структура(Логин, Пароль);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация);
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, JWT);
// С дополнительными заголовками
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("X-Custom-Header", "CustomValue");
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация, ДопЗаголовки);
@@ -0,0 +1,15 @@
// Минимальная структура
ИмяТаблицы = "external_data";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Результат = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок);
// С данными TSV
ДанныеТаблицы = СтрШаблон("1%1Test
|2%2Test2", Символы.Таб);
Результат = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок, ДанныеТаблицы, "TSV");
+32 -3
View File
@@ -37,9 +37,9 @@ import TabItem from '@theme/TabItem';
Соединение = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация);
// Запрос (простой)
// Запрос (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -51,7 +51,7 @@ import TabItem from '@theme/TabItem';
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос (с данными)
// Запрос (вставка данных)
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
@@ -90,6 +90,35 @@ import TabItem from '@theme/TabItem';
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, БазаДанных, IDЗапроса, Данные, ФорматДанных);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос с внешней таблицей
ИмяТаблицы = "ext_users";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane
|3" + Таб + "Bob";
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок, ДанныеТаблицы, "TSV");
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_users WHERE id > 1";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", МассивВнешнихТаблиц);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Выборка
ТекстВыборки = "SELECT * FROM events";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 5
sidebar_position: 4
description: Получить структуру внешней таблицы и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
@@ -26,7 +26,23 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
// Минимальная структура
ИмяТаблицы = "external_data";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Результат = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок);
// С данными TSV
ДанныеТаблицы = СтрШаблон("1%1Test
|2%2Test2", Символы.Таб);
Результат = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок, ДанныеТаблицы, "TSV");
```
@@ -25,7 +25,35 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "http://localhost:8123";
// Без авторизации
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL);
// С basic авторизацией
Логин = "bayselonarrend";
Пароль = "12we...";
Авторизация = Новый Структура(Логин, Пароль);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация);
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, JWT);
// С дополнительными заголовками
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("X-Custom-Header", "CustomValue");
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация, ДопЗаголовки);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 4
sidebar_position: 3
description: Получить настройки запроса и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
@@ -35,7 +35,37 @@ import TabItem from '@theme/TabItem';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
// Минимальный запрос
ТекстЗапроса = "SELECT 1";
Результат = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
// Полный запрос
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Новый Массив, Новый Массив);
БазаДанных = "default";
ФорматОтвета = "CSV";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
СтруктураКолонок = Новый Структура("id,name", "UInt64", "String");
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext", СтруктураКолонок);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить(ВнешняяТаблица);
Результат = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса
, БазаДанных
, IDЗапроса
, Данные
, ФорматОтвета
, МассивТаблиц
, ДопНастройки);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 6
sidebar_position: 5
description: Получить настройки сессии и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
@@ -25,7 +25,13 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
Результат = OPI_ClickHouse.ПолучитьНастройкиСессии(IDСессии, Проверять, Таймаут);
```
+38 -18
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 1
sidebar_position: 2
description: Открыть соединение GRPC и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
@@ -16,7 +16,7 @@ import TabItem from '@theme/TabItem';
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| НастройкиСоединения | - | Структура Из КлючИЗначение | &#x2714; | Параметры соединения. См. [`ПолучитьНастройкиСоединенияGRPC`](/docs/ClickHouse/Common-methods/Get-grpc-connection-settings) |
| НастройкиСоединения | - | Структура Из КлючИЗначение | &#x2714; | Параметры соединения. См. [`ПолучитьНастройкиСоединенияGRPC`](/docs/ClickHouse/Grpc/Get-grpc-connection-settings) |
Возвращаемое значение: Произвольный - Объект коннектора или соответствие с информацией об ошибке
@@ -36,12 +36,14 @@ import TabItem from '@theme/TabItem';
Авторизация = Новый Структура(Логин, Пароль);
// Открытие соединения
НастройкиСоединения = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация);
Соединение = OPI_ClickHouse.ОткрытьСоединениеGRPC(НастройкиСоединения);
// Запрос (простой)
// Запрос через открытое соединение (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -53,9 +55,9 @@ import TabItem from '@theme/TabItem';
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос (с данными)
// Вставка данных
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
ТекстЗапроса = "INSERT INTO events_grpc FORMAT JSON";
ФорматДанных = "JSON";
МассивДанных = Новый Массив;
@@ -69,15 +71,7 @@ import TabItem from '@theme/TabItem';
Запись1.Вставить("event_type", "click");
Запись1.Вставить("payload" , "{}");
Запись2 = Новый Структура;
Запись2.Вставить("id" , 2);
Запись2.Вставить("timestamp" , ТекущаяДата);
Запись2.Вставить("user_id" , 200);
Запись2.Вставить("event_type", "hover");
Запись2.Вставить("payload" , "{}");
МассивДанных.Добавить(Запись1);
МассивДанных.Добавить(Запись2);
Мета = Новый Массив;
Мета.Добавить(Новый Структура("name,type", "id" , "UInt64"));
@@ -86,11 +80,37 @@ import TabItem from '@theme/TabItem';
Мета.Добавить(Новый Структура("name,type", "event_type", "String"));
Мета.Добавить(Новый Структура("name,type", "payload" , "String"));
Данные = Новый Структура("meta,data", Мета, МассивДанных);
БазаДанных = "default";
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Мета, МассивДанных);
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, БазаДанных, IDЗапроса, Данные, ФорматДанных);
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, "default", IDЗапроса, Данные, ФорматДанных);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Выборка
ТекстВыборки = "SELECT * FROM events_grpc";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// Запрос с внешней таблицей через gRPC
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane";
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext_grpc", СтруктураКолонок, ДанныеТаблицы, "TSV");
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_grpc";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", МассивВнешнихТаблиц);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
```
@@ -1,5 +1,5 @@
---
sidebar_position: 3
sidebar_position: 1
description: Получить настройки соединения gRPC и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
@@ -26,7 +26,41 @@ import TabItem from '@theme/TabItem';
```bsl title="Пример использования для 1С:Предприятие/OneScript"
URL = "http://localhost:9101";
// Без авторизации
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL);
// С basic авторизацией
Логин = "bayselonarrend";
Пароль = "12we...";
Авторизация = Новый Структура(Логин, Пароль);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация);
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, JWT);
// С метаданными
Meta = Новый Соответствие;
Meta.Вставить("custom-meta", "value");
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация, Meta);
// С TLS настройками
Tls = OPI_ClickHouse.ПолучитьНастройкиTls(Истина);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация, , Tls);
```
+4 -2
View File
@@ -1,5 +1,5 @@
---
sidebar_position: 2
sidebar_position: 6
description: Получить настройки TLS и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
@@ -28,7 +28,9 @@ import TabItem from '@theme/TabItem';
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Результат = OPI_ClickHouse.ПолучитьНастройкиTls(Ложь);
```
@@ -0,0 +1,37 @@
---
sidebar_position: 5
description: Открыть двунаправленный поток GRPC и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Открыть двунаправленный поток GRPC
Инициализирует двунаправленный поток для обмена
`Функция ОткрытьДвунаправленныйПотокGRPC(Знач Соединение, Знач Таймаут = 10000) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Соединение | - | Произвольный | &#x2714; | Объект GRPC соединения |
| Таймаут | - | Число | &#x2716; | Таймаут (в мс) |
Возвращаемое значение: Соответствие Из КлючИЗначение - Результат обработки
:::caution
**NOCLI:** данный метод недоступен для использования в CLI версии
:::
<br/>
+37
View File
@@ -0,0 +1,37 @@
---
sidebar_position: 3
description: Открыть клиентский поток GRPC и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Открыть клиентский поток GRPC
Инициализирует клиентский поток для обмена
`Функция ОткрытьКлиентскийПотокGRPC(Знач Соединение, Знач Таймаут = 10000) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Соединение | - | Произвольный | &#x2714; | Объект GRPC соединения |
| Таймаут | - | Число | &#x2716; | Таймаут (в мс) |
Возвращаемое значение: Соответствие Из КлючИЗначение - Результат обработки
:::caution
**NOCLI:** данный метод недоступен для использования в CLI версии
:::
<br/>
+39
View File
@@ -0,0 +1,39 @@
---
sidebar_position: 4
description: Открыть серверный поток GRPC и другие функции для работы с ClickHouse в Открытом пакете интеграций - бесплатной open-source библиотеке интеграций для 1С:Предприятие 8, OneScript и CLI
keywords: [1C, 1С, 1С:Предприятие, 1С:Предприятие 8.3, API, Интеграция, Сервисы, Обмен, OneScript, CLI, ClickHouse]
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Открыть серверный поток GRPC
Инициализирует серверный поток для обмена
`Функция ОткрытьСерверныйПотокGRPC(Знач Соединение, Знач Запрос = Неопределено, Знач Сессия = Неопределено, Знач Таймаут = 10000) Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Соединение | - | Произвольный | &#x2714; | Объект GRPC соединения |
| Запрос | - | Структура Из КлючИЗначение | &#x2716; | Данные запроса. См. [`ПолучитьНастройкиЗапроса`](/docs/ClickHouse/Common-methods/Get-request-settings) |
| Сессия | - | Структура Из КлючИЗначение | &#x2716; | Настройки сессии. См. [`ПолучитьНастройкиСессии`](/docs/ClickHouse/Common-methods/Get-session-settings) |
| Таймаут | - | Число | &#x2716; | Таймаут (в мс) |
Возвращаемое значение: Соответствие Из КлючИЗначение - Результат обработки
:::caution
**NOCLI:** данный метод недоступен для использования в CLI версии
:::
<br/>
+9961 -9961
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -1 +1 @@
07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426
020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A
+130 -5
View File
@@ -7002,7 +7002,17 @@
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "Simple"
"variant": "TableCreation"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "DataInsert"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "ExternalTable"
},
{
"lib": "ClickHouse",
@@ -7011,17 +7021,132 @@
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "CSVSelection"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "TSVSelection"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "JSONCompactSelection"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "AdditionalSettings"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "SessionCreation"
},
{
"lib": "ClickHouse",
"name": "ExecuteRequest",
"variant": "SessionInsert"
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": "Openning"
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": "TableCreation"
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": "DataInsert"
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": "Selection"
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": "Simple"
"name": "GetHTTPConnectionSettings",
"variant": "NoAuthorization"
},
{
"lib": "ClickHouse",
"name": "CreateGRPCConnection",
"variant": "Complex"
"name": "GetHTTPConnectionSettings",
"variant": "BasicAuthorization"
},
{
"lib": "ClickHouse",
"name": "GetHTTPConnectionSettings",
"variant": "JWTAuthorization"
},
{
"lib": "ClickHouse",
"name": "GetHTTPConnectionSettings",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "GetGRPCConnectionSettings",
"variant": "NoAuthorization"
},
{
"lib": "ClickHouse",
"name": "GetGRPCConnectionSettings",
"variant": "BasicAuthorization"
},
{
"lib": "ClickHouse",
"name": "GetGRPCConnectionSettings",
"variant": "JWTAuthorization"
},
{
"lib": "ClickHouse",
"name": "GetGRPCConnectionSettings",
"variant": "WithMetadata"
},
{
"lib": "ClickHouse",
"name": "GetGRPCConnectionSettings",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "GetRequestSettings",
"variant": "Minimal"
},
{
"lib": "ClickHouse",
"name": "GetRequestSettings",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "GetExternalTableStructure",
"variant": "Minimal"
},
{
"lib": "ClickHouse",
"name": "GetExternalTableStructure",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "GetSessionSettings",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "GetTlsSettings",
"variant": ""
}
]
+130 -5
View File
@@ -7002,7 +7002,17 @@
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "Простой"
"variant": "СозданиеТаблицы"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "ВставкаДанных"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "ВнешняяТаблица"
},
{
"lib": "ClickHouse",
@@ -7011,17 +7021,132 @@
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "ВыборкаCSV"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "ВыборкаTSV"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "ВыборкаJSONCompact"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "ДопНастройки"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "СессияСоздание"
},
{
"lib": "ClickHouse",
"name": "ВыполнитьЗапрос",
"variant": "СессияВставка"
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": "Открытие"
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": "СозданиеТаблицы"
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": "ВставкаДанных"
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": "Выборка"
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": "Простой"
"name": "ПолучитьНастройкиСоединенияHTTP",
"variant": "БезАвторизации"
},
{
"lib": "ClickHouse",
"name": "ОткрытьСоединениеGRPC",
"variant": "Сложный"
"name": "ПолучитьНастройкиСоединенияHTTP",
"variant": "BasicАвторизация"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияHTTP",
"variant": "JWTАвторизация"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияHTTP",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияGRPC",
"variant": "БезАвторизации"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияGRPC",
"variant": "BasicАвторизация"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияGRPC",
"variant": "JWTАвторизация"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияGRPC",
"variant": "СМетаданными"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСоединенияGRPC",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиЗапроса",
"variant": "Минимальный"
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиЗапроса",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "ПолучитьСтруктуруВнешнейТаблицы",
"variant": "Минимальная"
},
{
"lib": "ClickHouse",
"name": "ПолучитьСтруктуруВнешнейТаблицы",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиСессии",
"variant": ""
},
{
"lib": "ClickHouse",
"name": "ПолучитьНастройкиTls",
"variant": ""
}
]
+1 -1
View File
@@ -1 +1 @@
07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426
020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A
+280 -54
View File
@@ -125,38 +125,6 @@ Function GetHTTPConnectionSettings(Val Address
EndFunction
// Get gRPC connection settings
// Gets the settings structure for gRPC connection
//
// Parameters:
// Address - String - Connection address with protocol and port - url
// Authorization - String, Structure Of KeyAndValue - Authorization: string for JWT, structure for basic - auth
// Meta - Structure Of KeyAndValue - gRPC metadata structure, if necessary - meta
// Tls - Structure Of KeyAndValue - TLS settings. See GetTlsSettings - tls
//
// Returns:
// Structure Of KeyAndValue - Connection settings structure
Function GetGRPCConnectionSettings(Val Address
, Val Authorization = Undefined
, Val Meta = Undefined
, Val Tls = Undefined) Export
ConnectionSettings = New Structure;
OPI_Tools.AddField("address" , Address , "String" , ConnectionSettings);
OPI_Tools.AddField("tls" , Tls , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("metadata" , Meta , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("transport", "grpc" , "String" , ConnectionSettings);
If Authorization = Undefined Then
Return ConnectionSettings;
EndIf;
CompleteAuthorizationSettings(Authorization, ConnectionSettings);
Return ConnectionSettings;
EndFunction
// Get request settings
// Forms the request description structure
//
@@ -240,10 +208,6 @@ Function GetSessionSettings(Val SessionID = Undefined
SessionSettings = New Structure;
HasSessionID = SessionID <> Undefined;
If HasSessionID Then
SessionID = String(New UUID());
EndIf;
If CheckSession = Undefined Then
CheckSession = HasSessionID;
EndIf;
@@ -260,6 +224,38 @@ EndFunction
#Region GRPC
// Get gRPC connection settings
// Gets the settings structure for gRPC connection
//
// Parameters:
// Address - String - Connection address with protocol and port - url
// Authorization - String, Structure Of KeyAndValue - Authorization: string for JWT, structure for basic - auth
// Meta - Structure Of KeyAndValue - gRPC metadata structure, if necessary - meta
// Tls - Structure Of KeyAndValue - TLS settings. See GetTlsSettings - tls
//
// Returns:
// Structure Of KeyAndValue - Connection settings structure
Function GetGRPCConnectionSettings(Val Address
, Val Authorization = Undefined
, Val Meta = Undefined
, Val Tls = Undefined) Export
ConnectionSettings = New Structure;
OPI_Tools.AddField("address" , Address , "String" , ConnectionSettings);
OPI_Tools.AddField("tls" , Tls , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("metadata" , Meta , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("transport", "grpc" , "String" , ConnectionSettings);
If Authorization = Undefined Then
Return ConnectionSettings;
EndIf;
CompleteAuthorizationSettings(Authorization, ConnectionSettings);
Return ConnectionSettings;
EndFunction
// Create GRPC connection !NOCLI
// Opens a GRPC connection for working with ClickHouse
//
@@ -304,6 +300,56 @@ Function CreateGRPCConnection(Val ConnectionSettings) Export
EndFunction
// Open client GRPC stream !NOCLI
// Initializes a client stream for exchange
//
// Parameters:
// Connection - Arbitrary - GRPC connection object - conn
// Timeout - Number - Timeout (in ms) - tout
//
// Returns:
// Map Of KeyAndValue - Processing result
Function OpenClientGRPCStream(Val Connection, Val Timeout = 10000) Export
Return OpenGRPCStream(Connection, "client", , , Timeout);
EndFunction
// Open server GRPC stream !NOCLI
// Initializes a server stream for exchange
//
// Parameters:
// Connection - Arbitrary - GRPC connection object - conn
// Request - Structure Of KeyAndValue - Request data. See GetRequestSettings - req
// Session - Structure Of KeyAndValue - Session settings. See GetSessionSettings - session
// Timeout - Number - Timeout (in ms) - tout
//
// Returns:
// Map Of KeyAndValue - Processing result
Function OpenServerGRPCStream(Val Connection
, Val Request = Undefined
, Val Session = Undefined
, Val Timeout = 10000) Export
Return OpenGRPCStream(Connection, "server", Request, Session, Timeout);
EndFunction
// Open bidirectional GRPC stream !NOCLI
// Initializes a bidirectional stream for exchange
//
// Parameters:
// Connection - Arbitrary - GRPC connection object - conn
// Timeout - Number - Timeout (in ms) - tout
//
// Returns:
// Map Of KeyAndValue - Processing result
Function OpenBidirectionalGRPCStream(Val Connection, Val Timeout = 10000) Export
Return OpenGRPCStream(Connection, "bidi", , , Timeout);
EndFunction
// Get TLS Settings
// Forms settings for using TLS
//
@@ -355,6 +401,23 @@ Procedure CompleteAuthorizationSettings(Val Authorization, ConnectionSettings)
EndProcedure
Function IsValidJSONFormat(Val Format)
Return Format = "JSON"
Or Format = "JSONCompact"
Or Format = "JSONColumns"
Or Format = "JSONColumnsWithMetadata";
EndFunction
Function IsStringFormat(Val Format)
Return StrFind(Format, "CSV") > 0
Or StrFind(Format, "TSV") > 0
Or StrFind(Format, "Pretty") > 0;
EndFunction
#EndRegion
#Region HTTP
@@ -384,17 +447,17 @@ Function ExecuteRequestViaHTTP(Val Connection, Val Request, Val Session)
.AddHeader("X-ClickHouse-Database", Database, True)
.SetBinaryBody(Data);
SetAdditionalHTTPParameters(HTTPClient, Request);
SetAdditionalHTTPHeaders(HTTPClient, Connection);
SetHTTPAuthorization(HTTPClient, Connection);
SetHTTPExternalTables(HTTPClient, ExternalTables);
SetHTTPSession(HTTPClient, Session);
SetAdditionalHTTPParameters(HTTPClient, Request);
SetAdditionalHTTPHeaders(HTTPClient, Connection);
HTTPClient.ProcessRequest("POST", True);
If HTTPClient.Error Then
Response = FormatHTTPErrorResponse(HTTPClient);
Else
Try
@@ -407,8 +470,15 @@ Function ExecuteRequestViaHTTP(Val Connection, Val Request, Val Session)
If ResponseCode < 300 Then
Result = True;
ResponseBody = HTTPClient.ReturnResponseAsJSONObject();
Result = True;
If IsValidJSONFormat(DataFormat) Then
ResponseBody = HTTPClient.ReturnResponseAsJSONObject();
ElsIf IsStringFormat(DataFormat) Then
ResponseBody = HTTPClient.ReturnResponseAsString();
Else
ResponseBody = HTTPClient.ReturnResponseAsBinaryData();
EndIf;
If OPI_Tools.IsCLI() Then
@@ -488,7 +558,7 @@ Procedure SetHTTPAuthorization(HTTPClient, Val Connection)
ElsIf Authorization = "basic" Then
Login = OPI_Tools.GetOr(Connection, "user", Undefined);
Login = OPI_Tools.GetOr(Connection, "user" , Undefined);
Password = OPI_Tools.GetOr(Connection, "password", Undefined);
HTTPClient
@@ -542,12 +612,33 @@ Procedure SetHTTPExternalTables(HTTPClient, Val ExternalTables)
HTTPClient
.AddURLParameter(FormatParameterName , TableFormat , True)
.AddURLParameter(StructureParameterName, ColumnsAsString, True)
.AddMultipartFormDataFile(TableName, FileName, TableData, FileDataType, True);
EndDo;
EndProcedure
Procedure SetHTTPSession(HTTPClient, Val Session)
If Not ValueIsFilled(Session) Then
Return;
EndIf;
ErrorText = "An incorrect session information structure was passed";
OPI_TypeConversion.GetKeyValueCollection(Session, ErrorText);
SessionID = OPI_Tools.GetOr(Session, "id" , Undefined);
Check = OPI_Tools.GetOr(Session, "check" , Undefined);
Timeout = OPI_Tools.GetOr(Session, "timeout", Undefined);
HTTPClient
.AddURLParameter("session_id" , SessionID, True)
.AddURLParameter("session_check" , Check , True)
.AddURLParameter("session_timeout", Timeout , True);
EndProcedure
#EndRegion
#Region GRPC
@@ -568,6 +659,64 @@ Function ExecuteRequestViaGRPC(Val Connection, Val Request, Val Session)
Return Connector;
EndIf;
GRPCRequest = FormGRPCRequest(ConnectionSettings, Request, Session);
Service = GetGRPCServiceName();
Method = "ExecuteQuery";
Result = OPI_GRPC.ExecuteMethod(Connector, Service, Method, GRPCRequest);
ProcessGRPCResponse(Result);
If CloseConnection Then
OPI_GRPC.CloseConnection(Connector);
EndIf;
Return Result;
EndFunction
Function OpenGRPCStream(Connection
, Val View
, Val Request = Undefined
, Val Session = Undefined
, Val Timeout = 10000)
Service = GetGRPCServiceName();
If View = "client" Then
Method = "ExecuteQueryWithStreamInput";
Result = OPI_GRPC.InitializeClientStream(Connection, Service, Method, Timeout);
ElsIf View = "server" Then
Method = "ExecuteQueryWithStreamOutput";
GRPCRequest = FormGRPCRequest(Connection, Request, Session);
Result = OPI_GRPC.InitializeServerStream(Connection, Service, Method, GRPCRequest, Timeout);
Else
Method = "ExecuteQueryWithStreamIO";
Result = OPI_GRPC.InitializeBidirectionalStream(Connection, Service, Method, Timeout);
EndIf;
Return Result;
EndFunction
Function FormGRPCRequest(Val Connection, Val Request, Val Session)
If Request = Undefined Then
Return Request;
EndIf;
If OPI_GRPC.IsConnector(Connection) Then
ConnectionSettings = OPI_Tools.JsonToStructure(Connection.GetSettings());
Else
ConnectionSettings = Connection;
EndIf;
Data = OPI_Tools.GetOr(Request, "data" , Undefined);
RequestID = OPI_Tools.GetOr(Request, "id" , Undefined);
QueryText = OPI_Tools.GetOr(Request, "query" , Undefined);
@@ -586,16 +735,15 @@ Function ExecuteRequestViaGRPC(Val Connection, Val Request, Val Session)
SetGRPCAuthorization(GRPCRequest, ConnectionSettings);
SetGRPCExternalTables(GRPCRequest, ExternalTables);
SetGRPCSession(GRPCRequest, Session);
Service = "clickhouse.grpc.ClickHouse";
Method = "ExecuteQuery";
Result = OPI_GRPC.ExecuteMethod(Connector, Service, Method, GRPCRequest);
Return GRPCRequest;
If CloseConnection Then
OPI_GRPC.CloseConnection(Connector);
EndIf;
EndFunction
Return Result;
Function GetGRPCServiceName()
Return "clickhouse.grpc.ClickHouse";
EndFunction
@@ -643,6 +791,10 @@ Procedure SetGRPCExternalTables(GRPCRequest, Val ExternalTables)
TableData = OPI_Tools.GetOr(Table, "data" , Undefined);
TableColumns = OPI_Tools.GetOr(Table, "cols" , Undefined);
If TableData <> Undefined Then
OPI_TypeConversion.GetBinaryData(TableData, True);
EndIf;
ErrorText = StrTemplate("Incorrect structure of columns for the table ""%1""", TableName);
OPI_TypeConversion.GetKeyValueCollection(TableColumns, ErrorText);
@@ -674,6 +826,68 @@ Procedure SetGRPCExternalTables(GRPCRequest, Val ExternalTables)
EndProcedure
Procedure SetGRPCSession(GRPCRequest, Val Session)
If Not ValueIsFilled(Session) Then
Return;
EndIf;
ErrorText = "An incorrect session information structure was passed";
OPI_TypeConversion.GetKeyValueCollection(Session, ErrorText);
SessionID = OPI_Tools.GetOr(Session, "id" , Undefined);
Check = OPI_Tools.GetOr(Session, "check" , Undefined);
Timeout = OPI_Tools.GetOr(Session, "timeout", Undefined);
OPI_Tools.AddField("session_id" , SessionID, "String" , GRPCRequest);
OPI_Tools.AddField("session_check" , Check , "Boolean", GRPCRequest);
OPI_Tools.AddField("session_timeout", Timeout , "Number" , GRPCRequest);
EndProcedure
Procedure ProcessGRPCResponse(Response)
If Not OPI_Tools.GetOr(Response, "result", False) Then
Return;
EndIf;
Format = OPI_Tools.GetOr(Response, "output_format", Undefined);
If Not ValueIsFilled(Format) Then
Return;
EndIf;
B64String = OPI_Tools.CollectionFieldExists(Response, "data.output.BYTES");
If ValueIsFilled(B64String) Then
If IsValidJSONFormat(Format) Then
Value = GetBinaryDataFromBase64String(B64String);
Success = False;
OPI_TypeConversion.GetCollection(Value, , Success);
If Not Success Then
Value = GetStringFromBinaryData(Value);
EndIf;
ElsIf IsStringFormat(Format) Then
Value = GetBinaryDataFromBase64String(B64String);
Value = GetStringFromBinaryData(Value);
Else
Return;
EndIf;
Response["data"]["output"] = Value;
EndIf;
EndProcedure
#EndRegion
#EndRegion
@@ -688,10 +902,6 @@ Function ПолучитьНастройкиСоединенияHTTP(Val Адре
Return GetHTTPConnectionSettings(Адрес, Авторизация, ДопЗаголовки);
EndFunction
Function ПолучитьНастройкиСоединенияGRPC(Val Адрес, Val Авторизация = Undefined, Val Meta = Undefined, Val Tls = Undefined) Export
Return GetGRPCConnectionSettings(Адрес, Авторизация, Meta, Tls);
EndFunction
Function ПолучитьНастройкиЗапроса(Val Текст, Val БазаДанных = Undefined, Val IDЗапроса = Undefined, Val Данные = Undefined, Val ФорматОтвета = "JSON", Val ВнешниеТаблицы = Undefined, Val Настройки = Undefined) Export
Return GetRequestSettings(Текст, БазаДанных, IDЗапроса, Данные, ФорматОтвета, ВнешниеТаблицы, Настройки);
EndFunction
@@ -704,10 +914,26 @@ Function ПолучитьНастройкиСессии(Val IDСессии = Und
Return GetSessionSettings(IDСессии, ПроверятьСессию, Таймаут);
EndFunction
Function ПолучитьНастройкиСоединенияGRPC(Val Адрес, Val Авторизация = Undefined, Val Meta = Undefined, Val Tls = Undefined) Export
Return GetGRPCConnectionSettings(Адрес, Авторизация, Meta, Tls);
EndFunction
Function ОткрытьСоединениеGRPC(Val НастройкиСоединения) Export
Return CreateGRPCConnection(НастройкиСоединения);
EndFunction
Function ОткрытьКлиентскийПотокGRPC(Val Соединение, Val Таймаут = 10000) Export
Return OpenClientGRPCStream(Соединение, Таймаут);
EndFunction
Function ОткрытьСерверныйПотокGRPC(Val Соединение, Val Запрос = Undefined, Val Сессия = Undefined, Val Таймаут = 10000) Export
Return OpenServerGRPCStream(Соединение, Запрос, Сессия, Таймаут);
EndFunction
Function ОткрытьДвунаправленныйПотокGRPC(Val Соединение, Val Таймаут = 10000) Export
Return OpenBidirectionalGRPCStream(Соединение, Таймаут);
EndFunction
Function ПолучитьНастройкиTls(Val ОтключитьПроверкуСертификатов, Val ПутьКСертификату = "") Export
Return GetTlsSettings(ОтключитьПроверкуСертификатов, ПутьКСертификату);
EndFunction
+325 -25
View File
@@ -3362,11 +3362,17 @@ EndProcedure
Procedure CH_CommonMethods() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_AddressGRPC", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_ExecuteRequest(TestParameters);
ClickHouse_GetHTTPConnectionSettings(TestParameters);
ClickHouse_GetGRPCConnectionSettings(TestParameters);
ClickHouse_GetRequestSettings(TestParameters);
ClickHouse_GetExternalTableStructure(TestParameters);
ClickHouse_GetSessionSettings(TestParameters);
EndProcedure
@@ -3378,6 +3384,7 @@ Procedure CH_GRPC() Export
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_CreateGRPCConnection(TestParameters);
ClickHouse_GetTlsSettings(TestParameters);
EndProcedure
@@ -27069,9 +27076,9 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Connection = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
// Request (simple)
// Request (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -27080,15 +27087,15 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE events"); // SKIP
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "Simple"); // SKIP
Process(Result, "ClickHouse", "ExecuteRequest", "TableCreation"); // SKIP
// Request (with data)
// Request (data insertion)
QueryText = "INSERT INTO events FORMAT JSON";
@@ -27128,6 +27135,89 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "DataInsert"); // SKIP
// Request with external table
TableName = "ext_users";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane
|3" + Tab + "Bob";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_users WHERE id > 1";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "ExternalTable"); // SKIP
// Selection
SelectionText = "SELECT * FROM events";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// END
Process(Result, "ClickHouse", "ExecuteRequest"); // SKIP
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "CSV");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "CSVSelection");
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "TSV");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "TSVSelection");
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSONCompact");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "JSONCompactSelection");
QueryText = "SELECT 1 AS result";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", , AdditionalSettings);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "AdditionalSettings");
Session = OPI_ClickHouse.GetSessionSettings(String(New UUID()));
QueryText = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request, Session);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionCreation");
QueryText = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request, Session);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionInsert");
QueryText = "SELECT * FROM temp_session_test";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request, Session);
// END
Process(Result, "ClickHouse", "ExecuteRequest");
@@ -27143,14 +27233,16 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Authorization = New Structure(Login, Password);
// Connection creation
ConnectionSettings = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
Connection = OPI_ClickHouse.CreateGRPCConnection(ConnectionSettings);
Process(Connection, "ClickHouse", "CreateGRPCConnection"); // SKIP
Process(Connection, "ClickHouse", "CreateGRPCConnection", "Openning"); // SKIP
// Request (simple)
// Request via open connection (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -27159,14 +27251,17 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events_grpc"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Simple"); // SKIP
Process(Result, "ClickHouse", "CreateGRPCConnection", "TableCreation"); // SKIP
// Request (with data)
// Data insertion
QueryText = "INSERT INTO events FORMAT JSON";
QueryText = "INSERT INTO events_grpc FORMAT JSON";
DataFormat = "JSON";
DataArray = New Array;
@@ -27180,15 +27275,7 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Record1.Insert("event_type", "click");
Record1.Insert("payload" , "{}");
Record2 = New Structure;
Record2.Insert("id" , 2);
Record2.Insert("timestamp" , CurrentDate);
Record2.Insert("user_id" , 200);
Record2.Insert("event_type", "hover");
Record2.Insert("payload" , "{}");
DataArray.Add(Record1);
DataArray.Add(Record2);
Meta = New Array;
Meta.Add(New Structure("name,type", "id" , "UInt64"));
@@ -27198,15 +27285,228 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Meta.Add(New Structure("name,type", "payload" , "String"));
Data = New Structure("meta,data", Meta, DataArray);
Database = "default";
RequestID = String(New UUID());
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Request = OPI_ClickHouse.GetRequestSettings(QueryText, "default", RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "CreateGRPCConnection", "DataInsert"); // SKIP
// Selection
SelectionText = "SELECT * FROM events_grpc";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Selection"); // SKIP
// Request with external table via gRPC
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext_grpc", ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_grpc";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// END
Process(Result, "ClickHouse", "CreateGRPCConnection", "Complex");
Process(Result, "ClickHouse", "CreateGRPCConnection");
EndProcedure
Procedure ClickHouse_GetHTTPConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_Address"];
// No authorization
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, JWT);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "JWTAuthorization"); // SKIP
// With additional headers
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("X-Custom-Header", "CustomValue");
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization, AdditionalHeaders);
// END
Process(Result, "ClickHouse", "GetHTTPConnectionSettings");
EndProcedure
Procedure ClickHouse_GetGRPCConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_AddressGRPC"];
// No authorization
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, JWT);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "JWTAuthorization"); // SKIP
// With metadata
Meta = New Map;
Meta.Insert("custom-meta", "value");
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, Meta);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "WithMetadata"); // SKIP
// With TLS settings
Tls = OPI_ClickHouse.GetTlsSettings(True);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, , Tls);
// END
Process(Result, "ClickHouse", "GetGRPCConnectionSettings");
EndProcedure
Procedure ClickHouse_GetRequestSettings(FunctionParameters)
// Minimal request
QueryText = "SELECT 1";
Result = OPI_ClickHouse.GetRequestSettings(QueryText);
Process(Result, "ClickHouse", "GetRequestSettings", "Minimal"); // SKIP
// Full request
RequestID = String(New UUID());
Data = New Structure("meta,data", New Array, New Array);
Database = "default";
ResponseFormat = "CSV";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
ColoumnsStruct = New Structure("id,name", "UInt64", "String");
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext", ColoumnsStruct);
TableArray = New Array;
TableArray.Add(ExternalTable);
Result = OPI_ClickHouse.GetRequestSettings(QueryText
, Database
, RequestID
, Data
, ResponseFormat
, TableArray
, AdditionalSettings);
// END
Process(Result, "ClickHouse", "GetRequestSettings");
EndProcedure
Procedure ClickHouse_GetExternalTableStructure(FunctionParameters)
// Minimal structure
TableName = "external_data";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct);
Process(Result, "ClickHouse", "GetExternalTableStructure", "Minimal"); // SKIP
// With TSV data
TableData = StrTemplate("1%1Test
|2%2Test2", Chars.Tab);
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
// END
Process(Result, "ClickHouse", "GetExternalTableStructure");
EndProcedure
Procedure ClickHouse_GetSessionSettings(FunctionParameters)
SessionID = String(New UUID);
Check = True;
Timeout = 120;
Result = OPI_ClickHouse.GetSessionSettings(SessionID, Check, Timeout);
// END
Process(Result, "ClickHouse", "GetSessionSettings");
EndProcedure
Procedure ClickHouse_GetTlsSettings(FunctionParameters)
Result = OPI_ClickHouse.GetTlsSettings(False);
// END
Process(Result, "ClickHouse", "GetTlsSettings");
EndProcedure
+500 -25
View File
@@ -3363,11 +3363,17 @@ EndProcedure
Procedure CH_CommonMethods() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_AddressGRPC", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_ExecuteRequest(TestParameters);
ClickHouse_GetHTTPConnectionSettings(TestParameters);
ClickHouse_GetGRPCConnectionSettings(TestParameters);
ClickHouse_GetRequestSettings(TestParameters);
ClickHouse_GetExternalTableStructure(TestParameters);
ClickHouse_GetSessionSettings(TestParameters);
EndProcedure
@@ -3379,6 +3385,7 @@ Procedure CH_GRPC() Export
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_CreateGRPCConnection(TestParameters);
ClickHouse_GetTlsSettings(TestParameters);
EndProcedure
@@ -35778,9 +35785,9 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Connection = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
// Request (simple)
// Request (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35789,7 +35796,7 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE events"); // SKIP
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Options = New Structure;
@@ -35802,9 +35809,9 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "Simple"); // SKIP
Process(Result, "ClickHouse", "ExecuteRequest", "TableCreation"); // SKIP
// Request (with data)
// Request (data insertion)
QueryText = "INSERT INTO events FORMAT JSON";
@@ -35855,6 +35862,173 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "DataInsert"); // SKIP
// Request with external table
TableName = "ext_users";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane
|3" + Tab + "Bob";
Options = New Structure;
Options.Insert("name", TableName);
Options.Insert("cols", ColoumnsStruct);
Options.Insert("data", TableData);
Options.Insert("format", "TSV");
ExternalTable = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_users WHERE id > 1";
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Options.Insert("ext", ExternalTablesArray);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "ExternalTable"); // SKIP
// Selection
SelectionText = "SELECT * FROM events";
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "JSON");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
// END
Process(Result, "ClickHouse", "ExecuteRequest"); // SKIP
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "CSV");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "CSVSelection");
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "TSV");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "TSVSelection");
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "JSONCompact");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "JSONCompactSelection");
QueryText = "SELECT 1 AS result";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Options.Insert("settings", AdditionalSettings);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "AdditionalSettings");
Options = New Structure;
Options.Insert("id", String);
Session = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetSessionSettings", Options);
QueryText = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Options = New Structure;
Options.Insert("query", QueryText);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Options.Insert("session", Session);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionCreation");
QueryText = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Options = New Structure;
Options.Insert("query", QueryText);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Options.Insert("session", Session);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionInsert");
QueryText = "SELECT * FROM temp_session_test";
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Options.Insert("session", Session);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
// END
Process(Result, "ClickHouse", "ExecuteRequest");
@@ -35870,6 +36044,8 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Authorization = New Structure(Login, Password);
// Connection creation
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
@@ -35877,11 +36053,11 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
ConnectionSettings = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Connection = OPI_ClickHouse.CreateGRPCConnection(ConnectionSettings);
Process(Connection, "ClickHouse", "CreateGRPCConnection"); // SKIP
Process(Connection, "ClickHouse", "CreateGRPCConnection", "Openning"); // SKIP
// Request (simple)
// Request via open connection (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35890,6 +36066,9 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events_grpc"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Options = New Structure;
Options.Insert("query", QueryText);
@@ -35900,11 +36079,11 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Simple"); // SKIP
Process(Result, "ClickHouse", "CreateGRPCConnection", "TableCreation"); // SKIP
// Request (with data)
// Data insertion
QueryText = "INSERT INTO events FORMAT JSON";
QueryText = "INSERT INTO events_grpc FORMAT JSON";
DataFormat = "JSON";
DataArray = New Array;
@@ -35918,15 +36097,7 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Record1.Insert("event_type", "click");
Record1.Insert("payload" , "{}");
Record2 = New Structure;
Record2.Insert("id" , 2);
Record2.Insert("timestamp" , CurrentDate);
Record2.Insert("user_id" , 200);
Record2.Insert("event_type", "hover");
Record2.Insert("payload" , "{}");
DataArray.Add(Record1);
DataArray.Add(Record2);
Meta = New Array;
Meta.Add(New Structure("name,type", "id" , "UInt64"));
@@ -35936,12 +36107,11 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Meta.Add(New Structure("name,type", "payload" , "String"));
Data = New Structure("meta,data", Meta, DataArray);
Database = "default";
RequestID = String(New UUID());
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("db", Database);
Options.Insert("db", "default");
Options.Insert("id", RequestID);
Options.Insert("data", Data);
Options.Insert("format", DataFormat);
@@ -35953,9 +36123,314 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "CreateGRPCConnection", "DataInsert"); // SKIP
// Selection
SelectionText = "SELECT * FROM events_grpc";
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "JSON");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Selection"); // SKIP
// Request with external table via gRPC
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane";
Options = New Structure;
Options.Insert("name", "ext_grpc");
Options.Insert("cols", ColoumnsStruct);
Options.Insert("data", TableData);
Options.Insert("format", "TSV");
ExternalTable = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_grpc";
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Options.Insert("ext", ExternalTablesArray);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
// END
Process(Result, "ClickHouse", "CreateGRPCConnection", "Complex");
Process(Result, "ClickHouse", "CreateGRPCConnection");
EndProcedure
Procedure ClickHouse_GetHTTPConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_Address"];
// No authorization
Options = New Structure;
Options.Insert("url", URL);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", JWT);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "JWTAuthorization"); // SKIP
// With additional headers
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("X-Custom-Header", "CustomValue");
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Options.Insert("headers", AdditionalHeaders);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
// END
Process(Result, "ClickHouse", "GetHTTPConnectionSettings");
EndProcedure
Procedure ClickHouse_GetGRPCConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_AddressGRPC"];
// No authorization
Options = New Structure;
Options.Insert("url", URL);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", JWT);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "JWTAuthorization"); // SKIP
// With metadata
Meta = New Map;
Meta.Insert("custom-meta", "value");
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Options.Insert("meta", Meta);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "WithMetadata"); // SKIP
// With TLS settings
Options = New Structure;
Options.Insert("trust", Истина);
Tls = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetTlsSettings", Options);
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Options.Insert("tls", Tls);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
// END
Process(Result, "ClickHouse", "GetGRPCConnectionSettings");
EndProcedure
Procedure ClickHouse_GetRequestSettings(FunctionParameters)
// Minimal request
QueryText = "SELECT 1";
Options = New Structure;
Options.Insert("query", QueryText);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Process(Result, "ClickHouse", "GetRequestSettings", "Minimal"); // SKIP
// Full request
RequestID = String(New UUID());
Data = New Structure("meta,data", New Array, New Array);
Database = "default";
ResponseFormat = "CSV";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
ColoumnsStruct = New Structure("id,name", "UInt64", "String");
Options = New Structure;
Options.Insert("name", "ext");
Options.Insert("cols", ColoumnsStruct);
ExternalTable = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
TableArray = New Array;
TableArray.Add(ExternalTable);
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("db", Database);
Options.Insert("id", RequestID);
Options.Insert("data", Data);
Options.Insert("format", ResponseFormat);
Options.Insert("ext", TableArray);
Options.Insert("settings", AdditionalSettings);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
// END
Process(Result, "ClickHouse", "GetRequestSettings");
EndProcedure
Procedure ClickHouse_GetExternalTableStructure(FunctionParameters)
// Minimal structure
TableName = "external_data";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Options = New Structure;
Options.Insert("name", TableName);
Options.Insert("cols", ColoumnsStruct);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
Process(Result, "ClickHouse", "GetExternalTableStructure", "Minimal"); // SKIP
// With TSV data
TableData = StrTemplate("1%1Test
|2%2Test2", Chars.Tab);
Options = New Structure;
Options.Insert("name", TableName);
Options.Insert("cols", ColoumnsStruct);
Options.Insert("data", TableData);
Options.Insert("format", "TSV");
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
// END
Process(Result, "ClickHouse", "GetExternalTableStructure");
EndProcedure
Procedure ClickHouse_GetSessionSettings(FunctionParameters)
SessionID = String(New UUID);
Check = True;
Timeout = 120;
Options = New Structure;
Options.Insert("id", SessionID);
Options.Insert("check", Check);
Options.Insert("timeout", Timeout);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetSessionSettings", Options);
// END
Process(Result, "ClickHouse", "GetSessionSettings");
EndProcedure
Procedure ClickHouse_GetTlsSettings(FunctionParameters)
Options = New Structure;
Options.Insert("trust", Ложь);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetTlsSettings", Options);
// END
Process(Result, "ClickHouse", "GetTlsSettings");
EndProcedure
+204
View File
@@ -12962,12 +12962,216 @@ Function Check_ClickHouse_ExecuteRequest(Val Result, Option)
Result.Insert("body", GetStringFromBinaryData(Result["body"]));
EndIf;
If Option = "TableCreation" Or Option = "DataInsert" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
ElsIf Option = "JSONSelection" Or Option = "JSONCompactSelection" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ElsIf Option = "CSVSelection" Or Option = "TSVSelection" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
ExpectsThat(Result["body"]).ИмеетТип("String");
ElsIf Option = "ExternalTable" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ExpectsThat(Result["body"]["rows"]).Равно(2);
ElsIf Option = "AdditionalSettings" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ElsIf Option = "SessionCreation" Or Option = "SessionInsert" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
Else
// Primary variant - Selection from session temporary table
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ExpectsThat(Result["body"]["rows"]).Равно(2);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_CreateGRPCConnection(Val Result, Option)
If Option = "Openning" Then
Result = String(TypeOf(Result));
ExpectsThat(Result).Равно("AddIn.OPI_GRPC.Main");
ElsIf Option = "TableCreation" Or Option = "DataInsert" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ElsIf Option = "Selection" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
Else
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetHTTPConnectionSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("address")).Равно(True);
ExpectsThat(Result.Property("transport")).Равно(True);
ExpectsThat(Result["transport"]).Равно("http");
If Option = "NoAuthorization" Then
ExpectsThat(Result.Property("auth_type")).Равно(False);
ElsIf Option = "BasicAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("basic");
ExpectsThat(Result.Property("user")).Равно(True);
ExpectsThat(Result.Property("password")).Равно(True);
ElsIf Option = "JWTAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("jwt");
ExpectsThat(Result.Property("token")).Равно(True);
ElsIf Not ValueIsFilled(Option) Then
ExpectsThat(Result.Property("headers")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetGRPCConnectionSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("address")).Равно(True);
ExpectsThat(Result.Property("transport")).Равно(True);
ExpectsThat(Result["transport"]).Равно("grpc");
If Option = "NoAuthorization" Then
ExpectsThat(Result.Property("auth_type")).Равно(False);
ElsIf Option = "BasicAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("basic");
ExpectsThat(Result.Property("user")).Равно(True);
ExpectsThat(Result.Property("password")).Равно(True);
ElsIf Option = "JWTAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("jwt");
ExpectsThat(Result.Property("token")).Равно(True);
ElsIf Option = "WithMetadata" Then
ExpectsThat(Result.Property("metadata")).Равно(True);
ElsIf Not ValueIsFilled(Option) Then
ExpectsThat(Result.Property("tls")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetRequestSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("query")).Равно(True);
If Option = "Minimal" Then
ExpectsThat(Result["query"]).Равно("SELECT 1");
Else
ExpectsThat(Result["database"]).Равно("default");
ExpectsThat(Result["id"]).Заполнено();
ExpectsThat(Result.Property("data")).Равно(True);
ExpectsThat(Result["format"]).Равно("CSV");
ExpectsThat(Result.Property("external_tables")).Равно(True);
ExpectsThat(Result["external_tables"]).ИмеетТип("Array");
ExpectsThat(Result.Property("settings")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetExternalTableStructure(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("name")).Равно(True);
ExpectsThat(Result.Property("cols")).Равно(True);
ExpectsThat(Result["name"]).Равно("external_data");
If Option = "Minimal" Then
ExpectsThat(Result.Property("data")).Равно(False);
ElsIf Option = "TSV" Or Not ValueIsFilled(Option) Then
ExpectsThat(Result["format"]).Равно("TSV");
ExpectsThat(Result.Property("data")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetSessionSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result["id"]).ИмеетТип("String").Заполнено();
ExpectsThat(Result["check"]).Равно(True);
ExpectsThat(Result["timeout"]).Равно(120);
Return Result;
EndFunction
Function Check_ClickHouse_GetTlsSettings(Val Result, Option)
ExpectsThat(OPI_Tools.ThisIsCollection(Result, True)).Равно(True);
Return Result;
EndFunction
#EndRegion
+28 -5
View File
@@ -41,7 +41,8 @@
Procedure GetBinaryData(Value, Val Force = False, Val TryB64 = True) Export
If Value = Undefined Then
If Value = Undefined Then
Value = GetBinaryDataFromString("");
Return;
EndIf;
@@ -98,12 +99,16 @@ Procedure GetBinaryOrStream(Value) Export
EndProcedure
Procedure GetCollection(Value, ByNetwork = True) Export
Procedure GetCollection(Value, ByNetwork = True, Success = False) Export
Success = False;
If Value = Undefined Then
Return;
EndIf;
Success = True;
Try
// BSLLS:ExternalAppStarting-off
@@ -147,6 +152,7 @@ Procedure GetCollection(Value, ByNetwork = True) Export
If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then
Success = False;
Value = InitialValue;
OPI_Tools.ValueToArray(Value);
@@ -158,6 +164,7 @@ Procedure GetCollection(Value, ByNetwork = True) Export
Except
Success = False;
Value = InitialValue;
OPI_Tools.ValueToArray(Value);
@@ -426,8 +433,24 @@ Procedure ConvertSourceToValue(Value, TryB64)
Else
If TryB64 Then
Value = Base64Value(Value);
Value_ = Base64Value(Value);
If TypeOf(Value_) = Type("BinaryData") Then
Success = Value_.Size() <> 0;
Else
Success = False;
EndIf;
If Success Then
Value = Value_;
EndIf;
Else
Success = False;
EndIf;
If Not Success Then
Raise "The value is not a file path or Base64 string";
EndIf;
@@ -447,8 +470,8 @@ Procedure ПолучитьДвоичныеИлиПоток(Значение) Exp
GetBinaryOrStream(Значение);
EndProcedure
Procedure ПолучитьКоллекцию(Значение, ПоСети = True) Export
GetCollection(Значение, ПоСети);
Procedure ПолучитьКоллекцию(Значение, ПоСети = True, Успех = False) Export
GetCollection(Значение, ПоСети, Успех);
EndProcedure
Procedure ПолучитьКоллекциюКлючИЗначение(Значение, Val СообщениеОшибки = "Указанное значение не является подходящей коллекцией!") Export
@@ -1014,7 +1014,7 @@ Function AddMultipartFormDataFile(Val FieldName
OPI_TypeConversion.GetBinaryData(Data, True, True);
OPI_TypeConversion.GetBoolean(IgnoreEmpty);
If IgnoreEmpty And Data.Size = 0 Then
If IgnoreEmpty And Data.Size() = 0 Then
AddLog(StrTemplate("AddMultipartFormDataFile: empty file ignored, field %1", FieldName));
Return ЭтотОбъект;
EndIf;
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426";
LastBuildHash = "020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A";
Return LastBuildHash;
+1 -1
View File
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426";
LastBuildHash = "020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A";
Return LastBuildHash;
+264 -50
View File
@@ -125,38 +125,6 @@ Function GetHTTPConnectionSettings(Val Address
EndFunction
// Get gRPC connection settings
// Gets the settings structure for gRPC connection
//
// Parameters:
// Address - String - Connection address with protocol and port - url
// Authorization - String, Structure Of KeyAndValue - Authorization: string for JWT, structure for basic - auth
// Meta - Structure Of KeyAndValue - gRPC metadata structure, if necessary - meta
// Tls - Structure Of KeyAndValue - TLS settings. See GetTlsSettings - tls
//
// Returns:
// Structure Of KeyAndValue - Connection settings structure
Function GetGRPCConnectionSettings(Val Address
, Val Authorization = Undefined
, Val Meta = Undefined
, Val Tls = Undefined) Export
ConnectionSettings = New Structure;
OPI_Tools.AddField("address" , Address , "String" , ConnectionSettings);
OPI_Tools.AddField("tls" , Tls , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("metadata" , Meta , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("transport", "grpc" , "String" , ConnectionSettings);
If Authorization = Undefined Then
Return ConnectionSettings;
EndIf;
CompleteAuthorizationSettings(Authorization, ConnectionSettings);
Return ConnectionSettings;
EndFunction
// Get request settings
// Forms the request description structure
//
@@ -240,10 +208,6 @@ Function GetSessionSettings(Val SessionID = Undefined
SessionSettings = New Structure;
HasSessionID = SessionID <> Undefined;
If HasSessionID Then
SessionID = String(New UUID());
EndIf;
If CheckSession = Undefined Then
CheckSession = HasSessionID;
EndIf;
@@ -260,6 +224,38 @@ EndFunction
#Region GRPC
// Get gRPC connection settings
// Gets the settings structure for gRPC connection
//
// Parameters:
// Address - String - Connection address with protocol and port - url
// Authorization - String, Structure Of KeyAndValue - Authorization: string for JWT, structure for basic - auth
// Meta - Structure Of KeyAndValue - gRPC metadata structure, if necessary - meta
// Tls - Structure Of KeyAndValue - TLS settings. See GetTlsSettings - tls
//
// Returns:
// Structure Of KeyAndValue - Connection settings structure
Function GetGRPCConnectionSettings(Val Address
, Val Authorization = Undefined
, Val Meta = Undefined
, Val Tls = Undefined) Export
ConnectionSettings = New Structure;
OPI_Tools.AddField("address" , Address , "String" , ConnectionSettings);
OPI_Tools.AddField("tls" , Tls , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("metadata" , Meta , "KeyAndValue", ConnectionSettings);
OPI_Tools.AddField("transport", "grpc" , "String" , ConnectionSettings);
If Authorization = Undefined Then
Return ConnectionSettings;
EndIf;
CompleteAuthorizationSettings(Authorization, ConnectionSettings);
Return ConnectionSettings;
EndFunction
// Create GRPC connection !NOCLI
// Opens a GRPC connection for working with ClickHouse
//
@@ -304,6 +300,56 @@ Function CreateGRPCConnection(Val ConnectionSettings) Export
EndFunction
// Open client GRPC stream !NOCLI
// Initializes a client stream for exchange
//
// Parameters:
// Connection - Arbitrary - GRPC connection object - conn
// Timeout - Number - Timeout (in ms) - tout
//
// Returns:
// Map Of KeyAndValue - Processing result
Function OpenClientGRPCStream(Val Connection, Val Timeout = 10000) Export
Return OpenGRPCStream(Connection, "client", , , Timeout);
EndFunction
// Open server GRPC stream !NOCLI
// Initializes a server stream for exchange
//
// Parameters:
// Connection - Arbitrary - GRPC connection object - conn
// Request - Structure Of KeyAndValue - Request data. See GetRequestSettings - req
// Session - Structure Of KeyAndValue - Session settings. See GetSessionSettings - session
// Timeout - Number - Timeout (in ms) - tout
//
// Returns:
// Map Of KeyAndValue - Processing result
Function OpenServerGRPCStream(Val Connection
, Val Request = Undefined
, Val Session = Undefined
, Val Timeout = 10000) Export
Return OpenGRPCStream(Connection, "server", Request, Session, Timeout);
EndFunction
// Open bidirectional GRPC stream !NOCLI
// Initializes a bidirectional stream for exchange
//
// Parameters:
// Connection - Arbitrary - GRPC connection object - conn
// Timeout - Number - Timeout (in ms) - tout
//
// Returns:
// Map Of KeyAndValue - Processing result
Function OpenBidirectionalGRPCStream(Val Connection, Val Timeout = 10000) Export
Return OpenGRPCStream(Connection, "bidi", , , Timeout);
EndFunction
// Get TLS Settings
// Forms settings for using TLS
//
@@ -355,6 +401,23 @@ Procedure CompleteAuthorizationSettings(Val Authorization, ConnectionSettings)
EndProcedure
Function IsValidJSONFormat(Val Format)
Return Format = "JSON"
Or Format = "JSONCompact"
Or Format = "JSONColumns"
Or Format = "JSONColumnsWithMetadata";
EndFunction
Function IsStringFormat(Val Format)
Return StrFind(Format, "CSV") > 0
Or StrFind(Format, "TSV") > 0
Or StrFind(Format, "Pretty") > 0;
EndFunction
#EndRegion
#Region HTTP
@@ -384,17 +447,17 @@ Function ExecuteRequestViaHTTP(Val Connection, Val Request, Val Session)
.AddHeader("X-ClickHouse-Database", Database, True)
.SetBinaryBody(Data);
SetAdditionalHTTPParameters(HTTPClient, Request);
SetAdditionalHTTPHeaders(HTTPClient, Connection);
SetHTTPAuthorization(HTTPClient, Connection);
SetHTTPExternalTables(HTTPClient, ExternalTables);
SetHTTPSession(HTTPClient, Session);
SetAdditionalHTTPParameters(HTTPClient, Request);
SetAdditionalHTTPHeaders(HTTPClient, Connection);
HTTPClient.ProcessRequest("POST", True);
If HTTPClient.Error Then
Response = FormatHTTPErrorResponse(HTTPClient);
Else
Try
@@ -407,8 +470,15 @@ Function ExecuteRequestViaHTTP(Val Connection, Val Request, Val Session)
If ResponseCode < 300 Then
Result = True;
ResponseBody = HTTPClient.ReturnResponseAsJSONObject();
Result = True;
If IsValidJSONFormat(DataFormat) Then
ResponseBody = HTTPClient.ReturnResponseAsJSONObject();
ElsIf IsStringFormat(DataFormat) Then
ResponseBody = HTTPClient.ReturnResponseAsString();
Else
ResponseBody = HTTPClient.ReturnResponseAsBinaryData();
EndIf;
If OPI_Tools.IsCLI() Then
@@ -488,7 +558,7 @@ Procedure SetHTTPAuthorization(HTTPClient, Val Connection)
ElsIf Authorization = "basic" Then
Login = OPI_Tools.GetOr(Connection, "user", Undefined);
Login = OPI_Tools.GetOr(Connection, "user" , Undefined);
Password = OPI_Tools.GetOr(Connection, "password", Undefined);
HTTPClient
@@ -542,12 +612,33 @@ Procedure SetHTTPExternalTables(HTTPClient, Val ExternalTables)
HTTPClient
.AddURLParameter(FormatParameterName , TableFormat , True)
.AddURLParameter(StructureParameterName, ColumnsAsString, True)
.AddMultipartFormDataFile(TableName, FileName, TableData, FileDataType, True);
EndDo;
EndProcedure
Procedure SetHTTPSession(HTTPClient, Val Session)
If Not ValueIsFilled(Session) Then
Return;
EndIf;
ErrorText = "An incorrect session information structure was passed";
OPI_TypeConversion.GetKeyValueCollection(Session, ErrorText);
SessionID = OPI_Tools.GetOr(Session, "id" , Undefined);
Check = OPI_Tools.GetOr(Session, "check" , Undefined);
Timeout = OPI_Tools.GetOr(Session, "timeout", Undefined);
HTTPClient
.AddURLParameter("session_id" , SessionID, True)
.AddURLParameter("session_check" , Check , True)
.AddURLParameter("session_timeout", Timeout , True);
EndProcedure
#EndRegion
#Region GRPC
@@ -568,6 +659,64 @@ Function ExecuteRequestViaGRPC(Val Connection, Val Request, Val Session)
Return Connector;
EndIf;
GRPCRequest = FormGRPCRequest(ConnectionSettings, Request, Session);
Service = GetGRPCServiceName();
Method = "ExecuteQuery";
Result = OPI_GRPC.ExecuteMethod(Connector, Service, Method, GRPCRequest);
ProcessGRPCResponse(Result);
If CloseConnection Then
OPI_GRPC.CloseConnection(Connector);
EndIf;
Return Result;
EndFunction
Function OpenGRPCStream(Connection
, Val View
, Val Request = Undefined
, Val Session = Undefined
, Val Timeout = 10000)
Service = GetGRPCServiceName();
If View = "client" Then
Method = "ExecuteQueryWithStreamInput";
Result = OPI_GRPC.InitializeClientStream(Connection, Service, Method, Timeout);
ElsIf View = "server" Then
Method = "ExecuteQueryWithStreamOutput";
GRPCRequest = FormGRPCRequest(Connection, Request, Session);
Result = OPI_GRPC.InitializeServerStream(Connection, Service, Method, GRPCRequest, Timeout);
Else
Method = "ExecuteQueryWithStreamIO";
Result = OPI_GRPC.InitializeBidirectionalStream(Connection, Service, Method, Timeout);
EndIf;
Return Result;
EndFunction
Function FormGRPCRequest(Val Connection, Val Request, Val Session)
If Request = Undefined Then
Return Request;
EndIf;
If OPI_GRPC.IsConnector(Connection) Then
ConnectionSettings = OPI_Tools.JsonToStructure(Connection.GetSettings());
Else
ConnectionSettings = Connection;
EndIf;
Data = OPI_Tools.GetOr(Request, "data" , Undefined);
RequestID = OPI_Tools.GetOr(Request, "id" , Undefined);
QueryText = OPI_Tools.GetOr(Request, "query" , Undefined);
@@ -586,16 +735,15 @@ Function ExecuteRequestViaGRPC(Val Connection, Val Request, Val Session)
SetGRPCAuthorization(GRPCRequest, ConnectionSettings);
SetGRPCExternalTables(GRPCRequest, ExternalTables);
SetGRPCSession(GRPCRequest, Session);
Service = "clickhouse.grpc.ClickHouse";
Method = "ExecuteQuery";
Result = OPI_GRPC.ExecuteMethod(Connector, Service, Method, GRPCRequest);
Return GRPCRequest;
If CloseConnection Then
OPI_GRPC.CloseConnection(Connector);
EndIf;
EndFunction
Return Result;
Function GetGRPCServiceName()
Return "clickhouse.grpc.ClickHouse";
EndFunction
@@ -643,6 +791,10 @@ Procedure SetGRPCExternalTables(GRPCRequest, Val ExternalTables)
TableData = OPI_Tools.GetOr(Table, "data" , Undefined);
TableColumns = OPI_Tools.GetOr(Table, "cols" , Undefined);
If TableData <> Undefined Then
OPI_TypeConversion.GetBinaryData(TableData, True);
EndIf;
ErrorText = StrTemplate("Incorrect structure of columns for the table ""%1""", TableName);
OPI_TypeConversion.GetKeyValueCollection(TableColumns, ErrorText);
@@ -674,6 +826,68 @@ Procedure SetGRPCExternalTables(GRPCRequest, Val ExternalTables)
EndProcedure
Procedure SetGRPCSession(GRPCRequest, Val Session)
If Not ValueIsFilled(Session) Then
Return;
EndIf;
ErrorText = "An incorrect session information structure was passed";
OPI_TypeConversion.GetKeyValueCollection(Session, ErrorText);
SessionID = OPI_Tools.GetOr(Session, "id" , Undefined);
Check = OPI_Tools.GetOr(Session, "check" , Undefined);
Timeout = OPI_Tools.GetOr(Session, "timeout", Undefined);
OPI_Tools.AddField("session_id" , SessionID, "String" , GRPCRequest);
OPI_Tools.AddField("session_check" , Check , "Boolean", GRPCRequest);
OPI_Tools.AddField("session_timeout", Timeout , "Number" , GRPCRequest);
EndProcedure
Procedure ProcessGRPCResponse(Response)
If Not OPI_Tools.GetOr(Response, "result", False) Then
Return;
EndIf;
Format = OPI_Tools.GetOr(Response, "output_format", Undefined);
If Not ValueIsFilled(Format) Then
Return;
EndIf;
B64String = OPI_Tools.CollectionFieldExists(Response, "data.output.BYTES");
If ValueIsFilled(B64String) Then
If IsValidJSONFormat(Format) Then
Value = GetBinaryDataFromBase64String(B64String);
Success = False;
OPI_TypeConversion.GetCollection(Value, , Success);
If Not Success Then
Value = GetStringFromBinaryData(Value);
EndIf;
ElsIf IsStringFormat(Format) Then
Value = GetBinaryDataFromBase64String(B64String);
Value = GetStringFromBinaryData(Value);
Else
Return;
EndIf;
Response["data"]["output"] = Value;
EndIf;
EndProcedure
#EndRegion
#EndRegion
@@ -12963,12 +12963,216 @@ Function Check_ClickHouse_ExecuteRequest(Val Result, Option)
Result.Insert("body", GetStringFromBinaryData(Result["body"]));
EndIf;
If Option = "TableCreation" Or Option = "DataInsert" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
ElsIf Option = "JSONSelection" Or Option = "JSONCompactSelection" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ElsIf Option = "CSVSelection" Or Option = "TSVSelection" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
ExpectsThat(Result["body"]).ИмеетТип("String");
ElsIf Option = "ExternalTable" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ExpectsThat(Result["body"]["rows"]).Равно(2);
ElsIf Option = "AdditionalSettings" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ElsIf Option = "SessionCreation" Or Option = "SessionInsert" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["status"]).Равно(200);
Else
// Primary variant - Selection from session temporary table
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ExpectsThat(Result["result"]).Равно(True);
ExpectsThat(Result["body"]).ИмеетТип("Map");
ExpectsThat(Result["body"]["rows"]).Равно(2);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_CreateGRPCConnection(Val Result, Option)
If Option = "Openning" Then
Result = String(TypeOf(Result));
ExpectsThat(Result).Равно("AddIn.OPI_GRPC.Main");
ElsIf Option = "TableCreation" Or Option = "DataInsert" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
ElsIf Option = "Selection" Then
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
Else
ExpectsThat(Result).ИмеетТип("Map").Заполнено();
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetHTTPConnectionSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("address")).Равно(True);
ExpectsThat(Result.Property("transport")).Равно(True);
ExpectsThat(Result["transport"]).Равно("http");
If Option = "NoAuthorization" Then
ExpectsThat(Result.Property("auth_type")).Равно(False);
ElsIf Option = "BasicAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("basic");
ExpectsThat(Result.Property("user")).Равно(True);
ExpectsThat(Result.Property("password")).Равно(True);
ElsIf Option = "JWTAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("jwt");
ExpectsThat(Result.Property("token")).Равно(True);
ElsIf Not ValueIsFilled(Option) Then
ExpectsThat(Result.Property("headers")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetGRPCConnectionSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("address")).Равно(True);
ExpectsThat(Result.Property("transport")).Равно(True);
ExpectsThat(Result["transport"]).Равно("grpc");
If Option = "NoAuthorization" Then
ExpectsThat(Result.Property("auth_type")).Равно(False);
ElsIf Option = "BasicAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("basic");
ExpectsThat(Result.Property("user")).Равно(True);
ExpectsThat(Result.Property("password")).Равно(True);
ElsIf Option = "JWTAuthorization" Then
ExpectsThat(Result["auth_type"]).Равно("jwt");
ExpectsThat(Result.Property("token")).Равно(True);
ElsIf Option = "WithMetadata" Then
ExpectsThat(Result.Property("metadata")).Равно(True);
ElsIf Not ValueIsFilled(Option) Then
ExpectsThat(Result.Property("tls")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetRequestSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("query")).Равно(True);
If Option = "Minimal" Then
ExpectsThat(Result["query"]).Равно("SELECT 1");
Else
ExpectsThat(Result["database"]).Равно("default");
ExpectsThat(Result["id"]).Заполнено();
ExpectsThat(Result.Property("data")).Равно(True);
ExpectsThat(Result["format"]).Равно("CSV");
ExpectsThat(Result.Property("external_tables")).Равно(True);
ExpectsThat(Result["external_tables"]).ИмеетТип("Array");
ExpectsThat(Result.Property("settings")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetExternalTableStructure(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result.Property("name")).Равно(True);
ExpectsThat(Result.Property("cols")).Равно(True);
ExpectsThat(Result["name"]).Равно("external_data");
If Option = "Minimal" Then
ExpectsThat(Result.Property("data")).Равно(False);
ElsIf Option = "TSV" Or Not ValueIsFilled(Option) Then
ExpectsThat(Result["format"]).Равно("TSV");
ExpectsThat(Result.Property("data")).Равно(True);
EndIf;
Return Result;
EndFunction
Function Check_ClickHouse_GetSessionSettings(Val Result, Option)
ExpectsThat(Result).ИмеетТип("Structure").Заполнено();
ExpectsThat(Result["id"]).ИмеетТип("String").Заполнено();
ExpectsThat(Result["check"]).Равно(True);
ExpectsThat(Result["timeout"]).Равно(120);
Return Result;
EndFunction
Function Check_ClickHouse_GetTlsSettings(Val Result, Option)
ExpectsThat(OPI_Tools.ThisIsCollection(Result, True)).Равно(True);
Return Result;
EndFunction
#EndRegion
+325 -25
View File
@@ -3362,11 +3362,17 @@ EndProcedure
Procedure CH_CommonMethods() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_AddressGRPC", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_ExecuteRequest(TestParameters);
ClickHouse_GetHTTPConnectionSettings(TestParameters);
ClickHouse_GetGRPCConnectionSettings(TestParameters);
ClickHouse_GetRequestSettings(TestParameters);
ClickHouse_GetExternalTableStructure(TestParameters);
ClickHouse_GetSessionSettings(TestParameters);
EndProcedure
@@ -3378,6 +3384,7 @@ Procedure CH_GRPC() Export
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_CreateGRPCConnection(TestParameters);
ClickHouse_GetTlsSettings(TestParameters);
EndProcedure
@@ -27070,9 +27077,9 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Connection = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
// Request (simple)
// Request (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -27081,15 +27088,15 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE events"); // SKIP
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "Simple"); // SKIP
Process(Result, "ClickHouse", "ExecuteRequest", "TableCreation"); // SKIP
// Request (with data)
// Request (data insertion)
QueryText = "INSERT INTO events FORMAT JSON";
@@ -27129,6 +27136,89 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "DataInsert"); // SKIP
// Request with external table
TableName = "ext_users";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane
|3" + Tab + "Bob";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_users WHERE id > 1";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "ExternalTable"); // SKIP
// Selection
SelectionText = "SELECT * FROM events";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// END
Process(Result, "ClickHouse", "ExecuteRequest"); // SKIP
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "CSV");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "CSVSelection");
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "TSV");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "TSVSelection");
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSONCompact");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "JSONCompactSelection");
QueryText = "SELECT 1 AS result";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", , AdditionalSettings);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "ExecuteRequest", "AdditionalSettings");
Session = OPI_ClickHouse.GetSessionSettings(String(New UUID()));
QueryText = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request, Session);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionCreation");
QueryText = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request, Session);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionInsert");
QueryText = "SELECT * FROM temp_session_test";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request, Session);
// END
Process(Result, "ClickHouse", "ExecuteRequest");
@@ -27144,14 +27234,16 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Authorization = New Structure(Login, Password);
// Connection creation
ConnectionSettings = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
Connection = OPI_ClickHouse.CreateGRPCConnection(ConnectionSettings);
Process(Connection, "ClickHouse", "CreateGRPCConnection"); // SKIP
Process(Connection, "ClickHouse", "CreateGRPCConnection", "Openning"); // SKIP
// Request (simple)
// Request via open connection (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -27160,14 +27252,17 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events_grpc"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Request = OPI_ClickHouse.GetRequestSettings(QueryText);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Simple"); // SKIP
Process(Result, "ClickHouse", "CreateGRPCConnection", "TableCreation"); // SKIP
// Request (with data)
// Data insertion
QueryText = "INSERT INTO events FORMAT JSON";
QueryText = "INSERT INTO events_grpc FORMAT JSON";
DataFormat = "JSON";
DataArray = New Array;
@@ -27181,15 +27276,7 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Record1.Insert("event_type", "click");
Record1.Insert("payload" , "{}");
Record2 = New Structure;
Record2.Insert("id" , 2);
Record2.Insert("timestamp" , CurrentDate);
Record2.Insert("user_id" , 200);
Record2.Insert("event_type", "hover");
Record2.Insert("payload" , "{}");
DataArray.Add(Record1);
DataArray.Add(Record2);
Meta = New Array;
Meta.Add(New Structure("name,type", "id" , "UInt64"));
@@ -27199,15 +27286,228 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Meta.Add(New Structure("name,type", "payload" , "String"));
Data = New Structure("meta,data", Meta, DataArray);
Database = "default";
RequestID = String(New UUID());
Request = OPI_ClickHouse.GetRequestSettings(QueryText, Database, RequestID, Data, DataFormat);
Request = OPI_ClickHouse.GetRequestSettings(QueryText, "default", RequestID, Data, DataFormat);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "CreateGRPCConnection", "DataInsert"); // SKIP
// Selection
SelectionText = "SELECT * FROM events_grpc";
Request = OPI_ClickHouse.GetRequestSettings(SelectionText, , , , "JSON");
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Selection"); // SKIP
// Request with external table via gRPC
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane";
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext_grpc", ColoumnsStruct, TableData, "TSV");
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_grpc";
Request = OPI_ClickHouse.GetRequestSettings(QueryText, , , , "JSON", ExternalTablesArray);
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request);
// END
Process(Result, "ClickHouse", "CreateGRPCConnection", "Complex");
Process(Result, "ClickHouse", "CreateGRPCConnection");
EndProcedure
Procedure ClickHouse_GetHTTPConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_Address"];
// No authorization
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, JWT);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "JWTAuthorization"); // SKIP
// With additional headers
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("X-Custom-Header", "CustomValue");
Result = OPI_ClickHouse.GetHTTPConnectionSettings(URL, Authorization, AdditionalHeaders);
// END
Process(Result, "ClickHouse", "GetHTTPConnectionSettings");
EndProcedure
Procedure ClickHouse_GetGRPCConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_AddressGRPC"];
// No authorization
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, JWT);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "JWTAuthorization"); // SKIP
// With metadata
Meta = New Map;
Meta.Insert("custom-meta", "value");
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, Meta);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "WithMetadata"); // SKIP
// With TLS settings
Tls = OPI_ClickHouse.GetTlsSettings(True);
Result = OPI_ClickHouse.GetGRPCConnectionSettings(URL, Authorization, , Tls);
// END
Process(Result, "ClickHouse", "GetGRPCConnectionSettings");
EndProcedure
Procedure ClickHouse_GetRequestSettings(FunctionParameters)
// Minimal request
QueryText = "SELECT 1";
Result = OPI_ClickHouse.GetRequestSettings(QueryText);
Process(Result, "ClickHouse", "GetRequestSettings", "Minimal"); // SKIP
// Full request
RequestID = String(New UUID());
Data = New Structure("meta,data", New Array, New Array);
Database = "default";
ResponseFormat = "CSV";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
ColoumnsStruct = New Structure("id,name", "UInt64", "String");
ExternalTable = OPI_ClickHouse.GetExternalTableStructure("ext", ColoumnsStruct);
TableArray = New Array;
TableArray.Add(ExternalTable);
Result = OPI_ClickHouse.GetRequestSettings(QueryText
, Database
, RequestID
, Data
, ResponseFormat
, TableArray
, AdditionalSettings);
// END
Process(Result, "ClickHouse", "GetRequestSettings");
EndProcedure
Procedure ClickHouse_GetExternalTableStructure(FunctionParameters)
// Minimal structure
TableName = "external_data";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct);
Process(Result, "ClickHouse", "GetExternalTableStructure", "Minimal"); // SKIP
// With TSV data
TableData = StrTemplate("1%1Test
|2%2Test2", Chars.Tab);
Result = OPI_ClickHouse.GetExternalTableStructure(TableName, ColoumnsStruct, TableData, "TSV");
// END
Process(Result, "ClickHouse", "GetExternalTableStructure");
EndProcedure
Procedure ClickHouse_GetSessionSettings(FunctionParameters)
SessionID = String(New UUID);
Check = True;
Timeout = 120;
Result = OPI_ClickHouse.GetSessionSettings(SessionID, Check, Timeout);
// END
Process(Result, "ClickHouse", "GetSessionSettings");
EndProcedure
Procedure ClickHouse_GetTlsSettings(FunctionParameters)
Result = OPI_ClickHouse.GetTlsSettings(False);
// END
Process(Result, "ClickHouse", "GetTlsSettings");
EndProcedure
+500 -25
View File
@@ -3363,11 +3363,17 @@ EndProcedure
Procedure CH_CommonMethods() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Address" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_AddressGRPC", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_User" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_ExecuteRequest(TestParameters);
ClickHouse_GetHTTPConnectionSettings(TestParameters);
ClickHouse_GetGRPCConnectionSettings(TestParameters);
ClickHouse_GetRequestSettings(TestParameters);
ClickHouse_GetExternalTableStructure(TestParameters);
ClickHouse_GetSessionSettings(TestParameters);
EndProcedure
@@ -3379,6 +3385,7 @@ Procedure CH_GRPC() Export
OPI_TestDataRetrieval.ParameterToCollection("ClickHouse_Password" , TestParameters);
ClickHouse_CreateGRPCConnection(TestParameters);
ClickHouse_GetTlsSettings(TestParameters);
EndProcedure
@@ -35778,9 +35785,9 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Connection = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
// Request (simple)
// Request (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35789,7 +35796,7 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE events"); // SKIP
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Options = New Structure;
@@ -35802,9 +35809,9 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "Simple"); // SKIP
Process(Result, "ClickHouse", "ExecuteRequest", "TableCreation"); // SKIP
// Request (with data)
// Request (data insertion)
QueryText = "INSERT INTO events FORMAT JSON";
@@ -35855,6 +35862,173 @@ Procedure ClickHouse_ExecuteRequest(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "DataInsert"); // SKIP
// Request with external table
TableName = "ext_users";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane
|3" + Tab + "Bob";
Options = New Structure;
Options.Insert("name", TableName);
Options.Insert("cols", ColoumnsStruct);
Options.Insert("data", TableData);
Options.Insert("format", "TSV");
ExternalTable = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_users WHERE id > 1";
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Options.Insert("ext", ExternalTablesArray);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "ExternalTable"); // SKIP
// Selection
SelectionText = "SELECT * FROM events";
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "JSON");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
// END
Process(Result, "ClickHouse", "ExecuteRequest"); // SKIP
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "CSV");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "CSVSelection");
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "TSV");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "TSVSelection");
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "JSONCompact");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "JSONCompactSelection");
QueryText = "SELECT 1 AS result";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Options.Insert("settings", AdditionalSettings);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "AdditionalSettings");
Options = New Structure;
Options.Insert("id", String);
Session = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetSessionSettings", Options);
QueryText = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Options = New Structure;
Options.Insert("query", QueryText);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Options.Insert("session", Session);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionCreation");
QueryText = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Options = New Structure;
Options.Insert("query", QueryText);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Options.Insert("session", Session);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "ExecuteRequest", "SessionInsert");
QueryText = "SELECT * FROM temp_session_test";
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Options.Insert("session", Session);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
// END
Process(Result, "ClickHouse", "ExecuteRequest");
@@ -35870,6 +36044,8 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Authorization = New Structure(Login, Password);
// Connection creation
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
@@ -35877,11 +36053,11 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
ConnectionSettings = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Connection = OPI_ClickHouse.CreateGRPCConnection(ConnectionSettings);
Process(Connection, "ClickHouse", "CreateGRPCConnection"); // SKIP
Process(Connection, "ClickHouse", "CreateGRPCConnection", "Openning"); // SKIP
// Request (simple)
// Request via open connection (table creation)
QueryText = "CREATE TABLE events (
QueryText = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35890,6 +36066,9 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Request = OPI_ClickHouse.GetRequestSettings("DROP TABLE IF EXISTS events_grpc"); // SKIP
Result = OPI_ClickHouse.ExecuteRequest(Connection, Request); // SKIP
Options = New Structure;
Options.Insert("query", QueryText);
@@ -35900,11 +36079,11 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Simple"); // SKIP
Process(Result, "ClickHouse", "CreateGRPCConnection", "TableCreation"); // SKIP
// Request (with data)
// Data insertion
QueryText = "INSERT INTO events FORMAT JSON";
QueryText = "INSERT INTO events_grpc FORMAT JSON";
DataFormat = "JSON";
DataArray = New Array;
@@ -35918,15 +36097,7 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Record1.Insert("event_type", "click");
Record1.Insert("payload" , "{}");
Record2 = New Structure;
Record2.Insert("id" , 2);
Record2.Insert("timestamp" , CurrentDate);
Record2.Insert("user_id" , 200);
Record2.Insert("event_type", "hover");
Record2.Insert("payload" , "{}");
DataArray.Add(Record1);
DataArray.Add(Record2);
Meta = New Array;
Meta.Add(New Structure("name,type", "id" , "UInt64"));
@@ -35936,12 +36107,11 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Meta.Add(New Structure("name,type", "payload" , "String"));
Data = New Structure("meta,data", Meta, DataArray);
Database = "default";
RequestID = String(New UUID());
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("db", Database);
Options.Insert("db", "default");
Options.Insert("id", RequestID);
Options.Insert("data", Data);
Options.Insert("format", DataFormat);
@@ -35953,9 +36123,314 @@ Procedure ClickHouse_CreateGRPCConnection(FunctionParameters)
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "CreateGRPCConnection", "DataInsert"); // SKIP
// Selection
SelectionText = "SELECT * FROM events_grpc";
Options = New Structure;
Options.Insert("query", SelectionText);
Options.Insert("format", "JSON");
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
Process(Result, "ClickHouse", "CreateGRPCConnection", "Selection"); // SKIP
// Request with external table via gRPC
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Tab = Chars.Tab;
TableData = "1" + Tab + "John
|2" + Tab + "Jane";
Options = New Structure;
Options.Insert("name", "ext_grpc");
Options.Insert("cols", ColoumnsStruct);
Options.Insert("data", TableData);
Options.Insert("format", "TSV");
ExternalTable = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
ExternalTablesArray = New Array;
ExternalTablesArray.Add(ExternalTable);
QueryText = "SELECT * FROM ext_grpc";
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("format", "JSON");
Options.Insert("ext", ExternalTablesArray);
Request = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Options = New Structure;
Options.Insert("conn", Connection);
Options.Insert("req", Request);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "ExecuteRequest", Options);
// END
Process(Result, "ClickHouse", "CreateGRPCConnection", "Complex");
Process(Result, "ClickHouse", "CreateGRPCConnection");
EndProcedure
Procedure ClickHouse_GetHTTPConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_Address"];
// No authorization
Options = New Structure;
Options.Insert("url", URL);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", JWT);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
Process(Result, "ClickHouse", "GetHTTPConnectionSettings", "JWTAuthorization"); // SKIP
// With additional headers
AdditionalHeaders = New Map;
AdditionalHeaders.Insert("X-Custom-Header", "CustomValue");
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Options.Insert("headers", AdditionalHeaders);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetHTTPConnectionSettings", Options);
// END
Process(Result, "ClickHouse", "GetHTTPConnectionSettings");
EndProcedure
Procedure ClickHouse_GetGRPCConnectionSettings(FunctionParameters)
URL = FunctionParameters["ClickHouse_AddressGRPC"];
// No authorization
Options = New Structure;
Options.Insert("url", URL);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "NoAuthorization"); // SKIP
// With basic authorization
Login = FunctionParameters["ClickHouse_User"];
Password = FunctionParameters["ClickHouse_Password"];
Authorization = New Structure(Login, Password);
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "BasicAuthorization"); // SKIP
// With JWT authorization
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", JWT);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "JWTAuthorization"); // SKIP
// With metadata
Meta = New Map;
Meta.Insert("custom-meta", "value");
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Options.Insert("meta", Meta);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
Process(Result, "ClickHouse", "GetGRPCConnectionSettings", "WithMetadata"); // SKIP
// With TLS settings
Options = New Structure;
Options.Insert("trust", Истина);
Tls = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetTlsSettings", Options);
Options = New Structure;
Options.Insert("url", URL);
Options.Insert("auth", Authorization);
Options.Insert("tls", Tls);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetGRPCConnectionSettings", Options);
// END
Process(Result, "ClickHouse", "GetGRPCConnectionSettings");
EndProcedure
Procedure ClickHouse_GetRequestSettings(FunctionParameters)
// Minimal request
QueryText = "SELECT 1";
Options = New Structure;
Options.Insert("query", QueryText);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
Process(Result, "ClickHouse", "GetRequestSettings", "Minimal"); // SKIP
// Full request
RequestID = String(New UUID());
Data = New Structure("meta,data", New Array, New Array);
Database = "default";
ResponseFormat = "CSV";
AdditionalSettings = New Map;
AdditionalSettings.Insert("max_threads", "4");
ColoumnsStruct = New Structure("id,name", "UInt64", "String");
Options = New Structure;
Options.Insert("name", "ext");
Options.Insert("cols", ColoumnsStruct);
ExternalTable = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
TableArray = New Array;
TableArray.Add(ExternalTable);
Options = New Structure;
Options.Insert("query", QueryText);
Options.Insert("db", Database);
Options.Insert("id", RequestID);
Options.Insert("data", Data);
Options.Insert("format", ResponseFormat);
Options.Insert("ext", TableArray);
Options.Insert("settings", AdditionalSettings);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetRequestSettings", Options);
// END
Process(Result, "ClickHouse", "GetRequestSettings");
EndProcedure
Procedure ClickHouse_GetExternalTableStructure(FunctionParameters)
// Minimal structure
TableName = "external_data";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("id" , "UInt64");
ColoumnsStruct.Insert("name", "String");
Options = New Structure;
Options.Insert("name", TableName);
Options.Insert("cols", ColoumnsStruct);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
Process(Result, "ClickHouse", "GetExternalTableStructure", "Minimal"); // SKIP
// With TSV data
TableData = StrTemplate("1%1Test
|2%2Test2", Chars.Tab);
Options = New Structure;
Options.Insert("name", TableName);
Options.Insert("cols", ColoumnsStruct);
Options.Insert("data", TableData);
Options.Insert("format", "TSV");
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetExternalTableStructure", Options);
// END
Process(Result, "ClickHouse", "GetExternalTableStructure");
EndProcedure
Procedure ClickHouse_GetSessionSettings(FunctionParameters)
SessionID = String(New UUID);
Check = True;
Timeout = 120;
Options = New Structure;
Options.Insert("id", SessionID);
Options.Insert("check", Check);
Options.Insert("timeout", Timeout);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetSessionSettings", Options);
// END
Process(Result, "ClickHouse", "GetSessionSettings");
EndProcedure
Procedure ClickHouse_GetTlsSettings(FunctionParameters)
Options = New Structure;
Options.Insert("trust", Ложь);
Result = OPI_TestDataRetrieval.ExecuteTestCLI("clickhouse", "GetTlsSettings", Options);
// END
Process(Result, "ClickHouse", "GetTlsSettings");
EndProcedure
+26 -3
View File
@@ -41,7 +41,8 @@
Procedure GetBinaryData(Value, Val Force = False, Val TryB64 = True) Export
If Value = Undefined Then
If Value = Undefined Then
Value = GetBinaryDataFromString("");
Return;
EndIf;
@@ -98,12 +99,16 @@ Procedure GetBinaryOrStream(Value) Export
EndProcedure
Procedure GetCollection(Value, ByNetwork = True) Export
Procedure GetCollection(Value, ByNetwork = True, Success = False) Export
Success = False;
If Value = Undefined Then
Return;
EndIf;
Success = True;
Try
// BSLLS:ExternalAppStarting-off
@@ -147,6 +152,7 @@ Procedure GetCollection(Value, ByNetwork = True) Export
If (Not ThisIsCollection(Value)) Or Not ValueIsFilled(Value) Then
Success = False;
Value = InitialValue;
OPI_Tools.ValueToArray(Value);
@@ -158,6 +164,7 @@ Procedure GetCollection(Value, ByNetwork = True) Export
Except
Success = False;
Value = InitialValue;
OPI_Tools.ValueToArray(Value);
@@ -426,8 +433,24 @@ Procedure ConvertSourceToValue(Value, TryB64)
Else
If TryB64 Then
Value = Base64Value(Value);
Value_ = Base64Value(Value);
If TypeOf(Value_) = Type("BinaryData") Then
Success = Value_.Size() <> 0;
Else
Success = False;
EndIf;
If Success Then
Value = Value_;
EndIf;
Else
Success = False;
EndIf;
If Not Success Then
Raise "The value is not a file path or Base64 string";
EndIf;
@@ -1014,7 +1014,7 @@ Function AddMultipartFormDataFile(Val FieldName
OPI_TypeConversion.GetBinaryData(Data, True, True);
OPI_TypeConversion.GetBoolean(IgnoreEmpty);
If IgnoreEmpty And Data.Size = 0 Then
If IgnoreEmpty And Data.Size() = 0 Then
AddLog(StrTemplate("AddMultipartFormDataFile: empty file ignored, field %1", FieldName));
Return ThisObject;
EndIf;
+1 -1
View File
@@ -1 +1 @@
07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426
020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A
+45 -45
View File
@@ -86,51 +86,6 @@ Function GetComposition() Export
NewLine.Region = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--url";
NewLine.ParameterTrim = "-u";
NewLine.Description = "Connection address with protocol and port";
NewLine.Region = "Common methods";
NewLine.MethodDescription = "Gets the settings structure for gRPC connection";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--auth";
NewLine.ParameterTrim = "-a";
NewLine.Description = "Authorization: string for JWT, structure for basic (optional, def. val.. - Empty value)";
NewLine.Region = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--meta";
NewLine.ParameterTrim = "-m";
NewLine.Description = "gRPC metadata structure, if necessary (optional, def. val.. - Empty value)";
NewLine.Region = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--tls";
NewLine.ParameterTrim = "-t";
NewLine.Description = "TLS settings. See GetTlsSettings (optional, def. val.. - Empty value)";
NewLine.Region = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
@@ -288,6 +243,51 @@ Function GetComposition() Export
NewLine.Region = "Common methods";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--url";
NewLine.ParameterTrim = "-u";
NewLine.Description = "Connection address with protocol and port";
NewLine.Region = "Grpc";
NewLine.MethodDescription = "Gets the settings structure for gRPC connection";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--auth";
NewLine.ParameterTrim = "-a";
NewLine.Description = "Authorization: string for JWT, structure for basic (optional, def. val.. - Empty value)";
NewLine.Region = "Grpc";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--meta";
NewLine.ParameterTrim = "-m";
NewLine.Description = "gRPC metadata structure, if necessary (optional, def. val.. - Empty value)";
NewLine.Region = "Grpc";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
NewLine.Method = "GetGRPCConnectionSettings";
NewLine.SearchMethod = "GETGRPCCONNECTIONSETTINGS";
NewLine.Parameter = "--tls";
NewLine.ParameterTrim = "-t";
NewLine.Description = "TLS settings. See GetTlsSettings (optional, def. val.. - Empty value)";
NewLine.Region = "Grpc";
NewLine = CompositionTable.Add();
NewLine.Library = "clickhouse";
NewLine.Module = "OPI_ClickHouse";
+1 -1
View File
@@ -1 +1 @@
07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426
020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A
+280 -54
View File
@@ -125,38 +125,6 @@
КонецФункции
// Получить настройки соединения gRPC
// Получает структуру настроек для gRPC соединения
//
// Параметры:
// Адрес - Строка - Адрес подключения с протоколом и портом - url
// Авторизация - Строка, Структура Из КлючИЗначение - Авторизация: строка для JWT, структура для basic - auth
// Meta - Структура Из КлючИЗначение - Структура метаданных gRPC, если необходимо - meta
// Tls - Структура Из КлючИЗначение - Настройки TLS. См. ПолучитьНастройкиTls - tls
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура настроек соединения
Функция ПолучитьНастройкиСоединенияGRPC(Знач Адрес
, Знач Авторизация = Неопределено
, Знач Meta = Неопределено
, Знач Tls = Неопределено) Экспорт
НастройкиСоединения = Новый Структура;
OPI_Инструменты.ДобавитьПоле("address" , Адрес , "Строка" , НастройкиСоединения);
OPI_Инструменты.ДобавитьПоле("tls" , Tls , "КлючИЗначение", НастройкиСоединения);
OPI_Инструменты.ДобавитьПоле("metadata" , Meta , "КлючИЗначение", НастройкиСоединения);
OPI_Инструменты.ДобавитьПоле("transport", "grpc", "Строка" , НастройкиСоединения);
Если Авторизация = Неопределено Тогда
Возврат НастройкиСоединения;
КонецЕсли;
ДополнитьНастройкиАвторизацией(Авторизация, НастройкиСоединения);
Возврат НастройкиСоединения;
КонецФункции
// Получить настройки запроса
// Формирует структуру описания запроса
//
@@ -240,10 +208,6 @@
НастройкиСессии = Новый Структура;
ЕстьИдентификаторСессии = IDСессии <> Неопределено;
Если ЕстьИдентификаторСессии Тогда
IDСессии = Строка(Новый УникальныйИдентификатор());
КонецЕсли;
Если ПроверятьСессию = Неопределено Тогда
ПроверятьСессию = ЕстьИдентификаторСессии;
КонецЕсли;
@@ -260,6 +224,38 @@
#Область GRPC
// Получить настройки соединения gRPC
// Получает структуру настроек для gRPC соединения
//
// Параметры:
// Адрес - Строка - Адрес подключения с протоколом и портом - url
// Авторизация - Строка, Структура Из КлючИЗначение - Авторизация: строка для JWT, структура для basic - auth
// Meta - Структура Из КлючИЗначение - Структура метаданных gRPC, если необходимо - meta
// Tls - Структура Из КлючИЗначение - Настройки TLS. См. ПолучитьНастройкиTls - tls
//
// Возвращаемое значение:
// Структура Из КлючИЗначение - Структура настроек соединения
Функция ПолучитьНастройкиСоединенияGRPC(Знач Адрес
, Знач Авторизация = Неопределено
, Знач Meta = Неопределено
, Знач Tls = Неопределено) Экспорт
НастройкиСоединения = Новый Структура;
OPI_Инструменты.ДобавитьПоле("address" , Адрес , "Строка" , НастройкиСоединения);
OPI_Инструменты.ДобавитьПоле("tls" , Tls , "КлючИЗначение", НастройкиСоединения);
OPI_Инструменты.ДобавитьПоле("metadata" , Meta , "КлючИЗначение", НастройкиСоединения);
OPI_Инструменты.ДобавитьПоле("transport", "grpc", "Строка" , НастройкиСоединения);
Если Авторизация = Неопределено Тогда
Возврат НастройкиСоединения;
КонецЕсли;
ДополнитьНастройкиАвторизацией(Авторизация, НастройкиСоединения);
Возврат НастройкиСоединения;
КонецФункции
// Открыть соединение GRPC !NOCLI
// Открывает GRPC соединение для работы с ClickHouse
//
@@ -304,6 +300,56 @@
КонецФункции
// Открыть клиентский поток GRPC !NOCLI
// Инициализирует клиентский поток для обмена
//
// Параметры:
// Соединение - Произвольный - Объект GRPC соединения - conn
// Таймаут - Число - Таймаут (в мс) - tout
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОткрытьКлиентскийПотокGRPC(Знач Соединение, Знач Таймаут = 10000) Экспорт
Возврат ОткрытьПотокGRPC(Соединение, "client", , , Таймаут);
КонецФункции
// Открыть серверный поток GRPC !NOCLI
// Инициализирует серверный поток для обмена
//
// Параметры:
// Соединение - Произвольный - Объект GRPC соединения - conn
// Запрос - Структура Из КлючИЗначение - Данные запроса. См. ПолучитьНастройкиЗапроса - req
// Сессия - Структура Из КлючИЗначение - Настройки сессии. См. ПолучитьНастройкиСессии - session
// Таймаут - Число - Таймаут (в мс) - tout
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОткрытьСерверныйПотокGRPC(Знач Соединение
, Знач Запрос = Неопределено
, Знач Сессия = Неопределено
, Знач Таймаут = 10000) Экспорт
Возврат ОткрытьПотокGRPC(Соединение, "server", Запрос, Сессия, Таймаут);
КонецФункции
// Открыть двунаправленный поток GRPC !NOCLI
// Инициализирует двунаправленный поток для обмена
//
// Параметры:
// Соединение - Произвольный - Объект GRPC соединения - conn
// Таймаут - Число - Таймаут (в мс) - tout
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОткрытьДвунаправленныйПотокGRPC(Знач Соединение, Знач Таймаут = 10000) Экспорт
Возврат ОткрытьПотокGRPC(Соединение, "bidi", , , Таймаут);
КонецФункции
// Получить настройки TLS
// Формирует настройки для использования TLS при выполнении запросов
//
@@ -355,6 +401,23 @@
КонецПроцедуры
Функция ЭтоФорматВалидногоJSON(Знач Формат)
Возврат Формат = "JSON"
Или Формат = "JSONCompact"
Или Формат = "JSONColumns"
Или Формат = "JSONColumnsWithMetadata";
КонецФункции
Функция ЭтоСтроковыйФормат(Знач Формат)
Возврат СтрНайти(Формат, "CSV") > 0
Или СтрНайти(Формат, "TSV") > 0
Или СтрНайти(Формат, "Pretty") > 0;
КонецФункции
#КонецОбласти
#Область HTTP
@@ -384,17 +447,17 @@
.ДобавитьЗаголовок("X-ClickHouse-Database", БазаДанных, Истина)
.УстановитьДвоичноеТело(Данные);
УстановитьДополнительныеПараметрыHTTP(HTTPКлиент, Запрос);
УстановитьДополнительныеЗаголовкиHTTP(HTTPКлиент, Соединение);
УстановитьАвторизациюHTTP(HTTPКлиент, Соединение);
УстановитьВнешниеТаблицыHTTP(HTTPКлиент, ВнешниеТаблицы);
УстановитьСессиюHTTP(HTTPКлиент, Сессия);
УстановитьДополнительныеПараметрыHTTP(HTTPКлиент, Запрос);
УстановитьДополнительныеЗаголовкиHTTP(HTTPКлиент, Соединение);
HTTPКлиент.ОбработатьЗапрос("POST", Истина);
Если HTTPКлиент.Ошибка Тогда
Ответ = ОформитьОшибочныйОтветHTTP(HTTPКлиент);
Иначе
Попытка
@@ -407,8 +470,15 @@
Если ОтветКод < 300 Тогда
Результат = Истина;
ТелоОтвета = HTTPКлиент.ВернутьОтветКакJSONКоллекцию();
Результат = Истина;
Если ЭтоФорматВалидногоJSON(ФорматДанных) Тогда
ТелоОтвета = HTTPКлиент.ВернутьОтветКакJSONКоллекцию();
ИначеЕсли ЭтоСтроковыйФормат(ФорматДанных) Тогда
ТелоОтвета = HTTPКлиент.ВернутьОтветКакСтроку();
Иначе
ТелоОтвета = HTTPКлиент.ВернутьОтветКакДвоичныеДанные();
КонецЕсли;
Если OPI_Инструменты.ЭтоCLI() Тогда
@@ -488,7 +558,7 @@
ИначеЕсли Авторизация = "basic" Тогда
Логин = OPI_Инструменты.ПолучитьИли(Соединение, "user", Неопределено);
Логин = OPI_Инструменты.ПолучитьИли(Соединение, "user" , Неопределено);
Пароль = OPI_Инструменты.ПолучитьИли(Соединение, "password", Неопределено);
HTTPКлиент
@@ -542,12 +612,33 @@
HTTPКлиент
.ДобавитьПараметрURL(ИмяПараметраФормат , ФорматТаблицы , Истина)
.ДобавитьПараметрURL(ИмяПараметраСтруктура, КолонкиТаблицыСтрокой, Истина)
.ДобавитьФайлMultipartFormData(ИмяТаблицы, ИмяФайла, ДанныеТаблицы, ТипДанныхФайла, Истина);
КонецЦикла;
КонецПроцедуры
Процедура УстановитьСессиюHTTP(HTTPКлиент, Знач Сессия)
Если Не ЗначениеЗаполнено(Сессия) Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "Передана некорректная структура информации о сессии";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Сессия, ТекстОшибки);
IDСессии = OPI_Инструменты.ПолучитьИли(Сессия, "id" , Неопределено);
Проверка = OPI_Инструменты.ПолучитьИли(Сессия, "check" , Неопределено);
Таймаут = OPI_Инструменты.ПолучитьИли(Сессия, "timeout", Неопределено);
HTTPКлиент
.ДобавитьПараметрURL("session_id" , IDСессии, Истина)
.ДобавитьПараметрURL("session_check" , Проверка, Истина)
.ДобавитьПараметрURL("session_timeout", Таймаут , Истина);
КонецПроцедуры
#КонецОбласти
#Область GRPC
@@ -568,6 +659,64 @@
Возврат Коннектор;
КонецЕсли;
ЗапросGRPC = СформироватьЗапросGRPC(НастройкиСоединения, Запрос, Сессия);
Сервис = ПолучитьИмяСервисаGRPC();
Метод = "ExecuteQuery";
Результат = OPI_GRPC.ВызватьМетод(Коннектор, Сервис, Метод, ЗапросGRPC);
ОбработатьОтветGRPC(Результат);
Если ЗакрыватьСоединение Тогда
OPI_GRPC.ЗакрытьСоединение(Коннектор);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ОткрытьПотокGRPC(Соединение
, Знач Вид
, Знач Запрос = Неопределено
, Знач Сессия = Неопределено
, Знач Таймаут = 10000)
Сервис = ПолучитьИмяСервисаGRPC();
Если Вид = "client" Тогда
Метод = "ExecuteQueryWithStreamInput";
Результат = OPI_GRPC.ИнициализироватьКлиентскийПоток(Соединение, Сервис, Метод, Таймаут);
ИначеЕсли Вид = "server" Тогда
Метод = "ExecuteQueryWithStreamOutput";
ЗапросGRPC = СформироватьЗапросGRPC(Соединение, Запрос, Сессия);
Результат = OPI_GRPC.ИнициализироватьСерверныйПоток(Соединение, Сервис, Метод, ЗапросGRPC, Таймаут);
Иначе
Метод = "ExecuteQueryWithStreamIO";
Результат = OPI_GRPC.ИнициализироватьДвунаправленныйПоток(Соединение, Сервис, Метод, Таймаут);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция СформироватьЗапросGRPC(Знач Соединение, Знач Запрос, Знач Сессия)
Если Запрос = Неопределено Тогда
Возврат Запрос;
КонецЕсли;
Если OPI_GRPC.ЭтоКоннектор(Соединение) Тогда
НастройкиСоединения = OPI_Инструменты.JsonВСтруктуру(Соединение.GetSettings());
Иначе
НастройкиСоединения = Соединение;
КонецЕсли;
Данные = OPI_Инструменты.ПолучитьИли(Запрос, "data" , Неопределено);
IDЗапроса = OPI_Инструменты.ПолучитьИли(Запрос, "id" , Неопределено);
ТекстЗапроса = OPI_Инструменты.ПолучитьИли(Запрос, "query" , Неопределено);
@@ -586,16 +735,15 @@
УстановитьАвторизациюGRPC(ЗапросGRPC, НастройкиСоединения);
УстановитьВнешниеТаблицыGRPC(ЗапросGRPC, ВнешниеТаблицы);
УстановитьСессиюGRPC(ЗапросGRPC, Сессия);
Сервис = "clickhouse.grpc.ClickHouse";
Метод = "ExecuteQuery";
Результат = OPI_GRPC.ВызватьМетод(Коннектор, Сервис, Метод, ЗапросGRPC);
Возврат ЗапросGRPC;
Если ЗакрыватьСоединение Тогда
OPI_GRPC.ЗакрытьСоединение(Коннектор);
КонецЕсли;
КонецФункции
Возврат Результат;
Функция ПолучитьИмяСервисаGRPC()
Возврат "clickhouse.grpc.ClickHouse";
КонецФункции
@@ -643,6 +791,10 @@
ДанныеТаблицы = OPI_Инструменты.ПолучитьИли(Таблица, "data" , Неопределено);
КолонкиТаблицы = OPI_Инструменты.ПолучитьИли(Таблица, "cols" , Неопределено);
Если ДанныеТаблицы <> Неопределено Тогда
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ДанныеТаблицы, Истина);
КонецЕсли;
ТекстОшибки = СтрШаблон("Некорректная структура колонок для таблицы ""%1""", ИмяТаблицы);
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(КолонкиТаблицы, ТекстОшибки);
@@ -674,6 +826,68 @@
КонецПроцедуры
Процедура УстановитьСессиюGRPC(ЗапросGRPC, Знач Сессия)
Если Не ЗначениеЗаполнено(Сессия) Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "Передана некорректная структура информации о сессии";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Сессия, ТекстОшибки);
IDСессии = OPI_Инструменты.ПолучитьИли(Сессия, "id" , Неопределено);
Проверка = OPI_Инструменты.ПолучитьИли(Сессия, "check" , Неопределено);
Таймаут = OPI_Инструменты.ПолучитьИли(Сессия, "timeout", Неопределено);
OPI_Инструменты.ДобавитьПоле("session_id" , IDСессии, "Строка", ЗапросGRPC);
OPI_Инструменты.ДобавитьПоле("session_check" , Проверка, "Булево", ЗапросGRPC);
OPI_Инструменты.ДобавитьПоле("session_timeout", Таймаут , "Число" , ЗапросGRPC);
КонецПроцедуры
Процедура ОбработатьОтветGRPC(Ответ)
Если Не OPI_Инструменты.ПолучитьИли(Ответ, "result", Ложь) Тогда
Возврат;
КонецЕсли;
Формат = OPI_Инструменты.ПолучитьИли(Ответ, "output_format", Неопределено);
Если Не ЗначениеЗаполнено(Формат) Тогда
Возврат;
КонецЕсли;
B64Строка = OPI_Инструменты.ПолеКоллекцииСуществует(Ответ, "data.output.BYTES");
Если ЗначениеЗаполнено(B64Строка) Тогда
Если ЭтоФорматВалидногоJSON(Формат) Тогда
Значение = ПолучитьДвоичныеДанныеИзBase64Строки(B64Строка);
Успех = Ложь;
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение, , Успех);
Если Не Успех Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
КонецЕсли;
ИначеЕсли ЭтоСтроковыйФормат(Формат) Тогда
Значение = ПолучитьДвоичныеДанныеИзBase64Строки(B64Строка);
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе
Возврат;
КонецЕсли;
Ответ["data"]["output"] = Значение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -688,10 +902,6 @@ Function GetHTTPConnectionSettings(Val Address, Val Authorization = Undefined, V
Return ПолучитьНастройкиСоединенияHTTP(Address, Authorization, AdditionalHeaders);
EndFunction
Function GetGRPCConnectionSettings(Val Address, Val Authorization = Undefined, Val Meta = Undefined, Val Tls = Undefined) Export
Return ПолучитьНастройкиСоединенияGRPC(Address, Authorization, Meta, Tls);
EndFunction
Function GetRequestSettings(Val Text, Val Database = Undefined, Val RequestID = Undefined, Val Data = Undefined, Val ResponseFormat = "JSON", Val ExternalTables = Undefined, Val Settings = Undefined) Export
Return ПолучитьНастройкиЗапроса(Text, Database, RequestID, Data, ResponseFormat, ExternalTables, Settings);
EndFunction
@@ -704,10 +914,26 @@ Function GetSessionSettings(Val SessionID = Undefined, Val CheckSession = Undefi
Return ПолучитьНастройкиСессии(SessionID, CheckSession, Timeout);
EndFunction
Function GetGRPCConnectionSettings(Val Address, Val Authorization = Undefined, Val Meta = Undefined, Val Tls = Undefined) Export
Return ПолучитьНастройкиСоединенияGRPC(Address, Authorization, Meta, Tls);
EndFunction
Function CreateGRPCConnection(Val ConnectionSettings) Export
Return ОткрытьСоединениеGRPC(ConnectionSettings);
EndFunction
Function OpenClientGRPCStream(Val Connection, Val Timeout = 10000) Export
Return ОткрытьКлиентскийПотокGRPC(Connection, Timeout);
EndFunction
Function OpenServerGRPCStream(Val Connection, Val Request = Undefined, Val Session = Undefined, Val Timeout = 10000) Export
Return ОткрытьСерверныйПотокGRPC(Connection, Request, Session, Timeout);
EndFunction
Function OpenBidirectionalGRPCStream(Val Connection, Val Timeout = 10000) Export
Return ОткрытьДвунаправленныйПотокGRPC(Connection, Timeout);
EndFunction
Function GetTlsSettings(Val DisableCertVerification, Val CertFilepath = "") Export
Return ПолучитьНастройкиTls(DisableCertVerification, CertFilepath);
EndFunction
+328 -28
View File
@@ -3362,11 +3362,17 @@
Процедура CH_ОсновныеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Address" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Address" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_AddressGRPC", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password" , ПараметрыТеста);
ClickHouse_ВыполнитьЗапрос(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСоединенияHTTP(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСоединенияGRPC(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиЗапроса(ПараметрыТеста);
ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСессии(ПараметрыТеста);
КонецПроцедуры
@@ -3378,6 +3384,7 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password" , ПараметрыТеста);
ClickHouse_ОткрытьСоединениеGRPC(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиTls(ПараметрыТеста);
КонецПроцедуры
@@ -27069,9 +27076,9 @@
Соединение = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация);
// Запрос (простой)
// Запрос (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -27080,15 +27087,15 @@
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE events"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "Простой"); // SKIP
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СозданиеТаблицы"); // SKIP
// Запрос (с данными)
// Запрос (вставка данных)
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
@@ -27128,6 +27135,89 @@
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, БазаДанных, IDЗапроса, Данные, ФорматДанных);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВставкаДанных"); // SKIP
// Запрос с внешней таблицей
ИмяТаблицы = "ext_users";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane
|3" + Таб + "Bob";
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок, ДанныеТаблицы, "TSV");
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_users WHERE id > 1";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", МассивВнешнихТаблиц);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВнешняяТаблица"); // SKIP
// Выборка
ТекстВыборки = "SELECT * FROM events";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос"); // SKIP
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "CSV");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаCSV");
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "TSV");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаTSV");
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSONCompact");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаJSONCompact");
ТекстЗапроса = "SELECT 1 AS result";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", , ДопНастройки);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ДопНастройки");
Сессия = OPI_ClickHouse.ПолучитьНастройкиСессии(Строка(Новый УникальныйИдентификатор()));
ТекстЗапроса = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос, Сессия);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СессияСоздание");
ТекстЗапроса = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос, Сессия);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СессияВставка");
ТекстЗапроса = "SELECT * FROM temp_session_test";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос, Сессия);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос");
@@ -27143,14 +27233,16 @@
Авторизация = Новый Структура(Логин, Пароль);
// Открытие соединения
НастройкиСоединения = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация);
Соединение = OPI_ClickHouse.ОткрытьСоединениеGRPC(НастройкиСоединения);
Обработать(Соединение, "ClickHouse", "ОткрытьСоединениеGRPC"); // SKIP
Обработать(Соединение, "ClickHouse", "ОткрытьСоединениеGRPC", "Открытие"); // SKIP
// Запрос (простой)
// Запрос через открытое соединение (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -27159,14 +27251,17 @@
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events_grpc"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Простой"); // SKIP
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "СозданиеТаблицы"); // SKIP
// Запрос (с данными)
// Вставка данных
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
ТекстЗапроса = "INSERT INTO events_grpc FORMAT JSON";
ФорматДанных = "JSON";
МассивДанных = Новый Массив;
@@ -27180,15 +27275,7 @@
Запись1.Вставить("event_type", "click");
Запись1.Вставить("payload" , "{}");
Запись2 = Новый Структура;
Запись2.Вставить("id" , 2);
Запись2.Вставить("timestamp" , ТекущаяДата);
Запись2.Вставить("user_id" , 200);
Запись2.Вставить("event_type", "hover");
Запись2.Вставить("payload" , "{}");
МассивДанных.Добавить(Запись1);
МассивДанных.Добавить(Запись2);
Мета = Новый Массив;
Мета.Добавить(Новый Структура("name,type", "id" , "UInt64"));
@@ -27197,16 +27284,229 @@
Мета.Добавить(Новый Структура("name,type", "event_type", "String"));
Мета.Добавить(Новый Структура("name,type", "payload" , "String"));
Данные = Новый Структура("meta,data", Мета, МассивДанных);
БазаДанных = "default";
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Мета, МассивДанных);
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, БазаДанных, IDЗапроса, Данные, ФорматДанных);
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, "default", IDЗапроса, Данные, ФорматДанных);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "ВставкаДанных"); // SKIP
// Выборка
ТекстВыборки = "SELECT * FROM events_grpc";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Выборка"); // SKIP
// Запрос с внешней таблицей через gRPC
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane";
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext_grpc", СтруктураКолонок, ДанныеТаблицы, "TSV");
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_grpc";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса, , , , "JSON", МассивВнешнихТаблиц);
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// END
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Сложный");
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСоединенияHTTP(ПараметрыФункции)
URL = ПараметрыФункции["ClickHouse_Address"];
// Без авторизации
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "БезАвторизации"); // SKIP
// С basic авторизацией
Логин = ПараметрыФункции["ClickHouse_User"];
Пароль = ПараметрыФункции["ClickHouse_Password"];
Авторизация = Новый Структура(Логин, Пароль);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "BasicАвторизация"); // SKIP
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, JWT);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "JWTАвторизация"); // SKIP
// С дополнительными заголовками
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("X-Custom-Header", "CustomValue");
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияHTTP(URL, Авторизация, ДопЗаголовки);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСоединенияGRPC(ПараметрыФункции)
URL = ПараметрыФункции["ClickHouse_AddressGRPC"];
// Без авторизации
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "БезАвторизации"); // SKIP
// С basic авторизацией
Логин = ПараметрыФункции["ClickHouse_User"];
Пароль = ПараметрыФункции["ClickHouse_Password"];
Авторизация = Новый Структура(Логин, Пароль);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "BasicАвторизация"); // SKIP
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, JWT);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "JWTАвторизация"); // SKIP
// С метаданными
Meta = Новый Соответствие;
Meta.Вставить("custom-meta", "value");
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация, Meta);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "СМетаданными"); // SKIP
// С TLS настройками
Tls = OPI_ClickHouse.ПолучитьНастройкиTls(Истина);
Результат = OPI_ClickHouse.ПолучитьНастройкиСоединенияGRPC(URL, Авторизация, , Tls);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиЗапроса(ПараметрыФункции)
// Минимальный запрос
ТекстЗапроса = "SELECT 1";
Результат = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиЗапроса", "Минимальный"); // SKIP
// Полный запрос
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Новый Массив, Новый Массив);
БазаДанных = "default";
ФорматОтвета = "CSV";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
СтруктураКолонок = Новый Структура("id,name", "UInt64", "String");
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext", СтруктураКолонок);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить(ВнешняяТаблица);
Результат = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстЗапроса
, БазаДанных
, IDЗапроса
, Данные
, ФорматОтвета
, МассивТаблиц
, ДопНастройки);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиЗапроса");
КонецПроцедуры
Процедура ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(ПараметрыФункции)
// Минимальная структура
ИмяТаблицы = "external_data";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Результат = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок);
Обработать(Результат, "ClickHouse", "ПолучитьСтруктуруВнешнейТаблицы", "Минимальная"); // SKIP
// С данными TSV
ДанныеТаблицы = СтрШаблон("1%1Test
|2%2Test2", Символы.Таб);
Результат = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы(ИмяТаблицы, СтруктураКолонок, ДанныеТаблицы, "TSV");
// END
Обработать(Результат, "ClickHouse", "ПолучитьСтруктуруВнешнейТаблицы");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСессии(ПараметрыФункции)
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
Результат = OPI_ClickHouse.ПолучитьНастройкиСессии(IDСессии, Проверять, Таймаут);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСессии");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиTls(ПараметрыФункции)
Результат = OPI_ClickHouse.ПолучитьНастройкиTls(Ложь);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиTls");
КонецПроцедуры
+503 -28
View File
@@ -3363,11 +3363,17 @@
Процедура CH_ОсновныеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Address" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Address" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_AddressGRPC", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password" , ПараметрыТеста);
ClickHouse_ВыполнитьЗапрос(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСоединенияHTTP(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСоединенияGRPC(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиЗапроса(ПараметрыТеста);
ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСессии(ПараметрыТеста);
КонецПроцедуры
@@ -3379,6 +3385,7 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password" , ПараметрыТеста);
ClickHouse_ОткрытьСоединениеGRPC(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиTls(ПараметрыТеста);
КонецПроцедуры
@@ -35778,9 +35785,9 @@
Соединение = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
// Запрос (простой)
// Запрос (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35789,8 +35796,8 @@
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE events"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
@@ -35802,9 +35809,9 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "Простой"); // SKIP
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СозданиеТаблицы"); // SKIP
// Запрос (с данными)
// Запрос (вставка данных)
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
@@ -35855,6 +35862,173 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВставкаДанных"); // SKIP
// Запрос с внешней таблицей
ИмяТаблицы = "ext_users";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane
|3" + Таб + "Bob";
Опции = Новый Структура;
Опции.Вставить("name", ИмяТаблицы);
Опции.Вставить("cols", СтруктураКолонок);
Опции.Вставить("data", ДанныеТаблицы);
Опции.Вставить("format", "TSV");
ВнешняяТаблица = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_users WHERE id > 1";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Опции.Вставить("ext", МассивВнешнихТаблиц);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВнешняяТаблица"); // SKIP
// Выборка
ТекстВыборки = "SELECT * FROM events";
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "JSON");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос"); // SKIP
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "CSV");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаCSV");
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "TSV");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаTSV");
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "JSONCompact");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаJSONCompact");
ТекстЗапроса = "SELECT 1 AS result";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Опции.Вставить("settings", ДопНастройки);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ДопНастройки");
Опции = Новый Структура;
Опции.Вставить("id", Строка);
Сессия = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСессии", Опции);
ТекстЗапроса = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Опции.Вставить("session", Сессия);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СессияСоздание");
ТекстЗапроса = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Опции.Вставить("session", Сессия);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СессияВставка");
ТекстЗапроса = "SELECT * FROM temp_session_test";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Опции.Вставить("session", Сессия);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос");
@@ -35870,6 +36044,8 @@
Авторизация = Новый Структура(Логин, Пароль);
// Открытие соединения
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
@@ -35877,11 +36053,11 @@
НастройкиСоединения = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Соединение = OPI_ClickHouse.ОткрытьСоединениеGRPC(НастройкиСоединения);
Обработать(Соединение, "ClickHouse", "ОткрытьСоединениеGRPC"); // SKIP
Обработать(Соединение, "ClickHouse", "ОткрытьСоединениеGRPC", "Открытие"); // SKIP
// Запрос (простой)
// Запрос через открытое соединение (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35890,6 +36066,9 @@
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events_grpc"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
@@ -35900,11 +36079,11 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Простой"); // SKIP
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "СозданиеТаблицы"); // SKIP
// Запрос (с данными)
// Вставка данных
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
ТекстЗапроса = "INSERT INTO events_grpc FORMAT JSON";
ФорматДанных = "JSON";
МассивДанных = Новый Массив;
@@ -35918,15 +36097,7 @@
Запись1.Вставить("event_type", "click");
Запись1.Вставить("payload" , "{}");
Запись2 = Новый Структура;
Запись2.Вставить("id" , 2);
Запись2.Вставить("timestamp" , ТекущаяДата);
Запись2.Вставить("user_id" , 200);
Запись2.Вставить("event_type", "hover");
Запись2.Вставить("payload" , "{}");
МассивДанных.Добавить(Запись1);
МассивДанных.Добавить(Запись2);
Мета = Новый Массив;
Мета.Добавить(Новый Структура("name,type", "id" , "UInt64"));
@@ -35935,13 +36106,12 @@
Мета.Добавить(Новый Структура("name,type", "event_type", "String"));
Мета.Добавить(Новый Структура("name,type", "payload" , "String"));
Данные = Новый Структура("meta,data", Мета, МассивДанных);
БазаДанных = "default";
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Мета, МассивДанных);
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("db", БазаДанных);
Опции.Вставить("db", "default");
Опции.Вставить("id", IDЗапроса);
Опции.Вставить("data", Данные);
Опции.Вставить("format", ФорматДанных);
@@ -35953,9 +36123,314 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "ВставкаДанных"); // SKIP
// Выборка
ТекстВыборки = "SELECT * FROM events_grpc";
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "JSON");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Выборка"); // SKIP
// Запрос с внешней таблицей через gRPC
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane";
Опции = Новый Структура;
Опции.Вставить("name", "ext_grpc");
Опции.Вставить("cols", СтруктураКолонок);
Опции.Вставить("data", ДанныеТаблицы);
Опции.Вставить("format", "TSV");
ВнешняяТаблица = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_grpc";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Опции.Вставить("ext", МассивВнешнихТаблиц);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
// END
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Сложный");
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСоединенияHTTP(ПараметрыФункции)
URL = ПараметрыФункции["ClickHouse_Address"];
// Без авторизации
Опции = Новый Структура;
Опции.Вставить("url", URL);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "БезАвторизации"); // SKIP
// С basic авторизацией
Логин = ПараметрыФункции["ClickHouse_User"];
Пароль = ПараметрыФункции["ClickHouse_Password"];
Авторизация = Новый Структура(Логин, Пароль);
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "BasicАвторизация"); // SKIP
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", JWT);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "JWTАвторизация"); // SKIP
// С дополнительными заголовками
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("X-Custom-Header", "CustomValue");
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Опции.Вставить("headers", ДопЗаголовки);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСоединенияGRPC(ПараметрыФункции)
URL = ПараметрыФункции["ClickHouse_AddressGRPC"];
// Без авторизации
Опции = Новый Структура;
Опции.Вставить("url", URL);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "БезАвторизации"); // SKIP
// С basic авторизацией
Логин = ПараметрыФункции["ClickHouse_User"];
Пароль = ПараметрыФункции["ClickHouse_Password"];
Авторизация = Новый Структура(Логин, Пароль);
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "BasicАвторизация"); // SKIP
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", JWT);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "JWTАвторизация"); // SKIP
// С метаданными
Meta = Новый Соответствие;
Meta.Вставить("custom-meta", "value");
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Опции.Вставить("meta", Meta);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "СМетаданными"); // SKIP
// С TLS настройками
Опции = Новый Структура;
Опции.Вставить("trust", Истина);
Tls = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиTls", Опции);
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Опции.Вставить("tls", Tls);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиЗапроса(ПараметрыФункции)
// Минимальный запрос
ТекстЗапроса = "SELECT 1";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиЗапроса", "Минимальный"); // SKIP
// Полный запрос
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Новый Массив, Новый Массив);
БазаДанных = "default";
ФорматОтвета = "CSV";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
СтруктураКолонок = Новый Структура("id,name", "UInt64", "String");
Опции = Новый Структура;
Опции.Вставить("name", "ext");
Опции.Вставить("cols", СтруктураКолонок);
ВнешняяТаблица = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить(ВнешняяТаблица);
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("db", БазаДанных);
Опции.Вставить("id", IDЗапроса);
Опции.Вставить("data", Данные);
Опции.Вставить("format", ФорматОтвета);
Опции.Вставить("ext", МассивТаблиц);
Опции.Вставить("settings", ДопНастройки);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиЗапроса");
КонецПроцедуры
Процедура ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(ПараметрыФункции)
// Минимальная структура
ИмяТаблицы = "external_data";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Опции = Новый Структура;
Опции.Вставить("name", ИмяТаблицы);
Опции.Вставить("cols", СтруктураКолонок);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьСтруктуруВнешнейТаблицы", "Минимальная"); // SKIP
// С данными TSV
ДанныеТаблицы = СтрШаблон("1%1Test
|2%2Test2", Символы.Таб);
Опции = Новый Структура;
Опции.Вставить("name", ИмяТаблицы);
Опции.Вставить("cols", СтруктураКолонок);
Опции.Вставить("data", ДанныеТаблицы);
Опции.Вставить("format", "TSV");
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьСтруктуруВнешнейТаблицы");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСессии(ПараметрыФункции)
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
Опции = Новый Структура;
Опции.Вставить("id", IDСессии);
Опции.Вставить("check", Проверять);
Опции.Вставить("timeout", Таймаут);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСессии", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСессии");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиTls(ПараметрыФункции)
Опции = Новый Структура;
Опции.Вставить("trust", Ложь);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиTls", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиTls");
КонецПроцедуры
@@ -12962,12 +12962,216 @@
Результат.Вставить("body", ПолучитьСтрокуИзДвоичныхДанных(Результат["body"]));
КонецЕсли;
Если Вариант = "СозданиеТаблицы" Или Вариант = "ВставкаДанных" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["status"]).Равно(200);
ИначеЕсли Вариант = "ВыборкаJSON" Или Вариант = "ВыборкаJSONCompact" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["status"]).Равно(200);
ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");
ИначеЕсли Вариант = "ВыборкаCSV" Или Вариант = "ВыборкаTSV" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["status"]).Равно(200);
ОжидаетЧто(Результат["body"]).ИмеетТип("Строка");
ИначеЕсли Вариант = "ВнешняяТаблица" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");
ОжидаетЧто(Результат["body"]["rows"]).Равно(2);
ИначеЕсли Вариант = "ДопНастройки" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");
ИначеЕсли Вариант = "СессияСоздание" Или Вариант = "СессияВставка" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["status"]).Равно(200);
Иначе
// Основной вариант - выборка из временной таблицы сессии
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ОжидаетЧто(Результат["result"]).Равно(Истина);
ОжидаетЧто(Результат["body"]).ИмеетТип("Соответствие");
ОжидаетЧто(Результат["body"]["rows"]).Равно(2);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ОткрытьСоединениеGRPC(Знач Результат, Вариант)
Если Вариант = "Открытие" Тогда
Результат = Строка(ТипЗнч(Результат));
ОжидаетЧто(Результат).Равно("AddIn.OPI_GRPC.Main");
ИначеЕсли Вариант = "СозданиеТаблицы" Или Вариант = "ВставкаДанных" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
ИначеЕсли Вариант = "Выборка" Тогда
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
Иначе
ОжидаетЧто(Результат).ИмеетТип("Соответствие").Заполнено();
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ПолучитьНастройкиСоединенияHTTP(Знач Результат, Вариант)
ОжидаетЧто(Результат).ИмеетТип("Структура").Заполнено();
ОжидаетЧто(Результат.Свойство("address")).Равно(Истина);
ОжидаетЧто(Результат.Свойство("transport")).Равно(Истина);
ОжидаетЧто(Результат["transport"]).Равно("http");
Если Вариант = "БезАвторизации" Тогда
ОжидаетЧто(Результат.Свойство("auth_type")).Равно(Ложь);
ИначеЕсли Вариант = "BasicАвторизация" Тогда
ОжидаетЧто(Результат["auth_type"]).Равно("basic");
ОжидаетЧто(Результат.Свойство("user")).Равно(Истина);
ОжидаетЧто(Результат.Свойство("password")).Равно(Истина);
ИначеЕсли Вариант = "JWTАвторизация" Тогда
ОжидаетЧто(Результат["auth_type"]).Равно("jwt");
ОжидаетЧто(Результат.Свойство("token")).Равно(Истина);
ИначеЕсли Не ЗначениеЗаполнено(Вариант) Тогда
ОжидаетЧто(Результат.Свойство("headers")).Равно(Истина);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ПолучитьНастройкиСоединенияGRPC(Знач Результат, Вариант)
ОжидаетЧто(Результат).ИмеетТип("Структура").Заполнено();
ОжидаетЧто(Результат.Свойство("address")).Равно(Истина);
ОжидаетЧто(Результат.Свойство("transport")).Равно(Истина);
ОжидаетЧто(Результат["transport"]).Равно("grpc");
Если Вариант = "БезАвторизации" Тогда
ОжидаетЧто(Результат.Свойство("auth_type")).Равно(Ложь);
ИначеЕсли Вариант = "BasicАвторизация" Тогда
ОжидаетЧто(Результат["auth_type"]).Равно("basic");
ОжидаетЧто(Результат.Свойство("user")).Равно(Истина);
ОжидаетЧто(Результат.Свойство("password")).Равно(Истина);
ИначеЕсли Вариант = "JWTАвторизация" Тогда
ОжидаетЧто(Результат["auth_type"]).Равно("jwt");
ОжидаетЧто(Результат.Свойство("token")).Равно(Истина);
ИначеЕсли Вариант = "СМетаданными" Тогда
ОжидаетЧто(Результат.Свойство("metadata")).Равно(Истина);
ИначеЕсли Не ЗначениеЗаполнено(Вариант) Тогда
ОжидаетЧто(Результат.Свойство("tls")).Равно(Истина);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ПолучитьНастройкиЗапроса(Знач Результат, Вариант)
ОжидаетЧто(Результат).ИмеетТип("Структура").Заполнено();
ОжидаетЧто(Результат.Свойство("query")).Равно(Истина);
Если Вариант = "Минимальный" Тогда
ОжидаетЧто(Результат["query"]).Равно("SELECT 1");
Иначе
ОжидаетЧто(Результат["database"]).Равно("default");
ОжидаетЧто(Результат["id"]).Заполнено();
ОжидаетЧто(Результат.Свойство("data")).Равно(Истина);
ОжидаетЧто(Результат["format"]).Равно("CSV");
ОжидаетЧто(Результат.Свойство("external_tables")).Равно(Истина);
ОжидаетЧто(Результат["external_tables"]).ИмеетТип("Массив");
ОжидаетЧто(Результат.Свойство("settings")).Равно(Истина);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(Знач Результат, Вариант)
ОжидаетЧто(Результат).ИмеетТип("Структура").Заполнено();
ОжидаетЧто(Результат.Свойство("name")).Равно(Истина);
ОжидаетЧто(Результат.Свойство("cols")).Равно(Истина);
ОжидаетЧто(Результат["name"]).Равно("external_data");
Если Вариант = "Минимальная" Тогда
ОжидаетЧто(Результат.Свойство("data")).Равно(Ложь);
ИначеЕсли Вариант = "TSV" Или Не ЗначениеЗаполнено(Вариант) Тогда
ОжидаетЧто(Результат["format"]).Равно("TSV");
ОжидаетЧто(Результат.Свойство("data")).Равно(Истина);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ПолучитьНастройкиСессии(Знач Результат, Вариант)
ОжидаетЧто(Результат).ИмеетТип("Структура").Заполнено();
ОжидаетЧто(Результат["id"]).ИмеетТип("Строка").Заполнено();
ОжидаетЧто(Результат["check"]).Равно(Истина);
ОжидаетЧто(Результат["timeout"]).Равно(120);
Возврат Результат;
КонецФункции
Функция Проверка_ClickHouse_ПолучитьНастройкиTls(Знач Результат, Вариант)
ОжидаетЧто(OPI_Инструменты.ЭтоКоллекция(Результат, Истина)).Равно(Истина);
Возврат Результат;
КонецФункции
#КонецОбласти
@@ -42,6 +42,7 @@
Процедура ПолучитьДвоичныеДанные(Значение, Знач Безусловно = Ложь, Знач ПопыткаB64 = Истина) Экспорт
Если Значение = Неопределено Тогда
Значение = ПолучитьДвоичныеДанныеИзСтроки("");
Возврат;
КонецЕсли;
@@ -98,12 +99,16 @@
КонецПроцедуры
Процедура ПолучитьКоллекцию(Значение, ПоСети = Истина) Экспорт
Процедура ПолучитьКоллекцию(Значение, ПоСети = Истина, Успех = Ложь) Экспорт
Успех = Ложь;
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
Успех = Истина;
Попытка
// BSLLS:ExternalAppStarting-off
@@ -147,6 +152,7 @@
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
Успех = Ложь;
Значение = ИсходноеЗначение;
OPI_Инструменты.ЗначениеВМассив(Значение);
@@ -158,6 +164,7 @@
Исключение
Успех = Ложь;
Значение = ИсходноеЗначение;
OPI_Инструменты.ЗначениеВМассив(Значение);
@@ -426,8 +433,24 @@
Иначе
Если ПопыткаB64 Тогда
Значение = Base64Значение(Значение);
Значение_ = Base64Значение(Значение);
Если ТипЗнч(Значение_) = Тип("ДвоичныеДанные") Тогда
Успех = Значение_.Размер() <> 0;
Иначе
Успех = Ложь;
КонецЕсли;
Если Успех Тогда
Значение = Значение_;
КонецЕсли;
Иначе
Успех = Ложь;
КонецЕсли;
Если Не Успех Тогда
ВызватьИсключение "Значение не является путем к файлу или Base64 строкой";
КонецЕсли;
@@ -447,8 +470,8 @@ Procedure GetBinaryOrStream(Value) Export
ПолучитьДвоичныеИлиПоток(Value);
EndProcedure
Procedure GetCollection(Value, ByNetwork = True) Export
ПолучитьКоллекцию(Value, ByNetwork);
Procedure GetCollection(Value, ByNetwork = True, Success = False) Export
ПолучитьКоллекцию(Value, ByNetwork, Success);
EndProcedure
Procedure GetKeyValueCollection(Value, Val ErrorText = "The specified value is not a valid collection!") Export
@@ -1014,7 +1014,7 @@
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Данные, Истина, Истина);
OPI_ПреобразованиеТипов.ПолучитьБулево(ИгнорироватьПустой);
Если ИгнорироватьПустой И Данные.Размер = 0 Тогда
Если ИгнорироватьПустой И Данные.Размер() = 0 Тогда
ДобавитьЛог(СтрШаблон("ДобавитьФайлMultipart: пустой файл проигнорирован, поле %1", ИмяПоля));
Возврат ЭтотОбъект;
КонецЕсли;
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426";
LastBuildHash = "020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A";
Return LastBuildHash;
@@ -32,7 +32,7 @@
Function GetHashSum() Export
LastBuildHash = "07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426";
LastBuildHash = "020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A";
Return LastBuildHash;
@@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_ClickHouse.os
// OneScript: ./OInt/core/Modules/OPI_ClickHouse.os
// Lib: ClickHouse
// CLI: clickhouse
// Keywords: clickhouse
@@ -302,52 +302,52 @@
// Открыть клиентский поток GRPC !NOCLI
// Инициализирует клиентский поток для обмена
//
//
// Параметры:
// Соединение - Произвольный - Объект GRPC соединения - conn
// Таймаут - Число - Таймаут (в мс) - tout
//
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОткрытьКлиентскийПотокGRPC(Знач Соединение, Знач Таймаут = 10000) Экспорт
Возврат ОткрытьПотокGRPC(Соединение, "client", , , Таймаут);
КонецФункции
// Открыть серверный поток GRPC !NOCLI
// Инициализирует серверный поток для обмена
//
//
// Параметры:
// Соединение - Произвольный - Объект GRPC соединения - conn
// Запрос - Структура Из КлючИЗначение - Данные запроса. См. ПолучитьНастройкиЗапроса - req
// Сессия - Структура Из КлючИЗначение - Настройки сессии. См. ПолучитьНастройкиСессии - session
// Таймаут - Число - Таймаут (в мс) - tout
//
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОткрытьСерверныйПотокGRPC(Знач Соединение
, Знач Запрос = Неопределено
, Знач Сессия = Неопределено
, Знач Таймаут = 10000) Экспорт
Возврат ОткрытьПотокGRPC(Соединение, "server", Запрос, Сессия, Таймаут);
КонецФункции
// Открыть двунаправленный поток GRPC !NOCLI
// Инициализирует двунаправленный поток для обмена
//
//
// Параметры:
// Соединение - Произвольный - Объект GRPC соединения - conn
// Таймаут - Число - Таймаут (в мс) - tout
//
//
// Возвращаемое значение:
// Соответствие Из КлючИЗначение - Результат обработки
Функция ОткрытьДвунаправленныйПотокGRPC(Знач Соединение, Знач Таймаут = 10000) Экспорт
Возврат ОткрытьПотокGRPC(Соединение, "bidi", , , Таймаут);
КонецФункции
// Получить настройки TLS
@@ -407,15 +407,15 @@
Или Формат = "JSONCompact"
Или Формат = "JSONColumns"
Или Формат = "JSONColumnsWithMetadata";
КонецФункции
Функция ЭтоСтроковыйФормат(Знач Формат)
Возврат СтрНайти(Формат, "CSV") > 0
Или СтрНайти(Формат, "TSV") > 0
Или СтрНайти(Формат, "Pretty") > 0;
КонецФункции
#КонецОбласти
@@ -446,7 +446,7 @@
.ДобавитьЗаголовок("X-ClickHouse-Database", БазаДанных, Истина)
.УстановитьДвоичноеТело(Данные);
УстановитьАвторизациюHTTP(HTTPКлиент, Соединение);
УстановитьВнешниеТаблицыHTTP(HTTPКлиент, ВнешниеТаблицы);
УстановитьСессиюHTTP(HTTPКлиент, Сессия);
@@ -470,8 +470,8 @@
Если ОтветКод < 300 Тогда
Результат = Истина;
Результат = Истина;
Если ЭтоФорматВалидногоJSON(ФорматДанных) Тогда
ТелоОтвета = HTTPКлиент.ВернутьОтветКакJSONКоллекцию();
ИначеЕсли ЭтоСтроковыйФормат(ФорматДанных) Тогда
@@ -612,7 +612,7 @@
HTTPКлиент
.ДобавитьПараметрURL(ИмяПараметраФормат , ФорматТаблицы , Истина)
.ДобавитьПараметрURL(ИмяПараметраСтруктура, КолонкиТаблицыСтрокой, Истина)
.ДобавитьФайлMultipartFormData(ИмяТаблицы, ИмяФайла, ДанныеТаблицы, ТипДанныхФайла, Истина);
КонецЦикла;
@@ -620,14 +620,14 @@
КонецПроцедуры
Процедура УстановитьСессиюHTTP(HTTPКлиент, Знач Сессия)
Если Не ЗначениеЗаполнено(Сессия) Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "Передана некорректная структура информации о сессии";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Сессия, ТекстОшибки);
IDСессии = OPI_Инструменты.ПолучитьИли(Сессия, "id" , Неопределено);
Проверка = OPI_Инструменты.ПолучитьИли(Сессия, "check" , Неопределено);
Таймаут = OPI_Инструменты.ПолучитьИли(Сессия, "timeout", Неопределено);
@@ -636,7 +636,7 @@
.ДобавитьПараметрURL("session_id" , IDСессии, Истина)
.ДобавитьПараметрURL("session_check" , Проверка, Истина)
.ДобавитьПараметрURL("session_timeout", Таймаут , Истина);
КонецПроцедуры
#КонецОбласти
@@ -664,8 +664,8 @@
Сервис = ПолучитьИмяСервисаGRPC();
Метод = "ExecuteQuery";
Результат = OPI_GRPC.ВызватьМетод(Коннектор, Сервис, Метод, ЗапросGRPC);
ОбработатьОтветGRPC(Результат);
ОбработатьОтветGRPC(Результат);
Если ЗакрыватьСоединение Тогда
OPI_GRPC.ЗакрытьСоединение(Коннектор);
@@ -677,46 +677,46 @@
Функция ОткрытьПотокGRPC(Соединение
, Знач Вид
, Знач Запрос = Неопределено
, Знач Сессия = Неопределено
, Знач Запрос = Неопределено
, Знач Сессия = Неопределено
, Знач Таймаут = 10000)
Сервис = ПолучитьИмяСервисаGRPC();
Если Вид = "client" Тогда
Метод = "ExecuteQueryWithStreamInput";
Результат = OPI_GRPC.ИнициализироватьКлиентскийПоток(Соединение, Сервис, Метод, Таймаут);
ИначеЕсли Вид = "server" Тогда
Метод = "ExecuteQueryWithStreamOutput";
ЗапросGRPC = СформироватьЗапросGRPC(Соединение, Запрос, Сессия);
Результат = OPI_GRPC.ИнициализироватьСерверныйПоток(Соединение, Сервис, Метод, ЗапросGRPC, Таймаут);
Иначе
Метод = "ExecuteQueryWithStreamIO";
Метод = "ExecuteQueryWithStreamIO";
Результат = OPI_GRPC.ИнициализироватьДвунаправленныйПоток(Соединение, Сервис, Метод, Таймаут);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция СформироватьЗапросGRPC(Знач Соединение, Знач Запрос, Знач Сессия)
Если Запрос = Неопределено Тогда
Возврат Запрос;
КонецЕсли;
Если OPI_GRPC.ЭтоКоннектор(Соединение) Тогда
НастройкиСоединения = OPI_Инструменты.JsonВСтруктуру(Соединение.GetSettings());
НастройкиСоединения = OPI_Инструменты.JsonВСтруктуру(Соединение.GetSettings());
Иначе
НастройкиСоединения = Соединение;
КонецЕсли;
Данные = OPI_Инструменты.ПолучитьИли(Запрос, "data" , Неопределено);
IDЗапроса = OPI_Инструменты.ПолучитьИли(Запрос, "id" , Неопределено);
ТекстЗапроса = OPI_Инструменты.ПолучитьИли(Запрос, "query" , Неопределено);
@@ -736,15 +736,15 @@
УстановитьАвторизациюGRPC(ЗапросGRPC, НастройкиСоединения);
УстановитьВнешниеТаблицыGRPC(ЗапросGRPC, ВнешниеТаблицы);
УстановитьСессиюGRPC(ЗапросGRPC, Сессия);
Возврат ЗапросGRPC;
КонецФункции
Функция ПолучитьИмяСервисаGRPC()
Возврат "clickhouse.grpc.ClickHouse";
Возврат "clickhouse.grpc.ClickHouse";
КонецФункции
Процедура УстановитьАвторизациюGRPC(ЗапросGRPC, Знач НастройкиСоединения)
@@ -790,7 +790,7 @@
ФорматТаблицы = OPI_Инструменты.ПолучитьИли(Таблица, "format", Неопределено);
ДанныеТаблицы = OPI_Инструменты.ПолучитьИли(Таблица, "data" , Неопределено);
КолонкиТаблицы = OPI_Инструменты.ПолучитьИли(Таблица, "cols" , Неопределено);
Если ДанныеТаблицы <> Неопределено Тогда
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(ДанныеТаблицы, Истина);
КонецЕсли;
@@ -827,14 +827,14 @@
КонецПроцедуры
Процедура УстановитьСессиюGRPC(ЗапросGRPC, Знач Сессия)
Если Не ЗначениеЗаполнено(Сессия) Тогда
Возврат;
КонецЕсли;
ТекстОшибки = "Передана некорректная структура информации о сессии";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Сессия, ТекстОшибки);
IDСессии = OPI_Инструменты.ПолучитьИли(Сессия, "id" , Неопределено);
Проверка = OPI_Инструменты.ПолучитьИли(Сессия, "check" , Неопределено);
Таймаут = OPI_Инструменты.ПолучитьИли(Сессия, "timeout", Неопределено);
@@ -842,50 +842,50 @@
OPI_Инструменты.ДобавитьПоле("session_id" , IDСессии, "Строка", ЗапросGRPC);
OPI_Инструменты.ДобавитьПоле("session_check" , Проверка, "Булево", ЗапросGRPC);
OPI_Инструменты.ДобавитьПоле("session_timeout", Таймаут , "Число" , ЗапросGRPC);
КонецПроцедуры
Процедура ОбработатьОтветGRPC(Ответ)
Если Не OPI_Инструменты.ПолучитьИли(Ответ, "result", Ложь) Тогда
Возврат;
КонецЕсли;
Формат = OPI_Инструменты.ПолучитьИли(Ответ, "output_format", Неопределено);
Если Не ЗначениеЗаполнено(Формат) Тогда
Возврат;
КонецЕсли;
B64Строка = OPI_Инструменты.ПолеКоллекцииСуществует(Ответ, "data.output.BYTES");
Если ЗначениеЗаполнено(B64Строка) Тогда
Если ЭтоФорматВалидногоJSON(Формат) Тогда
Значение = ПолучитьДвоичныеДанныеИзBase64Строки(B64Строка);
Успех = Ложь;
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение, , Успех);
Если Не Успех Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
КонецЕсли;
ИначеЕсли ЭтоСтроковыйФормат(Формат) Тогда
Значение = ПолучитьДвоичныеДанныеИзBase64Строки(B64Строка);
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе
Возврат;
КонецЕсли;
Ответ["data"]["output"] = Значение;
КонецЕсли;
Если Не OPI_Инструменты.ПолучитьИли(Ответ, "result", Ложь) Тогда
Возврат;
КонецЕсли;
Формат = OPI_Инструменты.ПолучитьИли(Ответ, "output_format", Неопределено);
Если Не ЗначениеЗаполнено(Формат) Тогда
Возврат;
КонецЕсли;
B64Строка = OPI_Инструменты.ПолеКоллекцииСуществует(Ответ, "data.output.BYTES");
Если ЗначениеЗаполнено(B64Строка) Тогда
Если ЭтоФорматВалидногоJSON(Формат) Тогда
Значение = ПолучитьДвоичныеДанныеИзBase64Строки(B64Строка);
Успех = Ложь;
OPI_ПреобразованиеТипов.ПолучитьКоллекцию(Значение, , Успех);
Если Не Успех Тогда
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
КонецЕсли;
ИначеЕсли ЭтоСтроковыйФормат(Формат) Тогда
Значение = ПолучитьДвоичныеДанныеИзBase64Строки(B64Строка);
Значение = ПолучитьСтрокуИзДвоичныхДанных(Значение);
Иначе
Возврат;
КонецЕсли;
Ответ["data"]["output"] = Значение;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
@@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// OneScript: ./OInt/tools/Modules/OPI_ПреобразованиеТипов.os
// MIT License
@@ -101,13 +101,13 @@
Процедура ПолучитьКоллекцию(Значение, ПоСети = Истина, Успех = Ложь) Экспорт
Успех = Ложь;
Успех = Ложь;
Если Значение = Неопределено Тогда
Возврат;
КонецЕсли;
Успех = Истина;
КонецЕсли;
Успех = Истина;
Попытка
@@ -152,7 +152,7 @@
Если (Не ЭтоКоллекция(Значение)) Или Не ЗначениеЗаполнено(Значение) Тогда
Успех = Ложь;
Успех = Ложь;
Значение = ИсходноеЗначение;
OPI_Инструменты.ЗначениеВМассив(Значение);
@@ -164,7 +164,7 @@
Исключение
Успех = Ложь;
Успех = Ложь;
Значение = ИсходноеЗначение;
OPI_Инструменты.ЗначениеВМассив(Значение);
@@ -433,23 +433,23 @@
Иначе
Если ПопыткаB64 Тогда
Значение_ = Base64Значение(Значение);
Если ТипЗнч(Значение_) = Тип("ДвоичныеДанные") Тогда
Успех = Значение_.Размер() <> 0;
Иначе
Успех = Ложь;
КонецЕсли;
Если Успех Тогда
Значение = Значение_;
КонецЕсли;
Иначе
Успех = Ложь;
КонецЕсли;
Если Не Успех Тогда
ВызватьИсключение "Значение не является путем к файлу или Base64 строкой";
КонецЕсли;
+10 -10
View File
@@ -27085,7 +27085,7 @@
| user_id UInt32,
| event_type String,
| payload String
|) ENGINE = MergeTree()
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events"); // SKIP
@@ -27137,7 +27137,7 @@
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВставкаДанных"); // SKIP
// Запрос с внешней таблицей
ИмяТаблицы = "ext_users";
@@ -27168,7 +27168,7 @@
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса(ТекстВыборки, , , , "JSON");
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос"); // SKIP
@@ -27249,7 +27249,7 @@
| user_id UInt32,
| event_type String,
| payload String
|) ENGINE = MergeTree()
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events_grpc"); // SKIP
@@ -27436,10 +27436,10 @@
Данные = Новый Структура("meta,data", Новый Массив, Новый Массив);
БазаДанных = "default";
ФорматОтвета = "CSV";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
СтруктураКолонок = Новый Структура("id,name", "UInt64", "String");
ВнешняяТаблица = OPI_ClickHouse.ПолучитьСтруктуруВнешнейТаблицы("ext", СтруктураКолонок);
@@ -27489,10 +27489,10 @@
Процедура ClickHouse_ПолучитьНастройкиСессии(ПараметрыФункции)
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
Результат = OPI_ClickHouse.ПолучитьНастройкиСессии(IDСессии, Проверять, Таймаут);
// END
+503 -28
View File
@@ -3363,11 +3363,17 @@
Процедура CH_ОсновныеМетоды() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Address" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Address" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_AddressGRPC", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_User" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password" , ПараметрыТеста);
ClickHouse_ВыполнитьЗапрос(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСоединенияHTTP(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСоединенияGRPC(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиЗапроса(ПараметрыТеста);
ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиСессии(ПараметрыТеста);
КонецПроцедуры
@@ -3379,6 +3385,7 @@
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("ClickHouse_Password" , ПараметрыТеста);
ClickHouse_ОткрытьСоединениеGRPC(ПараметрыТеста);
ClickHouse_ПолучитьНастройкиTls(ПараметрыТеста);
КонецПроцедуры
@@ -35778,9 +35785,9 @@
Соединение = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
// Запрос (простой)
// Запрос (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35789,8 +35796,8 @@
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE events"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
@@ -35802,9 +35809,9 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "Простой"); // SKIP
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СозданиеТаблицы"); // SKIP
// Запрос (с данными)
// Запрос (вставка данных)
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
@@ -35855,6 +35862,173 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВставкаДанных"); // SKIP
// Запрос с внешней таблицей
ИмяТаблицы = "ext_users";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane
|3" + Таб + "Bob";
Опции = Новый Структура;
Опции.Вставить("name", ИмяТаблицы);
Опции.Вставить("cols", СтруктураКолонок);
Опции.Вставить("data", ДанныеТаблицы);
Опции.Вставить("format", "TSV");
ВнешняяТаблица = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_users WHERE id > 1";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Опции.Вставить("ext", МассивВнешнихТаблиц);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВнешняяТаблица"); // SKIP
// Выборка
ТекстВыборки = "SELECT * FROM events";
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "JSON");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос"); // SKIP
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "CSV");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаCSV");
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "TSV");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаTSV");
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "JSONCompact");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ВыборкаJSONCompact");
ТекстЗапроса = "SELECT 1 AS result";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Опции.Вставить("settings", ДопНастройки);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "ДопНастройки");
Опции = Новый Структура;
Опции.Вставить("id", Строка);
Сессия = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСессии", Опции);
ТекстЗапроса = "CREATE TEMPORARY TABLE temp_session_test (id UInt64, value String)";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Опции.Вставить("session", Сессия);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СессияСоздание");
ТекстЗапроса = "INSERT INTO temp_session_test VALUES (1, 'test1'), (2, 'test2')";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Опции.Вставить("session", Сессия);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос", "СессияВставка");
ТекстЗапроса = "SELECT * FROM temp_session_test";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Опции.Вставить("session", Сессия);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
// END
Обработать(Результат, "ClickHouse", "ВыполнитьЗапрос");
@@ -35870,6 +36044,8 @@
Авторизация = Новый Структура(Логин, Пароль);
// Открытие соединения
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
@@ -35877,11 +36053,11 @@
НастройкиСоединения = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Соединение = OPI_ClickHouse.ОткрытьСоединениеGRPC(НастройкиСоединения);
Обработать(Соединение, "ClickHouse", "ОткрытьСоединениеGRPC"); // SKIP
Обработать(Соединение, "ClickHouse", "ОткрытьСоединениеGRPC", "Открытие"); // SKIP
// Запрос (простой)
// Запрос через открытое соединение (создание таблицы)
ТекстЗапроса = "CREATE TABLE events (
ТекстЗапроса = "CREATE TABLE IF NOT EXISTS events_grpc (
| id UInt64,
| timestamp DateTime,
| user_id UInt32,
@@ -35890,6 +36066,9 @@
|) ENGINE = MergeTree()
|ORDER BY (timestamp, id)";
Запрос = OPI_ClickHouse.ПолучитьНастройкиЗапроса("DROP TABLE IF EXISTS events_grpc"); // SKIP
Результат = OPI_ClickHouse.ВыполнитьЗапрос(Соединение, Запрос); // SKIP
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
@@ -35900,11 +36079,11 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Простой"); // SKIP
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "СозданиеТаблицы"); // SKIP
// Запрос (с данными)
// Вставка данных
ТекстЗапроса = "INSERT INTO events FORMAT JSON";
ТекстЗапроса = "INSERT INTO events_grpc FORMAT JSON";
ФорматДанных = "JSON";
МассивДанных = Новый Массив;
@@ -35918,15 +36097,7 @@
Запись1.Вставить("event_type", "click");
Запись1.Вставить("payload" , "{}");
Запись2 = Новый Структура;
Запись2.Вставить("id" , 2);
Запись2.Вставить("timestamp" , ТекущаяДата);
Запись2.Вставить("user_id" , 200);
Запись2.Вставить("event_type", "hover");
Запись2.Вставить("payload" , "{}");
МассивДанных.Добавить(Запись1);
МассивДанных.Добавить(Запись2);
Мета = Новый Массив;
Мета.Добавить(Новый Структура("name,type", "id" , "UInt64"));
@@ -35935,13 +36106,12 @@
Мета.Добавить(Новый Структура("name,type", "event_type", "String"));
Мета.Добавить(Новый Структура("name,type", "payload" , "String"));
Данные = Новый Структура("meta,data", Мета, МассивДанных);
БазаДанных = "default";
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Мета, МассивДанных);
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("db", БазаДанных);
Опции.Вставить("db", "default");
Опции.Вставить("id", IDЗапроса);
Опции.Вставить("data", Данные);
Опции.Вставить("format", ФорматДанных);
@@ -35953,9 +36123,314 @@
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "ВставкаДанных"); // SKIP
// Выборка
ТекстВыборки = "SELECT * FROM events_grpc";
Опции = Новый Структура;
Опции.Вставить("query", ТекстВыборки);
Опции.Вставить("format", "JSON");
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Выборка"); // SKIP
// Запрос с внешней таблицей через gRPC
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Таб = Символы.Таб;
ДанныеТаблицы = "1" + Таб + "John
|2" + Таб + "Jane";
Опции = Новый Структура;
Опции.Вставить("name", "ext_grpc");
Опции.Вставить("cols", СтруктураКолонок);
Опции.Вставить("data", ДанныеТаблицы);
Опции.Вставить("format", "TSV");
ВнешняяТаблица = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
МассивВнешнихТаблиц = Новый Массив;
МассивВнешнихТаблиц.Добавить(ВнешняяТаблица);
ТекстЗапроса = "SELECT * FROM ext_grpc";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("format", "JSON");
Опции.Вставить("ext", МассивВнешнихТаблиц);
Запрос = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Опции = Новый Структура;
Опции.Вставить("conn", Соединение);
Опции.Вставить("req", Запрос);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ВыполнитьЗапрос", Опции);
// END
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC", "Сложный");
Обработать(Результат, "ClickHouse", "ОткрытьСоединениеGRPC");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСоединенияHTTP(ПараметрыФункции)
URL = ПараметрыФункции["ClickHouse_Address"];
// Без авторизации
Опции = Новый Структура;
Опции.Вставить("url", URL);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "БезАвторизации"); // SKIP
// С basic авторизацией
Логин = ПараметрыФункции["ClickHouse_User"];
Пароль = ПараметрыФункции["ClickHouse_Password"];
Авторизация = Новый Структура(Логин, Пароль);
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "BasicАвторизация"); // SKIP
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", JWT);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP", "JWTАвторизация"); // SKIP
// С дополнительными заголовками
ДопЗаголовки = Новый Соответствие;
ДопЗаголовки.Вставить("X-Custom-Header", "CustomValue");
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Опции.Вставить("headers", ДопЗаголовки);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияHTTP", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияHTTP");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСоединенияGRPC(ПараметрыФункции)
URL = ПараметрыФункции["ClickHouse_AddressGRPC"];
// Без авторизации
Опции = Новый Структура;
Опции.Вставить("url", URL);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "БезАвторизации"); // SKIP
// С basic авторизацией
Логин = ПараметрыФункции["ClickHouse_User"];
Пароль = ПараметрыФункции["ClickHouse_Password"];
Авторизация = Новый Структура(Логин, Пароль);
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "BasicАвторизация"); // SKIP
// С JWT авторизацией
JWT = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.test";
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", JWT);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "JWTАвторизация"); // SKIP
// С метаданными
Meta = Новый Соответствие;
Meta.Вставить("custom-meta", "value");
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Опции.Вставить("meta", Meta);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC", "СМетаданными"); // SKIP
// С TLS настройками
Опции = Новый Структура;
Опции.Вставить("trust", Истина);
Tls = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиTls", Опции);
Опции = Новый Структура;
Опции.Вставить("url", URL);
Опции.Вставить("auth", Авторизация);
Опции.Вставить("tls", Tls);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСоединенияGRPC", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСоединенияGRPC");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиЗапроса(ПараметрыФункции)
// Минимальный запрос
ТекстЗапроса = "SELECT 1";
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиЗапроса", "Минимальный"); // SKIP
// Полный запрос
IDЗапроса = Строка(Новый УникальныйИдентификатор());
Данные = Новый Структура("meta,data", Новый Массив, Новый Массив);
БазаДанных = "default";
ФорматОтвета = "CSV";
ДопНастройки = Новый Соответствие;
ДопНастройки.Вставить("max_threads", "4");
СтруктураКолонок = Новый Структура("id,name", "UInt64", "String");
Опции = Новый Структура;
Опции.Вставить("name", "ext");
Опции.Вставить("cols", СтруктураКолонок);
ВнешняяТаблица = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
МассивТаблиц = Новый Массив;
МассивТаблиц.Добавить(ВнешняяТаблица);
Опции = Новый Структура;
Опции.Вставить("query", ТекстЗапроса);
Опции.Вставить("db", БазаДанных);
Опции.Вставить("id", IDЗапроса);
Опции.Вставить("data", Данные);
Опции.Вставить("format", ФорматОтвета);
Опции.Вставить("ext", МассивТаблиц);
Опции.Вставить("settings", ДопНастройки);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиЗапроса", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиЗапроса");
КонецПроцедуры
Процедура ClickHouse_ПолучитьСтруктуруВнешнейТаблицы(ПараметрыФункции)
// Минимальная структура
ИмяТаблицы = "external_data";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("id" , "UInt64");
СтруктураКолонок.Вставить("name", "String");
Опции = Новый Структура;
Опции.Вставить("name", ИмяТаблицы);
Опции.Вставить("cols", СтруктураКолонок);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
Обработать(Результат, "ClickHouse", "ПолучитьСтруктуруВнешнейТаблицы", "Минимальная"); // SKIP
// С данными TSV
ДанныеТаблицы = СтрШаблон("1%1Test
|2%2Test2", Символы.Таб);
Опции = Новый Структура;
Опции.Вставить("name", ИмяТаблицы);
Опции.Вставить("cols", СтруктураКолонок);
Опции.Вставить("data", ДанныеТаблицы);
Опции.Вставить("format", "TSV");
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьСтруктуруВнешнейТаблицы", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьСтруктуруВнешнейТаблицы");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиСессии(ПараметрыФункции)
IDСессии = Строка(Новый УникальныйИдентификатор);
Проверять = Истина;
Таймаут = 120;
Опции = Новый Структура;
Опции.Вставить("id", IDСессии);
Опции.Вставить("check", Проверять);
Опции.Вставить("timeout", Таймаут);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиСессии", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиСессии");
КонецПроцедуры
Процедура ClickHouse_ПолучитьНастройкиTls(ПараметрыФункции)
Опции = Новый Структура;
Опции.Вставить("trust", Ложь);
Результат = OPI_ПолучениеДанныхТестов.ВыполнитьТестCLI("clickhouse", "ПолучитьНастройкиTls", Опции);
// END
Обработать(Результат, "ClickHouse", "ПолучитьНастройкиTls");
КонецПроцедуры
+1 -1
View File
@@ -1 +1 @@
07C4BB7AB731BEE83F841D7B9FCCBFE88AEA3E79ABE5F6C079001C2DBEC9A426
020E99F2738A217F5BB9933180E87C96741C7679FB414458053C1635BA67A99A
+45 -45
View File
@@ -86,51 +86,6 @@
НоваяСтрока.Область = "Основные методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--url";
НоваяСтрока.ПараметрСокр = "-u";
НоваяСтрока.Описание = "Адрес подключения с протоколом и портом";
НоваяСтрока.Область = "Основные методы";
НоваяСтрока.ОписаниеМетода = "Получает структуру настроек для gRPC соединения";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--auth";
НоваяСтрока.ПараметрСокр = "-a";
НоваяСтрока.Описание = "Авторизация: строка для JWT, структура для basic (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Основные методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--meta";
НоваяСтрока.ПараметрСокр = "-m";
НоваяСтрока.Описание = "Структура метаданных gRPC, если необходимо (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Основные методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--tls";
НоваяСтрока.ПараметрСокр = "-t";
НоваяСтрока.Описание = "Настройки TLS. См. ПолучитьНастройкиTls (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Основные методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
@@ -292,6 +247,51 @@
НоваяСтрока.Область = "Основные методы";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--url";
НоваяСтрока.ПараметрСокр = "-u";
НоваяСтрока.Описание = "Адрес подключения с протоколом и портом";
НоваяСтрока.Область = "Grpc";
НоваяСтрока.ОписаниеМетода = "Получает структуру настроек для gRPC соединения";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--auth";
НоваяСтрока.ПараметрСокр = "-a";
НоваяСтрока.Описание = "Авторизация: строка для JWT, структура для basic (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Grpc";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--meta";
НоваяСтрока.ПараметрСокр = "-m";
НоваяСтрока.Описание = "Структура метаданных gRPC, если необходимо (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Grpc";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";
НоваяСтрока.Метод = "ПолучитьНастройкиСоединенияGRPC";
НоваяСтрока.МетодПоиска = "ПОЛУЧИТЬНАСТРОЙКИСОЕДИНЕНИЯGRPC";
НоваяСтрока.Параметр = "--tls";
НоваяСтрока.ПараметрСокр = "-t";
НоваяСтрока.Описание = "Настройки TLS. См. ПолучитьНастройкиTls (необяз. по ум. - Пустое значение)";
НоваяСтрока.Область = "Grpc";
НоваяСтрока = ТаблицаСостава.Добавить();
НоваяСтрока.Библиотека = "clickhouse";
НоваяСтрока.Модуль = "OPI_ClickHouse";