1
0
mirror of https://github.com/Bayselonarrend/OpenIntegrations.git synced 2025-08-10 22:41:43 +02:00

Дополнение словаря

This commit is contained in:
Anton Titovets
2025-02-12 16:56:27 +03:00
parent eac3f63849
commit 78324f4271
5 changed files with 6647 additions and 6605 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -245,44 +245,6 @@
КонецФункции
// Получить типы колонок таблицы
// Получает массив типов колонок таблицы
//
// Параметры:
// Таблица - Строка - Имя таблицы - table
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
//
// Возвращаемое значение:
// Массив, Соответствие Из КлючИЗначение - Массив типов или информация об ошибке
Функция ПолучитьТипыКолонокТаблицы(Знач Таблица, Знач Соединение = "") Экспорт
ИнформацияОТаблице = ПолучитьИнформациюОТаблице(Таблица, Соединение);
Если Не ИнформацияОТаблице["result"] Тогда
Возврат ИнформацияОТаблице;
КонецЕсли;
МассивТипов = Новый Массив;
Для Каждого Колонка Из ИнформацияОТаблице Цикл
ТекущийТип = Колонка["data_type"];
ТекущийТип = Строка(вРег(ТекущийТип));
ТекущийТип = СтрЗаменить(ТекущийТип, " " , "_");
ТекущийТип = СтрЗаменить(ТекущийТип, """CHAR""", "OLDCHAR");
Если СтрНачинаетсяС(ТекущийТип, "CHAR") Тогда
ТекущийТип = "CHAR";
КонецЕсли;
МассивТипов.Добавить(ТекущийТип);
КонецЦикла;
Возврат МассивТипов;
КонецФункции
// Создать таблицу
// Создает пустую таблицу в базе
//
@@ -416,49 +378,6 @@
КонецФункции
// Нормализовать набор параметров
// Преобразует массив значений параметров в массив структур описаний для передачи в запрос
//
// Параметры:
// МассивЗначений - Массив Из Произвольный - Массив значений параметров запроса - values
// МассивТипов - Массив Из Строка - Массив типов колонок. См. ПолучитьТипыКолонокТаблицы - types
//
// Возвращаемое значение:
// Массив Из Соответствие - Нормализованный набор параметров для запроса
Функция НормализоватьНаборПараметров(Знач МассивЗначений, Знач МассивТипов) Экспорт
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивЗначений);
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивТипов);
СоответствиеТипов = ПолучитьСоответствиеТипов();
ИтоговыйМассив = Новый Массив;
ГраницаТипов = МассивТипов.ВГраница();
Для Н = 0 По МассивЗначений.ВГраница() Цикл
Если Н > ГраницаТипов Тогда
Прервать;
Конецесли;
ТекущийТип = вРег(МассивТипов[Н]);
ТекущееЗначение = МассивЗначений[Н];
ОписаниеТипа = СоответствиеТипов.Получить(ТекущийТип);
Если ОписаниеТипа <> Неопределено Тогда
ТекущееЗначение = ОписаниеТипа.ПривестиЗначение(ТекущееЗначение);
КонецЕсли;
ТекущееОписание = Новый Соответствие;
ТекущееОписание.Вставить(ТекущийТип, ТекущееЗначение);
ИтоговыйМассив.Добавить(ТекущееОписание);
КонецЦикла;
Возврат ИтоговыйМассив;
КонецФункции
// Получить структуру фильтра записей
// Получает структуру шаблон для фильтрации записей в запросах ORM
//
@@ -530,40 +449,72 @@
ТекущийПараметр = Параметры[Н];
Если ТипЗнч(ТекущийПараметр) = Тип("ДвоичныеДанные") Тогда
ТекущийПараметр = Новый Структура("BYTEA", Base64Строка(ТекущийПараметр));
ИначеЕсли OPI_Инструменты.ПолеКоллекцииСуществует(ТекущийПараметр, "BYTEA") Тогда
ТекущийПараметр = ОбработатьСтруктуруBlob(ТекущийПараметр);
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Дата") Тогда
ТекущийПараметр = Формат(ТекущийПараметр, "ДФ='yyyy-MM-dd HH:MM:ss'");
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Структура") Или ТипЗнч(ТекущийПараметр) = Тип("Соответствие") Тогда
Продолжить;
Иначе
Если Не OPI_Инструменты.ЭтоПримитивныйТип(ТекущийПараметр) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущийПараметр);
КонецЕсли;
КонецЕсли;
ТекущийПараметр = ОбработатьПараметр(ТекущийПараметр);
Параметры[Н] = ТекущийПараметр;
КонецЦикла;
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры, , Ложь);
Если СтрНачинаетсяС(Параметры_, "НЕ JSON") Тогда
ВызватьИсключение "Ошибка валидации JSON массив параметров!";
КонецЕсли;
Возврат Параметры_;
КонецФункции
Функция ОбработатьПараметр(ТекущийПараметр, Вложенный = Ложь)
ТекущийТип = ТипЗнч(ТекущийПараметр);
Если ТекущийТип = Тип("ДвоичныеДанные") Тогда
ТекущийПараметр = Новый Структура("BYTEA", Base64Строка(ТекущийПараметр));
ИначеЕсли ТекущийТип = Тип("УникальныйИдентификатор") Тогда
ТекущийПараметр = Строка(ТекущийПараметр);
ИначеЕсли ТекущийТип = Тип("Дата") Тогда
ТекущийПараметр = XMLСтрока(ТекущийПараметр);
ИначеЕсли OPI_Инструменты.ПолеКоллекцииСуществует(ТекущийПараметр, "BYTEA") Тогда
ТекущийПараметр = ОбработатьСтруктуруBlob(ТекущийПараметр);
ИначеЕсли ТекущийТип = Тип("Структура")
Или ТекущийТип = Тип("Соответствие") Тогда
Для Каждого ЭлементПараметра Из ТекущийПараметр Цикл
ТекущийКлюч = вРег(ЭлементПараметра.Ключ);
ТекущееЗначение = ЭлементПараметра.Значение;
Если ТекущийКлюч = "JSONB"
Или ТекущийКлюч = "JSON"
Или ТекущийКлюч = "HSTORE" Тогда
Продолжить;
КонецЕсли;
ТекущийПараметр[ЭлементПараметра.Ключ] = ОбработатьПараметр(ТекущееЗначение, Истина);
КонецЦикла;
Иначе
Если Не OPI_Инструменты.ЭтоПримитивныйТип(ТекущийПараметр) Тогда
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущийПараметр);
КонецЕсли;
КонецЕсли;
Возврат ТекущийПараметр;
КонецФункции
Функция ОбработатьСтруктуруBlob(Знач Значение)
ЗначениеДанных = Значение["BYTEA"];
@@ -622,6 +573,7 @@
СоответствиеТипов.Вставить("LQUERY" , ОписаниеString);
СоответствиеТипов.Вставить("LTXTQUERY" , ОписаниеString);
СоответствиеТипов.Вставить("INET" , ОписаниеString);
СоответствиеТипов.Вставить("UUID" , ОписаниеString);
Возврат СоответствиеТипов;

