nsmcp::DatabaseSession method statements (protected)

 <instance of nsmcp::DatabaseSession[i]> statements sql

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

Parameters:
sql (required)

Testcases:
No testcase defined.
Source code:
if {[dict exists ${:scripts} $sql]} {
    return [dict get ${:scripts} $sql]
}
set trimmed [string trimleft $sql]
if {[string first {;} $sql]<0 && $trimmed ne {}
    && [string range $trimmed 0 1] ni {-- /*}} {
    set statements [list $sql]
} else {
    set statements {}
    set statement {}
    set length [string length $sql]
    set quote {}
    set comment {}
    set active false
    for {set i 0} {$i<$length} {incr i} {
        set char [string index $sql $i]
        set next [string index $sql [expr {$i+1}]]
        if {$comment eq "line"} {
            append statement $char
            if {$char eq "\n"} {
                set comment {}
            }
            continue
        }
        if {$comment eq "block"} {
            append statement $char
            if {$char eq "*" && $next eq "/"} {
                append statement $next
                incr i
                set comment {}
            }
            continue
        }
        if {$quote ne ""} {
            append statement $char
            if {$char eq $quote} {
                if {$next eq $quote} {
                    append statement $next
                    incr i
                } else {
                    set quote {}
                }
            }
            continue
        }
        if {$char eq "-" && $next eq "-"} {
            set comment line
            append statement $char $next
            incr i
            continue
        }
        if {$char eq "/" && $next eq "*"} {
            set comment block
            append statement $char $next
            incr i
            continue
        }
        if {$char eq "'" || $char eq "\"" || $char eq "\x60"} {
            set active true
            set quote $char
            append statement $char
            continue
        }
        if {$char eq "\u005b"} {
            set active true
            set quote "\u005d"
            append statement $char
            continue
        }
        if {$char eq ";"} {
            if {$active} {
                lappend statements $statement
            }
            set statement {}
            set active false
            continue
        }
        if {![string is space -strict $char]} {
            set active true
        }
        append statement $char
    }
    if {$quote ne "" || $comment eq "block"} {
        error "unterminated trusted SQL script"
    }
    if {$active} {
        lappend statements $statement
    }
}
if {[dict size ${:scripts}]>=64} {
    set :scripts {}
}
dict set :scripts $sql $statements
return $statements
XQL Not present:
Generic, PostgreSQL, Oracle
[ hide source ] | [ make this the default ]
Show another procedure: