Skip to content

Commit 13a270b

Browse files
committed
fix: do not require table name mapping
1 parent 9beb198 commit 13a270b

File tree

4 files changed

+83
-4
lines changed

4 files changed

+83
-4
lines changed

src/types.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ export type ColumnType = {|
1313
+dataType: string,
1414
+isMaterializedView: boolean,
1515
+isNullable: boolean,
16-
+mappedTableName: string,
16+
+mappedTableName?: string,
1717
+name: string,
1818
+tableName: string
1919
|};

src/utilities/generateDataLoaderFactory.js

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,10 +46,18 @@ const createLoaderByIdsUsingJoiningTableDeclaration = (
4646

4747
// eslint-disable-next-line complexity
4848
export default (
49-
columns: $ReadOnlyArray<ColumnType>,
49+
unnormalisedColumns: $ReadOnlyArray<ColumnType>,
5050
indexes: $ReadOnlyArray<IndexType>,
5151
dataTypeMap: DataTypeMapType,
5252
): string => {
53+
const columns = unnormalisedColumns
54+
.map((column) => {
55+
return {
56+
...column,
57+
mappedTableName: column.mappedTableName || column.tableName
58+
};
59+
});
60+
5361
if (columns.length === 0) {
5462
throw new UnexpectedStateError('Must know multiple columns.');
5563
}

src/utilities/generateFlowTypeDocument.js

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,18 @@ const generateFlowTypeDeclarationBody = (columns: $ReadOnlyArray<ColumnType>, da
2525
return propertyDeclarations.join('\n');
2626
};
2727

28-
export default (columns: $ReadOnlyArray<ColumnType>, dataTypeMap: DataTypeMapType = {}): string => {
28+
export default (unnormalisedColumns: $ReadOnlyArray<ColumnType>, dataTypeMap: DataTypeMapType = {}): string => {
29+
const columns = unnormalisedColumns
30+
.map((column) => {
31+
return {
32+
...column,
33+
mappedTableName: column.mappedTableName || column.tableName
34+
};
35+
});
36+
2937
const tableNames = columns
3038
.map((column) => {
31-
return column.mappedTableName;
39+
return column.mappedTableName || column.tableName;
3240
})
3341
.filter((tableName, index, self) => {
3442
return self.indexOf(tableName) === index;

test/postloader/utilities/generateDataLoaderFactory.js

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,69 @@ import {
77
import generateDataLoaderFactory from '../../../src/utilities/generateDataLoaderFactory';
88

99
test('creates a loader for unique indexes', (t) => {
10+
const actual = trim(generateDataLoaderFactory(
11+
[
12+
{
13+
comment: '',
14+
dataType: 'text',
15+
isMaterializedView: false,
16+
isNullable: false,
17+
name: 'bar',
18+
tableName: 'foo'
19+
}
20+
],
21+
[
22+
{
23+
columnNames: [
24+
'bar'
25+
],
26+
indexIsUnique: true,
27+
indexName: 'quux',
28+
tableName: 'foo'
29+
}
30+
],
31+
{}
32+
));
33+
34+
const expected = trim(`
35+
// @flow
36+
37+
import {
38+
getByIds,
39+
getByIdsUsingJoiningTable
40+
} from 'postloader';
41+
import DataLoader from 'dataloader';
42+
import type {
43+
DatabaseConnectionType
44+
} from 'slonik';
45+
46+
type FooRecordType = {|
47+
+bar: string
48+
|};
49+
50+
export type {
51+
FooRecordType
52+
};
53+
54+
export type LoadersType = {|
55+
+FooByBarLoader: DataLoader<string, FooRecordType>
56+
|};
57+
58+
export const createLoaders = (connection: DatabaseConnectionType, NotFoundError: Class<Error>): LoadersType => {
59+
const FooByBarLoader = new DataLoader((ids) => {
60+
return getByIds(connection, 'foo', ids, 'bar', '"bar"', false, NotFoundError);
61+
});
62+
63+
return {
64+
FooByBarLoader
65+
};
66+
};`);
67+
68+
// eslint-disable-next-line ava/prefer-power-assert
69+
t.is(actual, expected);
70+
});
71+
72+
test('creates a loader for unique indexes (uses mappedTableName when available)', (t) => {
1073
const actual = trim(generateDataLoaderFactory(
1174
[
1275
{

0 commit comments

Comments
 (0)