You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-08-10 22:41:43 +02:00
PG: Валидация параметров
This commit is contained in:
@@ -245,44 +245,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить типы колонок таблицы
|
||||
// Получает массив типов колонок таблицы
|
||||
//
|
||||
// Параметры:
|
||||
// Таблица - Строка - Имя таблицы - table
|
||||
// Соединение - Строка, Произвольный - Соединение или строка подключения - dbc
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив, Соответствие Из КлючИЗначение - Массив типов или информация об ошибке
|
||||
Функция ПолучитьТипыКолонокТаблицы(Знач Таблица, Знач Соединение = "") Экспорт
|
||||
|
||||
ИнформацияОТаблице = ПолучитьИнформациюОТаблице(Таблица, Соединение);
|
||||
|
||||
Если Не ИнформацияОТаблице["result"] Тогда
|
||||
Возврат ИнформацияОТаблице;
|
||||
КонецЕсли;
|
||||
|
||||
МассивТипов = Новый Массив;
|
||||
|
||||
Для Каждого Колонка Из ИнформацияОТаблице Цикл
|
||||
|
||||
ТекущийТип = Колонка["data_type"];
|
||||
ТекущийТип = Строка(вРег(ТекущийТип));
|
||||
ТекущийТип = СтрЗаменить(ТекущийТип, " " , "_");
|
||||
ТекущийТип = СтрЗаменить(ТекущийТип, """CHAR""", "OLDCHAR");
|
||||
|
||||
Если СтрНачинаетсяС(ТекущийТип, "CHAR") Тогда
|
||||
ТекущийТип = "CHAR";
|
||||
КонецЕсли;
|
||||
|
||||
МассивТипов.Добавить(ТекущийТип);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат МассивТипов;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Создать таблицу
|
||||
// Создает пустую таблицу в базе
|
||||
//
|
||||
@@ -416,49 +378,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Нормализовать набор параметров
|
||||
// Преобразует массив значений параметров в массив структур описаний для передачи в запрос
|
||||
//
|
||||
// Параметры:
|
||||
// МассивЗначений - Массив Из Произвольный - Массив значений параметров запроса - values
|
||||
// МассивТипов - Массив Из Строка - Массив типов колонок. См. ПолучитьТипыКолонокТаблицы - types
|
||||
//
|
||||
// Возвращаемое значение:
|
||||
// Массив Из Соответствие - Нормализованный набор параметров для запроса
|
||||
Функция НормализоватьНаборПараметров(Знач МассивЗначений, Знач МассивТипов) Экспорт
|
||||
|
||||
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивЗначений);
|
||||
OPI_ПреобразованиеТипов.ПолучитьМассив(МассивТипов);
|
||||
|
||||
СоответствиеТипов = ПолучитьСоответствиеТипов();
|
||||
ИтоговыйМассив = Новый Массив;
|
||||
ГраницаТипов = МассивТипов.ВГраница();
|
||||
|
||||
Для Н = 0 По МассивЗначений.ВГраница() Цикл
|
||||
|
||||
Если Н > ГраницаТипов Тогда
|
||||
Прервать;
|
||||
Конецесли;
|
||||
|
||||
ТекущийТип = вРег(МассивТипов[Н]);
|
||||
ТекущееЗначение = МассивЗначений[Н];
|
||||
ОписаниеТипа = СоответствиеТипов.Получить(ТекущийТип);
|
||||
|
||||
Если ОписаниеТипа <> Неопределено Тогда
|
||||
ТекущееЗначение = ОписаниеТипа.ПривестиЗначение(ТекущееЗначение);
|
||||
КонецЕсли;
|
||||
|
||||
ТекущееОписание = Новый Соответствие;
|
||||
ТекущееОписание.Вставить(ТекущийТип, ТекущееЗначение);
|
||||
|
||||
ИтоговыйМассив.Добавить(ТекущееОписание);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Возврат ИтоговыйМассив;
|
||||
|
||||
КонецФункции
|
||||
|
||||
// Получить структуру фильтра записей
|
||||
// Получает структуру шаблон для фильтрации записей в запросах ORM
|
||||
//
|
||||
@@ -530,21 +449,59 @@
|
||||
|
||||
ТекущийПараметр = Параметры[Н];
|
||||
|
||||
Если ТипЗнч(ТекущийПараметр) = Тип("ДвоичныеДанные") Тогда
|
||||
ТекущийПараметр = ОбработатьПараметр(ТекущийПараметр);
|
||||
|
||||
Параметры[Н] = ТекущийПараметр;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры, , Ложь);
|
||||
|
||||
Если СтрНачинаетсяС(Параметры_, "НЕ JSON") Тогда
|
||||
ВызватьИсключение "Ошибка валидации JSON массив параметров!";
|
||||
КонецЕсли;
|
||||
|
||||
Возврат Параметры_;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция ОбработатьПараметр(ТекущийПараметр, Вложенный = Ложь)
|
||||
|
||||
ТекущийТип = ТипЗнч(ТекущийПараметр);
|
||||
|
||||
Если ТекущийТип = Тип("ДвоичныеДанные") Тогда
|
||||
|
||||
ТекущийПараметр = Новый Структура("BYTEA", Base64Строка(ТекущийПараметр));
|
||||
|
||||
ИначеЕсли ТекущийТип = Тип("УникальныйИдентификатор") Тогда
|
||||
|
||||
ТекущийПараметр = Строка(ТекущийПараметр);
|
||||
|
||||
ИначеЕсли ТекущийТип = Тип("Дата") Тогда
|
||||
|
||||
ТекущийПараметр = XMLСтрока(ТекущийПараметр);
|
||||
|
||||
ИначеЕсли OPI_Инструменты.ПолеКоллекцииСуществует(ТекущийПараметр, "BYTEA") Тогда
|
||||
|
||||
ТекущийПараметр = ОбработатьСтруктуруBlob(ТекущийПараметр);
|
||||
|
||||
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Дата") Тогда
|
||||
ИначеЕсли ТекущийТип = Тип("Структура")
|
||||
Или ТекущийТип = Тип("Соответствие") Тогда
|
||||
|
||||
ТекущийПараметр = XMLСтрока(ТекущийПараметр);
|
||||
Для Каждого ЭлементПараметра Из ТекущийПараметр Цикл
|
||||
|
||||
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Структура") Или ТипЗнч(ТекущийПараметр) = Тип("Соответствие") Тогда
|
||||
ТекущийКлюч = вРег(ЭлементПараметра.Ключ);
|
||||
ТекущееЗначение = ЭлементПараметра.Значение;
|
||||
|
||||
Если ТекущийКлюч = "JSONB"
|
||||
Или ТекущийКлюч = "JSON"
|
||||
Или ТекущийКлюч = "HSTORE" Тогда
|
||||
Продолжить;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийПараметр[ЭлементПараметра.Ключ] = ОбработатьПараметр(ТекущееЗначение, Истина);
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Иначе
|
||||
|
||||
@@ -554,13 +511,7 @@
|
||||
|
||||
КонецЕсли;
|
||||
|
||||
Параметры[Н] = ТекущийПараметр;
|
||||
|
||||
КонецЦикла;
|
||||
|
||||
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры, , Ложь);
|
||||
|
||||
Возврат Параметры_;
|
||||
Возврат ТекущийПараметр;
|
||||
|
||||
КонецФункции
|
||||
|
||||
|
@@ -17415,6 +17415,7 @@
|
||||
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
|
||||
|
||||
Таблица = "testtable";
|
||||
МассивЗаписей = Новый Массив;
|
||||
|
||||
Картинка = ПараметрыФункции["Picture"];
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
|
||||
@@ -17448,7 +17449,9 @@
|
||||
СтруктураЗаписи.Вставить("time_field" , Новый Структура("TIME" , ТекущаяДата));
|
||||
СтруктураЗаписи.Вставить("uuid_field" , Новый Структура("UUID" , Новый УникальныйИдентификатор()));
|
||||
|
||||
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
|
||||
МассивЗаписей.Добавить(СтруктураЗаписи);
|
||||
|
||||
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, МассивЗаписей, Истина, СтрокаПодключения);
|
||||
|
||||
// END
|
||||
|
||||
|
Reference in New Issue
Block a user