@@ -878,6 +878,12 @@ local function process_tuple(self, state, tuple, opts)
878
878
return true -- skip pivot item too
879
879
end
880
880
881
+ -- Don't count subrequest resulting objects (needed for filtering) into
882
+ -- count of object we show to an user as a result.
883
+ -- XXX: It is better to have an option to control whether selected objects
884
+ -- will be counted as resulting ones.
885
+ local saved_resulting_object_cnt = qstats .resulting_object_cnt
886
+
881
887
-- make subrequests if needed
882
888
for k , v in pairs (filter ) do
883
889
if obj [k ] == nil then
@@ -891,6 +897,8 @@ local function process_tuple(self, state, tuple, opts)
891
897
end
892
898
end
893
899
900
+ qstats .resulting_object_cnt = saved_resulting_object_cnt
901
+
894
902
-- filter out non-matching objects
895
903
local match = utils .is_subtable (obj , filter ) and
896
904
match_using_re (obj , pcre )
@@ -1060,6 +1068,13 @@ local function select_internal(self, collection_name, from, filter, args, extra)
1060
1068
-- fullscan
1061
1069
local primary_index = self .funcs .get_primary_index (self ,
1062
1070
collection_name )
1071
+
1072
+ -- count full scan select request
1073
+ extra .qcontext .statistics .select_requests_cnt =
1074
+ extra .qcontext .statistics .select_requests_cnt + 1
1075
+ extra .qcontext .statistics .full_scan_select_requests_cnt =
1076
+ extra .qcontext .statistics .full_scan_select_requests_cnt + 1
1077
+
1063
1078
for _ , tuple in primary_index :pairs () do
1064
1079
assert (pivot == nil ,
1065
1080
' offset for top-level objects must use a primary index' )
@@ -1102,6 +1117,12 @@ local function select_internal(self, collection_name, from, filter, args, extra)
1102
1117
1103
1118
local tuple_count = 0
1104
1119
1120
+ -- count index select request
1121
+ extra .qcontext .statistics .select_requests_cnt =
1122
+ extra .qcontext .statistics .select_requests_cnt + 1
1123
+ extra .qcontext .statistics .index_select_requests_cnt =
1124
+ extra .qcontext .statistics .index_select_requests_cnt + 1
1125
+
1105
1126
for _ , tuple in index :pairs (index_value , iterator_opts ) do
1106
1127
tuple_count = tuple_count + 1
1107
1128
-- check full match constraint
@@ -1287,7 +1308,10 @@ local function init_qcontext(accessor, qcontext)
1287
1308
local settings = accessor .settings
1288
1309
qcontext .statistics = {
1289
1310
resulting_object_cnt = 0 ,
1290
- fetched_object_cnt = 0
1311
+ fetched_object_cnt = 0 ,
1312
+ select_requests_cnt = 0 ,
1313
+ full_scan_select_requests_cnt = 0 ,
1314
+ index_select_requests_cnt = 0 ,
1291
1315
}
1292
1316
qcontext .deadline_clock = clock .monotonic64 () +
1293
1317
settings .timeout_ms * 1000 * 1000
0 commit comments