Forum OpenACS Q&A: Search 5.2.3 fails with more than one FAQ package
Database operation "0or1row" failed (exception NSINT, "Query returned more than one row.") SQL: select package_id from apm_packages where package_key = 'faq' while executing "ns_pg_bind 0or1row nsdb0 { select package_id from apm_packages where package_key = :package_key }" ("uplevel" body line 1) invoked from within "uplevel $ulevel [list ns_pg_bind $type $db $sql]" ("postgresql" arm line 2) invoked from within "switch $driverkey { oracle { return [uplevel $ulevel [list ns_ora $type $db $sql] $args] } ..." invoked from within "db_exec 0or1row $db $full_name $sql" invoked from within "set selection [db_exec 0or1row $db $full_name $sql]" ("uplevel" body line 2) invoked from within "uplevel 1 $code_block " invoked from within "db_with_handle -dbn $dbn db { set selection [db_exec 0or1row $db $full_name $sql] }" (procedure "db_string" line 8) invoked from within "db_string apm_package_id_from_key { select package_id from apm_packages where package_key = :package_key } -default 0" (procedure "apm_package_id_from_key_mem" line 2) invoked from within "apm_package_id_from_key_mem faq" ("eval" body line 1) invoked from within "eval $script" invoked from within "ns_cache eval util_memoize $script { list $current_time [eval $script] }" (procedure "util_memoize" line 20) invoked from within "util_memoize "apm_package_id_from_key_mem $package_key"" (procedure "apm_package_id_from_key" line 2) invoked from within "apm_package_id_from_key faq" (procedure "faq__url" line 3) invoked from within "faq__url $object_id" (procedure "AcsSc.ftscontentprovider.url.faq_q_and_a" line 1) invoked from within "AcsSc.ftscontentprovider.url.faq_q_and_a 7160" ("uplevel" body line 1) invoked from within "uplevel $func_and_args" (procedure "apply" line 3) invoked from within "apply $proc_name $arguments" (procedure "acs_sc_call" line 6) invoked from within "acs_sc_call FtsContentProvider url [list $object_id] $object_type" ("for" body line 9) invoked from within "for { set __i 0 } { $__i < [expr $high - $low +1] } { incr __i } { set object_id [lindex $result(ids) $__i] set object_type [acs_object_type ..." ("uplevel" body line 121) invoked from within "uplevel { ad_page_contract { @author Neophytos Demetriou @creation-date September 01, 2001 @cvs-id $Id: search.tcl,..." (procedure "code::tcl::/var/lib/aolserver/service1/packages/search/www/s..." line 2) invoked from within "code::tcl::$__adp_stub" invoked from within "if { [file exists $__adp_stub.tcl] } { # ensure that data source preparation procedure exists and is up-to-date adp_init tcl $__adp_stub ..." ("uplevel" body line 3) invoked from within "uplevel { if { [file exists $__adp_stub.tcl] } { # ensure that data source preparation procedure exists and is up-to-date adp_init t..." (procedure "adp_prepare" line 2) invoked from within "adp_prepare " (procedure "template::adp_parse" line 30) invoked from within "template::adp_parse [file root [ad_conn file]] {}" (procedure "adp_parse_ad_conn_file" line 5) invoked from within "$handler" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { $handler } ad_script_abort val { # do nothing }" invoked from within "rp_serve_concrete_file [ad_conn file]" (procedure "rp_serve_abstract_file" line 60) invoked from within "rp_serve_abstract_file "$root/$path"" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { rp_serve_abstract_file "$root/$path" set tcl_url2file([ad_conn url]) [ad_conn file] set tcl_url2path_info..."This seems to appear intermittently with different keywords. Any help would be much appreciated.
Check your faq-sc-pros.tcl, where does faq::sc::register_faq_q_and_a_fts_impl *aliases* the "url" operation. The current cvs code points to the proc faq::fts::url which does not seem to have this problem
(disclaimer: only by checking/reading the code -- have not tried it).
My faq-sc-procs.tcl (that I wrote) looks very different than the one in cvs. I tried both and changed apm_package_url_from_key to apm_package_url_from_id, but I still get this error for some keywords:
can't read "datasource(content)": no such element in array while executing "search::content_get txt $datasource(content) $datasource(mime) $datasource(storage_type)" ("for" body line 6) invoked from within "for { set __i 0 } { $__i < [expr $high - $low +1] } { incr __i } { set object_id [lindex $result(ids) $__i] set object_type [acs_object_type ..." ("uplevel" body line 121) invoked from within "uplevel { ad_page_contract { @author Neophytos Demetriou @creation-date September 01, 2001 @cvs-id $Id: search.tcl,..." (procedure "code::tcl::/var/lib/aolserver/service1/packages/search/www/s..." line 2) invoked from within "code::tcl::$__adp_stub" invoked from within "if { [file exists $__adp_stub.tcl] } { # ensure that data source preparation procedure exists and is up-to-date adp_init tcl $__adp_stub ..." ("uplevel" body line 3) invoked from within "uplevel { if { [file exists $__adp_stub.tcl] } { # ensure that data source preparation procedure exists and is up-to-date adp_init t..." (procedure "adp_prepare" line 2) invoked from within "adp_prepare " (procedure "template::adp_parse" line 30) invoked from within "template::adp_parse [file root [ad_conn file]] {}" (procedure "adp_parse_ad_conn_file" line 5) invoked from within "$handler" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { $handler } ad_script_abort val { # do nothing }" invoked from within "rp_serve_concrete_file [ad_conn file]" (procedure "rp_serve_abstract_file" line 60) invoked from within "rp_serve_abstract_file "$root/$path"" ("uplevel" body line 2) invoked from within "uplevel $code" invoked from within "ad_try { rp_serve_abstract_file "$root/$path" set tcl_url2file([ad_conn url]) [ad_conn file] set tcl_url2path_info..."
the error
can't read "datasource(content)": no such element in array
while executing
"search::content_get txt $datasource(content) $datasource(mime) $datasource(storage_type)"
means that the datasource tcl proc did not return the "content" element of the array. One way to test this is to call the datasource proc with the object_id of the item that is not working from the ds/shell page.