1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-03-17 21:08:03 +02:00

Main build (Jenkins)

This commit is contained in:
Vitaly the Alpaca (bot) 2025-02-11 08:47:01 +03:00
parent e608573455
commit 5523d267b9
53 changed files with 8997 additions and 6906 deletions

View File

@ -374,6 +374,48 @@ jobs:
path: ./data.json
Testing-PostgreSQL:
runs-on: ubuntu-latest
needs: [Decode, Build]
steps:
- uses: actions/checkout@v2
- uses: otymko/setup-onescript@v1.4
with:
version: 1.9.1
- name: Получить тестовые данные из кэша
uses: actions/cache/restore@v3
with:
key: test-data
path: ./data.json
- name: Установить asserts и 1testrunner
run: |
opm install asserts
opm install 1testrunner
- name: Установить OInt
run: |
TEMP_DEB="$(mktemp)" &&
wget -O "$TEMP_DEB" 'https://api.athenaeum.digital/tc/job/Release/lastSuccessfulBuild/artifact/1.18.1/oint_1.18.1_all_ru.deb' &&
sudo dpkg -i "$TEMP_DEB"
rm -f "$TEMP_DEB"
- name: ORM
if: ${{ cancelled() }} == false
run: oscript /home/runner/.local/share/ovm/current/lib/1testrunner/src/main.os -run ./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os "CLI_Postgres_ORM"
- name: Записать логи
if: ${{ cancelled() }} == false
uses: actions/cache/save@v3
with:
key: logs-PostgreSQL
path: ./docs/ru/results/PostgreSQL
Testing-SQLite:
runs-on: ubuntu-latest
needs: [Decode, Build]
@ -1407,7 +1449,7 @@ jobs:
Encode:
runs-on: ubuntu-latest
needs: [Testing-Telegram,Testing-VK,Testing-Viber,Testing-Twitter,Testing-SQLite,Testing-YandexDisk,Testing-GoogleWorkspace,Testing-GoogleCalendar,Testing-GoogleDrive,Testing-GoogleSheets,Testing-Notion,Testing-Slack,Testing-Airtable,Testing-Dropbox,Testing-Bitrix24,Testing-VkTeams,Testing-Ozon,Testing-Neocities,Testing-CDEK,Testing-YandexMetrika,Testing-S3,Testing-TCP]
needs: [Testing-Telegram,Testing-VK,Testing-Viber,Testing-Twitter,Testing-PostgreSQL,Testing-SQLite,Testing-YandexDisk,Testing-GoogleWorkspace,Testing-GoogleCalendar,Testing-GoogleDrive,Testing-GoogleSheets,Testing-Notion,Testing-Slack,Testing-Airtable,Testing-Dropbox,Testing-Bitrix24,Testing-VkTeams,Testing-Ozon,Testing-Neocities,Testing-CDEK,Testing-YandexMetrika,Testing-S3,Testing-TCP]
if: ${{ always() }}
permissions:
contents: write
@ -1499,6 +1541,22 @@ jobs:
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-Twitter"
- name: Получить логи PostgreSQL
uses: actions/cache/restore@v3
with:
key: logs-PostgreSQL
path: ./docs/ru/results/PostgreSQL
- name: Очистка логов PostgreSQL
run: |
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer ${{ secrets.TOKEN }}" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/repos/Bayselonarrend/OpenIntegrations/actions/caches?key=logs-PostgreSQL"
- name: Получить логи SQLite
uses: actions/cache/restore@v3
with:
@ -1799,7 +1857,7 @@ jobs:
Clear-Cache:
runs-on: ubuntu-latest
needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-SQLite, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Testing-Airtable, Testing-Dropbox, Testing-Bitrix24, Testing-VkTeams, Testing-Ozon, Testing-Neocities, Testing-CDEK, Testing-YandexMetrika, Testing-S3, Testing-TCP, Encode]
needs: [Testing-Telegram, Testing-VK, Testing-Viber, Testing-Twitter, Testing-PostgreSQL, Testing-SQLite, Testing-YandexDisk, Testing-GoogleWorkspace, Testing-GoogleCalendar, Testing-GoogleDrive, Testing-GoogleSheets, Testing-Notion, Testing-Slack, Testing-Airtable, Testing-Dropbox, Testing-Bitrix24, Testing-VkTeams, Testing-Ozon, Testing-Neocities, Testing-CDEK, Testing-YandexMetrika, Testing-S3, Testing-TCP, Encode]
if: ${{ always() }}
steps:
- name: Очистка основного кэша

11
ci/cli_ostestru vendored
View File

@ -239,6 +239,17 @@ pipeline {
}
}
stage('Testing-PostgreSQL') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_ТестыCLI.os" "CLI_Postgres_ORM"'
}
}
}
stage('Testing-SQLite') {
steps {

104
ci/clitesten vendored
View File

@ -76,6 +76,11 @@ pipeline {
test_ozon()
}
}
stage('sqlite'){
steps{
test_sqlite()
}
}
stage('s3'){
steps{
test_s3()
@ -86,11 +91,6 @@ pipeline {
test_slack()
}
}
stage('sqlite'){
steps{
test_sqlite()
}
}
stage('tcp'){
steps{
test_tcp()
@ -1745,6 +1745,52 @@ def test_ozon(){
}
def test_sqlite(){
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ExecuteSQLQuery --sql "test" --params "test" --force "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite GetTableInformation --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite CreateTable --table "test" --cols "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite AddRecords --table "test" --rows "test" --trn "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite GetRecords --table "test" --fields "test" --filter "test" --order "test" --limit "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite UpdateRecords --table "test" --values "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite DeletePosts --table "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite DeleteTable --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ClearTable --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite GetRecordsFilterStrucutre --empty "test" --debug --test '
}
}
def test_s3(){
@ -2033,52 +2079,6 @@ def test_slack(){
}
def test_sqlite(){
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ExecuteSQLQuery --sql "test" --params "test" --force "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite GetTableInformation --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite CreateTable --table "test" --cols "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite AddRecords --table "test" --rows "test" --trn "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite GetRecords --table "test" --fields "test" --filter "test" --order "test" --limit "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite UpdateRecords --table "test" --values "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite DeletePosts --table "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite DeleteTable --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ClearTable --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite GetRecordsFilterStrucutre --empty "test" --debug --test '
}
}
def test_tcp(){
@ -2885,9 +2885,9 @@ test_mongodb()
test_neocities()
test_notion()
test_ozon()
test_sqlite()
test_s3()
test_slack()
test_sqlite()
test_tcp()
test_telegram()
test_twitter()

104
ci/clitestru vendored
View File

@ -76,6 +76,11 @@ pipeline {
test_ozon()
}
}
stage('sqlite'){
steps{
test_sqlite()
}
}
stage('s3'){
steps{
test_s3()
@ -86,11 +91,6 @@ pipeline {
test_slack()
}
}
stage('sqlite'){
steps{
test_sqlite()
}
}
stage('tcp'){
steps{
test_tcp()
@ -1745,6 +1745,52 @@ def test_ozon(){
}
def test_sqlite(){
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ВыполнитьЗапросSQL --sql "test" --params "test" --force "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ПолучитьИнформациюОТаблице --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite СоздатьТаблицу --table "test" --cols "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ДобавитьЗаписи --table "test" --rows "test" --trn "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ПолучитьЗаписи --table "test" --fields "test" --filter "test" --order "test" --limit "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ОбновитьЗаписи --table "test" --values "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite УдалитьЗаписи --table "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite УдалитьТаблицу --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ОчиститьТаблицу --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ПолучитьСтруктуруФильтраЗаписей --empty "test" --debug --test '
}
}
def test_s3(){
@ -2033,52 +2079,6 @@ def test_slack(){
}
def test_sqlite(){
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ВыполнитьЗапросSQL --sql "test" --params "test" --force "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ПолучитьИнформациюОТаблице --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite СоздатьТаблицу --table "test" --cols "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ДобавитьЗаписи --table "test" --rows "test" --trn "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ПолучитьЗаписи --table "test" --fields "test" --filter "test" --order "test" --limit "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ОбновитьЗаписи --table "test" --values "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite УдалитьЗаписи --table "test" --filter "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite УдалитьТаблицу --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ОчиститьТаблицу --table "test" --db "test" --debug --test '
}
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'./oint.exe sqlite ПолучитьСтруктуруФильтраЗаписей --empty "test" --debug --test '
}
}
def test_tcp(){
@ -2885,9 +2885,9 @@ test_mongodb()
test_neocities()
test_notion()
test_ozon()
test_sqlite()
test_s3()
test_slack()
test_sqlite()
test_tcp()
test_telegram()
test_twitter()

11
ci/ostestru vendored
View File

@ -239,6 +239,17 @@ pipeline {
}
}
stage('Testing-PostgreSQL') {
steps {
catchError(buildResult: 'FAILURE', stageResult: 'FAILURE') {
powershell encoding: 'UTF-8', script:'1testrunner -run "./src/ru/OInt/tests/Modules/internal/OPI_Тесты.os" "Postgres_ORM"'
}
}
}
stage('Testing-SQLite') {
steps {

View File

@ -0,0 +1,5 @@
{
"Address": "93.125.42.204",
"Password": "12we...",
"Image": "https://api.athenaeum.digital/test_data/picture.jpg"
}

View File

@ -0,0 +1,4 @@
{
"Address": "93.125.42.204",
"Password": "12we..."
}

View File

@ -0,0 +1,4 @@
{
"Address": "93.125.42.204",
"Password": "12we..."
}

View File

@ -0,0 +1,4 @@
{
"Address": "93.125.42.204",
"Password": "12we..."
}

View File

@ -0,0 +1,33 @@
 Address = "93.125.42.204";
Login = "bayselonarrend";
Password = "12we...";
Base = "testbase1";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Table = "testtable";
Image = "https://api.athenaeum.digital/test_data/picture.jpg";
OPI_TypeConversion.GetBinaryData(Image); // Image - Type: BinaryData
Char = New Map;
Char.Insert("""char""", 1);
DP = New Map;
DP.Insert("DOUBLE PRECISION", 1.0000000000000002);
RecordStructure = New Structure;
RecordStructure.Insert("bool_field" , New Structure("BOOL" , True));
RecordStructure.Insert("char_field" , Char);
RecordStructure.Insert("smallint_field", New Structure("SMALLINT" , 5));
RecordStructure.Insert("int_field" , New Structure("INT" , 100));
RecordStructure.Insert("oid_field" , New Structure("OID" , 24576));
RecordStructure.Insert("bigint_field" , New Structure("BIGINT" , 9999999));
RecordStructure.Insert("real_field" , New Structure("REAL" , 15.2));
RecordStructure.Insert("dp_field" , DP);
RecordStructure.Insert("text_field" , New Structure("TEXT" , "Some text"));
RecordStructure.Insert("bytea_field" , New Structure("BYTEA" , Image));
RecordStructure.Insert("ts_field" , New Structure("TIMESTAMP", 1739207915));
RecordStructure.Insert("ip_field" , New Structure("INET" , "127.0.0.1"));
Result = OPI_PostgreSQL.AddRecords(Table, RecordStructure, False, ConnectionString);

View File

@ -0,0 +1,10 @@
 Address = "93.125.42.204";
Login = "bayselonarrend";
Password = "12we...";
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
Result = OPI_PostgreSQL.CreateDatabase(Base, ConnectionString);

View File

@ -0,0 +1,24 @@
 Address = "93.125.42.204";
Login = "bayselonarrend";
Password = "12we...";
Base = "testbase1";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Table = "testtable";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("bool_field" , "BOOL");
ColoumnsStruct.Insert("char_field" , """char""");
ColoumnsStruct.Insert("smallint_field", "SMALLINT");
ColoumnsStruct.Insert("int_field" , "INT");
ColoumnsStruct.Insert("oid_field" , "OID");
ColoumnsStruct.Insert("bigint_field" , "BIGINT");
ColoumnsStruct.Insert("real_field" , "REAL");
ColoumnsStruct.Insert("dp_field" , "DOUBLE PRECISION");
ColoumnsStruct.Insert("text_field" , "TEXT");
ColoumnsStruct.Insert("bytea_field" , "BYTEA");
ColoumnsStruct.Insert("ts_field" , "TIMESTAMP");
ColoumnsStruct.Insert("ip_field" , "INET");
Result = OPI_PostgreSQL.CreateTable(Table, ColoumnsStruct, ConnectionString);

View File

@ -0,0 +1,10 @@
 Address = "93.125.42.204";
Login = "bayselonarrend";
Password = "12we...";
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
Result = OPI_PostgreSQL.DropDatabase(Base, ConnectionString);

View File

@ -0,0 +1,38 @@
---
sidebar_position: 5
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Generate connection string
Forms a connection string from the passed data
`Function GenerateConnectionString(Val Address, Val Base, Val Login, Val Password = "", Val Port = "5432") Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Address | --addr | String | ✔ | IP address or domain name of the server |
| Base | --db | String | ✔ | Name of the database to connect |
| Login | --login | String | ✔ | Postgres user login |
| Password | --pass | String | ✖ | Postgres user password |
| Port | --port | String | ✖ | Connection port |
Returns: String - PostgreSQL database connection string
<br/>
```bsl title="1C:Enterprise/OneScript code example"
```

View File

@ -0,0 +1,44 @@
---
sidebar_position: 1
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Create database
Creates a database with the specified name
`Function CreateDatabase(Val Base, Val Connection = "") Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Base | --base | String | &#x2714; | Database name |
| Connection | --dbc | String, Arbitrary | &#x2716; | Connection or connection string |
Returns: Structure Of KeyAndValue, String - Result of query execution
<br/>
```bsl title="1C:Enterprise/OneScript code example"
Address = "93.125.42.204";
Login = "bayselonarrend";
Password = "12we...";
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
Result = OPI_PostgreSQL.CreateDatabase(Base, ConnectionString);
```

44
docs/en/md/SQLite/Orm/Drop-database.mdx vendored Normal file
View File

@ -0,0 +1,44 @@
---
sidebar_position: 2
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Drop database
Deletes the database
`Function DropDatabase(Val Base, Val Connection = "") Export`
| Parameter | CLI option | Type | Required | Description |
|-|-|-|-|-|
| Base | --base | String | &#x2714; | Database name |
| Connection | --dbc | String, Arbitrary | &#x2716; | Connection or connection string |
Returns: Structure Of KeyAndValue, String - Result of query execution
<br/>
```bsl title="1C:Enterprise/OneScript code example"
Address = "93.125.42.204";
Login = "bayselonarrend";
Password = "12we...";
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
Result = OPI_PostgreSQL.DropDatabase(Base, ConnectionString);
```

View File

@ -0,0 +1,5 @@
{
"Адрес": "93.125.42.204",
"Пароль": "12we...",
"Картинка": "https://api.athenaeum.digital/test_data/picture.jpg"
}

View File

@ -0,0 +1,4 @@
{
"Адрес": "93.125.42.204",
"Пароль": "12we..."
}

View File

@ -0,0 +1,4 @@
{
"Адрес": "93.125.42.204",
"Пароль": "12we..."
}

View File

@ -0,0 +1,4 @@
{
"Адрес": "93.125.42.204",
"Пароль": "12we..."
}

View File

@ -0,0 +1,33 @@
 Адрес = "93.125.42.204";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Картинка = "https://api.athenaeum.digital/test_data/picture.jpg";
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
Char = Новый Соответствие;
Char.Вставить("""char""", 1);
DP = Новый Соответствие;
DP.Вставить("DOUBLE PRECISION", 1.0000000000000002);
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL" , Истина));
СтруктураЗаписи.Вставить("char_field" , Char);
СтруктураЗаписи.Вставить("smallint_field", Новый Структура("SMALLINT" , 5));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT" , 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID" , 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT" , 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL" , 15.2));
СтруктураЗаписи.Вставить("dp_field" , DP);
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT" , "Some text"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA" , Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP", 1739207915));
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET" , "127.0.0.1"));
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);

View File

@ -0,0 +1,10 @@
 Адрес = "93.125.42.204";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);

View File

@ -0,0 +1,24 @@
 Адрес = "93.125.42.204";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("bool_field" , "BOOL");
СтруктураКолонок.Вставить("char_field" , """char""");
СтруктураКолонок.Вставить("smallint_field", "SMALLINT");
СтруктураКолонок.Вставить("int_field" , "INT");
СтруктураКолонок.Вставить("oid_field" , "OID");
СтруктураКолонок.Вставить("bigint_field" , "BIGINT");
СтруктураКолонок.Вставить("real_field" , "REAL");
СтруктураКолонок.Вставить("dp_field" , "DOUBLE PRECISION");
СтруктураКолонок.Вставить("text_field" , "TEXT");
СтруктураКолонок.Вставить("bytea_field" , "BYTEA");
СтруктураКолонок.Вставить("ts_field" , "TIMESTAMP");
СтруктураКолонок.Вставить("ip_field" , "INET");
Результат = OPI_PostgreSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения);

View File

@ -0,0 +1,10 @@
 Адрес = "93.125.42.204";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения);

