Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 4a4761f

Browse files
committed
Provide functions to eliminate if statements
1 parent 7b637b7 commit 4a4761f

1 file changed

Lines changed: 76 additions & 0 deletions

File tree

test/utils/readRowsImpl.ts

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ import {
1919
ChunkGeneratorParameters,
2020
ReadRowsServiceParameters,
2121
} from './readRowsServiceParameters';
22+
import {google} from '../../protos/protos';
23+
import IRowRange = google.bigtable.v2.IRowRange;
2224

2325
const DEBUG = process.env.BIGTABLE_TEST_DEBUG === 'true';
2426

@@ -163,6 +165,80 @@ function isKeyInRowSet(
163165
return true;
164166
}
165167

168+
/** Gets the property of the first row range in the request.
169+
* @param stream The stream object to get the property from.
170+
* @param property The property to get.
171+
*/
172+
function getKeyProperty(
173+
request: protos.google.bigtable.v2.IReadRowsRequest,
174+
property: keyof IRowRange
175+
) {
176+
if (
177+
request?.rows?.rowRanges &&
178+
request?.rows?.rowRanges[0] &&
179+
request?.rows?.rowRanges[0][property]?.toString()
180+
) {
181+
return request?.rows?.rowRanges[0][property]?.toString();
182+
}
183+
return undefined;
184+
}
185+
186+
/** Gets the key from the request object.
187+
* @param stream The stream object to get the key from.
188+
* @param keySelectionParameters The parameters for selecting the key.
189+
* @returns {number} The selected key for generating chunks
190+
*/
191+
function getSelectedKey(
192+
request: protos.google.bigtable.v2.IReadRowsRequest,
193+
keySelectionParameters: {
194+
keyOpenProperty: keyof IRowRange;
195+
keyClosedProperty: keyof IRowRange;
196+
defaultKey?: number;
197+
}
198+
) {
199+
const keyRequestOpen = getKeyProperty(
200+
request,
201+
keySelectionParameters.keyOpenProperty
202+
);
203+
const keyRequestClosed = getKeyProperty(
204+
request,
205+
keySelectionParameters.keyClosedProperty
206+
);
207+
const defaultKey = keySelectionParameters.defaultKey;
208+
return defaultKey !== undefined
209+
? defaultKey
210+
: keyRequestClosed
211+
? parseInt(keyRequestClosed as string)
212+
: parseInt(keyRequestOpen as string) + 1;
213+
}
214+
215+
/** Generates chunks for rows in a fake table that match the provided RowSet.
216+
* The fake table contains monotonically increasing zero padded rows
217+
* in the range [keyFrom, keyTo).
218+
* @param request The request object to generate chunks from.
219+
* @param serviceParameters The parameters for generating chunks.
220+
* @returns {protos.google.bigtable.v2.ReadRowsResponse.ICellChunk[]} The generated chunks.
221+
*/
222+
function generateChunksFromRequest(
223+
request: protos.google.bigtable.v2.IReadRowsRequest,
224+
serviceParameters: ReadRowsServiceParameters
225+
) {
226+
return generateChunks({
227+
keyFrom: getSelectedKey(request, {
228+
keyOpenProperty: 'startKeyOpen',
229+
keyClosedProperty: 'startKeyClosed',
230+
defaultKey: serviceParameters.defaultKeyFrom,
231+
}),
232+
keyTo: getSelectedKey(request, {
233+
keyOpenProperty: 'endKeyOpen',
234+
keyClosedProperty: 'endKeyClosed',
235+
defaultKey: serviceParameters.defaultKeyTo,
236+
}),
237+
chunkSize: serviceParameters.chunkSize,
238+
valueSize: serviceParameters.valueSize,
239+
});
240+
}
241+
166242
// Returns an implementation of the server streaming ReadRows call that would return
167243
// monotonically increasing zero padded rows in the range [keyFrom, keyTo).
168244
// The returned implementation can be passed to gRPC server.

0 commit comments

Comments
 (0)