nsmcp::AccessAnalytics method drop (protected)

 <instance of nsmcp::AccessAnalytics[i]> drop reason cutoff \
    [ limit ]

Defined in /usr/local/ns/tcl/nsmcp/access-analytics.tcl

Parameters:
reason (required)
cutoff (required)
limit (optional, defaults to "0")

Testcases:
No testcase defined.
Source code:
set db ${:db}
set now [clock seconds]
if {$reason eq "age"} {
    set where {start < $cutoff}
} else {
    set where {rowid IN (SELECT rowid FROM nsmcp_access_requests ORDER BY start LIMIT $limit)}
}
set count 0
$db execute -arrayName row -script {
    set count $row(n)
    set first $row(first)
    set last $row(last)
} "SELECT count(*) AS n,coalesce(min(start),0) AS first,coalesce(max(start),0) AS last FROM nsmcp_access_requests WHERE $where"
if {$count==0} {
    return
}
$db execute "DELETE FROM nsmcp_access_requests WHERE $where"
incr :rowCount -$count
$db execute {INSERT INTO nsmcp_access_evictions(dropped_at,first_time,last_time,rows,reason) VALUES(:now,:first,:last,:count,:reason)}
set old [$db scalar {SELECT value FROM nsmcp_access_metadata WHERE key='droppedThrough'}]
set through [expr {$old eq "" ? $last : max(double($old),$last)}]
$db execute {INSERT OR REPLACE INTO nsmcp_access_metadata VALUES('droppedThrough',:through);
    INSERT OR REPLACE INTO nsmcp_access_metadata VALUES('lastEvictionAt',:now)}
set limit ${:evictionLimit}
$db execute {DELETE FROM nsmcp_access_evictions WHERE id NOT IN (SELECT id FROM nsmcp_access_evictions ORDER BY id DESC LIMIT :limit)}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: