Index: openacs-4/packages/acs-templating/tcl/list-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-templating/tcl/list-procs.tcl,v diff -u -N -r1.57.8.4 -r1.57.8.5 --- openacs-4/packages/acs-templating/tcl/list-procs.tcl 10 Oct 2013 21:20:10 -0000 1.57.8.4 +++ openacs-4/packages/acs-templating/tcl/list-procs.tcl 11 Oct 2013 08:47:27 -0000 1.57.8.5 @@ -550,10 +550,10 @@ set page $list_properties(filter,page) set groupsize $list_properties(page_groupsize) set page_size $list_properties(page_size) - set page_group [expr ($page - 1 - (($page - 1) % $groupsize)) / $groupsize + 1] - set first_row [expr ($page_group - 1) * $groupsize * $page_size + 1] + set page_group [expr {($page - 1 - (($page - 1) % $groupsize)) / $groupsize + 1}] + set first_row [expr {($page_group - 1) * $groupsize * $page_size + 1}] set last_row [expr {$first_row + ($groupsize + 1) * $page_size - 1}] - set page_offset [expr ($page_group - 1) * $groupsize] + set page_offset [expr {($page_group - 1) * $groupsize}] # Now wrap the provided query with the limit information set list_properties(page_query_substed) [db_map pagination_query] @@ -1208,6 +1208,8 @@ set __agg_group_sum($element_properties(name)) 0 } } + set __have_groupby [expr { [info exists $__list_properties(groupby)] && [set $__list_properties(groupby)] ne "" }] + # This keeps track of the value of the group-by column for sub-totals set __last_group_val {} @@ -1233,11 +1235,12 @@ incr __agg_counter($__element_properties(name)) if {$__element_properties(aggregate) eq "sum" } { set __agg_sum($__element_properties(name)) \ - [expr {$__agg_sum($__element_properties(name)) + ([set $__element_properties(name)] ne "" ? [set $__element_properties(name)] : 0)} ] + [expr {$__agg_sum($__element_properties(name)) + + ([set $__element_properties(name)] ne "" ? [set $__element_properties(name)] : 0)} ] } # Check if the value of the groupby column has changed - if { ([info exists $__list_properties(groupby)] && $$__list_properties(groupby) ne "") } { + if { $__have_groupby } { if { $__last_group_val ne [set $__list_properties(groupby)] } { # Initialize our group counters to 0 set __agg_group_counter($__element_properties(name)) 0 @@ -1246,31 +1249,31 @@ # Update subtotals incr __agg_group_counter($__element_properties(name)) set __agg_group_sum($__element_properties(name)) \ - [expr $__agg_group_sum($__element_properties(name)) + [expr {[string is double [set $__element_properties(name)]] ? [set $__element_properties(name)] : 0}]] + [expr {$__agg_group_sum($__element_properties(name)) + + ([string is double [set $__element_properties(name)]] ? [set $__element_properties(name)] : 0)}] } - + switch $__element_properties(aggregate) { sum { - set $__element_properties(aggregate_col) $__agg_sum($__element_properties(name)) - if { ([info exists $__list_properties(groupby)] && $$__list_properties(groupby) ne "") } { - set $__element_properties(aggregate_group_col) $__agg_group_sum($__element_properties(name)) - } + set $__element_properties(aggregate_col) $__agg_sum($__element_properties(name)) + if { $__have_groupby } { + set $__element_properties(aggregate_group_col) $__agg_group_sum($__element_properties(name)) + } } average { - set $__element_properties(aggregate_col) \ - [expr {$__agg_sum($__element_properties(name)) / $__agg_counter($__element_properties(name))}] - if { ([info exists $__list_properties(groupby)] && $$__list_properties(groupby) ne "") } { - set $__element_properties(aggregate_group_col) \ - [expr {$__agg_sum($__element_properties(name)) / $__agg_group_counter($__element_properties(name))}] - } + set $__element_properties(aggregate_col) \ + [expr {$__agg_sum($__element_properties(name)) / $__agg_counter($__element_properties(name))}] + if { $__have_groupby } { + set $__element_properties(aggregate_group_col) \ + [expr {$__agg_sum($__element_properties(name)) / $__agg_group_counter($__element_properties(name))}] + } } count { - set $__element_properties(aggregate_col) \ - [expr {$__agg_counter($__element_properties(name))}] - if { ([info exists $__list_properties(groupby)] && $$__list_properties(groupby) ne "") } { - set $__element_properties(aggregate_group_col) \ - [expr {$__agg_group_counter($__element_properties(name))}] - } + set $__element_properties(aggregate_col) [expr {$__agg_counter($__element_properties(name))}] + if { $__have_groupby } { + set $__element_properties(aggregate_group_col) \ + [expr {$__agg_group_counter($__element_properties(name))}] + } } default { error "Unknown aggregate function '$__element_properties(aggregate)'" @@ -1283,7 +1286,7 @@ } # Remember this value of the groupby column - if { ([info exists $__list_properties(groupby)] && $$__list_properties(groupby) ne "") } { + if { $__have_groupby } { set __last_group_val [set $__list_properties(groupby)] } }