Skip to content

Commit 1bc87d6

Browse files
committed
noticket: Make Table.query() non-default + Construct TableQueryBuilder with an explicit EntitySchema
1 parent 85296f6 commit 1bc87d6

File tree

8 files changed

+41
-77
lines changed

8 files changed

+41
-77
lines changed

repository-inmemory/src/main/java/tech/ydb/yoj/repository/test/inmemory/InMemoryTable.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import tech.ydb.yoj.repository.db.Range;
1616
import tech.ydb.yoj.repository.db.Table;
1717
import tech.ydb.yoj.repository.db.TableDescriptor;
18+
import tech.ydb.yoj.repository.db.TableQueryBuilder;
1819
import tech.ydb.yoj.repository.db.TableQueryImpl;
1920
import tech.ydb.yoj.repository.db.ViewSchema;
2021
import tech.ydb.yoj.repository.db.cache.FirstLevelCache;
@@ -564,6 +565,11 @@ private <ID extends Entity.Id<T>> boolean readTableFilter(T e, ReadTableParams<I
564565
return true;
565566
}
566567

568+
@Override
569+
public TableQueryBuilder<T> query() {
570+
return new TableQueryBuilder<>(this, schema);
571+
}
572+
567573
public FirstLevelCache<T> getFirstLevelCache() {
568574
return transaction.getTransactionLocal().firstLevelCache(tableDescriptor);
569575
}

repository-inmemory/src/test/java/tech/ydb/yoj/repository/test/inmemory/TestInMemoryRepository.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,11 @@
33
import tech.ydb.yoj.repository.db.AbstractDelegatingTable;
44
import tech.ydb.yoj.repository.db.RepositoryTransaction;
55
import tech.ydb.yoj.repository.db.Table;
6-
import tech.ydb.yoj.repository.db.TableQueryBuilder;
76
import tech.ydb.yoj.repository.db.TxOptions;
87
import tech.ydb.yoj.repository.db.common.CommonConverters;
98
import tech.ydb.yoj.repository.db.json.JacksonJsonConverter;
109
import tech.ydb.yoj.repository.test.sample.TestEntityOperations;
1110
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.BubbleTable;
12-
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.ComplexTable;
1311
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.IndexedTable;
1412
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.Supabubble2Table;
1513
import tech.ydb.yoj.repository.test.sample.model.Bubble;
@@ -60,8 +58,8 @@ public BubbleTable bubbles() {
6058
}
6159

