Index: openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl,v diff -u -r1.17 -r1.18 --- openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl 14 May 2007 08:11:54 -0000 1.17 +++ openacs-4/packages/xotcl-core/tcl/05-db-procs.tcl 14 May 2007 13:23:31 -0000 1.18 @@ -97,10 +97,10 @@ order by args.position } $package_name $object_name] if {$is_function} { - my set sql [subst {BEGIN :1 := ${package_name}.${object_name}($psql_args); END;}] + my set sql [subst {BEGIN :1 := ${package_name}.${object_name}(\$sql_args); END;}] return {ns_ora exec_plsql_bind $db $sql 1 ""} } else { - my set sql [subst {BEGIN ${package_name}.${object_name}($psql_args); END;}] + my set sql [subst {BEGIN ${package_name}.${object_name}(\$sql_args); END;}] #return {ns_set value [ns_ora select $db $sql] 0} return {ns_ora dml $db $sql} } @@ -128,14 +128,14 @@ DbPackage instproc proc_body-oracle {} { return { #defined: [my array get defined] - set sql_args [list] + set sql_args \[list\] foreach var \[list [my set arg_order]\] { set varname \[string tolower $var\] if {\[info exists $varname\]} { lappend sql_args "$varname => :$varname" } } - set sql_args [join $sql_args ,] + set sql_args \[join $sql_args ,\] set sql "[my set sql]" db_with_handle -dbn $dbn db { #my log "sql=$sql, sql_command=[set sql_command]" @@ -191,6 +191,24 @@ } DbPackage create_all_functions + ::xotcl::Object create sql + if {[db_driverkey ""] eq "postgresql"} { + sql proc limit_select {-limit:required -sql:required {-order ""}} { + set order_clause [expr {$order ne "" ? "ORDER BY $order" : ""}] + return "SELECT $sql $order_clause LIMIT $limit" + } + } else { ;# Oracle + sql proc limit_select {-limit:required -sql:required {-order ""}} { + if {$order ne ""} { + set sql "SELECT * FROM (SELECT $sql) WHERE ROWNUM <= $limit ORDER BY $order" + } else { + set sql "SELECT * FROM (SELECT $sql) WHERE ROWNUM <= $limit" + } + my log "--returned sql = $sql" + return $sql + } + } + ::xotcl::Object create require require set postgresql_table_exists {select 1 from pg_tables where tablename = '$name'} Index: openacs-4/packages/xotcl-core/tcl/generic-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xotcl-core/tcl/generic-procs.tcl,v diff -u -r1.60 -r1.61 --- openacs-4/packages/xotcl-core/tcl/generic-procs.tcl 14 May 2007 08:11:54 -0000 1.60 +++ openacs-4/packages/xotcl-core/tcl/generic-procs.tcl 14 May 2007 13:23:31 -0000 1.61 @@ -432,6 +432,12 @@ and i.item_id = n.item_id \ and o.object_id = $revision_id" } else { + my log "select [join $atts ,], i.parent_id \ + from [my set table_name]i n, cr_items i, acs_objects o \ + where i.item_id = $item_id \ + and n.[my id_column] = coalesce(i.live_revision, i.latest_revision) \ + and o.object_id = i.item_id" + $object db_1row [my qn fetch_from_view_item_id] "\ select [join $atts ,], i.parent_id \ from [my set table_name]i n, cr_items i, acs_objects o \ @@ -672,17 +678,22 @@ return 0 } - # provide the appropriate db_* call for the view update. Earlier - # versions up to 5.3.0d1 used db_dml, newer versions (around july - # 2006) have to use db_0or1row, when the patch for deadlocks and - # duplicate items is applied... + if {[db_driverkey ""] eq "postgresql"} { - apm_version_get -package_key acs-content-repository -array info - array get info - CrItem set insert_view_operation \ - [expr {[apm_version_names_compare $info(version_name) 5.3.0d1] < 1 ? "db_dml" : "db_0or1row"}] - array unset info - + # provide the appropriate db_* call for the view update. Earlier + # versions up to 5.3.0d1 used db_dml, newer versions (around july + # 2006) have to use db_0or1row, when the patch for deadlocks and + # duplicate items is applied... + + apm_version_get -package_key acs-content-repository -array info + array get info + CrItem set insert_view_operation \ + [expr {[apm_version_names_compare $info(version_name) 5.3.0d1] < 1 ? "db_dml" : "db_0or1row"}] + array unset info + } else { ;# Oracle + CrItem set insert_view_operation db_dml + } + # uncomment the following line, if you want to force db_0or1row for # update operations (e.g. when using the provided patch for the # content repository in a 5.2 installation)