@@ -9,7 +9,8 @@ import { underscore } from '../helper';
99import { IFilterValue , IParsedFilter , parseFilter } from '../filter/parser.filter' ;
1010import { IOrderValue , IParsedOrder , parseOrder } from '../order/parser.order' ;
1111import { IPaginationValue , IParsedPagination , parsePagination } from '../pagination/parser.pagination' ;
12- import { getTableColumns , getTableForeignKeys } from '../store' ;
12+ import { getTableColumns , getTableForeignKeys , getTablePrimaryKeys } from '../store' ;
13+ import { invalid_data_source } from '../error' ;
1314
1415import { manyToOneLoader } from './many-to-one.loader' ;
1516import { oneToManyLoader } from './one-to-many.loader' ;
@@ -44,6 +45,12 @@ export interface IPrivateLoaderData extends ILoaderData {
4445 entity_manager ?: EntityManager ;
4546}
4647
48+ let data_source : DataSource = null ;
49+
50+ export function setDataSource ( ds : DataSource ) {
51+ data_source = ds ;
52+ }
53+
4754export const Loader = createParamDecorator ( ( data : ILoaderData , ctx : ExecutionContext ) => {
4855 const args = ctx . getArgs ( ) ;
4956
@@ -89,16 +96,27 @@ export const Loader = createParamDecorator((data: ILoaderData, ctx: ExecutionCon
8996 const selected_fields = recursiveSelectedFields ( _data , info . fieldNodes , info . fragments ) ;
9097 const entity_table_columns = getTableColumns ( entity_class_name ) ;
9198 const entity_table_foreign_keys = getTableForeignKeys ( entity_class_name ) ;
99+ const entity_table_primary_keys = getTablePrimaryKeys ( entity_class_name ) ;
92100
93101 const selected_columns = new Set ( Array . from ( selected_fields ) . filter ( ( field ) => entity_table_columns . has ( field ) ) ) ;
94102
95103 entity_table_foreign_keys . forEach ( ( fk ) => {
96104 selected_columns . add ( fk ) ;
97105 } ) ;
98106
107+ entity_table_primary_keys . forEach ( ( pk ) => {
108+ selected_columns . add ( pk ) ;
109+ } ) ;
110+
99111 if ( ! _data . entity_manager ) {
100112 if ( ! gctx [ 'entity_manager' ] ) {
101- gctx [ 'entity_manager' ] = gctx . data_source . createEntityManager ( ) ;
113+ if ( data_source ) {
114+ gctx [ 'entity_manager' ] = data_source . createEntityManager ( ) ;
115+ } else if ( gctx ?. data_source ) {
116+ gctx [ 'entity_manager' ] = gctx . data_source . createEntityManager ( ) ;
117+ } else {
118+ invalid_data_source ( { raise : true } ) ;
119+ }
102120 }
103121
104122 _data . entity_manager = gctx [ 'entity_manager' ] ;
0 commit comments