Class ::xo::db::DBI

::xo::db::DBI[i] create ...

Class Relations

  • class: ::xotcl::Class[i]
  • superclass: ::xo::db::Driver[i]
  • subclass: ::xo::db::DBI-postgresql[i]
::xotcl::Class create ::xo::db::DBI \
     -superclass ::xo::db::Driver

Methods (to be applied on instances)

  • 0or1row (scripted)

    ::xo::db::DBI instproc 0or1row {{-dbn ""} {-bind ""} -prepare qn sql} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        return [:uplevel [list ::dbi_0or1row {*}$bindOpt $sql]]
      }
  • 1row (scripted)

    ::xo::db::DBI instproc 1row {{-dbn ""} {-bind ""} -prepare qn sql} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        return [:uplevel [list ::dbi_1row {*}$bindOpt $sql]]
      }
  • dml (scripted)

    ::xo::db::DBI instproc dml {{-dbn ""} {-bind ""} -prepare qn sql} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        return [:uplevel [list ::dbi_dml {*}$bindOpt -- $sql]]
      }
  • foreach (scripted)

    ::xo::db::DBI instproc foreach {{-dbn ""} {-bind ""} -prepare qn sql body} {
        #if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$sql eq ""} {set qn [uplevel [list [self] qn $qn]]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        set avlists [:uplevel [list dbi_rows -result avlists {*}$bindOpt -- $sql]]
        foreach avlist $avlists {
          foreach {a v} $avlist {:uplevel [list set $a $v]}
          :uplevel $body
        }
      }
  • generate_psql (scripted)

    ::xo::db::DBI instproc generate_psql {package_name object_name} {
        set function_args [:get_function_args $package_name $object_name]
        set function_args [:fix_function_args $function_args $package_name $object_name]
        set sql_info [:sql_arg_info $function_args $package_name $object_name]
        #ns_log notice "-- select ${package_name}__${object_name}($psql_args)"
        set sql_suffix [:psql_statement_suffix ${package_name} ${object_name}]
        dict set sql_info sql [subst { select ${package_name}__${object_name}([dict get $sql_info psql_args]) $sql_suffix}]
        dict set sql_info sql_cmd [subst {dbi_1row -autonull {[dict get $sql_info sql] as result}}]
        dict set sql_info body [subst {
          #function_args: $function_args
          [dict get [set sql_info] sql_cmd]
          return \$result
        }]
        return $sql_info
      }
  • get_value (scripted)

    ::xo::db::DBI instproc get_value {{-dbn ""} -prepare qn sql {default ""}} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        set answers [:uplevel [list ::dbi_rows -result sets -max 1 $sql]]
        if {$answers ne ""} {
          set result [ns_set value $answers 0]
          ns_set free $answers
          return $result
        }
        return $default
      }
  • list (scripted)

    ::xo::db::DBI instproc list {{-dbn ""} {-bind ""} -prepare qn sql} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        set flat [:uplevel [list ::dbi_rows -columns __columns {*}$bindOpt -- $sql]]
        if {[:uplevel {llength $__columns}] > 1} {error "query is returning more than one column"}
        return $flat
      }
  • list_of_lists (scripted)

    ::xo::db::DBI instproc list_of_lists {{-dbn ""} {-bind ""} -prepare qn sql} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        return [:uplevel [list ::dbi_rows -result lists -max 1000000 {*}$bindOpt -- $sql]]
      }
  • prepare (scripted)

    ::xo::db::DBI instproc prepare {-handle {-argtypes ""} sql} {
        return $sql
      }
  • profile (scripted)

    ::xo::db::DBI instproc profile onOff {
        if {$onOff} {
          :mixin ::xo::db::DBI::Profile
        } else {
          if {[:info mixin] ne ""} {:mixin ""}
        }
      }
  • sets (scripted)

    ::xo::db::DBI instproc sets {{-dbn ""} {-bind ""} -prepare qn sql} {
        if {$sql eq ""} {set sql [:get_sql $qn]}
        if {$bind ne ""} {set bindOpt [list -bind $bind]} {set bindOpt ""}
        return [:uplevel [list dbi_rows -result sets {*}$bindOpt -- $sql]]
      }
  • sql_arg_info (scripted)

    ::xo::db::DBI instproc sql_arg_info {function_args package_name object_name} {
        set defined {}
        set psql_args [list]
        set arg_order [list]
        # TODO function args not needed in dict
        foreach arg $function_args {
          lassign $arg arg_name default_value
          lappend psql_args :[string tolower $arg_name]
          lappend arg_order $arg_name
          lappend defined $arg_name $default_value
        }
        return [list  psql_args [join $psql_args ", "]  arg_order $arg_order  defined       $defined  function_args $function_args]
      }
  • transaction (scripted)

    ::xo::db::DBI instproc transaction {{-dbn ""} script args} {
        if {$args ne ""} {
          lassign $args op on_error_code
          set result ""
          if {$op ne "on_error"} {
            error "only 'on_error' as argument after script allowed"
          }
          try {
            set result [:uplevel [list ::dbi_eval -transaction committed $script]]
          } on error {$errorMsg} {
            :uplevel $on_error_code
          }
          return $result
        } else {
          return [:uplevel [list ::dbi_eval -transaction committed $script]]
        }
      }