6260
@Override
63-
public ComplexTable complexes() {
64-
return new ComplexTableImpl(table(Complex.class));
61+
public Table<Complex> complexes() {
62+
return table(Complex.class);
6563
}
6664

6765
@Override
@@ -100,8 +98,8 @@ public IndexedTable indexedTable() {
10098
}
10199

102100
@Override
103-
public SupabubbleTable supabubbles() {
104-
return new SupabubbleTable(table(Supabubble.class));
101+
public Table<Supabubble> supabubbles() {
102+
return table(Supabubble.class);
105103
}
106104

107105
@Override
@@ -151,17 +149,6 @@ public Supabubble2InMemoryTable(Table<Supabubble2> target) {
151149
}
152150
}
153151

154-
private static class ComplexTableImpl extends AbstractDelegatingTable<Complex> implements ComplexTable {
155-
public ComplexTableImpl(Table<Complex> target) {
156-
super(target);
157-
}
158-
159-
@Override
160-
public TableQueryBuilder<Complex> query() {
161-
return super.query();
162-
}
163-
}
164-
165152
private static class BubbleTableImpl extends AbstractDelegatingTable<Bubble> implements BubbleTable {
166153
public BubbleTableImpl(Table<Bubble> target) {
167154
super(target);
@@ -182,10 +169,5 @@ protected IndexedTableImpl(Table<IndexedEntity> target) {
182169
public void updateSomeFields(Set<IndexedEntity.Id> ids, String value, String value2) {
183170
throw new UnsupportedOperationException("not for in-memory");
184171
}
185-
186-
@Override
187-
public TableQueryBuilder<IndexedEntity> query() {
188-
return super.query();
189-
}
190172
}
191173
}

repository-test/src/main/java/tech/ydb/yoj/repository/test/sample/TestEntityOperations.java

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,7 @@
22

33
import tech.ydb.yoj.repository.BaseDb;
44
import tech.ydb.yoj.repository.db.AbstractDelegatingTable;
5-
import tech.ydb.yoj.repository.db.Entity;
65
import tech.ydb.yoj.repository.db.Table;
7-
import tech.ydb.yoj.repository.db.TableQueryBuilder;
86
import tech.ydb.yoj.repository.db.bulk.BulkParams;
97
import tech.ydb.yoj.repository.test.sample.model.Bubble;
108
import tech.ydb.yoj.repository.test.sample.model.BytePkEntity;
@@ -40,7 +38,7 @@ public interface TestEntityOperations extends BaseDb {
4038

4139
BubbleTable bubbles();
4240

43-
ComplexTable complexes();
41+
Table<Complex> complexes();
4442

4543
default Table<BytePkEntity> bytePkEntities() {
4644
return table(BytePkEntity.class);
@@ -60,7 +58,7 @@ default Table<BytePkEntity> bytePkEntities() {
6058

6159
IndexedTable indexedTable();
6260

63-
SupabubbleTable supabubbles();
61+
Table<Supabubble> supabubbles();
6462

6563
Supabubble2Table supabubbles2();
6664

@@ -153,33 +151,14 @@ public void updateEmbedded(TypeFreak.Id id, TypeFreak.Embedded newEmbedded) {
153151
}
154152
}
155153

156-
interface TableWithQueryBuilder<T extends Entity<T>> extends Table<T> {
157-
@Override
158-
TableQueryBuilder<T> query();
159-
}
160-
161-
interface ComplexTable extends TableWithQueryBuilder<Complex> {
162-
}
163-
164154
interface BubbleTable extends Table<Bubble> {
165155
void updateSomeFields(Set<Bubble.Id> ids, String fieldA, String fieldB);
166156
}
167157

168-
interface IndexedTable extends TableWithQueryBuilder<IndexedEntity> {
158+
interface IndexedTable extends Table<IndexedEntity> {
169159
void updateSomeFields(Set<IndexedEntity.Id> ids, String value, String value2);
170160
}
171161

172-
class SupabubbleTable extends AbstractDelegatingTable<Supabubble> {
173-
public SupabubbleTable(Table<Supabubble> target) {
174-
super(target);
175-
}
176-
177-
@Override
178-
public TableQueryBuilder<Supabubble> query() {
179-
return super.query();
180-
}
181-
}
182-
183162
interface Supabubble2Table extends Table<Supabubble2> {
184163
default List<Supabubble2> findLessThan(Supabubble2.Id id) {
185164
throw new UnsupportedOperationException();

repository-ydb-v2/src/main/java/tech/ydb/yoj/repository/ydb/table/YdbTable.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import tech.ydb.yoj.repository.db.Range;
1515
import tech.ydb.yoj.repository.db.Table;
1616
import tech.ydb.yoj.repository.db.TableDescriptor;
17+
import tech.ydb.yoj.repository.db.TableQueryBuilder;
1718
import tech.ydb.yoj.repository.db.TableQueryImpl;
1819
import tech.ydb.yoj.repository.db.Tx;
1920
import tech.ydb.yoj.repository.db.ViewSchema;
@@ -581,6 +582,11 @@ public <ID extends Id<T>> void migrate(ID id) {
581582
executor.getTransactionLocal().projectionCache().save(entityToSave);
582583
}
583584

585+
@Override
586+
public TableQueryBuilder<T> query() {
587+
return new TableQueryBuilder<>(this, schema);
588+
}
589+
584590
public FirstLevelCache<T> getFirstLevelCache() {
585591
return executor.getTransactionLocal().firstLevelCache(tableDescriptor);
586592
}

repository-ydb-v2/src/test/java/tech/ydb/yoj/repository/ydb/TestYdbRepository.java

Lines changed: 4 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,12 @@
66
import tech.ydb.yoj.repository.db.IsolationLevel;
77
import tech.ydb.yoj.repository.db.RepositoryTransaction;
88
import tech.ydb.yoj.repository.db.Table;
9-
import tech.ydb.yoj.repository.db.TableQueryBuilder;
109
import tech.ydb.yoj.repository.db.TxOptions;
1110
import tech.ydb.yoj.repository.db.common.CommonConverters;
1211
import tech.ydb.yoj.repository.db.json.JacksonJsonConverter;
1312
import tech.ydb.yoj.repository.db.statement.Changeset;
1413
import tech.ydb.yoj.repository.test.sample.TestEntityOperations;
1514
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.BubbleTable;
16-
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.ComplexTable;
1715
import tech.ydb.yoj.repository.test.sample.TestEntityOperations.IndexedTable;
1816
import tech.ydb.yoj.repository.test.sample.model.Bubble;
1917
import tech.ydb.yoj.repository.test.sample.model.Complex;
@@ -127,8 +125,8 @@ public BubbleTable bubbles() {
127125
}
128126

129127
@Override
130-
public ComplexTable complexes() {
131-
return new ComplexTableImpl(this);
128+
public Table<Complex> complexes() {
129+
return table(Complex.class);
132130
}
133131

134132
@Override
@@ -167,8 +165,8 @@ public IndexedTable indexedTable() {
167165
}
168166

169167
@Override
170-
public SupabubbleTable supabubbles() {
171-
return new SupabubbleTable(table(Supabubble.class));
168+
public Table<Supabubble> supabubbles() {
169+
return table(Supabubble.class);
172170
}
173171

174172
@Override
@@ -223,17 +221,6 @@ public List<Supabubble2> findLessThan(Supabubble2.Id id) {
223221
}
224222
}
225223

226-
private static class ComplexTableImpl extends YdbTable<Complex> implements ComplexTable {
227-
protected ComplexTableImpl(QueryExecutor executor) {
228-
super(Complex.class, executor);
229-
}
230-
231-
@Override
232-
public TableQueryBuilder<Complex> query() {
233-
return super.query();
234-
}
235-
}
236-
237224
private static class BubbleTableImpl extends YdbTable<Bubble> implements BubbleTable {
238225
protected BubbleTableImpl(QueryExecutor executor) {
239226
super(Bubble.class, executor);
@@ -254,10 +241,5 @@ protected IndexedTableImpl(QueryExecutor executor) {
254241
public void updateSomeFields(Set<IndexedEntity.Id> ids, String value, String value2) {
255242
this.updateIn(ids, new Changeset().set("valueId", value).set("valueId2", value2));
256243
}
257-
258-
@Override
259-
public TableQueryBuilder<IndexedEntity> query() {
260-
return super.query();
261-
}
262244
}
263245
}

repository/src/main/java/tech/ydb/yoj/repository/db/AbstractDelegatingTable.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,4 +225,9 @@ public <ID extends Entity.Id<T>> Stream<ID> streamAllIds(int batchSize) {
225225
public <ID extends Entity.Id<T>> Stream<ID> streamPartialIds(ID partial, int batchSize) {
226226
return target.streamPartialIds(partial, batchSize);
227227
}
228+
229+
@Override
230+
public TableQueryBuilder<T> query() {
231+
return target.query();
232+
}
228233
}

repository/src/main/java/tech/ydb/yoj/repository/db/Table.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,7 @@ default long count(FilterExpression<T> filter) {
284284
return count(null, filter);
285285
}
286286

287-
default TableQueryBuilder<T> query() {
288-
return new TableQueryBuilder<>(this);
289-
}
287+
TableQueryBuilder<T> query();
290288

291289
/**
292290
* @deprecated Blindly setting entity fields is not recommended. Use {@code Table.modifyIfPresent()} instead, unless you

repository/src/main/java/tech/ydb/yoj/repository/db/TableQueryBuilder.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
public final class TableQueryBuilder<T extends Entity<T>> {
2222
private final Table<T> table;
23+
private final EntitySchema<T> schema;
2324

2425
private Set<? extends Entity.Id<T>> ids;
2526
private Set<?> keys;
@@ -33,8 +34,13 @@ public final class TableQueryBuilder<T extends Entity<T>> {
3334

3435
private OrderExpression<T> orderBy = null;
3536

36-
public TableQueryBuilder(@NonNull Table<T> table) {
37+
public TableQueryBuilder(@NonNull Table<T> table, @NonNull EntitySchema<T> schema) {
3738
this.table = table;
39+
this.schema = schema;
40+
}
41+
42+
public TableQueryBuilder(@NonNull Table<T> table) {
43+
this(table, EntitySchema.of(table.getType()));
3844
}
3945

4046
public long count() {
@@ -151,7 +157,7 @@ private FilterBuilder<T> filterBuilder() {
151157
if (filterBuilder == null) {
152158
Preconditions.checkState(filter == null, "You can't use both .where/.and/.or and .filter methods");
153159

154-
filterBuilder = EntityExpressions.newFilterBuilder(table.getType());
160+
filterBuilder = EntityExpressions.newFilterBuilder(schema);
155161
}
156162
return filterBuilder;
157163
}
@@ -205,7 +211,7 @@ private FilterExpression<T> getFinalFilter() {
205211
@NonNull
206212
@ExperimentalApi(issue = "https://github.com/ydb-platform/yoj-project/issues/115")
207213
public TableQueryBuilder<T> unordered() {
208-
return orderBy(EntityExpressions.unordered(table.getType()));
214+
return orderBy(EntityExpressions.unordered(schema));
209215
}
210216

211217
@NonNull
@@ -216,11 +222,11 @@ public TableQueryBuilder<T> orderBy(@Nullable OrderExpression<T> orderBy) {
216222

217223
@NonNull
218224
public TableQueryBuilder<T> orderBy(@NonNull UnaryOperator<OrderBuilder<T>> orderBuilderOp) {
219-
return orderBy(orderBuilderOp.apply(EntityExpressions.newOrderBuilder(table.getType())).build());
225+
return orderBy(orderBuilderOp.apply(EntityExpressions.newOrderBuilder(schema)).build());
220226
}
221227

222228
public TableQueryBuilder<T> defaultOrder() {
223-
orderBy = EntityExpressions.defaultOrder(table.getType());
229+
orderBy = EntityExpressions.defaultOrder(schema);
224230
return this;
225231
}
226232

@@ -258,7 +264,7 @@ public TableQueryBuilder<T> index(String indexName) {
258264
}
259265

260266
private FilterExpression<T> buildFilterExpression(UnaryOperator<FilterBuilder<T>> filterBuilderOp) {
261-
return filterBuilderOp.apply(EntityExpressions.newFilterBuilder(table.getType())).build();
267+
return filterBuilderOp.apply(EntityExpressions.newFilterBuilder(schema)).build();
262268
}
263269

264270
@RequiredArgsConstructor(access = PRIVATE)

0 commit comments

Comments
 (0)