You've already forked OpenIntegrations
							
							
				mirror of
				https://github.com/Bayselonarrend/OpenIntegrations.git
				synced 2025-10-30 23:47:46 +02:00 
			
		
		
		
	SQLite: Обновление записей
This commit is contained in:
		
							
								
								
									
										12219
									
								
								service/dictionaries/en.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										12219
									
								
								service/dictionaries/en.json
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										42
									
								
								src/ru/OInt/tests/Modules/internal/OPI_Тесты.os
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										42
									
								
								src/ru/OInt/tests/Modules/internal/OPI_Тесты.os
									
									
									
									
										vendored
									
									
								
							| @@ -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], СтруктураПолей); | ||||
|      | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -2083,6 +2083,14 @@ | ||||
|     ОжидаетЧто(Результат["rows"]).Равно(Количество); | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Проверка_SQLiteЗначенияПолей(Знач Результат, Знач СтруктураЗначений) Экспорт | ||||
|      | ||||
|     Для Каждого Значение Из СтруктураЗначений Цикл | ||||
|         Результат[Значение.Ключ] = Значение.Значение;     | ||||
|     КонецЦикла; | ||||
|      | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
| @@ -2119,9 +2127,9 @@ | ||||
| КонецФункции | ||||
|  | ||||
| Функция ПолучитьОбщийМодуль(Знач Имя) | ||||
|  | ||||
|      | ||||
|     Модуль = Вычислить(Имя); | ||||
|  | ||||
|      | ||||
|     Возврат Модуль; | ||||
| КонецФункции | ||||
|  | ||||
|   | ||||
							
								
								
									
										53
									
								
								src/ru/OInt/tools/Modules/os
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										53
									
								
								src/ru/OInt/tools/Modules/os
									
									
									
									
										vendored
									
									
								
							| @@ -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(Схема, Знач Поля, Знач Фильтры, Знач Сортировка, Знач Количество) | ||||
|  | ||||
|     УстановитьЛимит(Схема, Количество); | ||||
|  | ||||
|     ЗаполнитьПоля(Схема, Поля); | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|     ЗаполнитьСортировку(Схема, Сортировка); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -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> | ||||
|   | ||||
| @@ -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(Схема, Знач Поля, Знач Фильтры, Знач Сортировка, Знач Количество) | ||||
|  | ||||
|     УстановитьЛимит(Схема, Количество); | ||||
|  | ||||
|     ЗаполнитьПоля(Схема, Поля); | ||||
|     ЗаполнитьФильтры(Схема, Фильтры); | ||||
|     ЗаполнитьСортировку(Схема, Сортировка); | ||||
|  | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -2083,6 +2083,14 @@ | ||||
|     ОжидаетЧто(Результат["rows"]).Равно(Количество); | ||||
| КонецПроцедуры | ||||
|  | ||||
| Процедура Проверка_SQLiteЗначенияПолей(Знач Результат, Знач СтруктураЗначений) Экспорт | ||||
|      | ||||
|     Для Каждого Значение Из СтруктураЗначений Цикл | ||||
|         Результат[Значение.Ключ] = Значение.Значение;     | ||||
|     КонецЦикла; | ||||
|      | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
| @@ -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], СтруктураПолей); | ||||
|      | ||||
| КонецПроцедуры | ||||
|  | ||||
| #КонецОбласти | ||||
|  | ||||
| #КонецОбласти | ||||
|   | ||||
		Reference in New Issue
	
	Block a user