Forum .LRN Q&A: Similar problem with ETP, not LRN-related
Posted by
Roger Metcalf
on 01/28/03 05:00 PM
I'm posting this here instead of a new topic because it seems closely related. I've installed 4.6. On an ETP page I click "Create a new subtopic", give it a name and title, click Submit, and get:
Database operation "0or1row" failed (exception NSDB, "Query was not a statement returning rows.") while executing "ns_pg_bind 0or1row nsdb0 { select site_node__new(NULL,:parent_id,:name,NULL,:directory_p,:pattern_p,:creation_user,:creation_ip) }" ("uplevel" body line 1) invoked from within "uplevel $ulevel [list ns_pg_bind $type $db $sql" invoked from within "db_exec 0or1row $db $full_statement_name $sql" invoked from within "if {[regexp -nocase -- {^\s*select} $test_sql match]} { db_qd_log QDDebug "PLPGSQL: bypassed anon function" set selection [db_..." ("uplevel" body line 6) invoked from within "uplevel 1 $code_block " invoked from within "db_with_handle db { # plsql calls that are simple selects bypass the plpgsql # mechanism for creating anonymous functions (OpenACS - ..." (procedure "db_exec_plsql" line 13) invoked from within "db_exec_plsql create_object " BEGIN :1 := ${package_name}.new([plsql_utility::generate_attribute_parameter_call -prepend ":" -indent [expr..." (procedure "package_instantiate_object" line 113) invoked from within "package_instantiate_object -extra_vars $extra_vars site_node" (procedure "site_node::new" line 10) invoked from within "site_node::new -name $name -parent_id $parent_id" invoked from within "set node_id [site_node::new -name $name -parent_id $parent_id]" ("uplevel" body line 3) invoked from within "uplevel 1 $transaction_code " (procedure "db_transaction" line 1) invoked from within "db_transaction { set node_id [site_node::new -name $name -pare..." (procedure "site_node_apm_integration::new_site_node_and_package" line 3) invoked from within "site_node_apm_integration::new_site_node_and_package -name $url_path_component -parent_id $parent_node_id -package_key $package_key -instance_name..." (procedure "site_node_mount_application" line 12) invoked from within "site_node_mount_application -return package_id $node_id $instance_name $package_key $pretty_name" (procedure "subsite::auto_mount_application" line 34) invoked from within "subsite::auto_mount_application -instance_name $subtopic_name -pretty_name $subtopic_title "edit-this-page"" invoked from within "if { $confirmed == "t" } { if { [empty_string_p $subtopic_name] || [regexp {[^a-zA-Z0-9\-_]} $subtopic_name] } { ad_return_complaint 1 "..." ("uplevel" body line 21) ...
In tracking this down a bit I find that package_instantiate_object seems to be calling site_node.new with a parameter string (generated by plsql_utility::generate_attribute_parameter_call) that looks like this:
(creation_user => :creation_user, creation_ip => :creation_ip, name => :name, parent_id => :parent_id, directory_p => :directory_p, pattern_p => :pattern_p)
That sure doesn't match the signature for function site_node__new:
create function site_node__new (integer,integer,varchar,integer,boolean,boolean,integer,varchar) returns integer as ' declare new__node_id alias for $1; -- default null new__parent_id alias for $2; -- default null new__name alias for $3; new__object_id alias for $4; -- default null new__directory_p alias for $5; new__pattern_p alias for $6; -- default ''f'' new__creation_user alias for $7; -- default null new__creation_ip alias for $8; -- default null v_node_id site_nodes.node_id%TYPE; v_directory_p site_nodes.directory_p%TYPE; begin ...
I don't know postgresql well yet but aren't parameters passed positionally, and doesn't that look like an Oracle argument list? What am I missing here?