Skip to content

Commit

Permalink
modify getKeyTable method
Browse files Browse the repository at this point in the history
  • Loading branch information
AkshatJawne committed Jun 28, 2024
1 parent b4ede0f commit e8f5175
Showing 1 changed file with 25 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ public class JsPartitionedTable extends HasLifecycle implements ServerObject {
private final JsWidget widget;
private List<String> keyColumnTypes;
private PartitionedTableDescriptor descriptor;
private JsTable keys;
private Promise<JsTable> keys;
private JsTable baseTable;
private TableSubscription subscription;

Expand All @@ -83,18 +83,9 @@ public Promise<JsPartitionedTable> refetch() {
return w.getExportedObjects()[0].fetch();
}).then(result -> connection.newState((c, state, metadata) -> {
baseTable = (JsTable) result;
SelectOrUpdateRequest view = new SelectOrUpdateRequest();
view.setSourceId(baseTable.state().getHandle().makeTableReference());
view.setResultId(state.getHandle().makeTicket());
view.setColumnSpecsList(descriptor.getKeyColumnNamesList());
connection.tableServiceClient().view(view, metadata, (fail, success) -> {
c.apply(fail, success);
});
}, "get keys table")
}, "get base table")
.refetch(this, connection.metadata())
.then(state -> Promise.resolve(new JsTable(connection, state)))).then(result -> {
keys = result;

keyColumnTypes = new ArrayList<>();
InitialTableDefinition tableDefinition = WebBarrageUtils.readTableDefinition(
WebBarrageUtils.readSchemaMessage(descriptor.getConstituentDefinitionSchema_asU8()));
Expand All @@ -110,17 +101,17 @@ public Promise<JsPartitionedTable> refetch() {
JsArray<String> keyColumnNames = descriptor.getKeyColumnNamesList();
for (int i = 0; i < keyColumnNames.length; i++) {
String name = keyColumnNames.getAt(i);
Column keyColumn = keys.findColumn(name);
Column keyColumn = baseTable.findColumn(name);
keyColumnTypes.add(keyColumn.getType());
keyColumns[keyColumns.length] = keyColumn;
}
this.columns = JsObject.freeze(columns);
this.keyColumns = JsObject.freeze(keyColumns);

// TODO(deephaven-core#3604) in case of a new session, we should do a full refetch
keys.addEventListener(JsTable.EVENT_DISCONNECT, event -> fireEvent(EVENT_DISCONNECT));
keys.addEventListener(JsTable.EVENT_RECONNECT, event -> {
subscribeToKeys().then(ignore -> {
baseTable.addEventListener(JsTable.EVENT_DISCONNECT, event -> fireEvent(EVENT_DISCONNECT));
baseTable.addEventListener(JsTable.EVENT_RECONNECT, event -> {
subscribeToBaseTable().then(ignore -> {
unsuppressEvents();
fireEvent(EVENT_RECONNECT);
return null;
Expand All @@ -133,7 +124,7 @@ public Promise<JsPartitionedTable> refetch() {
return null;
});
});
return subscribeToKeys();
return subscribeToBaseTable();
});
}

Expand All @@ -142,14 +133,14 @@ public TypedTicket typedTicket() {
return widget.typedTicket();
}

private Promise<JsPartitionedTable> subscribeToKeys() {
subscription = keys.subscribe(
JsArray.asJsArray(keys.findColumns(descriptor.getKeyColumnNamesList().asArray(new String[0]))));
private Promise<JsPartitionedTable> subscribeToBaseTable() {
subscription = baseTable.subscribe(
JsArray.asJsArray(baseTable.findColumns(descriptor.getKeyColumnNamesList().asArray(new String[0]))));
subscription.addEventListener(TableSubscription.EVENT_UPDATED, this::handleKeys);

LazyPromise<JsPartitionedTable> promise = new LazyPromise<>();
subscription.addEventListenerOneShot(TableSubscription.EVENT_UPDATED, data -> promise.succeed(this));
keys.addEventListener(JsTable.EVENT_DISCONNECT, e -> promise.fail("Underlying table disconnected"));
baseTable.addEventListener(JsTable.EVENT_DISCONNECT, e -> promise.fail("Underlying table disconnected"));
return promise.asPromise();
}

Expand Down Expand Up @@ -283,9 +274,21 @@ public Column[] getColumns() {
*
* @return Promise of a Table
*/
@JsMethod
@Deprecated
public Promise<JsTable> getKeyTable() {
return keys.copy();
if (keys == null) {
keys = connection.newState((c, state, metadata) -> {
SelectOrUpdateRequest view = new SelectOrUpdateRequest();
view.setSourceId(baseTable.state().getHandle().makeTableReference());
view.setResultId(state.getHandle().makeTicket());
view.setColumnSpecsList(descriptor.getKeyColumnNamesList());
connection.tableServiceClient().view(view, metadata, c::apply);
}, "view only keys columns")
.refetch(this, connection.metadata())
.then(state -> Promise.resolve(new JsTable(state.getConnection(), state)));
}
assert keys != null;
return keys.then(JsTable::copy);
}

/**
Expand All @@ -300,9 +303,6 @@ public Promise<JsTable> getBaseTable() {

/** Close any subscriptions to underlying tables or key tables */
private void closeSubscriptions() {
if (keys != null) {
keys.close();
}
if (baseTable != null) {
baseTable.close();
}
Expand Down

0 comments on commit e8f5175

Please sign in to comment.