@@ -370,35 +370,47 @@ module.exports = function PgConnectionArgFilterPlugin(
370370 }
371371
372372 function resolveWhereLogic ( obj ) {
373- return sql . query `(${ sql . join (
374- Object . keys ( obj ) . map ( key => {
375- if ( key === "or" ) {
376- return sql . query `(${ sql . join (
377- obj [ key ] . map ( o => {
378- return resolveWhereLogic ( o ) ;
379- } ) ,
380- ") or ("
381- ) } )`;
382- } else if ( key === "and" ) {
383- return sql . query `(${ sql . join (
384- obj [ key ] . map ( o => {
385- return resolveWhereLogic ( o ) ;
386- } ) ,
387- ") and ("
388- ) } )`;
389- } else if ( key === "not" ) {
390- return sql . query `NOT (${ resolveWhereLogic ( obj [ key ] ) } )` ;
391- } else {
392- return sql . query `(${ sql . join (
393- Object . keys ( obj [ key ] ) . map ( k => {
394- return resolveWhereComparison ( key , k , obj [ key ] [ k ] ) ;
395- } ) ,
396- ") and ("
397- ) } )`;
373+ // Ignore fields where the expression is {}
374+ const entries = Object . entries ( obj ) . filter (
375+ ( [ , value ] ) => Object . keys ( value ) . length > 0
376+ ) ;
377+ // If no fields remain, return TRUE
378+ if ( entries . length === 0 ) {
379+ return sql . query `TRUE` ;
380+ }
381+ const whereLogic = entries . map ( ( [ key , value ] ) => {
382+ if ( key === "or" ) {
383+ return sql . query `(${ sql . join (
384+ value . map ( o => {
385+ return resolveWhereLogic ( o ) ;
386+ } ) ,
387+ ") or ("
388+ ) } )`;
389+ } else if ( key === "and" ) {
390+ return sql . query `(${ sql . join (
391+ value . map ( o => {
392+ return resolveWhereLogic ( o ) ;
393+ } ) ,
394+ ") and ("
395+ ) } )`;
396+ } else if ( key === "not" ) {
397+ return sql . query `NOT (${ resolveWhereLogic ( value ) } )` ;
398+ } else {
399+ // Ignore filter expressions where the value is null
400+ const e = Object . entries ( value ) . filter ( ( [ , v ] ) => v != null ) ;
401+ // If no filter expressions remain, return TRUE
402+ if ( e . length === 0 ) {
403+ return sql . query `TRUE` ;
398404 }
399- } ) ,
400- ") and ("
401- ) } )`;
405+ return sql . query `(${ sql . join (
406+ Object . entries ( value ) . map ( ( [ k , v ] ) =>
407+ resolveWhereComparison ( key , k , v )
408+ ) ,
409+ ") and ("
410+ ) } )`;
411+ }
412+ } ) ;
413+ return sql . query `(${ sql . join ( whereLogic , ") and (" ) } )` ;
402414 }
403415
404416 if ( filter != null ) {
0 commit comments