nsmcp::AccessAnalytics method peerSchema (protected)
<instance of nsmcp::AccessAnalytics> peerSchema db
Defined in /usr/local/ns/tcl/nsmcp/access-analytics.tcl
Additive migration also works after definition reload on a live object.
- Parameters:
- db (required)
- Testcases:
- No testcase defined.
Source code: set found 0 set authFound 0 set agentFound 0 $db execute -arrayName row -script { if {$row(name) eq "peer"} { set found 1 } if {$row(name) eq "authenticationState"} { set authFound 1 } if {$row(name) eq "userAgent"} { set agentFound 1 } } {SELECT name FROM pragma_table_info('nsmcp_access_requests')} if {!$found} { $db execute {ALTER TABLE nsmcp_access_requests ADD COLUMN peer TEXT NOT NULL DEFAULT ''} } if {!$authFound} { $db execute {ALTER TABLE nsmcp_access_requests ADD COLUMN authenticationState TEXT NOT NULL DEFAULT 'unknown'} } if {!$agentFound} { $db execute {ALTER TABLE nsmcp_access_requests ADD COLUMN userAgent TEXT NOT NULL DEFAULT ''} } if {[$db scalar {SELECT value FROM nsmcp_access_metadata WHERE key='driverIdentityVersion'}] ne "1"} { # All callers hold a transaction. Fetch bounded batches before # updating, because one nsdb handle cannot nest active row cursors. set cursor 0 while {1} { set rows [$db execute {SELECT rowid AS id,request_id FROM nsmcp_access_requests WHERE rowid>:cursor AND request_id LIKE '-driver:%' ORDER BY rowid LIMIT 256}] if {$rows eq {}} { break } foreach repairEntry $rows { set cursor [dict get $repairEntry id] set identity [::nsmcp::accessRecordIdentity [dict get $repairEntry request_id]] if {[dict get $identity recordSource] eq "driver"} { set pool [dict get $identity pool] $db execute {UPDATE nsmcp_access_requests SET pool=:pool,authenticationState='unknown',accept=NULL,queue=NULL,filter=NULL,run=NULL WHERE rowid=:cursor} } } } $db execute {INSERT OR REPLACE INTO nsmcp_access_metadata VALUES('driverIdentityVersion','1')} } $db execute { CREATE INDEX IF NOT EXISTS nsmcp_access_requests_peer_time ON nsmcp_access_requests(peer,start); INSERT OR REPLACE INTO nsmcp_access_metadata VALUES('schemaVersion','5'); }XQL Not present: Generic, PostgreSQL, Oracle
![[i]](/resources/acs-subsite/ZoomIn16.gif)