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 ---"
|
"MAIN ---"
|
||||||
linux-vdso.so.1 (0x00007ffd92bc9000)
|
linux-vdso.so.1 (0x00007ffdc9db0000)
|
||||||
libssl.so.3 => /lib64/libssl.so.3 (0x00007741c0c00000)
|
libssl.so.3 => /lib64/libssl.so.3 (0x00007a6a61c00000)
|
||||||
libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007741c0400000)
|
libcrypto.so.3 => /lib64/libcrypto.so.3 (0x00007a6a61400000)
|
||||||
libm.so.6 => /lib64/libm.so.6 (0x00007741c0000000)
|
libm.so.6 => /lib64/libm.so.6 (0x00007a6a61000000)
|
||||||
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007741bfc00000)
|
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007a6a60c00000)
|
||||||
libc.so.6 => /lib64/libc.so.6 (0x00007741bf800000)
|
libc.so.6 => /lib64/libc.so.6 (0x00007a6a60800000)
|
||||||
libdl.so.2 => /lib64/libdl.so.2 (0x00007741bf400000)
|
libdl.so.2 => /lib64/libdl.so.2 (0x00007a6a60400000)
|
||||||
/lib64/ld-linux-x86-64.so.2 (0x00007741c1200000)
|
/lib64/ld-linux-x86-64.so.2 (0x00007a6a62200000)
|
||||||
libz.so.1 => /lib64/libz.so.1 (0x00007741bf000000)
|
libz.so.1 => /lib64/libz.so.1 (0x00007a6a60000000)
|
||||||
GLIBC_2.2.5
|
GLIBC_2.2.5
|
||||||
GLIBC_2.12
|
GLIBC_2.12
|
||||||
GLIBC_2.3
|
GLIBC_2.3
|
||||||
|
@ -169,8 +169,11 @@ impl MSSQLBackend {
|
|||||||
None => return Self::format_json_error("Parameters must be a JSON array"),
|
None => return Self::format_json_error("Parameters must be a JSON array"),
|
||||||
};
|
};
|
||||||
|
|
||||||
if query.trim_start().to_uppercase().starts_with("SELECT") || force_result {
|
let normalized_query = query.trim_start().to_uppercase();
|
||||||
match client.simple_query(query).await {
|
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) => {
|
Ok(stream) => {
|
||||||
let rows = match stream.into_results().await {
|
let rows = match stream.into_results().await {
|
||||||
Ok(rows) => rows.into_iter().flatten().collect(),
|
Ok(rows) => rows.into_iter().flatten().collect(),
|
||||||
@ -180,8 +183,18 @@ impl MSSQLBackend {
|
|||||||
},
|
},
|
||||||
Err(e) => Self::format_json_error(&e.to_string()),
|
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 {
|
} else {
|
||||||
let params_refs: Vec<&dyn ToSql> = params_array.iter().map(|b| b.as_ref()).collect();
|
|
||||||
match client.execute(query, ¶ms_refs).await {
|
match client.execute(query, ¶ms_refs).await {
|
||||||
Ok(_) => json!({"result": true}).to_string(),
|
Ok(_) => json!({"result": true}).to_string(),
|
||||||
Err(e) => Self::format_json_error(&e.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 {
|
fn from_sql_to_json(row: &Row, index: usize, column: &Column) -> Value {
|
||||||
match column.column_type() {
|
match column.column_type() {
|
||||||
ColumnType::Null => Value::Null,
|
ColumnType::Null => Value::Null,
|
||||||
ColumnType::Bit => {
|
ColumnType::Bit | ColumnType::Bitn => {
|
||||||
row.try_get::<bool, _>(index)
|
match try_get_any_bit(row, index){
|
||||||
.ok()
|
Some(i) => Value::Number(i.into()),
|
||||||
.flatten()
|
None => Value::Null,
|
||||||
.map(Value::Bool)
|
|
||||||
.unwrap_or(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 => {
|
ColumnType::Int1 | ColumnType::Int2 | ColumnType::Int4 | ColumnType::Int8 | ColumnType::Intn => {
|
||||||
row.try_get::<i64, _>(index)
|
match try_get_any_int(row, index){
|
||||||
.ok()
|
Some(i) => Value::Number(i.into()),
|
||||||
.flatten()
|
None => Value::Null,
|
||||||
.and_then(|n| Number::from_i128(n as i128))
|
}
|
||||||
.map(Value::Number)
|
|
||||||
.unwrap_or(Value::Null)
|
|
||||||
},
|
},
|
||||||
ColumnType::Float4 | ColumnType::Float8 | ColumnType::Floatn | ColumnType::Money | ColumnType::Money4 => {
|
ColumnType::Float4 | ColumnType::Float8 | ColumnType::Floatn | ColumnType::Money | ColumnType::Money4 => {
|
||||||
row.try_get::<f64, _>(index)
|
match try_get_any_float(row, index) {
|
||||||
.ok()
|
Some(i) => Number::from_f64(i).map(Value::Number).unwrap_or(Value::Null),
|
||||||
.flatten()
|
None => Value::Null,
|
||||||
.and_then(|f| Number::from_f64(f))
|
}
|
||||||
.map(Value::Number)
|
|
||||||
.unwrap_or(Value::Null)
|
|
||||||
},
|
},
|
||||||
ColumnType::Decimaln | ColumnType::Numericn => {
|
ColumnType::Decimaln | ColumnType::Numericn => {
|
||||||
row.try_get::<Decimal, _>(index)
|
row.try_get::<Decimal, _>(index)
|
||||||
.ok()
|
.ok()
|
||||||
.flatten()
|
.flatten()
|
||||||
.and_then(|f| Number::from_f64(f64::try_from(f).unwrap_or(0.0)))
|
.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)
|
.unwrap_or(Value::Null)
|
||||||
},
|
},
|
||||||
ColumnType::Daten => {
|
ColumnType::Daten => {
|
||||||
@ -295,6 +295,13 @@ impl MSSQLBackend {
|
|||||||
.flatten()
|
.flatten()
|
||||||
.map(|u| Value::String(u.to_string()))
|
.map(|u| Value::String(u.to_string()))
|
||||||
.unwrap_or(Value::Null)
|
.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)
|
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 {
|
impl Drop for MSSQLBackend {
|
||||||
fn drop(&mut self) {
|
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");
|
Особенности.Вставить("МаркерПараметров" , "@P");
|
||||||
Особенности.Вставить("СУБД" , "mssql");
|
Особенности.Вставить("СУБД" , "mssql");
|
||||||
Особенности.Вставить("ПолеКолонки" , "COLUMN_NAME");
|
Особенности.Вставить("ПолеКолонки" , "COLUMN_NAME");
|
||||||
|
Особенности.Вставить("НачалоТранзакции" , "BEGIN TRAN");
|
||||||
|
|
||||||
Возврат Особенности;
|
Возврат Особенности;
|
||||||
|
|
||||||
|
@ -530,6 +530,7 @@
|
|||||||
Особенности.Вставить("МаркерПараметров" , "?");
|
Особенности.Вставить("МаркерПараметров" , "?");
|
||||||
Особенности.Вставить("СУБД" , "mysql");
|
Особенности.Вставить("СУБД" , "mysql");
|
||||||
Особенности.Вставить("ПолеКолонки" , "COLUMN_NAME");
|
Особенности.Вставить("ПолеКолонки" , "COLUMN_NAME");
|
||||||
|
Особенности.Вставить("НачалоТранзакции" , "BEGIN");
|
||||||
|
|
||||||
Возврат Особенности;
|
Возврат Особенности;
|
||||||
|
|
||||||
|
@ -559,6 +559,7 @@
|
|||||||
Особенности.Вставить("МаркерПараметров" , "$");
|
Особенности.Вставить("МаркерПараметров" , "$");
|
||||||
Особенности.Вставить("СУБД" , "postgres");
|
Особенности.Вставить("СУБД" , "postgres");
|
||||||
Особенности.Вставить("ПолеКолонки" , "column_name");
|
Особенности.Вставить("ПолеКолонки" , "column_name");
|
||||||
|
Особенности.Вставить("НачалоТранзакции" , "BEGIN");
|
||||||
|
|
||||||
Возврат Особенности;
|
Возврат Особенности;
|
||||||
|
|
||||||
|
@ -463,6 +463,7 @@
|
|||||||
Особенности.Вставить("МаркерПараметров" , "?");
|
Особенности.Вставить("МаркерПараметров" , "?");
|
||||||
Особенности.Вставить("СУБД" , "sqlite");
|
Особенности.Вставить("СУБД" , "sqlite");
|
||||||
Особенности.Вставить("ПолеКолонки" , "name");
|
Особенности.Вставить("ПолеКолонки" , "name");
|
||||||
|
Особенности.Вставить("НачалоТранзакции" , "BEGIN");
|
||||||
|
|
||||||
Возврат Особенности;
|
Возврат Особенности;
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
|
// OneScript: ./OInt/tools/Modules/OPI_ЗапросыSQL.os
|
||||||
|
|
||||||
// MIT License
|
// MIT License
|
||||||
|
|
||||||
@ -702,13 +702,31 @@
|
|||||||
Фильтры = Схема["filter"];
|
Фильтры = Схема["filter"];
|
||||||
Сортировка = Схема["order"];
|
Сортировка = Схема["order"];
|
||||||
Количество = Схема["limit"];
|
Количество = Схема["limit"];
|
||||||
|
СУБД = Схема["dbms"];
|
||||||
|
|
||||||
ШаблонSQL = "SELECT %1 FROM %2
|
ШаблонSQL = "SELECT %1 %2 FROM %3
|
||||||
|%3;";
|
|%4
|
||||||
|
|%5
|
||||||
|
|%6;";
|
||||||
|
|
||||||
БлокНастроек = СформироватьТекстНастроекSelect(Фильтры, Сортировка, Количество);
|
ТекстФильтра = СформироватьТекстФильтра(Фильтры);
|
||||||
|
ТекстСортировки = СформироватьТекстСортировки(Сортировка);
|
||||||
|
|
||||||
ТекстSQL = СтрШаблон(ШаблонSQL, СтрСоединить(Поля, ", "), Таблица, БлокНастроек);
|
Если СУБД = "mssql" Тогда
|
||||||
|
ТекстТопа = СформироватьТекстТопа(Количество);
|
||||||
|
ТекстЛимита = "";
|
||||||
|
Иначе
|
||||||
|
ТекстТопа = "";
|
||||||
|
ТекстЛимита = СформироватьТекстКоличества(Количество);
|
||||||
|
КонецЕсли;
|
||||||
|
|
||||||
|
ТекстSQL = СтрШаблон(ШаблонSQL
|
||||||
|
, ТекстТопа
|
||||||
|
, СтрСоединить(Поля, ", ")
|
||||||
|
, Таблица
|
||||||
|
, ТекстФильтра
|
||||||
|
, ТекстСортировки
|
||||||
|
, ТекстЛимита);
|
||||||
|
|
||||||
Возврат ТекстSQL;
|
Возврат ТекстSQL;
|
||||||
|
|
||||||
@ -1017,7 +1035,8 @@
|
|||||||
|
|
||||||
Если Транзакция Тогда
|
Если Транзакция Тогда
|
||||||
|
|
||||||
Начало = Модуль.ВыполнитьЗапросSQL("BEGIN", , , Соединение);
|
Текст = Модуль.ПолучитьОсобенности()["НачалоТранзакции"];
|
||||||
|
Начало = Модуль.ВыполнитьЗапросSQL(Текст, , , Соединение);
|
||||||
|
|
||||||
Если Не Начало["result"] Тогда
|
Если Не Начало["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
|
// MIT License
|
||||||
|
|
||||||
@ -2839,6 +2839,11 @@
|
|||||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
|
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("PG_Password", ПараметрыТеста);
|
||||||
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
OPI_ПолучениеДанныхТестов.ПараметрВКоллекцию("Picture" , ПараметрыТеста);
|
||||||
|
|
||||||
|
MSSQL_СоздатьБазуДанных(ПараметрыТеста);
|
||||||
|
MSSQL_СоздатьТаблицу(ПараметрыТеста);
|
||||||
|
MSSQL_ДобавитьЗаписи(ПараметрыТеста);
|
||||||
|
MSSQL_ПолучитьЗаписи(ПараметрыТеста);
|
||||||
|
|
||||||
КонецПроцедуры
|
КонецПроцедуры
|
||||||
|
|
||||||
#КонецОбласти
|
#КонецОбласти
|
||||||
@ -19468,7 +19473,7 @@
|
|||||||
|
|
||||||
Результат = OPI_MySQL.СоздатьБазуДанных(База, Подключение);
|
Результат = OPI_MySQL.СоздатьБазуДанных(База, Подключение);
|
||||||
|
|
||||||
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных (существующая)", "PostgreSQL");
|
OPI_ПолучениеДанныхТестов.ЗаписатьЛог(Результат, "СоздатьБазуДанных (существующая)", "MySQL");
|
||||||
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
OPI_ПолучениеДанныхТестов.Проверка_РезультатЛожь(Результат);
|
||||||
|
|
||||||
OPI_MySQL.ЗакрытьСоединение(Подключение);
|
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