@@ -13,15 +13,12 @@ public sealed class SloTableContext : SloTableContext<SloTableContext.Linq2dbCli
1313{
1414 protected override string Job => "Linq2DB" ;
1515
16- // ВКЛЮЧАЕМ ретраи SDK глобально для всех DataConnection
1716 static SloTableContext ( )
1817 {
18+ // Включаем ретраи SDK глобально (как и раньше)
1919 YdbSdkRetryPolicyRegistration . UseGloballyWithIdempotence (
2020 maxAttempts : 10 ,
21- onRetry : ( attempt , ex , delay ) =>
22- {
23- // метрики/логи при желании
24- }
21+ onRetry : ( attempt , ex , delay ) => { /* лог/метрики при желании */ }
2522 ) ;
2623 }
2724
@@ -32,8 +29,7 @@ public sealed class Linq2dbClient
3229 public DataConnection Open ( ) => new DataConnection ( "YDB" , _connectionString ) ;
3330 }
3431
35- protected override Linq2dbClient CreateClient ( Config config )
36- => new Linq2dbClient ( config . ConnectionString ) ;
32+ protected override Linq2dbClient CreateClient ( Config config ) => new ( config . ConnectionString ) ;
3733
3834 protected override async Task Create ( Linq2dbClient client , int operationTimeout )
3935 {
@@ -46,15 +42,15 @@ await db.ExecuteAsync($@"
4642CREATE TABLE `{ SloTable . Name } ` (
4743 Guid Uuid,
4844 Id Int32,
49- PayloadStr Utf8 ,
45+ PayloadStr Text ,
5046 PayloadDouble Double,
5147 PayloadTimestamp Timestamp,
5248 PRIMARY KEY (Guid, Id)
5349)" ) ;
5450 }
5551 catch
5652 {
57- // YDB не поддерживает IF NOT EXISTS; если таблица есть — это норм
53+ // Таблица уже есть — ок
5854 }
5955
6056 if ( ! string . IsNullOrWhiteSpace ( SloTable . Options ) )
@@ -67,12 +63,13 @@ protected override async Task<int> Save(Linq2dbClient client, SloTable sloTable,
6763 await using var db = client . Open ( ) ;
6864 db . CommandTimeout = writeTimeout ;
6965
70- await db . ExecuteAsync ( $@ "
66+ // rowsAffected >= 0 (для UPSERT в YDB может быть 0), поэтому страхуемся и возвращаем минимум 1
67+ var rowsAffected = await db . ExecuteAsync ( $@ "
7168UPSERT INTO `{ SloTable . Name } ` (Guid, Id, PayloadStr, PayloadDouble, PayloadTimestamp)
7269VALUES ({ sloTable . Guid } , { sloTable . Id } , { sloTable . PayloadStr } , { sloTable . PayloadDouble } , { sloTable . PayloadTimestamp } );
7370" ) ;
7471
75- return 1 ;
72+ return rowsAffected > 0 ? rowsAffected : 1 ;
7673 }
7774
7875 protected override async Task < object ? > Select ( Linq2dbClient client , ( Guid Guid , int Id ) select , int readTimeout )
0 commit comments