1313import lombok .AllArgsConstructor ;
1414import lombok .Setter ;
1515import lombok .SneakyThrows ;
16- import lombok .Value ;
1716import lombok .experimental .Delegate ;
1817import org .assertj .core .api .Assertions ;
1918import org .junit .Assert ;
8786import tech .ydb .yoj .repository .ydb .sample .model .HintInt64Range ;
8887import tech .ydb .yoj .repository .ydb .sample .model .HintTablePreset ;
8988import tech .ydb .yoj .repository .ydb .sample .model .HintUniform ;
89+ import tech .ydb .yoj .repository .ydb .statement .FindAllYqlStatement ;
9090import tech .ydb .yoj .repository .ydb .statement .FindStatement ;
9191import tech .ydb .yoj .repository .ydb .statement .YqlStatement ;
9292import tech .ydb .yoj .repository .ydb .table .YdbTable ;
@@ -212,6 +212,18 @@ public void throwConversionExceptionOnSerializationProblem() {
212212
213213 @ Test
214214 public void readYqlListAndMap () {
215+ record GroupByResult (
216+ String id ,
217+ List <String > items ,
218+ Map <String , String > map ,
219+
220+ @ Column (flatten = false )
221+ GroupByResult .Struct struct
222+ ) {
223+ record Struct (String name ) {
224+ }
225+ }
226+
215227 WithUnflattenableField entity = new WithUnflattenableField (
216228 new WithUnflattenableField .Id ("id_yql_list" ),
217229 new WithUnflattenableField .Unflattenable ("Hello, world!" , 100_500 )
@@ -220,7 +232,7 @@ public void readYqlListAndMap() {
220232 db .tx (() -> {
221233 EntitySchema <WithUnflattenableField > schema = EntitySchema .of (WithUnflattenableField .class );
222234 var tableDescriptor = TableDescriptor .from (schema );
223- List <GroupByResult > result = (( YdbRepositoryTransaction <?>) Tx . Current . get (). getRepositoryTransaction () )
235+ List <GroupByResult > result = ydbRepositoryTransaction ( )
224236 .execute (new YqlStatement <>(tableDescriptor , schema , ObjectSchema .of (GroupByResult .class )) {
225237 @ Override
226238 public String getQuery (String tablespace ) {
@@ -247,20 +259,6 @@ public QueryType getQueryType() {
247259 });
248260 }
249261
250- @ Value
251- static class GroupByResult {
252- String id ;
253- List <String > items ;
254- Map <String , String > map ;
255- @ Column (flatten = false )
256- Struct struct ;
257-
258- @ Value
259- static class Struct {
260- String name ;
261- }
262- }
263-
264262 @ Test
265263 public void readViewFromCache () {
266264 TypeFreak tf1 = newTypeFreak (0 , "AAA1" , "bbb" );
@@ -935,15 +933,15 @@ public void creatingRepositoryDoesNotConnect() {
935933 public void ydbTransactionCompatibility () {
936934 db .tx (() -> {
937935 // No db tx or session yet!
938- var sdkTx = (( YdbRepositoryTransaction <?>) Tx . Current . get (). getRepositoryTransaction () ).toSdkTransaction ();
936+ var sdkTx = ydbRepositoryTransaction ( ).toSdkTransaction ();
939937 assertThatIllegalStateException ().isThrownBy (sdkTx ::getSessionId );
940938 assertThat (sdkTx .getId ()).isNull ();
941939 assertThat (sdkTx .getTxMode ()).isEqualTo (TxMode .SERIALIZABLE_RW );
942940 assertThatExceptionOfType (UnsupportedOperationException .class ).isThrownBy (sdkTx ::getStatusFuture );
943941
944942 // Perform any read - session and tx ID appear
945943 db .projects ().countAll ();
946- sdkTx = (( YdbRepositoryTransaction <?>) Tx . Current . get (). getRepositoryTransaction () ).toSdkTransaction ();
944+ sdkTx = ydbRepositoryTransaction ( ).toSdkTransaction ();
947945 assertThat (sdkTx .getSessionId ()).isNotNull ();
948946 assertThat (sdkTx .getId ()).isNotNull ();
949947 assertThat (sdkTx .getTxMode ()).isEqualTo (TxMode .SERIALIZABLE_RW );
@@ -961,15 +959,15 @@ public void ydbTransactionCompatibility() {
961959
962960 db .readOnly ().withStatementIsolationLevel (isolationLevel ).run (() -> {
963961 // No db tx or session yet!
964- var sdkTx = (( YdbRepositoryTransaction <?>) Tx . Current . get (). getRepositoryTransaction () ).toSdkTransaction ();
962+ var sdkTx = ydbRepositoryTransaction ( ).toSdkTransaction ();
965963 assertThatIllegalStateException ().isThrownBy (sdkTx ::getSessionId );
966964 assertThat (sdkTx .getId ()).isNull ();
967965 assertThat (sdkTx .getTxMode ()).isEqualTo (txMode );
968966 assertThatExceptionOfType (UnsupportedOperationException .class ).isThrownBy (sdkTx ::getStatusFuture );
969967
970968 // Perform any read - session and tx ID appear
971969 db .projects ().countAll ();
972- sdkTx = (( YdbRepositoryTransaction <?>) Tx . Current . get (). getRepositoryTransaction () ).toSdkTransaction ();
970+ sdkTx = ydbRepositoryTransaction ( ).toSdkTransaction ();
973971 assertThat (sdkTx .getSessionId ()).isNotNull ();
974972 // Read transactions might have no ID or might have an ID, depending on your YDB version (that's what YDB returns, folks!)
975973 assertThat (sdkTx .getTxMode ()).isEqualTo (txMode );
@@ -1260,6 +1258,53 @@ private void write(TopicClient topicClient, String topicPath, String producer,
12601258 }
12611259 }
12621260
1261+ public void streamingScanNotTruncatedOldSpliterator () {
1262+ int maxPageSizeBiggerThatReal = 11_000 ;
1263+
1264+ db .tx (() -> IntStream .range (0 , maxPageSizeBiggerThatReal ).forEach (
1265+ i -> db .projects ().save (new Project (new Project .Id ("id_" + i ), "name" ))
1266+ ));
1267+
1268+ List <Project .Id > result = db .scan ().useNewSpliterator (false ).withMaxSize (maxPageSizeBiggerThatReal ).run (() -> {
1269+ var schema = EntitySchema .of (Project .class );
1270+ var desc = TableDescriptor .from (schema );
1271+ var statement = new FindAllYqlStatement <>(desc , schema , schema );
1272+
1273+ var projectIds = new ArrayList <Project .Id >();
1274+ try (var stream = ydbRepositoryTransaction ().executeScanQuery (statement , null )) {
1275+ stream .forEach (p -> projectIds .add (p .getId ()));
1276+ }
1277+ return projectIds ;
1278+ });
1279+ assertEquals (maxPageSizeBiggerThatReal , result .size ());
1280+ }
1281+
1282+ @ Test
1283+ public void streamingScanNotTruncatedNewSpliterator () {
1284+ int maxPageSizeBiggerThatReal = 11_000 ;
1285+
1286+ db .tx (() -> IntStream .range (0 , maxPageSizeBiggerThatReal ).forEach (
1287+ i -> db .projects ().save (new Project (new Project .Id ("id_" + i ), "name" ))
1288+ ));
1289+
1290+ List <Project .Id > result = db .scan ().useNewSpliterator (true ).withMaxSize (maxPageSizeBiggerThatReal ).run (() -> {
1291+ var schema = EntitySchema .of (Project .class );
1292+ var desc = TableDescriptor .from (schema );
1293+ var statement = new FindAllYqlStatement <>(desc , schema , schema );
1294+
1295+ var projectIds = new ArrayList <Project .Id >();
1296+ try (var stream = ydbRepositoryTransaction ().executeScanQuery (statement , null )) {
1297+ stream .forEach (p -> projectIds .add (p .getId ()));
1298+ }
1299+ return projectIds ;
1300+ });
1301+ assertEquals (maxPageSizeBiggerThatReal , result .size ());
1302+ }
1303+
1304+ private static YdbRepositoryTransaction <?> ydbRepositoryTransaction () {
1305+ return (YdbRepositoryTransaction <?>) Tx .Current .get ().getRepositoryTransaction ();
1306+ }
1307+
12631308 @ AllArgsConstructor
12641309 private static class DelegateSchemeServiceImplBase extends SchemeServiceGrpc .SchemeServiceImplBase {
12651310 @ Delegate
0 commit comments