Class ::nsmcp::SQLiteDatabase (public)

 ::nx::Class ::nsmcp::SQLiteDatabase[i]

Defined in /usr/local/ns/tcl/nsmcp/lib/database.tcl

Testcases:
No testcase defined.
Source code:
    :property pool:required
    :property {maxBytes:integer 1073741824}
    :variable path
    :method init {} {
        if {${:maxBytes}<4194304} {error "database maxBytes must be at least 4 MiB"}
        set db [:connect]; $db close
    }
    :public method connect {} {
        if {![llength [info commands ns_db]]} {error "databasePool requires nsdb/nsdbsqlite loaded before nsmcp"}
        set handle [ns_db gethandle -timeout 2 ${:pool}]
        if {$handle eq ""} {error "MCP database pool timed out"}
        try {
            if {[ns_db dbtype $handle] ne "sqlite"} {error "MCP databasePool must use nsdbsqlite"}
            set source [ns_db datasource $handle]
            if {$source eq "" || $source eq ":memory:" || [string match file:* $source]} {error "MCP cache requires a persistent file datasource"}
            set :path [file normalize $source]
            file attributes ${:path} -permissions 0600
            set db [::nsmcp::DatabaseSession new -handle $handle]
        } on error {message options} {
            ns_db releasehandle $handle
            return -options $options $message
        }
        try {
            $db execute {PRAGMA busy_timeout=2000; PRAGMA journal_mode=DELETE; PRAGMA synchronous=FULL; PRAGMA temp_store=MEMORY}
            set pages [expr {int(${:maxBytes}*0.45)/[$db scalar {PRAGMA page_size}]}]
            set current [$db scalar {PRAGMA page_count}]
            if {$current>$pages} {error "existing database exceeds configured byte budget"}
            $db execute "PRAGMA max_page_count=$pages"
            return $db
        } on error {message options} {
            $db close
            return -options $options $message
        }
    }
    :public method path {} {return ${:path}}
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: