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

SQLite: Обновление записей

This commit is contained in:
Anton Titovets
2025-01-04 00:49:17 +03:00
parent c3c5939f64
commit 4f6d5c8e17
8 changed files with 6293 additions and 6140 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -2238,6 +2238,7 @@
SQLite_СоздатьТаблицу(ПараметрыТеста);
SQLite_ДобавитьЗаписи(ПараметрыТеста);
SQLite_ПолучитьЗаписи(ПараметрыТеста);
SQLite_ОбновитьЗаписи(ПараметрыТеста);
Попытка
УдалитьФайлы(База);
@@ -16402,6 +16403,47 @@
КонецПроцедуры
Процедура SQLite_ОбновитьЗаписи(ПараметрыФункции)
База = ПараметрыФункции["SQLite_DB"];
Таблица = "test";
СтруктураПолей = Новый Структура;
СтруктураПолей.Вставить("name" , "Vitaly A.");
СтруктураПолей.Вставить("salary", "999999");
Фильтры = Новый Массив;
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "name");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", "Vitaly");
СтруктураФильтра.Вставить("union", "AND");
СтруктураФильтра.Вставить("raw" , Ложь);
Фильтры.Добавить(СтруктураФильтра);
Результат = OPI_SQLite.ОбновитьЗаписи(Таблица, СтруктураПолей, СтруктураФильтра, База);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОбновитьЗаписи", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
СтруктураФильтра.Вставить("value", "Vitaly A.");
Фильтры = Новый Массив;
Фильтры.Добавить(СтруктураФильтра);
Проверка = OPI_SQLite.ПолучитьЗаписи(Таблица, "['name','salary']", Фильтры, , , База);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Проверка, "Проверка", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Проверка);
OPI_ПолучениеДанныхТестов.Проверка_SQLiteЗначенияПолей(Проверка["data"][0], СтруктураПолей);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@@ -2083,6 +2083,14 @@
ОжидаетЧто(Результат["rows"]).Равно(Количество);
КонецПроцедуры
Процедура Проверка_SQLiteЗначенияПолей(Знач Результат, Знач СтруктураЗначений) Экспорт
Для Каждого Значение Из СтруктураЗначений Цикл
Результат[Значение.Ключ] = Значение.Значение;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти
@@ -2119,9 +2127,9 @@
КонецФункции
Функция ПолучитьОбщийМодуль(Знач Имя)
Модуль = Вычислить(Имя);
Возврат Модуль;
КонецФункции

View File

@@ -160,7 +160,11 @@
Схема = ПустаяСхемаSQL("SELECT");
УстановитьИмяТаблицы(Схема, Таблица);
УстановитьНастройкиSelect(Схема, Поля, Фильтры, Сортировка, Количество);
УстановитьЛимит(Схема, Количество);
ЗаполнитьПоля(Схема, Поля);
ЗаполнитьФильтры(Схема, Фильтры);
ЗаполнитьСортировку(Схема, Сортировка);
Запрос = СформироватьТекстSQL(Схема);
@@ -172,13 +176,25 @@
Функция ОбновитьЗаписи(Знач Модуль
, Знач Таблица
, Знач МассивЗначений
, Знач СтруктураЗначений
, Знач Фильтры = ""
, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("UPDATE");
МассивПолей = Новый Массив;
МассивЗначений = Новый Массив;
УстановитьИмяТаблицы(Схема, Таблица);
УстановитьИмяТаблицы(Схема, Таблица);
РазделитьКоллекциюДанных(СтруктураЗначений, МассивПолей, МассивЗначений);
Схема["values"] = МассивЗначений;
Для Каждого Поле Из МассивПолей Цикл
ДобавитьПоле(Схема, Поле);
КонецЦикла;
ЗаполнитьФильтры(Схема, Фильтры);
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение);
@@ -324,7 +340,23 @@
Функция СформироватьТекстUpdate(Знач Схема)
ТекстSQL = "";
ПроверитьОбязательныеПоляСхемы(Схема, "table,set,values");
Таблица = Схема["table"];
Поля = Схема["set"];
Фильтры = Схема["filter"];
ШаблонSQL = "UPDATE %1 SET %2 %3";
ТекстФильтра = СформироватьТекстФильтра(Фильтры);
Для Н = 0 По Поля.ВГраница() Цикл
Поля[Н] = Поля[Н] + " = ?" + OPI_Инструменты.ЧислоВСтроку(Н + 1);
КонецЦикла;
ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, СтрСоединить(Поля, "," + Символы.ПС), ТекстФильтра);
Возврат ТекстSQL;
@@ -565,6 +597,9 @@
Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений)
ТекстОшибки = "Некорректный набор данных для обновления";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ТекстОшибки);
Для Каждого Элемент Из Запись Цикл
МассивПолей.Добавить(Элемент.Ключ);
@@ -715,16 +750,6 @@
КонецПроцедуры
Процедура УстановитьНастройкиSelect(Схема, Знач Поля, Знач Фильтры, Знач Сортировка, Знач Количество)
УстановитьЛимит(Схема, Количество);
ЗаполнитьПоля(Схема, Поля);
ЗаполнитьФильтры(Схема, Фильтры);
ЗаполнитьСортировку(Схема, Сортировка);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@@ -3,7 +3,7 @@
<name>OPI_TCP</name>
<synonym>
<key>ru</key>
<value>TCP</value>
<value>TCP (ОПИ)</value>
</synonym>
<server>true</server>
<externalConnection>true</externalConnection>

View File

@@ -160,7 +160,11 @@
Схема = ПустаяСхемаSQL("SELECT");
УстановитьИмяТаблицы(Схема, Таблица);
УстановитьНастройкиSelect(Схема, Поля, Фильтры, Сортировка, Количество);
УстановитьЛимит(Схема, Количество);
ЗаполнитьПоля(Схема, Поля);
ЗаполнитьФильтры(Схема, Фильтры);
ЗаполнитьСортировку(Схема, Сортировка);
Запрос = СформироватьТекстSQL(Схема);
@@ -172,13 +176,25 @@
Функция ОбновитьЗаписи(Знач Модуль
, Знач Таблица
, Знач МассивЗначений
, Знач СтруктураЗначений
, Знач Фильтры = ""
, Знач Соединение = "") Экспорт
Схема = ПустаяСхемаSQL("UPDATE");
МассивПолей = Новый Массив;
МассивЗначений = Новый Массив;
УстановитьИмяТаблицы(Схема, Таблица);
УстановитьИмяТаблицы(Схема, Таблица);
РазделитьКоллекциюДанных(СтруктураЗначений, МассивПолей, МассивЗначений);
Схема["values"] = МассивЗначений;
Для Каждого Поле Из МассивПолей Цикл
ДобавитьПоле(Схема, Поле);
КонецЦикла;
ЗаполнитьФильтры(Схема, Фильтры);
Запрос = СформироватьТекстSQL(Схема);
Результат = Модуль.ВыполнитьЗапросSQL(Запрос, Схема["values"], , Соединение);
@@ -324,7 +340,23 @@
Функция СформироватьТекстUpdate(Знач Схема)
ТекстSQL = "";
ПроверитьОбязательныеПоляСхемы(Схема, "table,set,values");
Таблица = Схема["table"];
Поля = Схема["set"];
Фильтры = Схема["filter"];
ШаблонSQL = "UPDATE %1 SET %2 %3";
ТекстФильтра = СформироватьТекстФильтра(Фильтры);
Для Н = 0 По Поля.ВГраница() Цикл
Поля[Н] = Поля[Н] + " = ?" + OPI_Инструменты.ЧислоВСтроку(Н + 1);
КонецЦикла;
ТекстSQL = СтрШаблон(ШаблонSQL, Таблица, СтрСоединить(Поля, "," + Символы.ПС), ТекстФильтра);
Возврат ТекстSQL;
@@ -565,6 +597,9 @@
Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений)
ТекстОшибки = "Некорректный набор данных для обновления";
OPI_ПреобразованиеТипов.ПолучитьКоллекциюКлючИЗначение(Запись, ТекстОшибки);
Для Каждого Элемент Из Запись Цикл
МассивПолей.Добавить(Элемент.Ключ);
@@ -715,16 +750,6 @@
КонецПроцедуры
Процедура УстановитьНастройкиSelect(Схема, Знач Поля, Знач Фильтры, Знач Сортировка, Знач Количество)
УстановитьЛимит(Схема, Количество);
ЗаполнитьПоля(Схема, Поля);
ЗаполнитьФильтры(Схема, Фильтры);
ЗаполнитьСортировку(Схема, Сортировка);
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@@ -2083,6 +2083,14 @@
ОжидаетЧто(Результат["rows"]).Равно(Количество);
КонецПроцедуры
Процедура Проверка_SQLiteЗначенияПолей(Знач Результат, Знач СтруктураЗначений) Экспорт
Для Каждого Значение Из СтруктураЗначений Цикл
Результат[Значение.Ключ] = Значение.Значение;
КонецЦикла;
КонецПроцедуры
#КонецОбласти
#КонецОбласти

View File

@@ -1,4 +1,4 @@
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
// MIT License
@@ -2238,6 +2238,7 @@
SQLite_СоздатьТаблицу(ПараметрыТеста);
SQLite_ДобавитьЗаписи(ПараметрыТеста);
SQLite_ПолучитьЗаписи(ПараметрыТеста);
SQLite_ОбновитьЗаписи(ПараметрыТеста);
Попытка
УдалитьФайлы(База);
@@ -16402,6 +16403,47 @@
КонецПроцедуры
Процедура SQLite_ОбновитьЗаписи(ПараметрыФункции)
База = ПараметрыФункции["SQLite_DB"];
Таблица = "test";
СтруктураПолей = Новый Структура;
СтруктураПолей.Вставить("name" , "Vitaly A.");
СтруктураПолей.Вставить("salary", "999999");
Фильтры = Новый Массив;
СтруктураФильтра = Новый Структура;
СтруктураФильтра.Вставить("field", "name");
СтруктураФильтра.Вставить("type" , "=");
СтруктураФильтра.Вставить("value", "Vitaly");
СтруктураФильтра.Вставить("union", "AND");
СтруктураФильтра.Вставить("raw" , Ложь);
Фильтры.Добавить(СтруктураФильтра);
Результат = OPI_SQLite.ОбновитьЗаписи(Таблица, СтруктураПолей, СтруктураФильтра, База);
// END
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ОбновитьЗаписи", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Результат);
СтруктураФильтра.Вставить("value", "Vitaly A.");
Фильтры = Новый Массив;
Фильтры.Добавить(СтруктураФильтра);
Проверка = OPI_SQLite.ПолучитьЗаписи(Таблица, "['name','salary']", Фильтры, , , База);
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Проверка, "Проверка", "SQLite");
OPI_ПолучениеДанныхТестов.Проверка_SQLiteУспех(Проверка);
OPI_ПолучениеДанныхТестов.Проверка_SQLiteЗначенияПолей(Проверка["data"][0], СтруктураПолей);
КонецПроцедуры
#КонецОбласти
#КонецОбласти