View File

@ -0,0 +1,38 @@
---
sidebar_position: 5
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Сформировать строку подключения
Формирует строку подключения из переданных данных
`Функция СформироватьСтрокуПодключения(Знач Адрес, Знач База, Знач Логин, Знач Пароль = "", Знач Порт = "5432") Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| Адрес | --addr | Строка | &#x2714; | IP адрес или доменное имя сервера |
| База | --db | Строка | &#x2714; | Имя базы данных для подключения |
| Логин | --login | Строка | &#x2714; | Логин пользователя postgres |
| Пароль | --pass | Строка | &#x2716; | Пароль пользователя postgres |
| Порт | --port | Строка | &#x2716; | Порт подключения |
Возвращаемое значение: Строка - Строка подключения к базе PostgreSQL
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
```

View File

@ -0,0 +1,44 @@
---
sidebar_position: 1
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Создать базу данных
Создает базу данных с указанным именем
`Функция СоздатьБазуДанных(Знач База, Знач Соединение = "") Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| База | --base | Строка | &#x2714; | Имя базы |
| Соединение | --dbc | Строка, Произвольный | &#x2716; | Соединение или строка подключения |
Возвращаемое значение: Структура Из КлючИЗначение, Строка - Результат выполнения запроса
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Адрес = "93.125.42.204";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);
```

44
docs/ru/md/SQLite/Orm/Drop-database.mdx vendored Normal file
View File

@ -0,0 +1,44 @@
---
sidebar_position: 2
---
import Tabs from '@theme/Tabs';
import TabItem from '@theme/TabItem';
# Удалить базу данных
Удаляет базу данных
`Функция УдалитьБазуДанных(Знач База, Знач Соединение = "") Экспорт`
| Параметр | CLI опция | Тип | Обяз. | Назначение |
|-|-|-|-|-|
| База | --base | Строка | &#x2714; | Имя базы |
| Соединение | --dbc | Строка, Произвольный | &#x2716; | Соединение или строка подключения |
Возвращаемое значение: Структура Из КлючИЗначение, Строка - Результат выполнения запроса
<br/>
```bsl title="Пример использования для 1С:Предприятие/OneScript"
Адрес = "93.125.42.204";
Логин = "bayselonarrend";
Пароль = "12we...";
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения);
```

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,483 @@
// OneScript: ./OInt/core/Modules/OPI_PostgreSQL.os
// Lib: SQLite
// CLI: sqlite
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
//@skip-check constructor-function-return-section
// Uncomment if OneScript is executed
#Use "../../tools"
#Region Public
#Region CommonMethods
// Create Connection !NOCLI
// Creates a connection to the specified base
//
// Parameters:
// ConnectionString - String - Connection string. See GenerateConnectionString - sting
//
// Returns:
// Arbitrary - Connector object or structure with error information
Function CreateConnection(Val ConnectionString = "") Export
If IsConnector(ConnectionString) Then
Return ConnectionString;
EndIf;
OPI_TypeConversion.GetLine(ConnectionString);
OPI_Tools.RestoreEscapeSequences(ConnectionString);
Connector = AttachAddInOnServer("OPI_PostgreSQL");
Connector.ConnectionString = ConnectionString;
Result = Connector.Connect();
Result = OPI_Tools.JsonToStructure(Result, False);
Return ?(Result["result"], Connector, Result);
EndFunction
// Close connection !NOCLI
// Explicitly closes the passed connection
//
// Parameters:
// Connection - Arbitrary - AddIn object with open connection - dbc
//
// Returns:
// Structure Of KeyAndValue - Result of connection termination
Function CloseConnection(Val Connection) Export
If IsConnector(Connection) Then
Result = Connection.Close();
Result = OPI_Tools.JsonToStructure(Result, False);
Else
Result = New Structure("result,error", False, "It's not a connection");
EndIf;
Return Result;
EndFunction
// Is connector !NOCLI
// Checks that the value is an object of a SQLite AddIn
//
// Parameters:
// Value - Arbitrary - Value to check - value
//
// Returns:
// Boolean - Is connector
Function IsConnector(Val Value) Export
Return String(TypeOf(Value)) = "AddIn.OPI_PostgreSQL.Main";
EndFunction
// Execute SQL query
// Executes an arbitrary SQL query
//
// Note
// Available parameter types: String, Number, Date, Boolean, BinaryData.^^
// Binary data can also be passed as a `{'blob':File path}` structure. Binary data (BLOB) values are returned^^
// as `{'blob':Base64 string}`
// Without specifying the `ForcifyResult` flag, result data is returned only for queries beginning with `SELECT` keyword^^
// For other queries, `result:true` or `false` with error text is returned
//
// Parameters:
// QueryText - String - Database query text - sql
// Parameters - Array Of Arbitrary - Array of positional parameters of the request - params
// ForceResult - Boolean - Includes an attempt to retrieve the result, even for nonSELECT queries - force
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue - Result of query execution
Function ExecuteSQLQuery(Val QueryText
, Val Parameters = ""
, Val ForceResult = False
, Val Connection = "") Export
OPI_TypeConversion.GetLine(QueryText);
OPI_TypeConversion.GetBoolean(ForceResult);
Parameters_ = ProcessParameters(Parameters);
Connector = CreateConnection(Connection);
If TypeOf(Connector) <> Type("AddIn.OPI_PostgreSQL.Main") Then
Return Connector;
EndIf;
Result = Connector.Execute(QueryText, Parameters_, ForceResult);
Result = OPI_Tools.JsonToStructure(Result);
Return Result;
EndFunction
// Generate connection string
// Forms a connection string from the passed data
//
// Parameters:
// Address - String - IP address or domain name of the server - addr
// Base - String - Name of the database to connect - db
// Login - String - Postgres user login - login
// Password - String - Postgres user password - pass
// Port - String - Connection port - port
//
// Returns:
// String - PostgreSQL database connection string
Function GenerateConnectionString(Val Address, Val Base, Val Login, Val Password = "", Val Port = "5432") Export
OPI_TypeConversion.GetLine(Address);
OPI_TypeConversion.GetLine(Login);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Port);
OPI_TypeConversion.GetLine(Password);
Port = ?(ValueIsFilled(Port), ":" + Port, Port);
Password = ?(ValueIsFilled(Password), ":" + Password, Password);
StringTemplate = "postgresql://%1%2@%3%4/%5";
ConnectionString = StrTemplate(StringTemplate, Login, Password, Address, Port, Base);
Return ConnectionString;
EndFunction
#EndRegion
#Region ORM
// Create database
// Creates a database with the specified name
//
// Parameters:
// Base - String - Database name - base
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function CreateDatabase(Val Base, Val Connection = "") Export
Result = OPI_SQLQueries.CreateDatabase(OPI_PostgreSQL, Base, Connection);
Return Result;
EndFunction
// Drop database
// Deletes the database
//
// Parameters:
// Base - String - Database name - base
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function DropDatabase(Val Base, Val Connection = "") Export
Result = OPI_SQLQueries.DropDatabase(OPI_PostgreSQL, Base, Connection);
Return Result;
EndFunction
// Create table
// Creates an empty table in the database
//
// Parameters:
// Table - String - Table name - table
// ColoumnsStruct - Structure Of KeyAndValue - Column structure: Key > Name, Value > Data type - cols
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function CreateTable(Val Table, Val ColoumnsStruct, Val Connection = "") Export
Result = OPI_SQLQueries.CreateTable(OPI_PostgreSQL, Table, ColoumnsStruct, Connection);
Return Result;
EndFunction
// Add rows
// Adds new rows to the table
//
// Note
// Binary data can also be transferred as a structure `{'blob':File path}`
//
// Parameters:
// Table - String - Table name - table
// DataArray - Array of Structure - An array of string data structures: Key > field, Value > field value - rows
// Transaction - Boolean - True > adding records to transactions with rollback on error - trn
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function AddRecords(Val Table, Val DataArray, Val Transaction = True, Val Connection = "") Export
Result = OPI_SQLQueries.AddRecords(OPI_PostgreSQL, Table, DataArray, Transaction, Connection);
Return Result;
EndFunction
// Get records
// Gets records from the selected table
//
// Note
// Values of the Binary data type (BLOB) are returned as `{'blob':Base64 string}`
//
// Parameters:
// Table - String - Table name - table
// Fields - Array Of String - Fields for selection - fields
// Filters - Array of Structure - Filters array. See GetRecordsFilterStrucutre - filter
// Sort - Structure Of KeyAndValue - Sorting: Key > field name, Value > direction (ASC, DESC) - order
// Count - Number - Limiting the number of received strings - limit
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function GetRecords(Val Table
, Val Fields = "*"
, Val Filters = ""
, Val Sort = ""
, Val Count = ""
, Val Connection = "") Export
Result = OPI_SQLQueries.GetRecords(OPI_PostgreSQL, Table, Fields, Filters, Sort, Count, Connection);
Return Result;
EndFunction
// Update records
// Updates the value of records by selected criteria
//
// Parameters:
// Table - String - Table name - table
// ValueStructure - Structure Of KeyAndValue - Values structure: Key > field, Value > field value - values
// Filters - Array of Structure - Filters array. See GetRecordsFilterStrucutre - filter
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function UpdateRecords(Val Table, Val ValueStructure, Val Filters = "", Val Connection = "") Export
Result = OPI_SQLQueries.UpdateRecords(OPI_PostgreSQL, Table, ValueStructure, Filters, Connection);
Return Result;
EndFunction
// Delete records
// Deletes records from the table
//
// Parameters:
// Table - String - Table name - table
// Filters - Array of Structure - Filters array. See GetRecordsFilterStrucutre - filter
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function DeletePosts(Val Table, Val Filters = "", Val Connection = "") Export
Result = OPI_SQLQueries.DeletePosts(OPI_PostgreSQL, Table, Filters, Connection);
Return Result;
EndFunction
// Delete table
// Deletes a table from the database
//
// Parameters:
// Table - String - Table name - table
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function DeleteTable(Val Table, Val Connection = "") Export
Result = OPI_SQLQueries.DeleteTable(OPI_PostgreSQL, Table, Connection);
Return Result;
EndFunction
// Clear table
// Clears the database table
//
// Parameters:
// Table - String - Table name - table
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function ClearTable(Val Table, Val Connection = "") Export
Result = OPI_SQLQueries.DeletePosts(OPI_PostgreSQL, Table, , Connection);
Return Result;
EndFunction
// Get records filter strucutre
// Gets the template structure for filtering records in ORM queries
//
// Note
// The use of the `raw` feature is necessary for compound constructions like `BEETWEEN`.^^
// For example: with `raw:false` the filter `type:BETWEEN` `value:10 AND 20` will be interpolated as `BETWEEN ?1 `^^
// where `?1 = "10 AND 20,"' which would cause an error.
// In such a case, you must use `raw:true` to set the condition directly in the query text
//
// Parameters:
// Clear - Boolean - True > structure with empty valuse, False > field descriptions at values - empty
//
// Returns:
// Structure Of KeyAndValue - Record filter element
Function GetRecordsFilterStrucutre(Val Clear = False) Export
Return OPI_SQLQueries.GetRecordsFilterStrucutre(Clear);
EndFunction
#EndRegion
#EndRegion
#Region Internal
Function ConnectorName() Export
Return "OPI_PostgreSQL";
EndFunction
Function GetFeatures() Export
Features = New Structure;
Features.Insert("ParameterNumeration", True);
Features.Insert("ParameterMarker" , "$");
Return Features;
EndFunction
#EndRegion
#Region Private
Function AttachAddInOnServer(Val AddInName, Val Class = "Main")
If OPI_Tools.IsOneScript() Then
TemplateName = OPI_Tools.AddInsFolderOS() + AddInName + ".zip";
Else
TemplateName = "CommonTemplate." + AddInName;
EndIf;
AttachAddIn(TemplateName, AddInName, AddInType.Native);
AddIn = New ("AddIn." + AddInName + "." + Class);
Return AddIn;
EndFunction
Function ProcessParameters(Val Parameters)
If Not ValueIsFilled(Parameters) Then
Return "[]";
EndIf;
OPI_TypeConversion.GetArray(Parameters);
For N = 0 To Parameters.UBound() Do
CurrentParameter = Parameters[N];
If TypeOf(CurrentParameter) = Type("BinaryData") Then
CurrentParameter = New Structure("BYTEA", Base64String(CurrentParameter));
ElsIf OPI_Tools.CollectionFieldExist(CurrentParameter, "BYTEA") Then
CurrentParameter = ProcessBlobStructure(CurrentParameter);
ElsIf TypeOf(CurrentParameter) = Type("Date") Then
CurrentParameter = Format(CurrentParameter, "DF='yyyy-MM-dd HH:MM:ss");
ElsIf TypeOf(CurrentParameter) = Type("Structure") Or TypeOf(CurrentParameter) = Type("Map") Then
Continue;
Else
If Not OPI_Tools.IsPrimitiveType(CurrentParameter) Then
OPI_TypeConversion.GetLine(CurrentParameter);
EndIf;
EndIf;
Parameters[N] = CurrentParameter;
EndDo;
Parameters_ = OPI_Tools.JSONString(Parameters, , False);
Return Parameters_;
EndFunction
Function ProcessBlobStructure(Val Value)
DataValue = Value["BYTEA"];
If TypeOf(DataValue) = Type("BinaryData") Then
Value = New Structure("BYTEA", Base64String(DataValue));
Else
DataFile = New File(String(DataValue));
If DataFile.Exist() Then
CurrentData = New BinaryData(String(DataValue));
Value = New Structure("BYTEA", Base64String(CurrentData));
EndIf;
EndIf;
Return Value;
EndFunction
#EndRegion

View File

@ -342,6 +342,16 @@ Function ConnectorName() Export
Return "OPI_SQLite";
EndFunction
Function GetFeatures() Export
Features = New Structure;
Features.Insert("ParameterNumeration", True);
Features.Insert("ParameterMarker" , "?");
Return Features;
EndFunction
#EndRegion
#Region Private

View File

@ -10,6 +10,7 @@
<module name="OPI_Neocities" file="core/Modules/OPI_Neocities.os"/>
<module name="OPI_Notion" file="core/Modules/OPI_Notion.os"/>
<module name="OPI_Ozon" file="core/Modules/OPI_Ozon.os"/>
<module name="OPI_PostgreSQL" file="core/Modules/OPI_PostgreSQL.os"/>
<module name="OPI_S3" file="core/Modules/OPI_S3.os"/>
<module name="OPI_Slack" file="core/Modules/OPI_Slack.os"/>
<module name="OPI_SQLite" file="core/Modules/OPI_SQLite.os"/>

View File

@ -2311,6 +2311,24 @@ EndProcedure
#EndRegion
#Region PostgreSQL
Procedure Postgres_ORM() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("PG_IP" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("PG_Password", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("Picture" , TestParameters);
PostgreSQL_CreateDatabase(TestParameters);
PostgreSQL_CreateTable(TestParameters);
PostgreSQL_AddRecords(TestParameters);
PostgreSQL_DropDatabase(TestParameters);
EndProcedure
#EndRegion
#EndRegion
#EndRegion
@ -17274,6 +17292,129 @@ EndProcedure
#EndRegion
#Region PostgreSQL
Procedure PostgreSQL_CreateDatabase(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
OPI_PostgreSQL.DropDatabase(Base, ConnectionString); // SKIP
Result = OPI_PostgreSQL.CreateDatabase(Base, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "CreateDatabase", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
Procedure PostgreSQL_DropDatabase(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
Result = OPI_PostgreSQL.DropDatabase(Base, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "DropDatabase", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
Procedure PostgreSQL_CreateTable(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "testbase1";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Table = "testtable";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("bool_field" , "BOOL");
ColoumnsStruct.Insert("char_field" , """char""");
ColoumnsStruct.Insert("smallint_field", "SMALLINT");
ColoumnsStruct.Insert("int_field" , "INT");
ColoumnsStruct.Insert("oid_field" , "OID");
ColoumnsStruct.Insert("bigint_field" , "BIGINT");
ColoumnsStruct.Insert("real_field" , "REAL");
ColoumnsStruct.Insert("dp_field" , "DOUBLE PRECISION");
ColoumnsStruct.Insert("text_field" , "TEXT");
ColoumnsStruct.Insert("bytea_field" , "BYTEA");
ColoumnsStruct.Insert("ts_field" , "TIMESTAMP");
ColoumnsStruct.Insert("ip_field" , "INET");
Result = OPI_PostgreSQL.CreateTable(Table, ColoumnsStruct, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "CreateTable", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
Procedure PostgreSQL_AddRecords(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "testbase1";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Table = "testtable";
Image = FunctionParameters["Picture"];
OPI_TypeConversion.GetBinaryData(Image); // Image - Type: BinaryData
Char = New Map;
Char.Insert("""char""", 1);
DP = New Map;
DP.Insert("DOUBLE PRECISION", 1.0000000000000002);
RecordStructure = New Structure;
RecordStructure.Insert("bool_field" , New Structure("BOOL" , True));
RecordStructure.Insert("char_field" , Char);
RecordStructure.Insert("smallint_field", New Structure("SMALLINT" , 5));
RecordStructure.Insert("int_field" , New Structure("INT" , 100));
RecordStructure.Insert("oid_field" , New Structure("OID" , 24576));
RecordStructure.Insert("bigint_field" , New Structure("BIGINT" , 9999999));
RecordStructure.Insert("real_field" , New Structure("REAL" , 15.2));
RecordStructure.Insert("dp_field" , DP);
RecordStructure.Insert("text_field" , New Structure("TEXT" , "Some text"));
RecordStructure.Insert("bytea_field" , New Structure("BYTEA" , Image));
RecordStructure.Insert("ts_field" , New Structure("TIMESTAMP", 1739207915));
RecordStructure.Insert("ip_field" , New Structure("INET" , "127.0.0.1"));
Result = OPI_PostgreSQL.AddRecords(Table, RecordStructure, False, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "AddRecords", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
#EndRegion
#EndRegion
#EndRegion

View File

@ -44,6 +44,32 @@
#Region Internal
Function CreateDatabase(Val Module, Val Base, Val Connection = "") Export
Scheme = NewSQLScheme("CREATEDATABASE");
SetBaseName(Scheme, Base);
Request = FormSQLText(Scheme);
Result = Module.ExecuteSQLQuery(Request, , , Connection);
Return Result;
EndFunction
Function DropDatabase(Val Module, Val Base, Val Connection = "") Export
Scheme = NewSQLScheme("DROPDATABASE");
SetBaseName(Scheme, Base);
Request = FormSQLText(Scheme);
Result = Module.ExecuteSQLQuery(Request, , , Connection);
Return Result;
EndFunction
Function CreateTable(Val Module, Val Table, Val ColoumnsStruct, Val Connection = "") Export
ErrorText = "The column structure is not a valid key-value structure";
@ -207,7 +233,7 @@ EndFunction
#Region Scheme
Function NewSQLScheme(Val Action)
Function NewSQLScheme(Val Action, Val Features = Undefined)
OPI_TypeConversion.GetLine(Action);
@ -219,7 +245,7 @@ Function NewSQLScheme(Val Action)
ElsIf Action = "INSERT" Then
Scheme = EmptySchemeInsert();
Scheme = EmptySchemeInsert(Features);
ElsIf Action = "UPDATE" Then
@ -240,6 +266,15 @@ Function NewSQLScheme(Val Action)
ElsIf Action = "TRUNCATE" Then
Scheme = EmptySchemeTruncate();
ElsIf Action = "CREATEDATABASE" Then
Scheme = EmptySchemeCreateDatabase();
ElsIf Action = "DROPDATABASE" Then
Scheme = EmptySchemeDropDatabase();
Else
Scheme = New Structure;
@ -265,12 +300,17 @@ Function EmptySchemeSelect()
EndFunction
Function EmptySchemeInsert()
Function EmptySchemeInsert(Val Features)
Scheme = New Structure("type", "INSERT");
ParameterNumeration = ?(ValueIsFilled(Features), Features["ParameterNumeration"], False);
ParameterMarker = ?(ValueIsFilled(Features), Features["ParameterMarker"] , "?");
Scheme.Insert("table", "");
Scheme.Insert("set" , New Array);
Scheme.Insert("nump" , ParameterNumeration);
Scheme.Insert("markp", ParameterMarker);
Return Scheme;
@ -332,6 +372,26 @@ Function EmptySchemeTruncate()
EndFunction
Function EmptySchemeCreateDatabase();
Scheme = New Structure("type", "CREATEDATABASE");
Scheme.Insert("database" , "");
Return Scheme;
EndFunction
Function EmptySchemeDropDatabase();
Scheme = New Structure("type", "DROPDATABASE");
Scheme.Insert("database" , "");
Return Scheme;
EndFunction
#EndRegion
#Region Processors
@ -377,6 +437,13 @@ Function FormSQLText(Val Scheme)
QueryText = FormTextTruncate(Scheme);
ElsIf SchemeType = "CREATEDATABASE" Then
QueryText = FormTextCreateDatabase(Scheme);
ElsIf SchemeType = "DROPDATABASE" Then
QueryText = FormTextDropDatabase(Scheme);
Else
QueryText = "";
@ -412,15 +479,25 @@ Function FormTextInsert(Val Scheme)
CheckSchemeRequiredFields(Scheme, "table,set");
Table = Scheme["table"];
Fields = Scheme["set"];
Table = Scheme["table"];
Fields = Scheme["set"];
Numeration = Scheme["nump"];
Marker = Scheme["markp"];
SQLTemplate = "INSERT INTO %1 (%2) VALUES (%3)";
Parameters = New Array;
For N = 1 To Fields.Count() Do
Parameters.Add("?" + OPI_Tools.NumberToString(N));
CurrentMarker = Marker;
If Numeration Then
CurrentMarker = CurrentMarker + OPI_Tools.NumberToString(N);
EndIf;
Parameters.Add(CurrentMarker);
EndDo;
TextSQL = StrTemplate(SQLTemplate
@ -530,6 +607,34 @@ Function FormTextTruncate(Val Scheme)
EndFunction
Function FormTextCreateDatabase(Val Scheme)
CheckSchemeRequiredFields(Scheme, "database");
Base = Scheme["database"];
SQLTemplate = "CREATE DATABASE %1";
TextSQL = StrTemplate(SQLTemplate, Base);
Return TextSQL;
EndFunction
Function FormTextDropDatabase(Val Scheme)
CheckSchemeRequiredFields(Scheme, "database");
Base = Scheme["database"];
SQLTemplate = "DROP DATABASE %1";
TextSQL = StrTemplate(SQLTemplate, Base);
Return TextSQL;
EndFunction
#EndRegion
#Region Auxiliary
@ -634,7 +739,9 @@ Function AddRow(Val Module, Val Table, Val Record, Val Connection)
FieldArray = New Array;
ValuesArray = New Array;
Scheme = NewSQLScheme("INSERT");
Features = Module.GetFeatures();
Scheme = NewSQLScheme("INSERT", Features);
SetTableName(Scheme, Table);
SplitDataCollection(Record, FieldArray, ValuesArray);
@ -751,9 +858,10 @@ Function CreateConnectionInsideModule(Val Connector, Val Base)
OPI_TypeConversion.GetLine(Base);
OPI_Tools.RestoreEscapeSequences(Base);
Connector = AttachAddInOnServer("OPI_SQLite");
FieldName = GetPrimaryFieldName(Connector);
Connector = AttachAddInOnServer(Connector);
Connector.Database = Base;
Connector[FieldName] = Base;
Result = Connector.Connect();
Result = OPI_Tools.JsonToStructure(Result, False);
@ -784,6 +892,16 @@ Function AttachAddInOnServer(Val AddInName, Val Class = "Main")
EndFunction
Function GetPrimaryFieldName(Val Connector)
If Connector = "OPI_SQLite" Then
Return "Database";
Else
Return "ConnectionString";
EndIf;
EndFunction
Procedure SplitDataCollection(Val Record, FieldArray, ValuesArray)
ErrorText = "Incorrect data set for updating";
@ -930,6 +1048,14 @@ Procedure SetTableName(Scheme, Val Name)
EndProcedure
Procedure SetBaseName(Scheme, Val Name)
OPI_TypeConversion.GetLine(Name);
Scheme.Insert("database", Name);
EndProcedure
Procedure SetLimit(Scheme, Val Count)
OPI_TypeConversion.GetNumber(Count);

View File

@ -53,6 +53,7 @@ Function GetTestingSectionMapping() Export
Sections.Insert("VK" , 5);
Sections.Insert("Viber" , 5);
Sections.Insert("Twitter" , 4);
Sections.Insert("PostgreSQL" , 5);
Sections.Insert("SQLite" , 5);
Sections.Insert("YandexDisk" , 5);
Sections.Insert("GoogleWorkspace", 2);
@ -86,6 +87,7 @@ Function GetTestingSectionMappingGA() Export
Sections.Insert("VK" , StandardDependencies);
Sections.Insert("Viber" , StandardDependencies);
Sections.Insert("Twitter" , StandardDependencies);
Sections.Insert("PostgreSQL" , StandardDependencies);
Sections.Insert("SQLite" , StandardDependencies);
Sections.Insert("YandexDisk" , StandardDependencies);
Sections.Insert("GoogleWorkspace", StandardDependencies);
@ -133,6 +135,7 @@ Function GetTestTable() Export
S3_ = "S3";
TCP = "TCP";
SQLite = "SQLite";
Postgres = "PostgreSQL";
TestTable = New ValueTable;
TestTable.Columns.Add("Method");
@ -270,6 +273,7 @@ Function GetTestTable() Export
NewTest(TestTable, "TC_Client" , "TCP Client" , TCP);
NewTest(TestTable, "SQLL_CommonMethods" , "Common methods" , SQLite);
NewTest(TestTable, "SQLL_ORM" , "ORM" , SQLite);
NewTest(TestTable, "Postgres_ORM" , "ORM" , Postgres);
Return TestTable;
@ -2386,15 +2390,7 @@ Procedure WriteCLICall(Val Library, Val Method, Val Options)
EndIf;
CurrentOption = FormOption(Option.Value, Option.Key);
If Library = "bitrix24"
And Option.Key = "url" Then
CurrentOption = ?(StrFind(CurrentOption, "rest") > 0
, "https://b24-ar17wx.bitrix24.by/rest/1/***"
, CurrentOption);
EndIf;
ProcessSpecialOptionsSecrets(Library, Option.Key, CurrentOption);
OptionsArray.Add(CurrentOption);
@ -2427,4 +2423,26 @@ Procedure WriteCLICall(Val Library, Val Method, Val Options)
EndProcedure
Procedure ProcessSpecialOptionsSecrets(Val Library, Val Option, Value)
If Library = "bitrix24"
And Option = "url" Then
Value = ?(StrFind(Value, "rest") > 0
, "https://b24-ar17wx.bitrix24.by/rest/1/***"
, Value);
Return;
EndIf;
If Library = "postgres"
And Option = "conn" Then
Value = "postgresql://bayselonarrend:***@127.0.0.1:5432/";
EndIf;
EndProcedure
#EndRegion

View File

@ -0,0 +1,483 @@
// OneScript: ./OInt/core/Modules/OPI_PostgreSQL.os
// Lib: SQLite
// CLI: sqlite
// MIT License
// Copyright (c) 2023 Anton Tsitavets
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
// The above copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
// SOFTWARE.
// https://github.com/Bayselonarrend/OpenIntegrations
// BSLLS:Typo-off
// BSLLS:LatinAndCyrillicSymbolInWord-off
// BSLLS:IncorrectLineBreak-off
// BSLLS:NumberOfOptionalParams-off
// BSLLS:UsingServiceTag-off
// BSLLS:LineLength-off
//@skip-check module-structure-top-region
//@skip-check module-structure-method-in-regions
//@skip-check wrong-string-literal-content
//@skip-check method-too-many-params
//@skip-check constructor-function-return-section
// Uncomment if OneScript is executed
// #Use "../../tools"
#Region Public
#Region CommonMethods
// Create Connection !NOCLI
// Creates a connection to the specified base
//
// Parameters:
// ConnectionString - String - Connection string. See GenerateConnectionString - sting
//
// Returns:
// Arbitrary - Connector object or structure with error information
Function CreateConnection(Val ConnectionString = "") Export
If IsConnector(ConnectionString) Then
Return ConnectionString;
EndIf;
OPI_TypeConversion.GetLine(ConnectionString);
OPI_Tools.RestoreEscapeSequences(ConnectionString);
Connector = AttachAddInOnServer("OPI_PostgreSQL");
Connector.ConnectionString = ConnectionString;
Result = Connector.Connect();
Result = OPI_Tools.JsonToStructure(Result, False);
Return ?(Result["result"], Connector, Result);
EndFunction
// Close connection !NOCLI
// Explicitly closes the passed connection
//
// Parameters:
// Connection - Arbitrary - AddIn object with open connection - dbc
//
// Returns:
// Structure Of KeyAndValue - Result of connection termination
Function CloseConnection(Val Connection) Export
If IsConnector(Connection) Then
Result = Connection.Close();
Result = OPI_Tools.JsonToStructure(Result, False);
Else
Result = New Structure("result,error", False, "It's not a connection");
EndIf;
Return Result;
EndFunction
// Is connector !NOCLI
// Checks that the value is an object of a SQLite AddIn
//
// Parameters:
// Value - Arbitrary - Value to check - value
//
// Returns:
// Boolean - Is connector
Function IsConnector(Val Value) Export
Return String(TypeOf(Value)) = "AddIn.OPI_PostgreSQL.Main";
EndFunction
// Execute SQL query
// Executes an arbitrary SQL query
//
// Note
// Available parameter types: String, Number, Date, Boolean, BinaryData.^^
// Binary data can also be passed as a `{'blob':File path}` structure. Binary data (BLOB) values are returned^^
// as `{'blob':Base64 string}`
// Without specifying the `ForcifyResult` flag, result data is returned only for queries beginning with `SELECT` keyword^^
// For other queries, `result:true` or `false` with error text is returned
//
// Parameters:
// QueryText - String - Database query text - sql
// Parameters - Array Of Arbitrary - Array of positional parameters of the request - params
// ForceResult - Boolean - Includes an attempt to retrieve the result, even for nonSELECT queries - force
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue - Result of query execution
Function ExecuteSQLQuery(Val QueryText
, Val Parameters = ""
, Val ForceResult = False
, Val Connection = "") Export
OPI_TypeConversion.GetLine(QueryText);
OPI_TypeConversion.GetBoolean(ForceResult);
Parameters_ = ProcessParameters(Parameters);
Connector = CreateConnection(Connection);
If TypeOf(Connector) <> Type("AddIn.OPI_PostgreSQL.Main") Then
Return Connector;
EndIf;
Result = Connector.Execute(QueryText, Parameters_, ForceResult);
Result = OPI_Tools.JsonToStructure(Result);
Return Result;
EndFunction
// Generate connection string
// Forms a connection string from the passed data
//
// Parameters:
// Address - String - IP address or domain name of the server - addr
// Base - String - Name of the database to connect - db
// Login - String - Postgres user login - login
// Password - String - Postgres user password - pass
// Port - String - Connection port - port
//
// Returns:
// String - PostgreSQL database connection string
Function GenerateConnectionString(Val Address, Val Base, Val Login, Val Password = "", Val Port = "5432") Export
OPI_TypeConversion.GetLine(Address);
OPI_TypeConversion.GetLine(Login);
OPI_TypeConversion.GetLine(Base);
OPI_TypeConversion.GetLine(Port);
OPI_TypeConversion.GetLine(Password);
Port = ?(ValueIsFilled(Port), ":" + Port, Port);
Password = ?(ValueIsFilled(Password), ":" + Password, Password);
StringTemplate = "postgresql://%1%2@%3%4/%5";
ConnectionString = StrTemplate(StringTemplate, Login, Password, Address, Port, Base);
Return ConnectionString;
EndFunction
#EndRegion
#Region ORM
// Create database
// Creates a database with the specified name
//
// Parameters:
// Base - String - Database name - base
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function CreateDatabase(Val Base, Val Connection = "") Export
Result = OPI_SQLQueries.CreateDatabase(OPI_PostgreSQL, Base, Connection);
Return Result;
EndFunction
// Drop database
// Deletes the database
//
// Parameters:
// Base - String - Database name - base
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function DropDatabase(Val Base, Val Connection = "") Export
Result = OPI_SQLQueries.DropDatabase(OPI_PostgreSQL, Base, Connection);
Return Result;
EndFunction
// Create table
// Creates an empty table in the database
//
// Parameters:
// Table - String - Table name - table
// ColoumnsStruct - Structure Of KeyAndValue - Column structure: Key > Name, Value > Data type - cols
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function CreateTable(Val Table, Val ColoumnsStruct, Val Connection = "") Export
Result = OPI_SQLQueries.CreateTable(OPI_PostgreSQL, Table, ColoumnsStruct, Connection);
Return Result;
EndFunction
// Add rows
// Adds new rows to the table
//
// Note
// Binary data can also be transferred as a structure `{'blob':File path}`
//
// Parameters:
// Table - String - Table name - table
// DataArray - Array of Structure - An array of string data structures: Key > field, Value > field value - rows
// Transaction - Boolean - True > adding records to transactions with rollback on error - trn
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function AddRecords(Val Table, Val DataArray, Val Transaction = True, Val Connection = "") Export
Result = OPI_SQLQueries.AddRecords(OPI_PostgreSQL, Table, DataArray, Transaction, Connection);
Return Result;
EndFunction
// Get records
// Gets records from the selected table
//
// Note
// Values of the Binary data type (BLOB) are returned as `{'blob':Base64 string}`
//
// Parameters:
// Table - String - Table name - table
// Fields - Array Of String - Fields for selection - fields
// Filters - Array of Structure - Filters array. See GetRecordsFilterStrucutre - filter
// Sort - Structure Of KeyAndValue - Sorting: Key > field name, Value > direction (ASC, DESC) - order
// Count - Number - Limiting the number of received strings - limit
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function GetRecords(Val Table
, Val Fields = "*"
, Val Filters = ""
, Val Sort = ""
, Val Count = ""
, Val Connection = "") Export
Result = OPI_SQLQueries.GetRecords(OPI_PostgreSQL, Table, Fields, Filters, Sort, Count, Connection);
Return Result;
EndFunction
// Update records
// Updates the value of records by selected criteria
//
// Parameters:
// Table - String - Table name - table
// ValueStructure - Structure Of KeyAndValue - Values structure: Key > field, Value > field value - values
// Filters - Array of Structure - Filters array. See GetRecordsFilterStrucutre - filter
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function UpdateRecords(Val Table, Val ValueStructure, Val Filters = "", Val Connection = "") Export
Result = OPI_SQLQueries.UpdateRecords(OPI_PostgreSQL, Table, ValueStructure, Filters, Connection);
Return Result;
EndFunction
// Delete records
// Deletes records from the table
//
// Parameters:
// Table - String - Table name - table
// Filters - Array of Structure - Filters array. See GetRecordsFilterStrucutre - filter
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function DeletePosts(Val Table, Val Filters = "", Val Connection = "") Export
Result = OPI_SQLQueries.DeletePosts(OPI_PostgreSQL, Table, Filters, Connection);
Return Result;
EndFunction
// Delete table
// Deletes a table from the database
//
// Parameters:
// Table - String - Table name - table
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function DeleteTable(Val Table, Val Connection = "") Export
Result = OPI_SQLQueries.DeleteTable(OPI_PostgreSQL, Table, Connection);
Return Result;
EndFunction
// Clear table
// Clears the database table
//
// Parameters:
// Table - String - Table name - table
// Connection - String, Arbitrary - Connection or connection string - dbc
//
// Returns:
// Structure Of KeyAndValue, String - Result of query execution
Function ClearTable(Val Table, Val Connection = "") Export
Result = OPI_SQLQueries.DeletePosts(OPI_PostgreSQL, Table, , Connection);
Return Result;
EndFunction
// Get records filter strucutre
// Gets the template structure for filtering records in ORM queries
//
// Note
// The use of the `raw` feature is necessary for compound constructions like `BEETWEEN`.^^
// For example: with `raw:false` the filter `type:BETWEEN` `value:10 AND 20` will be interpolated as `BETWEEN ?1 `^^
// where `?1 = "10 AND 20,"' which would cause an error.
// In such a case, you must use `raw:true` to set the condition directly in the query text
//
// Parameters:
// Clear - Boolean - True > structure with empty valuse, False > field descriptions at values - empty
//
// Returns:
// Structure Of KeyAndValue - Record filter element
Function GetRecordsFilterStrucutre(Val Clear = False) Export
Return OPI_SQLQueries.GetRecordsFilterStrucutre(Clear);
EndFunction
#EndRegion
#EndRegion
#Region Internal
Function ConnectorName() Export
Return "OPI_PostgreSQL";
EndFunction
Function GetFeatures() Export
Features = New Structure;
Features.Insert("ParameterNumeration", True);
Features.Insert("ParameterMarker" , "$");
Return Features;
EndFunction
#EndRegion
#Region Private
Function AttachAddInOnServer(Val AddInName, Val Class = "Main")
If OPI_Tools.IsOneScript() Then
TemplateName = OPI_Tools.AddInsFolderOS() + AddInName + ".zip";
Else
TemplateName = "CommonTemplate." + AddInName;
EndIf;
AttachAddIn(TemplateName, AddInName, AddInType.Native);
AddIn = New ("AddIn." + AddInName + "." + Class);
Return AddIn;
EndFunction
Function ProcessParameters(Val Parameters)
If Not ValueIsFilled(Parameters) Then
Return "[]";
EndIf;
OPI_TypeConversion.GetArray(Parameters);
For N = 0 To Parameters.UBound() Do
CurrentParameter = Parameters[N];
If TypeOf(CurrentParameter) = Type("BinaryData") Then
CurrentParameter = New Structure("BYTEA", Base64String(CurrentParameter));
ElsIf OPI_Tools.CollectionFieldExists(CurrentParameter, "BYTEA") Then
CurrentParameter = ProcessBlobStructure(CurrentParameter);
ElsIf TypeOf(CurrentParameter) = Type("Date") Then
CurrentParameter = Format(CurrentParameter, "DF='yyyy-MM-dd HH:MM:ss");
ElsIf TypeOf(CurrentParameter) = Type("Structure") Or TypeOf(CurrentParameter) = Type("Map") Then
Continue;
Else
If Not OPI_Tools.IsPrimitiveType(CurrentParameter) Then
OPI_TypeConversion.GetLine(CurrentParameter);
EndIf;
EndIf;
Parameters[N] = CurrentParameter;
EndDo;
Parameters_ = OPI_Tools.JSONString(Parameters, , False);
Return Parameters_;
EndFunction
Function ProcessBlobStructure(Val Value)
DataValue = Value["BYTEA"];
If TypeOf(DataValue) = Type("BinaryData") Then
Value = New Structure("BYTEA", Base64String(DataValue));
Else
DataFile = New File(String(DataValue));
If DataFile.Exists() Then
CurrentData = New BinaryData(String(DataValue));
Value = New Structure("BYTEA", Base64String(CurrentData));
EndIf;
EndIf;
Return Value;
EndFunction
#EndRegion

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="80366dfb-0340-4cbf-b9b5-18489bd1643f">
<name>OPI_PostgreSQL</name>
<synonym>
<key>en</key>
<value>Postgre SQL (OpenIntegrations)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>

View File

@ -44,6 +44,32 @@
#Region Internal
Function CreateDatabase(Val Module, Val Base, Val Connection = "") Export
Scheme = NewSQLScheme("CREATEDATABASE");
SetBaseName(Scheme, Base);
Request = FormSQLText(Scheme);
Result = Module.ExecuteSQLQuery(Request, , , Connection);
Return Result;
EndFunction
Function DropDatabase(Val Module, Val Base, Val Connection = "") Export
Scheme = NewSQLScheme("DROPDATABASE");
SetBaseName(Scheme, Base);
Request = FormSQLText(Scheme);
Result = Module.ExecuteSQLQuery(Request, , , Connection);
Return Result;
EndFunction
Function CreateTable(Val Module, Val Table, Val ColoumnsStruct, Val Connection = "") Export
ErrorText = "The column structure is not a valid key-value structure";
@ -207,7 +233,7 @@ EndFunction
#Region Scheme
Function NewSQLScheme(Val Action)
Function NewSQLScheme(Val Action, Val Features = Undefined)
OPI_TypeConversion.GetLine(Action);
@ -219,7 +245,7 @@ Function NewSQLScheme(Val Action)
ElsIf Action = "INSERT" Then
Scheme = EmptySchemeInsert();
Scheme = EmptySchemeInsert(Features);
ElsIf Action = "UPDATE" Then
@ -240,6 +266,15 @@ Function NewSQLScheme(Val Action)
ElsIf Action = "TRUNCATE" Then
Scheme = EmptySchemeTruncate();
ElsIf Action = "CREATEDATABASE" Then
Scheme = EmptySchemeCreateDatabase();
ElsIf Action = "DROPDATABASE" Then
Scheme = EmptySchemeDropDatabase();
Else
Scheme = New Structure;
@ -265,12 +300,17 @@ Function EmptySchemeSelect()
EndFunction
Function EmptySchemeInsert()
Function EmptySchemeInsert(Val Features)
Scheme = New Structure("type", "INSERT");
ParameterNumeration = ?(ValueIsFilled(Features), Features["ParameterNumeration"], False);
ParameterMarker = ?(ValueIsFilled(Features), Features["ParameterMarker"] , "?");
Scheme.Insert("table", "");
Scheme.Insert("set" , New Array);
Scheme.Insert("nump" , ParameterNumeration);
Scheme.Insert("markp", ParameterMarker);
Return Scheme;
@ -332,6 +372,26 @@ Function EmptySchemeTruncate()
EndFunction
Function EmptySchemeCreateDatabase();
Scheme = New Structure("type", "CREATEDATABASE");
Scheme.Insert("database" , "");
Return Scheme;
EndFunction
Function EmptySchemeDropDatabase();
Scheme = New Structure("type", "DROPDATABASE");
Scheme.Insert("database" , "");
Return Scheme;
EndFunction
#EndRegion
#Region Processors
@ -377,6 +437,13 @@ Function FormSQLText(Val Scheme)
QueryText = FormTextTruncate(Scheme);
ElsIf SchemeType = "CREATEDATABASE" Then
QueryText = FormTextCreateDatabase(Scheme);
ElsIf SchemeType = "DROPDATABASE" Then
QueryText = FormTextDropDatabase(Scheme);
Else
QueryText = "";
@ -412,15 +479,25 @@ Function FormTextInsert(Val Scheme)
CheckSchemeRequiredFields(Scheme, "table,set");
Table = Scheme["table"];
Fields = Scheme["set"];
Table = Scheme["table"];
Fields = Scheme["set"];
Numeration = Scheme["nump"];
Marker = Scheme["markp"];
SQLTemplate = "INSERT INTO %1 (%2) VALUES (%3)";
Parameters = New Array;
For N = 1 To Fields.Count() Do
Parameters.Add("?" + OPI_Tools.NumberToString(N));
CurrentMarker = Marker;
If Numeration Then
CurrentMarker = CurrentMarker + OPI_Tools.NumberToString(N);
EndIf;
Parameters.Add(CurrentMarker);
EndDo;
TextSQL = StrTemplate(SQLTemplate
@ -530,6 +607,34 @@ Function FormTextTruncate(Val Scheme)
EndFunction
Function FormTextCreateDatabase(Val Scheme)
CheckSchemeRequiredFields(Scheme, "database");
Base = Scheme["database"];
SQLTemplate = "CREATE DATABASE %1";
TextSQL = StrTemplate(SQLTemplate, Base);
Return TextSQL;
EndFunction
Function FormTextDropDatabase(Val Scheme)
CheckSchemeRequiredFields(Scheme, "database");
Base = Scheme["database"];
SQLTemplate = "DROP DATABASE %1";
TextSQL = StrTemplate(SQLTemplate, Base);
Return TextSQL;
EndFunction
#EndRegion
#Region Auxiliary
@ -634,7 +739,9 @@ Function AddRow(Val Module, Val Table, Val Record, Val Connection)
FieldArray = New Array;
ValuesArray = New Array;
Scheme = NewSQLScheme("INSERT");
Features = Module.GetFeatures();
Scheme = NewSQLScheme("INSERT", Features);
SetTableName(Scheme, Table);
SplitDataCollection(Record, FieldArray, ValuesArray);
@ -751,9 +858,10 @@ Function CreateConnectionInsideModule(Val Connector, Val Base)
OPI_TypeConversion.GetLine(Base);
OPI_Tools.RestoreEscapeSequences(Base);
Connector = AttachAddInOnServer("OPI_SQLite");
FieldName = GetPrimaryFieldName(Connector);
Connector = AttachAddInOnServer(Connector);
Connector.Database = Base;
Connector[FieldName] = Base;
Result = Connector.Connect();
Result = OPI_Tools.JsonToStructure(Result, False);
@ -784,6 +892,16 @@ Function AttachAddInOnServer(Val AddInName, Val Class = "Main")
EndFunction
Function GetPrimaryFieldName(Val Connector)
If Connector = "OPI_SQLite" Then
Return "Database";
Else
Return "ConnectionString";
EndIf;
EndFunction
Procedure SplitDataCollection(Val Record, FieldArray, ValuesArray)
ErrorText = "Incorrect data set for updating";
@ -930,6 +1048,14 @@ Procedure SetTableName(Scheme, Val Name)
EndProcedure
Procedure SetBaseName(Scheme, Val Name)
OPI_TypeConversion.GetLine(Name);
Scheme.Insert("database", Name);
EndProcedure
Procedure SetLimit(Scheme, Val Count)
OPI_TypeConversion.GetNumber(Count);

View File

@ -342,6 +342,16 @@ Function ConnectorName() Export
Return "OPI_SQLite";
EndFunction
Function GetFeatures() Export
Features = New Structure;
Features.Insert("ParameterNumeration", True);
Features.Insert("ParameterMarker" , "?");
Return Features;
EndFunction
#EndRegion
#Region Private

View File

@ -53,6 +53,7 @@ Function GetTestingSectionMapping() Export
Sections.Insert("VK" , 5);
Sections.Insert("Viber" , 5);
Sections.Insert("Twitter" , 4);
Sections.Insert("PostgreSQL" , 5);
Sections.Insert("SQLite" , 5);
Sections.Insert("YandexDisk" , 5);
Sections.Insert("GoogleWorkspace", 2);
@ -86,6 +87,7 @@ Function GetTestingSectionMappingGA() Export
Sections.Insert("VK" , StandardDependencies);
Sections.Insert("Viber" , StandardDependencies);
Sections.Insert("Twitter" , StandardDependencies);
Sections.Insert("PostgreSQL" , StandardDependencies);
Sections.Insert("SQLite" , StandardDependencies);
Sections.Insert("YandexDisk" , StandardDependencies);
Sections.Insert("GoogleWorkspace", StandardDependencies);
@ -133,6 +135,7 @@ Function GetTestTable() Export
S3_ = "S3";
TCP = "TCP";
SQLite = "SQLite";
Postgres = "PostgreSQL";
TestTable = New ValueTable;
TestTable.Columns.Add("Method");
@ -270,6 +273,7 @@ Function GetTestTable() Export
NewTest(TestTable, "TC_Client" , "TCP Client" , TCP);
NewTest(TestTable, "SQLL_CommonMethods" , "Common methods" , SQLite);
NewTest(TestTable, "SQLL_ORM" , "ORM" , SQLite);
NewTest(TestTable, "Postgres_ORM" , "ORM" , Postgres);
Return TestTable;
@ -2386,15 +2390,7 @@ Procedure WriteCLICall(Val Library, Val Method, Val Options)
EndIf;
CurrentOption = FormOption(Option.Value, Option.Key);
If Library = "bitrix24"
And Option.Key = "url" Then
CurrentOption = ?(StrFind(CurrentOption, "rest") > 0
, "https://b24-ar17wx.bitrix24.by/rest/1/***"
, CurrentOption);
EndIf;
ProcessSpecialOptionsSecrets(Library, Option.Key, CurrentOption);
OptionsArray.Add(CurrentOption);
@ -2427,4 +2423,26 @@ Procedure WriteCLICall(Val Library, Val Method, Val Options)
EndProcedure
Procedure ProcessSpecialOptionsSecrets(Val Library, Val Option, Value)
If Library = "bitrix24"
And Option = "url" Then
Value = ?(StrFind(Value, "rest") > 0
, "https://b24-ar17wx.bitrix24.by/rest/1/***"
, Value);
Return;
EndIf;
If Library = "postgres"
And Option = "conn" Then
Value = "postgresql://bayselonarrend:***@127.0.0.1:5432/";
EndIf;
EndProcedure
#EndRegion

View File

@ -2311,6 +2311,24 @@ EndProcedure
#EndRegion
#Region PostgreSQL
Procedure Postgres_ORM() Export
TestParameters = New Structure;
OPI_TestDataRetrieval.ParameterToCollection("PG_IP" , TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("PG_Password", TestParameters);
OPI_TestDataRetrieval.ParameterToCollection("Picture" , TestParameters);
PostgreSQL_CreateDatabase(TestParameters);
PostgreSQL_CreateTable(TestParameters);
PostgreSQL_AddRecords(TestParameters);
PostgreSQL_DropDatabase(TestParameters);
EndProcedure
#EndRegion
#EndRegion
#EndRegion
@ -17274,6 +17292,129 @@ EndProcedure
#EndRegion
#Region PostgreSQL
Procedure PostgreSQL_CreateDatabase(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
OPI_PostgreSQL.DropDatabase(Base, ConnectionString); // SKIP
Result = OPI_PostgreSQL.CreateDatabase(Base, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "CreateDatabase", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
Procedure PostgreSQL_DropDatabase(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "postgres";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Base = "testbase1";
Result = OPI_PostgreSQL.DropDatabase(Base, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "DropDatabase", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
Procedure PostgreSQL_CreateTable(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "testbase1";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Table = "testtable";
ColoumnsStruct = New Structure;
ColoumnsStruct.Insert("bool_field" , "BOOL");
ColoumnsStruct.Insert("char_field" , """char""");
ColoumnsStruct.Insert("smallint_field", "SMALLINT");
ColoumnsStruct.Insert("int_field" , "INT");
ColoumnsStruct.Insert("oid_field" , "OID");
ColoumnsStruct.Insert("bigint_field" , "BIGINT");
ColoumnsStruct.Insert("real_field" , "REAL");
ColoumnsStruct.Insert("dp_field" , "DOUBLE PRECISION");
ColoumnsStruct.Insert("text_field" , "TEXT");
ColoumnsStruct.Insert("bytea_field" , "BYTEA");
ColoumnsStruct.Insert("ts_field" , "TIMESTAMP");
ColoumnsStruct.Insert("ip_field" , "INET");
Result = OPI_PostgreSQL.CreateTable(Table, ColoumnsStruct, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "CreateTable", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
Procedure PostgreSQL_AddRecords(FunctionParameters)
Address = FunctionParameters["PG_IP"];
Login = "bayselonarrend";
Password = FunctionParameters["PG_Password"];
Base = "testbase1";
ConnectionString = OPI_PostgreSQL.GenerateConnectionString(Address, Base, Login, Password);
Table = "testtable";
Image = FunctionParameters["Picture"];
OPI_TypeConversion.GetBinaryData(Image); // Image - Type: BinaryData
Char = New Map;
Char.Insert("""char""", 1);
DP = New Map;
DP.Insert("DOUBLE PRECISION", 1.0000000000000002);
RecordStructure = New Structure;
RecordStructure.Insert("bool_field" , New Structure("BOOL" , True));
RecordStructure.Insert("char_field" , Char);
RecordStructure.Insert("smallint_field", New Structure("SMALLINT" , 5));
RecordStructure.Insert("int_field" , New Structure("INT" , 100));
RecordStructure.Insert("oid_field" , New Structure("OID" , 24576));
RecordStructure.Insert("bigint_field" , New Structure("BIGINT" , 9999999));
RecordStructure.Insert("real_field" , New Structure("REAL" , 15.2));
RecordStructure.Insert("dp_field" , DP);
RecordStructure.Insert("text_field" , New Structure("TEXT" , "Some text"));
RecordStructure.Insert("bytea_field" , New Structure("BYTEA" , Image));
RecordStructure.Insert("ts_field" , New Structure("TIMESTAMP", 1739207915));
RecordStructure.Insert("ip_field" , New Structure("INET" , "127.0.0.1"));
Result = OPI_PostgreSQL.AddRecords(Table, RecordStructure, False, ConnectionString);
// END
OPI_TestDataRetrieval.WriteLog(Result, "AddRecords", "PostgreSQL");
OPI_TestDataRetrieval.Check_ResultTrue(Result);
EndProcedure
#EndRegion
#EndRegion
#EndRegion

View File

@ -53,6 +53,7 @@
<commonModules>CommonModule.OPI_Neocities</commonModules>
<commonModules>CommonModule.OPI_Notion</commonModules>
<commonModules>CommonModule.OPI_Ozon</commonModules>
<commonModules>CommonModule.OPI_PostgreSQL</commonModules>
<commonModules>CommonModule.OPI_Slack</commonModules>
<commonModules>CommonModule.OPI_SQLite</commonModules>
<commonModules>CommonModule.OPI_S3</commonModules>

View File

@ -19,6 +19,7 @@
СоответствиеКомандМодулей.Вставить("neocities", "OPI_Neocities");
СоответствиеКомандМодулей.Вставить("notion", "OPI_Notion");
СоответствиеКомандМодулей.Вставить("ozon", "OPI_Ozon");
СоответствиеКомандМодулей.Вставить("sqlite", "OPI_PostgreSQL");
СоответствиеКомандМодулей.Вставить("s3", "OPI_S3");
СоответствиеКомандМодулей.Вставить("slack", "OPI_Slack");
СоответствиеКомандМодулей.Вставить("sqlite", "OPI_SQLite");

View File

@ -155,32 +155,32 @@
// Сформировать строку подключения
// Формирует строку подключения из переданных данных
//
//
// Параметры:
// Адрес - Строка - IP адрес или доменное имя сервера - addr
// База - Строка - Имя базы данных для подключения - db
// Логин - Строка - Логин пользователя postgres - login
// Пароль - Строка - Пароль пользователя postgres - pass
// Порт - Строка - Порт подключения - port
//
//
// Возвращаемое значение:
// Строка - Строка подключения к базе PostgreSQL
Функция СформироватьСтрокуПодключения(Знач Адрес, Знач База, Знач Логин, Знач Пароль = "", Знач Порт = "5432") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Порт);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
Порт = ?(ЗначениеЗаполнено(Порт), ":" + Порт, Порт);
Пароль = ?(ЗначениеЗаполнено(Пароль), ":" + Пароль, Пароль);
ШаблонСтроки = "postgresql://%1%2@%3%4/%5";
СтрокаПодключения = СтрШаблон(ШаблонСтроки, Логин, Пароль, Адрес, Порт, База);
Возврат СтрокаПодключения;
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Порт);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
Порт = ?(ЗначениеЗаполнено(Порт), ":" + Порт, Порт);
Пароль = ?(ЗначениеЗаполнено(Пароль), ":" + Пароль, Пароль);
ШаблонСтроки = "postgresql://%1%2@%3%4/%5";
СтрокаПодключения = СтрШаблон(ШаблонСтроки, Логин, Пароль, Адрес, Порт, База);
Возврат СтрокаПодключения;
КонецФункции
#КонецОбласти
@ -189,7 +189,7 @@
// Создать базу данных
// Создает базу данных с указанным именем
//
//
// Параметры:
// База - Строка - Имя базы - base
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
@ -197,15 +197,15 @@
// Возвращаемое значение:
// Структура Из КлючИЗначение, Строка - Результат выполнения запроса
Функция СоздатьБазуДанных(Знач База, Знач Соединение = "") Экспорт
Результат = OPI_ЗапросыSQL.СоздатьБазу(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
Результат = OPI_ЗапросыSQL.СоздатьБазуДанных(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
КонецФункции
// Удалить базу данных
// Удаляет базу данных
//
//
// Параметры:
// База - Строка - Имя базы - base
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
@ -213,10 +213,10 @@
// Возвращаемое значение:
// Структура Из КлючИЗначение, Строка - Результат выполнения запроса
Функция УдалитьБазуДанных(Знач База, Знач Соединение = "") Экспорт
Результат = OPI_ЗапросыSQL.УдалитьБазу(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
Результат = OPI_ЗапросыSQL.УдалитьБазуДанных(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
КонецФункции
// Создать таблицу
@ -383,13 +383,13 @@
КонецФункции
Функция ПолучитьОсобенности() Экспорт
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "$");
Возврат Особенности;
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "$");
Возврат Особенности;
КонецФункции
#КонецОбласти
@ -436,11 +436,11 @@
ТекущийПараметр = Формат(ТекущийПараметр, "ДФ='yyyy-MM-dd HH:MM:ss'");
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Структура") Или ТипЗнч(ТекущийПараметр) = Тип("Соответствие") Тогда
Продолжить;
Иначе
Продолжить;
Иначе
Если Не OPI_Инструменты.ЭтоПримитивныйТип(ТекущийПараметр) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущийПараметр);
КонецЕсли;
@ -460,21 +460,21 @@
Функция ОбработатьСтруктуруBlob(Знач Значение)
ЗначениеДанных = Значение["BYTEA"];
Если ТипЗнч(ЗначениеДанных) = Тип("ДвоичныеДанные") Тогда
Значение = Новый Структура("BYTEA", Base64Строка(ЗначениеДанных));
Иначе
ФайлДанных = Новый Файл(Строка(ЗначениеДанных));
Если ФайлДанных.Существует() Тогда
Если ТипЗнч(ЗначениеДанных) = Тип("ДвоичныеДанные") Тогда
Значение = Новый Структура("BYTEA", Base64Строка(ЗначениеДанных));
Иначе
ТекущиеДанные = Новый ДвоичныеДанные(Строка(ЗначениеДанных));
Значение = Новый Структура("BYTEA", Base64Строка(ТекущиеДанные));
ФайлДанных = Новый Файл(Строка(ЗначениеДанных));
КонецЕсли;
КонецЕсли;
Если ФайлДанных.Существует() Тогда
ТекущиеДанные = Новый ДвоичныеДанные(Строка(ЗначениеДанных));
Значение = Новый Структура("BYTEA", Base64Строка(ТекущиеДанные));
КонецЕсли;
КонецЕсли;
Возврат Значение;

View File

@ -343,13 +343,13 @@
КонецФункции
Функция ПолучитьОсобенности() Экспорт
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "?");
Возврат Особенности;
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "?");
Возврат Особенности;
КонецФункции
#КонецОбласти

View File

@ -2315,16 +2315,16 @@
Процедура Postgres_ORM() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_IP", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture", ПараметрыТеста);
PostgreSQL_СоздатьБазуДанных(ПараметрыТеста);
PostgreSQL_СоздатьТаблицу(ПараметрыТеста);
PostgreSQL_ДобавитьЗаписи(ПараметрыТеста);
PostgreSQL_УдалитьБазуДанных(ПараметрыТеста);
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_IP" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
PostgreSQL_СоздатьБазуДанных(ПараметрыТеста);
PostgreSQL_СоздатьТаблицу(ПараметрыТеста);
PostgreSQL_ДобавитьЗаписи(ПараметрыТеста);
PostgreSQL_УдалитьБазуДанных(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
@ -17295,124 +17295,124 @@
#Область PostgreSQL
Процедура PostgreSQL_СоздатьБазуДанных(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения); // SKIP
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных", "PostgreSQL");
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения); // SKIP
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
Процедура PostgreSQL_УдалитьБазуДанных(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьБазуДанных", "PostgreSQL");
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьБазуДанных", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
Процедура PostgreSQL_СоздатьТаблицу(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("bool_field", "BOOL");
СтруктураКолонок.Вставить("char_field", """char""");
СтруктураКолонок.Вставить("smallint_field", "SMALLINT");
СтруктураКолонок.Вставить("int_field", "INT");
СтруктураКолонок.Вставить("oid_field", "OID");
СтруктураКолонок.Вставить("bigint_field", "BIGINT");
СтруктураКолонок.Вставить("real_field", "REAL");
СтруктураКолонок.Вставить("dp_field", "DOUBLE PRECISION");
СтруктураКолонок.Вставить("text_field", "TEXT");
СтруктураКолонок.Вставить("bytea_field", "BYTEA");
СтруктураКолонок.Вставить("ts_field", "TIMESTAMP");
СтруктураКолонок.Вставить("ip_field", "INET");
Результат = OPI_PostgreSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "PostgreSQL");
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("bool_field" , "BOOL");
СтруктураКолонок.Вставить("char_field" , """char""");
СтруктураКолонок.Вставить("smallint_field", "SMALLINT");
СтруктураКолонок.Вставить("int_field" , "INT");
СтруктураКолонок.Вставить("oid_field" , "OID");
СтруктураКолонок.Вставить("bigint_field" , "BIGINT");
СтруктураКолонок.Вставить("real_field" , "REAL");
СтруктураКолонок.Вставить("dp_field" , "DOUBLE PRECISION");
СтруктураКолонок.Вставить("text_field" , "TEXT");
СтруктураКолонок.Вставить("bytea_field" , "BYTEA");
СтруктураКолонок.Вставить("ts_field" , "TIMESTAMP");
СтруктураКолонок.Вставить("ip_field" , "INET");
Результат = OPI_PostgreSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
Процедура PostgreSQL_ДобавитьЗаписи(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Картинка = ПараметрыФункции["Picture"];
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Картинка = ПараметрыФункции["Picture"];
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
Char = Новый Соответствие;
Char.Вставить("""char""", 1);
DP = Новый Соответствие;
DP.Вставить("DOUBLE PRECISION", 1.0000000000000002);
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL", Истина));
СтруктураЗаписи.Вставить("char_field" , Char);
СтруктураЗаписи.Вставить("smallint_field", Новый Структура("SMALLINT", 5));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT", 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID", 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT", 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL", 15.2));
СтруктураЗаписи.Вставить("dp_field" , DP);
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT", "Some text"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA", Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP", 1739207915));
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET", "127.0.0.1"));
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
Char = Новый Соответствие;
Char.Вставить("""char""", 1);
DP = Новый Соответствие;
DP.Вставить("DOUBLE PRECISION", 1.0000000000000002);
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL" , Истина));
СтруктураЗаписи.Вставить("char_field" , Char);
СтруктураЗаписи.Вставить("smallint_field", Новый Структура("SMALLINT" , 5));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT" , 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID" , 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT" , 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL" , 15.2));
СтруктураЗаписи.Вставить("dp_field" , DP);
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT" , "Some text"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA" , Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP", 1739207915));
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET" , "127.0.0.1"));
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -44,30 +44,30 @@
#Область СлужебныйПрограммныйИнтерфейс
Функция СоздатьБазу(Знач Модуль, Знач База, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("CREATEDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Функция СоздатьБазуДанных(Знач Модуль, Знач База, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("CREATEDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, , , Соединение);
Возврат Результат;
Возврат Результат;
КонецФункции
Функция УдалитьБазу(Знач Модуль, Знач База, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("DROPDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Функция УдалитьБазуДанных(Знач Модуль, Знач База, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("DROPDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, , , Соединение);
Возврат Результат;
Возврат Результат;
КонецФункции
Функция СоздатьТаблицу(Знач Модуль, Знач Таблица, Знач СтруктураКолонок, Знач Соединение = "") Экспорт
@ -266,15 +266,15 @@
ИначеЕсли Действие = "TRUNCATE" Тогда
Схема = ПустаяСхемаTruncate();
ИначеЕсли Действие = "CREATEDATABASE" Тогда
Схема = ПустаяСхемаCreateDatabase();
Схема = ПустаяСхемаCreateDatabase();
ИначеЕсли Действие = "DROPDATABASE" Тогда
Схема = ПустаяСхемаDropDatabase();
Схема = ПустаяСхемаDropDatabase();
Иначе
Схема = Новый Структура;
@ -303,14 +303,14 @@
Функция ПустаяСхемаInsert(Знач Особенности)
Схема = Новый Структура("type", "INSERT");
НумерацияПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["НумерацияПараметров"], Ложь);
МаркерПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["МаркерПараметров"] , "?");
НумерацияПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["НумерацияПараметров"], Ложь);
МаркерПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["МаркерПараметров"] , "?");
Схема.Вставить("table", "");
Схема.Вставить("set" , Новый Массив);
Схема.Вставить("nump" , НумерацияПараметров);
Схема.Вставить("markp", МаркерПараметров);
Схема.Вставить("nump" , НумерацияПараметров);
Схема.Вставить("markp", МаркерПараметров);
Возврат Схема;
@ -373,23 +373,23 @@
КонецФункции
Функция ПустаяСхемаCreateDatabase();
Схема = Новый Структура("type", "CREATEDATABASE");
Схема.Вставить("database" , "");
Возврат Схема;
Возврат Схема;
КонецФункции
Функция ПустаяСхемаDropDatabase();
Схема = Новый Структура("type", "DROPDATABASE");
Схема.Вставить("database" , "");
Возврат Схема;
Возврат Схема;
КонецФункции
#КонецОбласти
@ -436,14 +436,14 @@
ИначеЕсли ТипСхемы = "TRUNCATE" Тогда
ТекстЗапроса = СформироватьТекстTruncate(Схема);
ИначеЕсли ТипСхемы = "CREATEDATABASE" Тогда
ТекстЗапроса = СформироватьТекстCreateDatabase(Схема);
ТекстЗапроса = СформироватьТекстCreateDatabase(Схема);
ИначеЕсли ТипСхемы = "DROPDATABASE" Тогда
ТекстЗапроса = СформироватьТекстDropDatabase(Схема);
ТекстЗапроса = СформироватьТекстDropDatabase(Схема);
Иначе
ТекстЗапроса = "";
@ -479,25 +479,25 @@
ПроверитьОбязательныеПоляСхемы(Схема, "table,set");
Таблица = Схема["table"];
Поля = Схема["set"];
Нумерация = Схема["nump"];
Маркер = Схема["markp"];
Таблица = Схема["table"];
Поля = Схема["set"];
Нумерация = Схема["nump"];
Маркер = Схема["markp"];
ШаблонSQL = "INSERT INTO %1 (%2) VALUES (%3)";
Параметры = Новый Массив;
Для Н = 1 По Поля.Количество() Цикл
ТекущийМаркер = Маркер;
Если Нумерация Тогда
ТекущийМаркер = ТекущийМаркер + OPI_Инструменты.ЧислоВСтроку(Н);
КонецЕсли;
Для Н = 1 По Поля.Количество() Цикл
ТекущийМаркер = Маркер;
Если Нумерация Тогда
ТекущийМаркер = ТекущийМаркер + OPI_Инструменты.ЧислоВСтроку(Н);
КонецЕсли;
Параметры.Добавить(ТекущийМаркер);
КонецЦикла;
ТекстSQL = СтрШаблон(ШаблонSQL
@ -608,31 +608,31 @@
КонецФункции
Функция СформироватьТекстCreateDatabase(Знач Схема)
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "CREATE DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "CREATE DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
КонецФункции
Функция СформироватьТекстDropDatabase(Знач Схема)
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "DROP DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "DROP DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
КонецФункции
#КонецОбласти
@ -739,8 +739,8 @@
МассивПолей = Новый Массив;
МассивЗначений = Новый Массив;
Особенности = Модуль.ПолучитьОсобенности();
Особенности = Модуль.ПолучитьОсобенности();
Схема = ПустаяСхемаSQL("INSERT", Особенности);
УстановитьИмяТаблицы(Схема, Таблица);
@ -858,7 +858,7 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_Инструменты.ВернутьУправляющиеПоследовательности(База);
ИмяПоля = ПолучитьИмяОсновногоПоля(Коннектор);
ИмяПоля = ПолучитьИмяОсновногоПоля(Коннектор);
Коннектор = ПодключитьКомпонентуНаСервере(Коннектор);
Коннектор[ИмяПоля] = База;
@ -893,13 +893,13 @@
КонецФункции
Функция ПолучитьИмяОсновногоПоля(Знач Коннектор)
Если Коннектор = "OPI_SQLite" Тогда
Возврат "Database";
Иначе
Возврат "ConnectionString";
КонецЕсли;
Если Коннектор = "OPI_SQLite" Тогда
Возврат "Database";
Иначе
Возврат "ConnectionString";
КонецЕсли;
КонецФункции
Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений)
@ -1049,11 +1049,11 @@
КонецПроцедуры
Процедура УстановитьИмяБазы(Схема, Знач Имя)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
Схема.Вставить("database", Имя);
Схема.Вставить("database", Имя);
КонецПроцедуры
Процедура УстановитьЛимит(Схема, Знач Количество)

View File

@ -2148,9 +2148,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции
@ -2390,7 +2390,7 @@
КонецЕсли;
ТекущаяОпция = ОформитьОпцию(Опция.Значение, Опция.Ключ);
ОбработатьОсобенныеСекретыОпций(Библиотека, Опция.Ключ, ТекущаяОпция);
ОбработатьОсобенныеСекретыОпций(Библиотека, Опция.Ключ, ТекущаяОпция);
МассивОпций.Добавить(ТекущаяОпция);
@ -2424,25 +2424,25 @@
КонецПроцедуры
Процедура ОбработатьОсобенныеСекретыОпций(Знач Библиотека, Знач Опция, Значение)
Если Библиотека = "bitrix24"
И Опция = "url" Тогда
Значение = ?(СтрНайти(Значение, "rest") > 0
, "https://b24-ar17wx.bitrix24.by/rest/1/***"
, Значение);
Возврат;
Возврат;
КонецЕсли;
Если Библиотека = "postgres"
И Опция = "conn" Тогда
Значение = "postgresql://bayselonarrend:***@127.0.0.1:5432/";
И Опция = "conn" Тогда
Значение = "postgresql://bayselonarrend:***@127.0.0.1:5432/";
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_PostgreSQL.os
// OneScript: ./OInt/core/Modules/OPI_PostgreSQL.os
// Lib: SQLite
// CLI: sqlite
@ -155,32 +155,32 @@
// Сформировать строку подключения
// Формирует строку подключения из переданных данных
//
//
// Параметры:
// Адрес - Строка - IP адрес или доменное имя сервера - addr
// База - Строка - Имя базы данных для подключения - db
// Логин - Строка - Логин пользователя postgres - login
// Пароль - Строка - Пароль пользователя postgres - pass
// Порт - Строка - Порт подключения - port
//
//
// Возвращаемое значение:
// Строка - Строка подключения к базе PostgreSQL
Функция СформироватьСтрокуПодключения(Знач Адрес, Знач База, Знач Логин, Знач Пароль = "", Знач Порт = "5432") Экспорт
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Порт);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
Порт = ?(ЗначениеЗаполнено(Порт), ":" + Порт, Порт);
Пароль = ?(ЗначениеЗаполнено(Пароль), ":" + Пароль, Пароль);
ШаблонСтроки = "postgresql://%1%2@%3%4/%5";
СтрокаПодключения = СтрШаблон(ШаблонСтроки, Логин, Пароль, Адрес, Порт, База);
Возврат СтрокаПодключения;
OPI_ПреобразованиеТипов.ПолучитьСтроку(Адрес);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Логин);
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Порт);
OPI_ПреобразованиеТипов.ПолучитьСтроку(Пароль);
Порт = ?(ЗначениеЗаполнено(Порт), ":" + Порт, Порт);
Пароль = ?(ЗначениеЗаполнено(Пароль), ":" + Пароль, Пароль);
ШаблонСтроки = "postgresql://%1%2@%3%4/%5";
СтрокаПодключения = СтрШаблон(ШаблонСтроки, Логин, Пароль, Адрес, Порт, База);
Возврат СтрокаПодключения;
КонецФункции
#КонецОбласти
@ -189,7 +189,7 @@
// Создать базу данных
// Создает базу данных с указанным именем
//
//
// Параметры:
// База - Строка - Имя базы - base
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
@ -197,15 +197,15 @@
// Возвращаемое значение:
// Структура Из КлючИЗначение, Строка - Результат выполнения запроса
Функция СоздатьБазуДанных(Знач База, Знач Соединение = "") Экспорт
Результат = OPI_ЗапросыSQL.СоздатьБазуДанных(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
Результат = OPI_ЗапросыSQL.СоздатьБазуДанных(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
КонецФункции
// Удалить базу данных
// Удаляет базу данных
//
//
// Параметры:
// База - Строка - Имя базы - base
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
@ -213,10 +213,10 @@
// Возвращаемое значение:
// Структура Из КлючИЗначение, Строка - Результат выполнения запроса
Функция УдалитьБазуДанных(Знач База, Знач Соединение = "") Экспорт
Результат = OPI_ЗапросыSQL.УдалитьБазуДанных(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
Результат = OPI_ЗапросыSQL.УдалитьБазуДанных(OPI_PostgreSQL, База, Соединение);
Возврат Результат;
КонецФункции
// Создать таблицу
@ -383,13 +383,13 @@
КонецФункции
Функция ПолучитьОсобенности() Экспорт
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "$");
Возврат Особенности;
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "$");
Возврат Особенности;
КонецФункции
#КонецОбласти
@ -436,11 +436,11 @@
ТекущийПараметр = Формат(ТекущийПараметр, "ДФ='yyyy-MM-dd HH:MM:ss'");
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Структура") Или ТипЗнч(ТекущийПараметр) = Тип("Соответствие") Тогда
Продолжить;
Иначе
Продолжить;
Иначе
Если Не OPI_Инструменты.ЭтоПримитивныйТип(ТекущийПараметр) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущийПараметр);
КонецЕсли;
@ -460,21 +460,21 @@
Функция ОбработатьСтруктуруBlob(Знач Значение)
ЗначениеДанных = Значение["BYTEA"];
Если ТипЗнч(ЗначениеДанных) = Тип("ДвоичныеДанные") Тогда
Значение = Новый Структура("BYTEA", Base64Строка(ЗначениеДанных));
Иначе
ФайлДанных = Новый Файл(Строка(ЗначениеДанных));
Если ФайлДанных.Существует() Тогда
Если ТипЗнч(ЗначениеДанных) = Тип("ДвоичныеДанные") Тогда
Значение = Новый Структура("BYTEA", Base64Строка(ЗначениеДанных));
Иначе
ТекущиеДанные = Новый ДвоичныеДанные(Строка(ЗначениеДанных));
Значение = Новый Структура("BYTEA", Base64Строка(ТекущиеДанные));
ФайлДанных = Новый Файл(Строка(ЗначениеДанных));
КонецЕсли;
КонецЕсли;
Если ФайлДанных.Существует() Тогда
ТекущиеДанные = Новый ДвоичныеДанные(Строка(ЗначениеДанных));
Значение = Новый Структура("BYTEA", Base64Строка(ТекущиеДанные));
КонецЕсли;
КонецЕсли;
Возврат Значение;

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/core/Modules/OPI_SQLite.os
// OneScript: ./OInt/core/Modules/OPI_SQLite.os
// Lib: SQLite
// CLI: sqlite
@ -343,13 +343,13 @@
КонецФункции
Функция ПолучитьОсобенности() Экспорт
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "?");
Возврат Особенности;
Особенности = Новый Структура;
Особенности.Вставить("НумерацияПараметров", Истина);
Особенности.Вставить("МаркерПараметров" , "?");
Возврат Особенности;
КонецФункции
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
// MIT License
@ -45,29 +45,29 @@
#Область СлужебныйПрограммныйИнтерфейс
Функция СоздатьБазуДанных(Знач Модуль, Знач База, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("CREATEDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Схема = ПустаяСхемаSQL("CREATEDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, , , Соединение);
Возврат Результат;
Возврат Результат;
КонецФункции
Функция УдалитьБазуДанных(Знач Модуль, Знач База, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("DROPDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Схема = ПустаяСхемаSQL("DROPDATABASE");
УстановитьИмяБазы(Схема, База);
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, , , Соединение);
Возврат Результат;
Возврат Результат;
КонецФункции
Функция СоздатьТаблицу(Знач Модуль, Знач Таблица, Знач СтруктураКолонок, Знач Соединение = "") Экспорт
@ -266,15 +266,15 @@
ИначеЕсли Действие = "TRUNCATE" Тогда
Схема = ПустаяСхемаTruncate();
ИначеЕсли Действие = "CREATEDATABASE" Тогда
Схема = ПустаяСхемаCreateDatabase();
Схема = ПустаяСхемаCreateDatabase();
ИначеЕсли Действие = "DROPDATABASE" Тогда
Схема = ПустаяСхемаDropDatabase();
Схема = ПустаяСхемаDropDatabase();
Иначе
Схема = Новый Структура;
@ -303,14 +303,14 @@
Функция ПустаяСхемаInsert(Знач Особенности)
Схема = Новый Структура("type", "INSERT");
НумерацияПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["НумерацияПараметров"], Ложь);
МаркерПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["МаркерПараметров"] , "?");
НумерацияПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["НумерацияПараметров"], Ложь);
МаркерПараметров = ?(ЗначениеЗаполнено(Особенности), Особенности["МаркерПараметров"] , "?");
Схема.Вставить("table", "");
Схема.Вставить("set" , Новый Массив);
Схема.Вставить("nump" , НумерацияПараметров);
Схема.Вставить("markp", МаркерПараметров);
Схема.Вставить("nump" , НумерацияПараметров);
Схема.Вставить("markp", МаркерПараметров);
Возврат Схема;
@ -373,23 +373,23 @@
КонецФункции
Функция ПустаяСхемаCreateDatabase();
Схема = Новый Структура("type", "CREATEDATABASE");
Схема.Вставить("database" , "");
Возврат Схема;
Возврат Схема;
КонецФункции
Функция ПустаяСхемаDropDatabase();
Схема = Новый Структура("type", "DROPDATABASE");
Схема.Вставить("database" , "");
Возврат Схема;
Возврат Схема;
КонецФункции
#КонецОбласти
@ -436,14 +436,14 @@
ИначеЕсли ТипСхемы = "TRUNCATE" Тогда
ТекстЗапроса = СформироватьТекстTruncate(Схема);
ИначеЕсли ТипСхемы = "CREATEDATABASE" Тогда
ТекстЗапроса = СформироватьТекстCreateDatabase(Схема);
ТекстЗапроса = СформироватьТекстCreateDatabase(Схема);
ИначеЕсли ТипСхемы = "DROPDATABASE" Тогда
ТекстЗапроса = СформироватьТекстDropDatabase(Схема);
ТекстЗапроса = СформироватьТекстDropDatabase(Схема);
Иначе
ТекстЗапроса = "";
@ -479,25 +479,25 @@
ПроверитьОбязательныеПоляСхемы(Схема, "table,set");
Таблица = Схема["table"];
Поля = Схема["set"];
Нумерация = Схема["nump"];
Маркер = Схема["markp"];
Таблица = Схема["table"];
Поля = Схема["set"];
Нумерация = Схема["nump"];
Маркер = Схема["markp"];
ШаблонSQL = "INSERT INTO %1 (%2) VALUES (%3)";
Параметры = Новый Массив;
Для Н = 1 По Поля.Количество() Цикл
ТекущийМаркер = Маркер;
Если Нумерация Тогда
ТекущийМаркер = ТекущийМаркер + OPI_Инструменты.ЧислоВСтроку(Н);
КонецЕсли;
Для Н = 1 По Поля.Количество() Цикл
ТекущийМаркер = Маркер;
Если Нумерация Тогда
ТекущийМаркер = ТекущийМаркер + OPI_Инструменты.ЧислоВСтроку(Н);
КонецЕсли;
Параметры.Добавить(ТекущийМаркер);
КонецЦикла;
ТекстSQL = СтрШаблон(ШаблонSQL
@ -608,31 +608,31 @@
КонецФункции
Функция СформироватьТекстCreateDatabase(Знач Схема)
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "CREATE DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "CREATE DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
КонецФункции
Функция СформироватьТекстDropDatabase(Знач Схема)
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "DROP DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
ПроверитьОбязательныеПоляСхемы(Схема, "database");
База = Схема["database"];
ШаблонSQL = "DROP DATABASE %1";
ТекстSQL = СтрШаблон(ШаблонSQL, База);
Возврат ТекстSQL;
КонецФункции
#КонецОбласти
@ -739,8 +739,8 @@
МассивПолей = Новый Массив;
МассивЗначений = Новый Массив;
Особенности = Модуль.ПолучитьОсобенности();
Особенности = Модуль.ПолучитьОсобенности();
Схема = ПустаяСхемаSQL("INSERT", Особенности);
УстановитьИмяТаблицы(Схема, Таблица);
@ -858,7 +858,7 @@
OPI_ПреобразованиеТипов.ПолучитьСтроку(База);
OPI_Инструменты.ВернутьУправляющиеПоследовательности(База);
ИмяПоля = ПолучитьИмяОсновногоПоля(Коннектор);
ИмяПоля = ПолучитьИмяОсновногоПоля(Коннектор);
Коннектор = ПодключитьКомпонентуНаСервере(Коннектор);
Коннектор[ИмяПоля] = База;
@ -893,13 +893,13 @@
КонецФункции
Функция ПолучитьИмяОсновногоПоля(Знач Коннектор)
Если Коннектор = "OPI_SQLite" Тогда
Возврат "Database";
Иначе
Возврат "ConnectionString";
КонецЕсли;
Если Коннектор = "OPI_SQLite" Тогда
Возврат "Database";
Иначе
Возврат "ConnectionString";
КонецЕсли;
КонецФункции
Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений)
@ -1049,11 +1049,11 @@
КонецПроцедуры
Процедура УстановитьИмяБазы(Схема, Знач Имя)
OPI_ПреобразованиеТипов.ПолучитьСтроку(Имя);
Схема.Вставить("database", Имя);
Схема.Вставить("database", Имя);
КонецПроцедуры
Процедура УстановитьЛимит(Схема, Знач Количество)

View File

@ -2390,7 +2390,7 @@
КонецЕсли;
ТекущаяОпция = ОформитьОпцию(Опция.Значение, Опция.Ключ);
ОбработатьОсобенныеСекретыОпций(Библиотека, Опция.Ключ, ТекущаяОпция);
ОбработатьОсобенныеСекретыОпций(Библиотека, Опция.Ключ, ТекущаяОпция);
МассивОпций.Добавить(ТекущаяОпция);
@ -2424,25 +2424,25 @@
КонецПроцедуры
Процедура ОбработатьОсобенныеСекретыОпций(Знач Библиотека, Знач Опция, Значение)
Если Библиотека = "bitrix24"
И Опция = "url" Тогда
Значение = ?(СтрНайти(Значение, "rest") > 0
, "https://b24-ar17wx.bitrix24.by/rest/1/***"
, Значение);
Возврат;
Возврат;
КонецЕсли;
Если Библиотека = "postgres"
И Опция = "conn" Тогда
Значение = "postgresql://bayselonarrend:***@127.0.0.1:5432/";
И Опция = "conn" Тогда
Значение = "postgresql://bayselonarrend:***@127.0.0.1:5432/";
КонецЕсли;
КонецПроцедуры
#КонецОбласти

View File

@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@ -2315,16 +2315,16 @@
Процедура Postgres_ORM() Экспорт
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_IP", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture", ПараметрыТеста);
PostgreSQL_СоздатьБазуДанных(ПараметрыТеста);
PostgreSQL_СоздатьТаблицу(ПараметрыТеста);
PostgreSQL_ДобавитьЗаписи(ПараметрыТеста);
PostgreSQL_УдалитьБазуДанных(ПараметрыТеста);
ПараметрыТеста = Новый Структура;
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_IP" , ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
PostgreSQL_СоздатьБазуДанных(ПараметрыТеста);
PostgreSQL_СоздатьТаблицу(ПараметрыТеста);
PostgreSQL_ДобавитьЗаписи(ПараметрыТеста);
PostgreSQL_УдалитьБазуДанных(ПараметрыТеста);
КонецПроцедуры
#КонецОбласти
@ -17295,124 +17295,124 @@
#Область PostgreSQL
Процедура PostgreSQL_СоздатьБазуДанных(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения); // SKIP
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных", "PostgreSQL");
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения); // SKIP
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
Процедура PostgreSQL_УдалитьБазуДанных(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьБазуДанных", "PostgreSQL");
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "postgres";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
База = "testbase1";
Результат = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "УдалитьБазуДанных", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
Процедура PostgreSQL_СоздатьТаблицу(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("bool_field", "BOOL");
СтруктураКолонок.Вставить("char_field", """char""");
СтруктураКолонок.Вставить("smallint_field", "SMALLINT");
СтруктураКолонок.Вставить("int_field", "INT");
СтруктураКолонок.Вставить("oid_field", "OID");
СтруктураКолонок.Вставить("bigint_field", "BIGINT");
СтруктураКолонок.Вставить("real_field", "REAL");
СтруктураКолонок.Вставить("dp_field", "DOUBLE PRECISION");
СтруктураКолонок.Вставить("text_field", "TEXT");
СтруктураКолонок.Вставить("bytea_field", "BYTEA");
СтруктураКолонок.Вставить("ts_field", "TIMESTAMP");
СтруктураКолонок.Вставить("ip_field", "INET");
Результат = OPI_PostgreSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "PostgreSQL");
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
СтруктураКолонок = Новый Структура;
СтруктураКолонок.Вставить("bool_field" , "BOOL");
СтруктураКолонок.Вставить("char_field" , """char""");
СтруктураКолонок.Вставить("smallint_field", "SMALLINT");
СтруктураКолонок.Вставить("int_field" , "INT");
СтруктураКолонок.Вставить("oid_field" , "OID");
СтруктураКолонок.Вставить("bigint_field" , "BIGINT");
СтруктураКолонок.Вставить("real_field" , "REAL");
СтруктураКолонок.Вставить("dp_field" , "DOUBLE PRECISION");
СтруктураКолонок.Вставить("text_field" , "TEXT");
СтруктураКолонок.Вставить("bytea_field" , "BYTEA");
СтруктураКолонок.Вставить("ts_field" , "TIMESTAMP");
СтруктураКолонок.Вставить("ip_field" , "INET");
Результат = OPI_PostgreSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
Процедура PostgreSQL_ДобавитьЗаписи(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Картинка = ПараметрыФункции["Picture"];
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Картинка = ПараметрыФункции["Picture"];
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
Char = Новый Соответствие;
Char.Вставить("""char""", 1);
DP = Новый Соответствие;
DP.Вставить("DOUBLE PRECISION", 1.0000000000000002);
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL", Истина));
СтруктураЗаписи.Вставить("char_field" , Char);
СтруктураЗаписи.Вставить("smallint_field", Новый Структура("SMALLINT", 5));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT", 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID", 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT", 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL", 15.2));
СтруктураЗаписи.Вставить("dp_field" , DP);
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT", "Some text"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA", Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP", 1739207915));
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET", "127.0.0.1"));
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
Char = Новый Соответствие;
Char.Вставить("""char""", 1);
DP = Новый Соответствие;
DP.Вставить("DOUBLE PRECISION", 1.0000000000000002);
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL" , Истина));
СтруктураЗаписи.Вставить("char_field" , Char);
СтруктураЗаписи.Вставить("smallint_field", Новый Структура("SMALLINT" , 5));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT" , 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID" , 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT" , 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL" , 15.2));
СтруктураЗаписи.Вставить("dp_field" , DP);
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT" , "Some text"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA" , Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP", 1739207915));
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET" , "127.0.0.1"));
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@ -19,6 +19,7 @@
СоответствиеКомандМодулей.Вставить("neocities", "OPI_Neocities");
СоответствиеКомандМодулей.Вставить("notion", "OPI_Notion");
СоответствиеКомандМодулей.Вставить("ozon", "OPI_Ozon");
СоответствиеКомандМодулей.Вставить("sqlite", "OPI_PostgreSQL");
СоответствиеКомандМодулей.Вставить("s3", "OPI_S3");
СоответствиеКомандМодулей.Вставить("slack", "OPI_Slack");
СоответствиеКомандМодулей.Вставить("sqlite", "OPI_SQLite");