View File

@@ -2324,7 +2324,8 @@
PostgreSQL_СоздатьТаблицу(ПараметрыТеста);
PostgreSQL_ПолучитьИнформациюОТаблице(ПараметрыТеста);
PostgreSQL_ДобавитьЗаписи(ПараметрыТеста);
PostgreSQL_УдалитьБазуДанных(ПараметрыТеста);
PostgreSQL_ПолучитьЗаписи(ПараметрыТеста);
//PostgreSQL_УдалитьБазуДанных(ПараметрыТеста);
КонецПроцедуры
@@ -17306,8 +17307,9 @@
База = "testbase1";
OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения); // SKIP
Удаление = OPI_PostgreSQL.УдалитьБазуДанных(База, СтрокаПодключения); // SKIP
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Удаление, "СоздатьБазуДанных (удаление)", "PostgreSQL"); // SKIP
Результат = OPI_PostgreSQL.СоздатьБазуДанных(База, СтрокаПодключения);
// END
@@ -17349,18 +17351,30 @@
Таблица = "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");
СтруктураКолонок.Вставить("bool_field" , "BOOL");
СтруктураКолонок.Вставить("oldchar_field" , """char""");
СтруктураКолонок.Вставить("smallint_field" , "SMALLINT");
СтруктураКолонок.Вставить("smallserial_field", "SMALLSERIAL");
СтруктураКолонок.Вставить("int_field" , "INT");
СтруктураКолонок.Вставить("serial_field" , "SERIAL");
СтруктураКолонок.Вставить("oid_field" , "OID");
СтруктураКолонок.Вставить("bigint_field" , "BIGINT");
СтруктураКолонок.Вставить("bigserial_field" , "BIGSERIAL");
СтруктураКолонок.Вставить("real_field" , "REAL");
СтруктураКолонок.Вставить("dp_field" , "DOUBLE PRECISION");
СтруктураКолонок.Вставить("text_field" , "TEXT");
СтруктураКолонок.Вставить("varchar_field" , "VARCHAR");
СтруктураКолонок.Вставить("char_field" , "CHAR(1)");
СтруктураКолонок.Вставить("name_field" , "NAME");
СтруктураКолонок.Вставить("bytea_field" , "BYTEA");
СтруктураКолонок.Вставить("ts_field" , "TIMESTAMP");
СтруктураКолонок.Вставить("tswtz_field" , "TIMESTAMP WITH TIME ZONE");
СтруктураКолонок.Вставить("ip_field" , "INET");
СтруктураКолонок.Вставить("json_field" , "JSON");
СтруктураКолонок.Вставить("jsonb_field" , "JSONB");
СтруктураКолонок.Вставить("date_field" , "DATE");
СтруктураКолонок.Вставить("time_field" , "TIME");
СтруктураКолонок.Вставить("uuid_field" , "UUID");
Результат = OPI_PostgreSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения);
@@ -17400,26 +17414,44 @@
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Таблица = "testtable";
МассивЗаписей = Новый Массив;
Картинка = ПараметрыФункции["Picture"];
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
СлучайнаяСтруктура = Новый Структура("key,value", "ItsKey", 10);
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
СтруктураЗаписи = Новый Структура;
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL" , Истина));
СтруктураЗаписи.Вставить("char_field" , Новый Структура("OLDCHAR" , 1));
СтруктураЗаписи.Вставить("smallint_field", Новый Структура("SMALLINT" , 5));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT" , 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID" , 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT" , 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL" , 15.2));
СтруктураЗаписи.Вставить("dp_field" , Новый Структура("DOUBLE_PRECISION", 1.0000000000000002));
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT" , "Some text"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA" , Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP" , 1739207915));
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET" , "127.0.0.1"));
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
СтруктураЗаписи.Вставить("bool_field" , Новый Структура("BOOL" , Истина));
СтруктураЗаписи.Вставить("oldchar_field" , Новый Структура("OLDCHAR" , 1)); // или "char"
СтруктураЗаписи.Вставить("smallint_field" , Новый Структура("SMALLINT" , 5));
СтруктураЗаписи.Вставить("smallserial_field", Новый Структура("SMALLSERIAL" , 6));
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT" , 100));
СтруктураЗаписи.Вставить("serial_field" , Новый Структура("SERIAL" , 100));
СтруктураЗаписи.Вставить("oid_field" , Новый Структура("OID" , 24576));
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT" , 9999999));
СтруктураЗаписи.Вставить("bigserial_field" , Новый Структура("BIGSERIAL" , 9999999));
СтруктураЗаписи.Вставить("real_field" , Новый Структура("REAL" , 15.2));
СтруктураЗаписи.Вставить("dp_field" , Новый Структура("DOUBLE_PRECISION" , 1.0000000000000002)); // или DOUBLE PRECISION
СтруктураЗаписи.Вставить("text_field" , Новый Структура("TEXT" , "Some text"));
СтруктураЗаписи.Вставить("varchar_field" , Новый Структура("VARCHAR" , "Some varchar"));
СтруктураЗаписи.Вставить("char_field" , Новый Структура("CHAR" , "A"));
СтруктураЗаписи.Вставить("name_field" , Новый Структура("NAME" , "Vitaly"));
СтруктураЗаписи.Вставить("bytea_field" , Новый Структура("BYTEA" , Картинка));
СтруктураЗаписи.Вставить("ts_field" , Новый Структура("TIMESTAMP" , 1739207915));
СтруктураЗаписи.Вставить("tswtz_field" , Новый Структура("TIMESTAMP_WITH_TIME_ZONE", 1739207915)); // или TIMESTAMP WITH TIME ZONE
СтруктураЗаписи.Вставить("ip_field" , Новый Структура("INET" , "127.0.0.1"));
СтруктураЗаписи.Вставить("json_field" , Новый Структура("JSON" , СлучайнаяСтруктура));
СтруктураЗаписи.Вставить("jsonb_field" , Новый Структура("JSONB" , СлучайнаяСтруктура));
СтруктураЗаписи.Вставить("date_field" , Новый Структура("DATE" , ТекущаяДата));
СтруктураЗаписи.Вставить("time_field" , Новый Структура("TIME" , ТекущаяДата));
СтруктураЗаписи.Вставить("uuid_field" , Новый Структура("UUID" , Новый УникальныйИдентификатор()));
МассивЗаписей.Добавить(СтруктураЗаписи);
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, МассивЗаписей, Истина, СтрокаПодключения);
// END
@@ -17428,6 +17460,56 @@
КонецПроцедуры
Процедура PostgreSQL_ПолучитьЗаписи(ПараметрыФункции)
Адрес = ПараметрыФункции["PG_IP"];
Логин = "bayselonarrend";
Пароль = ПараметрыФункции["PG_Password"];
База = "testbase1";
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
Таблица = "testtable";
Поля = Новый Массив;
Поля.Добавить("bool_field");
Поля.Добавить("oldchar_field");
Поля.Добавить("smallint_field");
Поля.Добавить("smallserial_field");
Поля.Добавить("int_field");
Поля.Добавить("serial_field");
Поля.Добавить("oid_field");
Поля.Добавить("bigint_field");
Поля.Добавить("bigserial_field");
Поля.Добавить("real_field");
Поля.Добавить("dp_field");
Поля.Добавить("text_field");
Поля.Добавить("varchar_field");
Поля.Добавить("char_field");
Поля.Добавить("name_field");
Поля.Добавить("bytea_field");
Поля.Добавить("ts_field");
Поля.Добавить("tswtz_field");
Поля.Добавить("ip_field");
Поля.Добавить("json_field");
Поля.Добавить("jsonb_field");
Поля.Добавить("date_field");
Поля.Добавить("time_field");
Поля.Добавить("uuid_field");
Результат = OPI_PostgreSQL.ПолучитьЗаписи(Таблица, Поля, , , , СтрокаПодключения);
// END
Если ЗначениеЗаполнено(Результат["data"]) Тогда
Результат["data"][0]["bytea_field"]["BYTEA"] = Лев(Результат["data"][0]["bytea_field"]["BYTEA"], 10) + "...";
КонецЕсли;
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "PostgreSQL");
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@@ -2148,9 +2148,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@@ -458,7 +458,7 @@
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры, , Ложь);
Если СтрНачинаетсяС(Параметры_, "НЕ JSON") Тогда
ВызватьИсключение "Ошибка валидации JSON массив параметров!";
ВызватьИсключение "Ошибка валидации JSON массива параметров!";
КонецЕсли;
Возврат Параметры_;