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
|
// Получает структуру шаблон для фильтрации записей в запросах ORM
|
||||||
//
|
//
|
||||||
@@ -530,29 +449,7 @@
|
|||||||
|
|
||||||
ТекущийПараметр = Параметры[Н];
|
ТекущийПараметр = Параметры[Н];
|
||||||
|
|
||||||
Если ТипЗнч(ТекущийПараметр) = Тип("ДвоичныеДанные") Тогда
|
ТекущийПараметр = ОбработатьПараметр(ТекущийПараметр);
|
||||||
|
|
||||||
ТекущийПараметр = Новый Структура("BYTEA", Base64Строка(ТекущийПараметр));
|
|
||||||
|
|
||||||
ИначеЕсли OPI_Инструменты.ПолеКоллекцииСуществует(ТекущийПараметр, "BYTEA") Тогда
|
|
||||||
|
|
||||||
ТекущийПараметр = ОбработатьСтруктуруBlob(ТекущийПараметр);
|
|
||||||
|
|
||||||
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Дата") Тогда
|
|
||||||
|
|
||||||
ТекущийПараметр = XMLСтрока(ТекущийПараметр);
|
|
||||||
|
|
||||||
ИначеЕсли ТипЗнч(ТекущийПараметр) = Тип("Структура") Или ТипЗнч(ТекущийПараметр) = Тип("Соответствие") Тогда
|
|
||||||
|
|
||||||
Продолжить;
|
|
||||||
|
|
||||||
Иначе
|
|
||||||
|
|
||||||
Если Не OPI_Инструменты.ЭтоПримитивныйТип(ТекущийПараметр) Тогда
|
|
||||||
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущийПараметр);
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
КонецЕсли;
|
|
||||||
|
|
||||||
Параметры[Н] = ТекущийПараметр;
|
Параметры[Н] = ТекущийПараметр;
|
||||||
|
|
||||||
@@ -560,10 +457,64 @@
|
|||||||
|
|
||||||
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры, , Ложь);
|
Параметры_ = OPI_Инструменты.JSONСтрокой(Параметры, , Ложь);
|
||||||
|
|
||||||
|
Если СтрНачинаетсяС(Параметры_, "НЕ JSON") Тогда
|
||||||
|
ВызватьИсключение "Ошибка валидации JSON массив параметров!";
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
Возврат Параметры_;
|
Возврат Параметры_;
|
||||||
|
|
||||||
КонецФункции
|
КонецФункции
|
||||||
|
|
||||||
|
Функция ОбработатьПараметр(ТекущийПараметр, Вложенный = Ложь)
|
||||||
|
|
||||||
|
ТекущийТип = ТипЗнч(ТекущийПараметр);
|
||||||
|
|
||||||
|
Если ТекущийТип = Тип("ДвоичныеДанные") Тогда
|
||||||
|
|
||||||
|
ТекущийПараметр = Новый Структура("BYTEA", Base64Строка(ТекущийПараметр));
|
||||||
|
|
||||||
|
ИначеЕсли ТекущийТип = Тип("УникальныйИдентификатор") Тогда
|
||||||
|
|
||||||
|
ТекущийПараметр = Строка(ТекущийПараметр);
|
||||||
|
|
||||||
|
ИначеЕсли ТекущийТип = Тип("Дата") Тогда
|
||||||
|
|
||||||
|
ТекущийПараметр = XMLСтрока(ТекущийПараметр);
|
||||||
|
|
||||||
|
ИначеЕсли OPI_Инструменты.ПолеКоллекцииСуществует(ТекущийПараметр, "BYTEA") Тогда
|
||||||
|
|
||||||
|
ТекущийПараметр = ОбработатьСтруктуруBlob(ТекущийПараметр);
|
||||||
|
|
||||||
|
ИначеЕсли ТекущийТип = Тип("Структура")
|
||||||
|
Или ТекущийТип = Тип("Соответствие") Тогда
|
||||||
|
|
||||||
|
Для Каждого ЭлементПараметра Из ТекущийПараметр Цикл
|
||||||
|
|
||||||
|
ТекущийКлюч = вРег(ЭлементПараметра.Ключ);
|
||||||
|
ТекущееЗначение = ЭлементПараметра.Значение;
|
||||||
|
|
||||||
|
Если ТекущийКлюч = "JSONB"
|
||||||
|
Или ТекущийКлюч = "JSON"
|
||||||
|
Или ТекущийКлюч = "HSTORE" Тогда
|
||||||
|
Продолжить;
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекущийПараметр[ЭлементПараметра.Ключ] = ОбработатьПараметр(ТекущееЗначение, Истина);
|
||||||
|
|
||||||
|
КонецЦикла;
|
||||||
|
|
||||||
|
Иначе
|
||||||
|
|
||||||
|
Если Не OPI_Инструменты.ЭтоПримитивныйТип(ТекущийПараметр) Тогда
|
||||||
|
OPI_ПреобразованиеТипов.ПолучитьСтроку(ТекущийПараметр);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
Возврат ТекущийПараметр;
|
||||||
|
|
||||||
|
КонецФункции
|
||||||
|
|
||||||
Функция ОбработатьСтруктуруBlob(Знач Значение)
|
Функция ОбработатьСтруктуруBlob(Знач Значение)
|
||||||
|
|
||||||
ЗначениеДанных = Значение["BYTEA"];
|
ЗначениеДанных = Значение["BYTEA"];
|
||||||
|
@@ -17414,7 +17414,8 @@
|
|||||||
|
|
||||||
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
|
СтрокаПодключения = OPI_PostgreSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
|
||||||
|
|
||||||
Таблица = "testtable";
|
Таблица = "testtable";
|
||||||
|
МассивЗаписей = Новый Массив;
|
||||||
|
|
||||||
Картинка = ПараметрыФункции["Picture"];
|
Картинка = ПараметрыФункции["Picture"];
|
||||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
|
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
|
||||||
@@ -17448,7 +17449,9 @@
|
|||||||
СтруктураЗаписи.Вставить("time_field" , Новый Структура("TIME" , ТекущаяДата));
|
СтруктураЗаписи.Вставить("time_field" , Новый Структура("TIME" , ТекущаяДата));
|
||||||
СтруктураЗаписи.Вставить("uuid_field" , Новый Структура("UUID" , Новый УникальныйИдентификатор()));
|
СтруктураЗаписи.Вставить("uuid_field" , Новый Структура("UUID" , Новый УникальныйИдентификатор()));
|
||||||
|
|
||||||
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, СтруктураЗаписи, Ложь, СтрокаПодключения);
|
МассивЗаписей.Добавить(СтруктураЗаписи);
|
||||||
|
|
||||||
|
Результат = OPI_PostgreSQL.ДобавитьЗаписи(Таблица, МассивЗаписей, Истина, СтрокаПодключения);
|
||||||
|
|
||||||
// END
|
// END
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user