nsmcp::AccessRecordPartitions method partitionOpen (protected)

 <instance of nsmcp::AccessRecordPartitions[i]> partitionOpen

Defined in /usr/local/ns/tcl/nsmcp/log-traffic-record-01-partitions.tcl

Testcases:
No testcase defined.
Source code:
set stored [:stateGet partitionInterval 0]
if {$stored!=${:partitionInterval} && ($stored>0 || ${:partitionInterval}>0)} {
    if {$stored>0} {
        error "record-store-partition-reset-required"
    }
    if {${:mode} ne "writer"} {
        error "record-store-partition-reset-required"
    }
    ${:db} transaction {
        # Check under the writer lock; never convert populated caches.
        if {[${:db} scalar {SELECT EXISTS(SELECT 1 FROM main.rows LIMIT 1)
            OR EXISTS(SELECT 1 FROM main.files LIMIT 1)}]} {
            error "record-store-partition-reset-required"
        }
        ${:db} execute {
            ALTER TABLE main.rows RENAME TO row_template;
            CREATE TABLE main.partitions(
                start INTEGER PRIMARY KEY,stop INTEGER NOT NULL,name TEXT UNIQUE NOT NULL,
                n INTEGER NOT NULL DEFAULT 0,first REAL,last REAL)
        }
        ${:db} execute {UPDATE main.meta SET version=4}
        :statePut partitionInterval ${:partitionInterval}
        :statePut rollupsReady 1
        set bootstrap [:dict getdef ${:settings} bootstrapSeconds 172800]
        :statePut bootstrapFrom [expr {[clock seconds]-min($bootstrap,[dict get ${:settings} retention])}]
        :partitionView
    }
}
if {${:partitionInterval}>0} {
    set sql [${:db} scalar {SELECT sql FROM main.sqlite_schema WHERE name='row_template' AND type='table'}]
    if {$sql eq {} || [string first ( $sql]<0} {
        error "record-store-partition-reset-required"
    }
    set :partitionDDL [string range $sql [string first ( $sql] end]
}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: