You've already forked OpenIntegrations
mirror of
https://github.com/Bayselonarrend/OpenIntegrations.git
synced 2025-07-15 01:34:30 +02:00
MSSQL: Доработка компоненты, дополнение тестов
This commit is contained in:
@ -1,13 +1,13 @@
|
||||
"MAIN ---"
|
||||
linux-vdso.so.1 (0x00007ffd92bc9000)
|
||||
libssl.so.3 => /lib64/libssl.so.3 (0x00007741c0c00000)
|
||||
libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007741c0400000)
|
||||
libm.so.6 => /lib64/libm.so.6 (0x00007741c0000000)
|
||||
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007741bfc00000)
|
||||
libc.so.6 => /lib64/libc.so.6 (0x00007741bf800000)
|
||||
libdl.so.2 => /lib64/libdl.so.2 (0x00007741bf400000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007741c1200000)
|
||||
libz.so.1 => /lib64/libz.so.1 (0x00007741bf000000)
|
||||
linux-vdso.so.1 (0x00007ffdc9db0000)
|
||||
libssl.so.3 => /lib64/libssl.so.3 (0x00007a6a61c00000)
|
||||
libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007a6a61400000)
|
||||
libm.so.6 => /lib64/libm.so.6 (0x00007a6a61000000)
|
||||
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007a6a60c00000)
|
||||
libc.so.6 => /lib64/libc.so.6 (0x00007a6a60800000)
|
||||
libdl.so.2 => /lib64/libdl.so.2 (0x00007a6a60400000)
|
||||
/lib64/ld-linux-x86-64.so.2 (0x00007a6a62200000)
|
||||
libz.so.1 => /lib64/libz.so.1 (0x00007a6a60000000)
|
||||
GLIBC_2.2.5
|
||||
GLIBC_2.12
|
||||
GLIBC_2.3
|
||||
|
@ -169,8 +169,11 @@ impl MSSQLBackend {
|
||||
None => return Self::format_json_error("Parameters must be a JSON array"),
|
||||
};
|
||||
|
||||
if query.trim_start().to_uppercase().starts_with("SELECT") || force_result {
|
||||
match client.simple_query(query).await {
|
||||
let normalized_query = query.trim_start().to_uppercase();
|
||||
let params_refs: Vec<&dyn ToSql> = params_array.iter().map(|b| b.as_ref()).collect();
|
||||
|
||||
if normalized_query.starts_with("SELECT") || force_result {
|
||||
match client.query(query, ¶ms_refs).await {
|
||||
Ok(stream) => {
|
||||
let rows = match stream.into_results().await {
|
||||
Ok(rows) => rows.into_iter().flatten().collect(),
|
||||
@ -180,8 +183,18 @@ impl MSSQLBackend {
|
||||
},
|
||||
Err(e) => Self::format_json_error(&e.to_string()),
|
||||
}
|
||||
} else if normalized_query == "BEGIN TRAN"
|
||||
|| normalized_query == "COMMIT;"
|
||||
|| normalized_query == "ROLLBACK;"
|
||||
|| normalized_query == "BEGIN TRANSACTION"{
|
||||
|
||||
match client.simple_query(query).await {
|
||||
Ok(_) => json!({"result": true}).to_string(),
|
||||
Err(e) => Self::format_json_error(&e.to_string()),
|
||||
}
|
||||
|
||||
} else {
|
||||
let params_refs: Vec<&dyn ToSql> = params_array.iter().map(|b| b.as_ref()).collect();
|
||||
|
||||
match client.execute(query, ¶ms_refs).await {
|
||||
Ok(_) => json!({"result": true}).to_string(),
|
||||
Err(e) => Self::format_json_error(&e.to_string()),
|
||||
@ -215,43 +228,30 @@ impl MSSQLBackend {
|
||||
fn from_sql_to_json(row: &Row, index: usize, column: &Column) -> Value {
|
||||
match column.column_type() {
|
||||
ColumnType::Null => Value::Null,
|
||||
ColumnType::Bit => {
|
||||
row.try_get::<bool, _>(index)
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(Value::Bool)
|
||||
.unwrap_or(Value::Null)
|
||||
ColumnType::Bit | ColumnType::Bitn => {
|
||||
match try_get_any_bit(row, index){
|
||||
Some(i) => Value::Number(i.into()),
|
||||
None => Value::Null,
|
||||
}
|
||||
},
|
||||
ColumnType::Bitn => {
|
||||
row.try_get::<u8, _>(index)
|
||||
.ok()
|
||||
.flatten()
|
||||
.and_then(|n| Number::from_u128(n as u128))
|
||||
.map(Value::Number)
|
||||
.unwrap_or(Value::Null)
|
||||
}
|
||||
ColumnType::Int1 | ColumnType::Int2 | ColumnType::Int4 | ColumnType::Int8 | ColumnType::Intn => {
|
||||
row.try_get::<i64, _>(index)
|
||||
.ok()
|
||||
.flatten()
|
||||
.and_then(|n| Number::from_i128(n as i128))
|
||||
.map(Value::Number)
|
||||
.unwrap_or(Value::Null)
|
||||
match try_get_any_int(row, index){
|
||||
Some(i) => Value::Number(i.into()),
|
||||
None => Value::Null,
|
||||
}
|
||||
},
|
||||
ColumnType::Float4 | ColumnType::Float8 | ColumnType::Floatn | ColumnType::Money | ColumnType::Money4 => {
|
||||
row.try_get::<f64, _>(index)
|
||||
.ok()
|
||||
.flatten()
|
||||
.and_then(|f| Number::from_f64(f))
|
||||
.map(Value::Number)
|
||||
.unwrap_or(Value::Null)
|
||||
match try_get_any_float(row, index) {
|
||||
Some(i) => Number::from_f64(i).map(Value::Number).unwrap_or(Value::Null),
|
||||
None => Value::Null,
|
||||
}
|
||||
},
|
||||
ColumnType::Decimaln | ColumnType::Numericn => {
|
||||
row.try_get::<Decimal, _>(index)
|
||||
.ok()
|
||||
.flatten()
|
||||
.and_then(|f| Number::from_f64(f64::try_from(f).unwrap_or(0.0)))
|
||||
.map(Value::Number)
|
||||
.map(|num| Value::Number(num))
|
||||
.unwrap_or(Value::Null)
|
||||
},
|
||||
ColumnType::Daten => {
|
||||
@ -295,6 +295,13 @@ impl MSSQLBackend {
|
||||
.flatten()
|
||||
.map(|u| Value::String(u.to_string()))
|
||||
.unwrap_or(Value::Null)
|
||||
},
|
||||
ColumnType::Xml => {
|
||||
row.try_get::<&XmlData, _>(index)
|
||||
.ok()
|
||||
.flatten()
|
||||
.map(|d| Value::String(d.clone().into_string()))
|
||||
.unwrap_or(Value::Null)
|
||||
}
|
||||
_ => {
|
||||
row.try_get::<&str, _>(index)
|
||||
@ -452,6 +459,30 @@ impl MSSQLBackend {
|
||||
}
|
||||
}
|
||||
|
||||
fn try_get_any_int(row: &Row, index: usize) -> Option<i64> {
|
||||
row.try_get::<i64, _>(index)
|
||||
.or_else(|_| row.try_get::<i64, _>(index).map(|v| v.map(|x| x)))
|
||||
.or_else(|_| row.try_get::<i32, _>(index).map(|v| v.map(|x| x as i64)))
|
||||
.or_else(|_| row.try_get::<i16, _>(index).map(|v| v.map(|x| x as i64)))
|
||||
.or_else(|_| row.try_get::<u8, _>(index).map(|v| v.map(|x| x as i64)))
|
||||
.ok()
|
||||
.flatten()
|
||||
}
|
||||
|
||||
fn try_get_any_bit(row: &Row, index: usize) -> Option<u8> {
|
||||
row.try_get::<u8, _>(index)
|
||||
.or_else(|_| row.try_get::<bool, _>(index).map(|v| v.map(|x| x as u8)))
|
||||
.ok()
|
||||
.flatten()
|
||||
}
|
||||
|
||||
fn try_get_any_float(row: &Row, index: usize) -> Option<f64> {
|
||||
row.try_get::<f64, _>(index)
|
||||
.or_else(|_| row.try_get::<f32, _>(index).map(|v| v.map(|x| x as f64)))
|
||||
.ok()
|
||||
.flatten()
|
||||
}
|
||||
|
||||
impl Drop for MSSQLBackend {
|
||||
fn drop(&mut self) {
|
||||
|
||||
|
BIN
src/en/OInt/addins/OPI_MSSQL.zip
vendored
BIN
src/en/OInt/addins/OPI_MSSQL.zip
vendored
Binary file not shown.
Binary file not shown.
BIN
src/ru/OInt/addins/OPI_MSSQL.zip
vendored
BIN
src/ru/OInt/addins/OPI_MSSQL.zip
vendored
Binary file not shown.
@ -559,6 +559,7 @@
|
||||
Особенности.Вставить("МаркерПараметров" , "@P");
|
||||
Особенности.Вставить("СУБД" , "mssql");
|
||||
Особенности.Вставить("ПолеКолонки" , "COLUMN_NAME");
|
||||
Особенности.Вставить("НачалоТранзакции" , "BEGIN TRAN");
|
||||
|
||||
Возврат Особенности;
|
||||
|
||||
|
@ -530,6 +530,7 @@
|
||||
Особенности.Вставить("МаркерПараметров" , "?");
|
||||
Особенности.Вставить("СУБД" , "mysql");
|
||||
Особенности.Вставить("ПолеКолонки" , "COLUMN_NAME");
|
||||
Особенности.Вставить("НачалоТранзакции" , "BEGIN");
|
||||
|
||||
Возврат Особенности;
|
||||
|
||||
|
@ -559,6 +559,7 @@
|
||||
Особенности.Вставить("МаркерПараметров" , "$");
|
||||
Особенности.Вставить("СУБД" , "postgres");
|
||||
Особенности.Вставить("ПолеКолонки" , "column_name");
|
||||
Особенности.Вставить("НачалоТранзакции" , "BEGIN");
|
||||
|
||||
Возврат Особенности;
|
||||
|
||||
|
@ -463,6 +463,7 @@
|
||||
Особенности.Вставить("МаркерПараметров" , "?");
|
||||
Особенности.Вставить("СУБД" , "sqlite");
|
||||
Особенности.Вставить("ПолеКолонки" , "name");
|
||||
Особенности.Вставить("НачалоТранзакции" , "BEGIN");
|
||||
|
||||
Возврат Особенности;
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
|
||||
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
|
||||
|
||||
// MIT License
|
||||
|
||||
@ -702,13 +702,31 @@
|
||||
Фильтры = Схема["filter"];
|
||||
Сортировка = Схема["order"];
|
||||
Количество = Схема["limit"];
|
||||
СУБД = Схема["dbms"];
|
||||
|
||||
ШаблонSQL = "SELECT %1 FROM %2
|
||||
|%3;";
|
||||
ШаблонSQL = "SELECT %1 %2 FROM %3
|
||||
|%4
|
||||
|%5
|
||||
|%6;";
|
||||
|
||||
БлокНастроек = СформироватьТекстНастроекSelect(Фильтры, Сортировка, Количество);
|
||||
ТекстФильтра = СформироватьТекстФильтра(Фильтры);
|
||||
ТекстСортировки = СформироватьТекстСортировки(Сортировка);
|
||||
|
||||
Если СУБД = "mssql" Тогда
|
||||
ТекстТопа = СформироватьТекстТопа(Количество);
|
||||
ТекстЛимита = "";
|
||||
Иначе
|
||||
ТекстТопа = "";
|
||||
ТекстЛимита = СформироватьТекстКоличества(Количество);
|
||||
КонецЕсли;
|
||||
|
||||
ТекстSQL = СтрШаблон(ШаблонSQL, СтрСоединить(Поля, ", "), Таблица, БлокНастроек);
|
||||
ТекстSQL = СтрШаблон(ШаблонSQL
|
||||
, ТекстТопа
|
||||
, СтрСоединить(Поля, ", ")
|
||||
, Таблица
|
||||
, ТекстФильтра
|
||||
, ТекстСортировки
|
||||
, ТекстЛимита);
|
||||
|
||||
Возврат ТекстSQL;
|
||||
|
||||
@ -1017,7 +1035,8 @@
|
||||
|
||||
Если Транзакция Тогда
|
||||
|
||||
Начало = Модуль.ВыполнитьЗапросSQL("BEGIN", , , Соединение);
|
||||
Текст = Модуль.ПолучитьОсобенности()["НачалоТранзакции"];
|
||||
Начало = Модуль.ВыполнитьЗапросSQL(Текст, , , Соединение);
|
||||
|
||||
Если Не Начало["result"] Тогда
|
||||
Возврат Начало;
|
||||
@ -1082,22 +1101,6 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьТекстНастроекSelect(Знач Фильтры, Знач Сортировка, Знач Количество)
|
||||
|
||||
ШаблонБлока = "%1
|
||||
|%2
|
||||
|%3";
|
||||
|
||||
ТекстФильтра = СформироватьТекстФильтра(Фильтры);
|
||||
ТекстСортировки = СформироватьТекстСортировки(Сортировка);
|
||||
ТекстКоличества = СформироватьТекстКоличества(Количество);
|
||||
|
||||
ТекстБлока = СтрШаблон(ШаблонБлока, ТекстФильтра, ТекстСортировки, ТекстКоличества);
|
||||
|
||||
Возврат ТекстБлока;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьТекстФильтра(Знач Фильтры)
|
||||
|
||||
Если Не ЗначениеЗаполнено(Фильтры) Тогда
|
||||
@ -1173,6 +1176,19 @@
|
||||
|
||||
КонецФункции
|
||||
|
||||
Функция СформироватьТекстТопа(Знач Количество)
|
||||
|
||||
Если Не ЗначениеЗаполнено(Количество) Тогда
|
||||
Возврат "";
|
||||
КонецЕсли;
|
||||
|
||||
ТекстКоличества = "TOP %1";
|
||||
ТекстКоличества = СтрШаблон(ТекстКоличества, OPI_Инструменты.ЧислоВСтроку(Количество));
|
||||
|
||||
Возврат ТекстКоличества;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура РазделитьКоллекциюДанных(Знач Запись, МассивПолей, МассивЗначений)
|
||||
|
||||
ТекстОшибки = "Некорректный набор данных для обновления";
|
||||
|
250
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
250
src/ru/OPI/src/CommonModules/OPI_Тесты/Module.bsl
vendored
@ -1,4 +1,4 @@
|
||||
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
|
||||
// OneScript: ./OInt/tests/Modules/internal/OPI_Тесты.os
|
||||
|
||||
// MIT License
|
||||
|
||||
@ -2838,6 +2838,11 @@
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_IP" , ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
|
||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
||||
|
||||
MSSQL_СоздатьБазуДанных(ПараметрыТеста);
|
||||
MSSQL_СоздатьТаблицу(ПараметрыТеста);
|
||||
MSSQL_ДобавитьЗаписи(ПараметрыТеста);
|
||||
MSSQL_ПолучитьЗаписи(ПараметрыТеста);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
@ -19468,7 +19473,7 @@
|
||||
|
||||
Результат = OPI_MySQL.СоздатьБазуДанных(База, Подключение);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных (существующая)", "PostgreSQL");
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных (существующая)", "MySQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||
|
||||
OPI_MySQL.ЗакрытьСоединение(Подключение);
|
||||
@ -23987,6 +23992,247 @@
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура MSSQL_СоздатьБазуДанных(ПараметрыФункции)
|
||||
|
||||
Адрес = ПараметрыФункции["PG_IP"];
|
||||
Логин = "SA";
|
||||
Пароль = ПараметрыФункции["PG_Password"];
|
||||
|
||||
НастройкиTLS = OPI_MSSQL.ПолучитьНастройкиTls(Истина);
|
||||
СтрокаПодключения = OPI_MSSQL.СформироватьСтрокуПодключения(Адрес, , Логин, Пароль);
|
||||
|
||||
База = "testbase1";
|
||||
|
||||
Удаление = OPI_MSSQL.УдалитьБазуДанных(База, СтрокаПодключения, НастройкиTLS); // SKIP
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Удаление, "СоздатьБазуДанных (удаление)", "MSSQL"); // SKIP
|
||||
|
||||
// При использовании строки подключения инициализируется новое соединение,
|
||||
// которое будет закрыто после выполнения функции.
|
||||
// В случае выполнения нескольких операций желательно использовать одно соединение,
|
||||
// заранее созданное функцией ОткрытьСоединение()
|
||||
Результат = OPI_MSSQL.СоздатьБазуДанных(База, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
База = "testbase2";
|
||||
OPI_MSSQL.УдалитьБазуДанных(База, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
Подключение = OPI_MSSQL.ОткрытьСоединение(СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Подключение, "СоздатьБазуДанных (открытие)", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Компонента(Подключение, "AddIn.OPI_MSSQL.Main");
|
||||
|
||||
Результат = OPI_MSSQL.СоздатьБазуДанных(База, Подключение);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных (подключение)", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Результат = OPI_MSSQL.СоздатьБазуДанных(База, Подключение);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных (существующая)", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||
|
||||
OPI_MSSQL.ЗакрытьСоединение(Подключение);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура MSSQL_СоздатьТаблицу(ПараметрыФункции)
|
||||
|
||||
Адрес = ПараметрыФункции["PG_IP"];
|
||||
Логин = "SA";
|
||||
Пароль = ПараметрыФункции["PG_Password"];
|
||||
База = "testbase1";
|
||||
|
||||
НастройкиTLS = OPI_MSSQL.ПолучитьНастройкиTls(Истина);
|
||||
СтрокаПодключения = OPI_MSSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
|
||||
|
||||
Таблица = "testtable";
|
||||
|
||||
СтруктураКолонок = Новый Структура;
|
||||
СтруктураКолонок.Вставить("tinyint_field" , "tinyint");
|
||||
СтруктураКолонок.Вставить("smallint_field" , "smallint");
|
||||
СтруктураКолонок.Вставить("int_field" , "int");
|
||||
СтруктураКолонок.Вставить("bigint_field" , "bigint");
|
||||
СтруктураКолонок.Вставить("float24_field" , "float(24)");
|
||||
СтруктураКолонок.Вставить("float53_field" , "float(53)");
|
||||
СтруктураКолонок.Вставить("bit_field" , "bit");
|
||||
СтруктураКолонок.Вставить("nvarchar_field" , "nvarchar(4000)");
|
||||
СтруктураКолонок.Вставить("varbinary_field", "varbinary(max)");
|
||||
СтруктураКолонок.Вставить("uid_field" , "uniqueidentifier");
|
||||
СтруктураКолонок.Вставить("numeric_field" , "numeric(5,3)"); // Или decimal
|
||||
СтруктураКолонок.Вставить("xml_field" , "xml");
|
||||
СтруктураКолонок.Вставить("date_field" , "date");
|
||||
СтруктураКолонок.Вставить("time_field" , "time");
|
||||
СтруктураКолонок.Вставить("dto_field" , "datetimeoffset");
|
||||
СтруктураКолонок.Вставить("datetime_field" , "datetime");
|
||||
|
||||
// При использовании строки подключения инициализируется новое соединение,
|
||||
// которое будет закрыто после выполнения функции.
|
||||
// В случае выполнения нескольких операций желательно использовать одно соединение,
|
||||
// заранее созданное функцией ОткрытьСоединение()
|
||||
Результат = OPI_MSSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
Таблица = "АБВ ГДЕ";
|
||||
|
||||
Результат = OPI_MSSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу (ошибка имени)", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||
|
||||
Таблица = "somename";
|
||||
СтруктураКолонок.Вставить("wtf_field", "WTF");
|
||||
|
||||
Результат = OPI_MSSQL.СоздатьТаблицу(Таблица, СтруктураКолонок, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьТаблицу (ошибка типа)", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура MSSQL_ДобавитьЗаписи(ПараметрыФункции)
|
||||
|
||||
Адрес = ПараметрыФункции["PG_IP"];
|
||||
Логин = "SA";
|
||||
Пароль = ПараметрыФункции["PG_Password"];
|
||||
База = "testbase1";
|
||||
|
||||
НастройкиTLS = OPI_MSSQL.ПолучитьНастройкиTls(Истина);
|
||||
СтрокаПодключения = OPI_MSSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
|
||||
|
||||
Таблица = "testtable";
|
||||
МассивЗаписей = Новый Массив;
|
||||
|
||||
Картинка = ПараметрыФункции["Picture"];
|
||||
OPI_ПреобразованиеТипов.ПолучитьДвоичныеДанные(Картинка); // Картинка - Тип: ДвоичныеДанные
|
||||
|
||||
XML = "<?xml version=""1.0""?>
|
||||
|<root>
|
||||
| <element>
|
||||
| <name>Пример</name>
|
||||
| <value>123</value>
|
||||
| </element>
|
||||
| <element>
|
||||
| <name>Тест</name>
|
||||
| <value>456</value>
|
||||
| </element>
|
||||
|</root>";
|
||||
|
||||
ТекущаяДата = OPI_Инструменты.ПолучитьТекущуюДату();
|
||||
ТекущаяДатаЧП = OPI_Инструменты.ДатаRFC3339(ТекущаяДата, "+05:00");
|
||||
|
||||
СтруктураЗаписи = Новый Структура;
|
||||
СтруктураЗаписи.Вставить("tinyint_field" , Новый Структура("TINYINT", 5));
|
||||
СтруктураЗаписи.Вставить("smallint_field" , Новый Структура("SMALLINT", 2000));
|
||||
СтруктураЗаписи.Вставить("int_field" , Новый Структура("INT", 200000));
|
||||
СтруктураЗаписи.Вставить("bigint_field" , Новый Структура("BIGINT", 20000000000));
|
||||
СтруктураЗаписи.Вставить("float24_field" , Новый Структура("FLOAT24", 10.1234567));
|
||||
СтруктураЗаписи.Вставить("float53_field" , Новый Структура("FLOAT53", 10.123456789123456));
|
||||
СтруктураЗаписи.Вставить("bit_field" , Новый Структура("BIT", Истина));
|
||||
СтруктураЗаписи.Вставить("nvarchar_field" , Новый Структура("NVARCHAR", "Some text"));
|
||||
СтруктураЗаписи.Вставить("varbinary_field", Новый Структура("BYTES", Картинка));
|
||||
СтруктураЗаписи.Вставить("uid_field" , Новый Структура("UUID", Новый УникальныйИдентификатор));
|
||||
СтруктураЗаписи.Вставить("numeric_field" , Новый Структура("NUMERIC", 5.333));
|
||||
СтруктураЗаписи.Вставить("xml_field" , Новый Структура("XML", XML));
|
||||
СтруктураЗаписи.Вставить("date_field" , Новый Структура("DATE", ТекущаяДата));
|
||||
СтруктураЗаписи.Вставить("time_field" , Новый Структура("TIME", ТекущаяДата));
|
||||
СтруктураЗаписи.Вставить("dto_field" , Новый Структура("DATETIMEOFFSET", ТекущаяДатаЧП));
|
||||
СтруктураЗаписи.Вставить("datetime_field" , Новый Структура("DATETIME", ТекущаяДата));
|
||||
|
||||
МассивЗаписей.Добавить(СтруктураЗаписи);
|
||||
|
||||
// При использовании строки подключения инициализируется новое соединение,
|
||||
// которое будет закрыто после выполнения функции.
|
||||
// В случае выполнения нескольких операций желательно использовать одно соединение,
|
||||
// заранее созданное функцией ОткрытьСоединение()
|
||||
Результат = OPI_MSSQL.ДобавитьЗаписи(Таблица, МассивЗаписей, Истина, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ДобавитьЗаписи", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Процедура MSSQL_ПолучитьЗаписи(ПараметрыФункции)
|
||||
|
||||
Адрес = ПараметрыФункции["PG_IP"];
|
||||
Логин = "SA";
|
||||
Пароль = ПараметрыФункции["PG_Password"];
|
||||
База = "testbase1";
|
||||
|
||||
НастройкиTLS = OPI_MSSQL.ПолучитьНастройкиTls(Истина);
|
||||
СтрокаПодключения = OPI_MSSQL.СформироватьСтрокуПодключения(Адрес, База, Логин, Пароль);
|
||||
|
||||
// Все записи без отборов
|
||||
|
||||
Таблица = "testtable";
|
||||
|
||||
// При использовании строки подключения инициализируется новое соединение,
|
||||
// которое будет закрыто после выполнения функции.
|
||||
// В случае выполнения нескольких операций желательно использовать одно соединение,
|
||||
// заранее созданное функцией ОткрытьСоединение()
|
||||
Результат = OPI_MSSQL.ПолучитьЗаписи(Таблица, , , , , СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
Если ЗначениеЗаполнено(Результат["data"]) Тогда // SKIP
|
||||
Результат["data"][0]["varbinary_field"]["BYTES"] = Лев(Результат["data"][0]["varbinary_field"]["BYTES"], 10) + "..."; // SKIP
|
||||
КонецЕсли; // SKIP
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи", "MSSQL"); // SKIP
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат); // SKIP
|
||||
|
||||
// Отборы, выбранные поля, количество и сортировка
|
||||
|
||||
СтрокаПодключения = OPI_MSSQL.СформироватьСтрокуПодключения(Адрес, "test_data", Логин, Пароль);
|
||||
|
||||
Таблица = "test_data";
|
||||
|
||||
Поля = Новый Массив;
|
||||
Поля.Добавить("first_name");
|
||||
Поля.Добавить("last_name");
|
||||
Поля.Добавить("email");
|
||||
|
||||
Фильтры = Новый Массив;
|
||||
|
||||
СтруктураФильтра1 = Новый Структура;
|
||||
|
||||
СтруктураФильтра1.Вставить("field", "gender");
|
||||
СтруктураФильтра1.Вставить("type" , "=");
|
||||
СтруктураФильтра1.Вставить("value", "Male");
|
||||
СтруктураФильтра1.Вставить("union", "AND");
|
||||
СтруктураФильтра1.Вставить("raw" , Ложь);
|
||||
|
||||
СтруктураФильтра2 = Новый Структура;
|
||||
|
||||
СтруктураФильтра2.Вставить("field", "id");
|
||||
СтруктураФильтра2.Вставить("type" , "BETWEEN");
|
||||
СтруктураФильтра2.Вставить("value", "20 AND 50");
|
||||
СтруктураФильтра2.Вставить("raw" , Истина);
|
||||
|
||||
Фильтры.Добавить(СтруктураФильтра1);
|
||||
Фильтры.Добавить(СтруктураФильтра2);
|
||||
|
||||
Сортировка = Новый Структура("ip_address", "DESC");
|
||||
Количество = 5;
|
||||
|
||||
Результат = OPI_MSSQL.ПолучитьЗаписи(Таблица, Поля, Фильтры, Сортировка, Количество, СтрокаПодключения, НастройкиTLS);
|
||||
|
||||
// END
|
||||
|
||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "ПолучитьЗаписи (отборы)", "MSSQL");
|
||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатИстина(Результат);
|
||||
OPI_ПолучениеДанныхТестов.Проверка_Массив(Результат["data"], 5);
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#КонецОбласти
|
||||
|
Binary file not shown.
Reference in New Issue
Block a user