130
130
--- do_filter = <boolean>,
131
131
--- pivot_filter = <table>,
132
132
--- resolveField = <function>,
133
+ --- is_hidden = <boolean>,
133
134
--- },
134
135
--- collection_name = <string>,
135
136
--- from = <...>,
@@ -305,7 +306,7 @@ local function generate_cache_only_request(prepared_resolve, field_type,
305
306
-- cache_only_prepared_resolve is the same as prepared_resolve, but it does
306
307
-- not require fetching connected objects to fetch and return this one
307
308
local cache_only_prepared_resolve = field_type .prepare_resolve (
308
- object , local_args , info )
309
+ object , local_args , info , { is_hidden = true } )
309
310
local cache_only_selections = filters_to_selections (
310
311
bare_inner_type , filter )
311
312
return {
451
452
---
452
453
--- @tparam table qcontext the following options:
453
454
---
455
+ --- * is_item_cache_only
454
456
--- * qcontext: query-local storage for various purposes
455
457
---
456
458
--- @treturn table `prepared` of the following format:
478
480
local function filter_object (object , object_type , selections , context , opts )
479
481
local opts = opts or {}
480
482
local qcontext = opts .qcontext
483
+ local is_item_cache_only = opts .is_item_cache_only or false
481
484
482
485
local nullable_object_type = core_types .nullable (object_type )
483
486
@@ -530,7 +533,7 @@ local function filter_object(object, object_type, selections, context, opts)
530
533
531
534
if field_type .prepare_resolve then
532
535
local prepared_resolve = field_type .prepare_resolve (object , args ,
533
- info )
536
+ info , { is_hidden = is_item_cache_only } )
534
537
535
538
fields_info [field_name ] = {
536
539
is_list = is_list ,
@@ -577,6 +580,7 @@ local function filter_object_list(object_list, object_type, selections, context,
577
580
opts )
578
581
local opts = opts or {}
579
582
local qcontext = opts .qcontext
583
+ local is_item_cache_only = opts .is_item_cache_only or false
580
584
581
585
local nullable_object_type = core_types .nullable (object_type )
582
586
assert (nullable_object_type .__type == ' List' )
@@ -602,7 +606,7 @@ local function filter_object_list(object_list, object_type, selections, context,
602
606
603
607
for _ , object in ipairs (object_list or {}) do
604
608
local prepared = filter_object (object , object_type , selections , context ,
605
- {qcontext = qcontext })
609
+ {qcontext = qcontext , is_item_cache_only = is_item_cache_only })
606
610
local cache_only_prepared_object = prepared .cache_only_prepared_object
607
611
local prepared_object = prepared .prepared_object
608
612
table.insert (cache_only_prepared_object_list ,
@@ -634,29 +638,7 @@ local function invoke_resolve(prepared_object, context, opts)
634
638
if field_info .prepared_resolve .is_calculated then
635
639
object_or_list = field_info .prepared_resolve .objs
636
640
else
637
- -- XXX: implement retired flag for invoke resolve and don't
638
- -- save-restore resulting_object_cnt
639
- local prepared_select
640
- local extra
641
- local select_state
642
- local saved_resulting_object_cnt
643
- if is_item_cache_only then
644
- -- prevent resulting_object_cnt from being affected by cache
645
- -- only requests
646
- prepared_select = field_info .prepared_resolve .prepared_select
647
- extra = prepared_select .extra
648
- select_state = prepared_select .select_state
649
- local qcontext = extra .qcontext
650
- saved_resulting_object_cnt =
651
- qcontext .statistics .resulting_object_cnt
652
- end
653
641
object_or_list , object_type = field_info .prepared_resolve :invoke ()
654
- if saved_resulting_object_cnt then
655
- extra .qcontext .statistics .resulting_object_cnt =
656
- saved_resulting_object_cnt
657
- select_state .qcontext .statistics .resulting_object_cnt =
658
- saved_resulting_object_cnt
659
- end
660
642
end
661
643
object_type = object_type or field_info .kind
662
644
local selections = field_info .selections
@@ -667,7 +649,7 @@ local function invoke_resolve(prepared_object, context, opts)
667
649
if field_info .is_list then
668
650
local child_prepared_list = filter_object_list (
669
651
object_or_list , object_type , selections , context ,
670
- {qcontext = qcontext })
652
+ {qcontext = qcontext , is_item_cache_only = is_item_cache_only })
671
653
-- don't perform construction for cache_only objects
672
654
local child_cache_only_prepared_object_list =
673
655
child_prepared_list .cache_only_prepared_object_list
@@ -697,7 +679,8 @@ local function invoke_resolve(prepared_object, context, opts)
697
679
end
698
680
else
699
681
local child_prepared = filter_object (object_or_list ,
700
- object_type , selections , context , {qcontext = qcontext })
682
+ object_type , selections , context , {qcontext = qcontext ,
683
+ is_item_cache_only = is_item_cache_only })
701
684
-- don't perform construction for cache_only objects
702
685
local child_cache_only_prepared_object =
703
686
child_prepared .cache_only_prepared_object
0 commit comments