@@ -461,15 +461,15 @@ def test_size_benchmark(self):
461
461
bf .write (json .dumps (data , indent = 4 ))
462
462
463
463
def test_query_performance (self ):
464
- has_any_flag_count = {}
465
- has_all_flag_count = {}
466
- has_any_flag_load = {}
467
- has_all_flag_load = {}
464
+ any_flag_count = {}
465
+ all_flag_count = {}
466
+ any_flag_load = {}
467
+ all_flag_load = {}
468
468
469
- has_any_bool_count = {}
470
- has_all_bool_count = {}
471
- has_any_bool_load = {}
472
- has_all_bool_load = {}
469
+ any_bool_count = {}
470
+ all_bool_count = {}
471
+ any_bool_load = {}
472
+ all_bool_load = {}
473
473
474
474
with connection .cursor () as cursor :
475
475
for FlagModel , BoolModel in zip (self .FLAG_MODELS , self .BOOL_MODELS ):
@@ -480,8 +480,8 @@ def test_query_performance(self):
480
480
mask = 1
481
481
mask_en = FlagModel ._meta .get_field ("flags" ).enum (mask )
482
482
483
- flag_any_q = FlagModel .objects .filter (flags__has_any = mask_en )
484
- flag_all_q = FlagModel .objects .filter (flags__has_all = mask_en )
483
+ flag_any_q = FlagModel .objects .filter (flags__any = mask_en )
484
+ flag_all_q = FlagModel .objects .filter (flags__all = mask_en )
485
485
486
486
bool_q = [
487
487
Q (** {f"flg_{ flg } " : bool (mask & (1 << flg ) != 0 )})
@@ -502,11 +502,11 @@ def test_query_performance(self):
502
502
503
503
start = perf_counter ()
504
504
flag_any_count = flag_any_q .count ()
505
- has_any_flag_count [FlagModel .num_flags ] = perf_counter () - start
505
+ any_flag_count [FlagModel .num_flags ] = perf_counter () - start
506
506
507
507
start = perf_counter ()
508
508
bool_any_count = bool_any_q .count ()
509
- has_any_bool_count [BoolModel .num_flags ] = perf_counter () - start
509
+ any_bool_count [BoolModel .num_flags ] = perf_counter () - start
510
510
511
511
try :
512
512
# make sure our queries are equivalent
@@ -518,83 +518,75 @@ def test_query_performance(self):
518
518
519
519
start = perf_counter ()
520
520
flag_all_count = flag_all_q .count ()
521
- has_all_flag_count [FlagModel .num_flags ] = perf_counter () - start
521
+ all_flag_count [FlagModel .num_flags ] = perf_counter () - start
522
522
523
523
start = perf_counter ()
524
524
bool_all_count = bool_all_q .count ()
525
- has_all_bool_count [BoolModel .num_flags ] = perf_counter () - start
525
+ all_bool_count [BoolModel .num_flags ] = perf_counter () - start
526
526
527
527
# make sure our queries are equivalent
528
528
self .assertEqual (flag_all_count , bool_all_count )
529
529
530
530
start = perf_counter ()
531
531
flag_any_list = list (flag_any_q .all ())
532
- has_any_flag_load [FlagModel .num_flags ] = perf_counter () - start
532
+ any_flag_load [FlagModel .num_flags ] = perf_counter () - start
533
533
534
534
start = perf_counter ()
535
535
bool_any_list = list (bool_any_q .all ())
536
- has_any_bool_load [BoolModel .num_flags ] = perf_counter () - start
536
+ any_bool_load [BoolModel .num_flags ] = perf_counter () - start
537
537
538
538
# make sure our queries are equivalent
539
539
self .assertEqual (len (flag_any_list ), len (bool_any_list ))
540
540
541
541
start = perf_counter ()
542
542
flag_all_list = list (flag_all_q .all ())
543
- has_all_flag_load [FlagModel .num_flags ] = perf_counter () - start
543
+ all_flag_load [FlagModel .num_flags ] = perf_counter () - start
544
544
545
545
start = perf_counter ()
546
546
bool_all_list = list (bool_all_q .all ())
547
- has_all_bool_load [BoolModel .num_flags ] = perf_counter () - start
547
+ all_bool_load [BoolModel .num_flags ] = perf_counter () - start
548
548
549
549
# make sure our queries are equivalent
550
550
self .assertEqual (len (flag_all_list ), len (bool_all_list ))
551
551
552
- num_flags = sorted (has_any_flag_count .keys ())
552
+ num_flags = sorted (any_flag_count .keys ())
553
553
554
- has_any_count_diff = [
555
- has_any_bool_count [flg ] - has_any_flag_count [flg ] for flg in num_flags
554
+ any_count_diff = [
555
+ any_bool_count [flg ] - any_flag_count [flg ] for flg in num_flags
556
556
]
557
- has_all_count_diff = [
558
- has_all_bool_count [flg ] - has_all_flag_count [flg ] for flg in num_flags
557
+ all_count_diff = [
558
+ all_bool_count [flg ] - all_flag_count [flg ] for flg in num_flags
559
559
]
560
560
561
- has_any_load_diff = [
562
- has_any_bool_load [flg ] - has_any_flag_load [flg ] for flg in num_flags
563
- ]
564
- has_all_load_diff = [
565
- has_all_bool_load [flg ] - has_all_flag_load [flg ] for flg in num_flags
566
- ]
561
+ any_load_diff = [any_bool_load [flg ] - any_flag_load [flg ] for flg in num_flags ]
562
+ all_load_diff = [all_bool_load [flg ] - all_flag_load [flg ] for flg in num_flags ]
567
563
568
- # print(has_any_count_diff )
564
+ # print(any_count_diff )
569
565
# print('--------------------------------')
570
- # print(has_all_count_diff )
566
+ # print(all_count_diff )
571
567
# print('--------------------------------')
572
- # print(has_any_load_diff )
568
+ # print(any_load_diff )
573
569
# print('--------------------------------')
574
- # print(has_all_load_diff )
570
+ # print(all_load_diff )
575
571
576
- has_any_count_tpl = [
577
- (has_any_bool_count [flg ], has_any_flag_count [flg ]) for flg in num_flags
572
+ any_count_tpl = [
573
+ (any_bool_count [flg ], any_flag_count [flg ]) for flg in num_flags
578
574
]
579
- has_all_count_tpl = [
580
- (has_all_bool_count [flg ], has_all_flag_count [flg ]) for flg in num_flags
575
+ all_count_tpl = [
576
+ (all_bool_count [flg ], all_flag_count [flg ]) for flg in num_flags
581
577
]
582
578
583
- has_any_load_tpl = [
584
- (has_any_bool_load [flg ], has_any_flag_load [flg ]) for flg in num_flags
585
- ]
586
- has_all_load_tpl = [
587
- (has_all_bool_load [flg ], has_all_flag_load [flg ]) for flg in num_flags
588
- ]
579
+ any_load_tpl = [(any_bool_load [flg ], any_flag_load [flg ]) for flg in num_flags ]
580
+ all_load_tpl = [(all_bool_load [flg ], all_flag_load [flg ]) for flg in num_flags ]
589
581
590
- print ("------------ has_any_cnt ----------------" )
591
- print (has_any_count_tpl )
592
- print ("------------ has_all_cnt ----------------" )
593
- print (has_all_count_tpl )
594
- print ("------------ has_any_load ---------------" )
595
- print (has_any_load_tpl )
596
- print ("------------ has_all_load ---------------" )
597
- print (has_all_load_tpl )
582
+ print ("------------ any_cnt ----------------" )
583
+ print (any_count_tpl )
584
+ print ("------------ all_cnt ----------------" )
585
+ print (all_count_tpl )
586
+ print ("------------ any_load ---------------" )
587
+ print (any_load_tpl )
588
+ print ("------------ all_load ---------------" )
589
+ print (all_load_tpl )
598
590
599
591
600
592
class CreateRowMixin (BulkCreateMixin ):
@@ -717,11 +709,11 @@ def do_flag_query(self, masks):
717
709
# dont change query order
718
710
719
711
start = perf_counter ()
720
- flg_all .append (self .FlagModel .objects .filter (flags__has_all = mask ).count ())
712
+ flg_all .append (self .FlagModel .objects .filter (flags__all = mask ).count ())
721
713
flg_all_time += perf_counter () - start
722
714
723
715
all_explanation = json .loads (
724
- self .FlagModel .objects .filter (flags__has_all = mask ).explain (
716
+ self .FlagModel .objects .filter (flags__all = mask ).explain (
725
717
format = "json" ,
726
718
analyze = True ,
727
719
buffers = True ,
@@ -736,11 +728,11 @@ def do_flag_query(self, masks):
736
728
flg_all_ftr_time += all_explanation ["Execution Time" ]
737
729
738
730
start = perf_counter ()
739
- flg_any .append (self .FlagModel .objects .filter (flags__has_any = mask ).count ())
731
+ flg_any .append (self .FlagModel .objects .filter (flags__any = mask ).count ())
740
732
flg_any_time += perf_counter () - start
741
733
742
734
any_explanation = json .loads (
743
- self .FlagModel .objects .filter (flags__has_any = mask ).explain (
735
+ self .FlagModel .objects .filter (flags__any = mask ).explain (
744
736
format = "json" ,
745
737
analyze = True ,
746
738
buffers = True ,
@@ -834,7 +826,7 @@ def get_all_q(set_bits):
834
826
835
827
bq_all = reduce (and_ , get_all_q (set_bits ))
836
828
837
- # todo there is not a better way to formulate a has_any query
829
+ # todo there is not a better way to formulate a any query
838
830
# that will use the index ??
839
831
840
832
# bq_any = reduce(
@@ -1016,11 +1008,9 @@ def optimize():
1016
1008
any_ftr_time ,
1017
1009
exact_ftr_time ,
1018
1010
) = query (masks )
1019
- queries [f"{ name } has_all" ] = ctx .captured_queries [0 ]["sql" ]
1020
- queries [f"{ name } has_any" ] = ctx .captured_queries [1 ]["sql" ]
1021
- queries [f"{ name } has_exact" ] = ctx .captured_queries [2 ][
1022
- "sql"
1023
- ]
1011
+ queries [f"{ name } all" ] = ctx .captured_queries [0 ]["sql" ]
1012
+ queries [f"{ name } any" ] = ctx .captured_queries [1 ]["sql" ]
1013
+ queries [f"{ name } exact" ] = ctx .captured_queries [2 ]["sql" ]
1024
1014
1025
1015
pbar .refresh ()
1026
1016
0 commit comments