Forum OpenACS Development: fs::add_file Versus callback search::datasource
Adding files, using fs::add_file (externally from file-storage), returns an error related to the callback proc: [search::datasource].
It seems "dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource::impl::file_storage_object.fs_datasource" has been missing somehow, but the error only happens when I use [fs::add_file] externally from file-storage package (i.e. not within file-stoage pkg)
Plus, datasources are present in the datamodel
It's seems because fs::add_file has been used outside file-storage pkg, the callback missed dbqd's location.
How would I make the callback aware of dbqd location (i.e. path "dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource) ?
Context. datasources are present in the datamodel and error.log is pasted bellow.
Best wishes,
revision_id | item_id | title | description | publish_date | mime_type | nls_language | lob | content | content_length
-------------+---------+-------+-------------+-------------------------------+--------------------------+--------------+-----+----------------+----------------
43854 | 43853 | | | 2018-05-03 14:25:26.480492-03 | application/octet-stream | | | /43/85/3/43854 | 5633259
(1 row)item_id | parent_id | name | locale | live_revision | latest_revision | publish_status | content_type | storage_type | storage_area_key | tree_sortkey | max_child_sortkey
---------+-----------+----------+--------+---------------+-----------------+----------------+---------------------+--------------+------------------+------------------------------------------------------------------------------------------+-------------------
43853 | 43817 | campanha | | 43854 | 43854 | ready | file_storage_object | file | CR_FILES | 1000000000000000000000111110010010000000000000000000001110000100000000010001101000000100 |
(
[03/May/2018:14:25:26][1808.b40f8b40][-conn:evex:0:249-] Warning: Replaced sTaRt/eNd magic tags in ad_text_to_html
[03/May/2018:14:25:50][1808.a2effb40][-sched:10-] Error: search::indexer: error getting datasource for 43854 file_storage_object: No fullquery for dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource::impl::file_storage_object.fs_datasource and default SQL empty - query for statement missing
No fullquery for dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource::impl::file_storage_object.fs_datasource and default SQL empty - query for statement missing
while executing
"error "No fullquery for $statement_name and default SQL empty - query for statement missing""
(procedure "db_qd_replace_sql" line 10)
invoked from within
"db_qd_replace_sql $statement_name $pre_sql"
(procedure "db_exec" line 13)
invoked from within
"db_exec 0or1row $db $full_statement_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_statement_name $sql]
}"
(procedure "::nsf::procs::db_0or1row" line 48)
invoked from within
"db_0or1row fs_datasource {} -column_array datasource"
(procedure "::callback::search::datasource::impl::file_storage_object" line 4)
invoked from within
"::callback::search::datasource::impl::file_storage_object -object_id 43854"
("uplevel" body line 1)
invoked from within
"::uplevel 1 [::list $procname {*}$args]"
invoked from within
"callback -impl $object_type search::datasource -object_id $object_id"
invoked from within
search::indexer
invoked from within
ad_run_scheduled_proc {{t f 31 search::indexer {} 1525360476 0 f}}
[03/May/2018:14:25:50][1808.a2effb40][-sched:10-] Error: search::indexer: error getting datasource for 43854 file_storage_object: No fullquery for dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource::impl::file_storage_object.fs_datasource and default SQL empty - query for statement missing
No fullquery for dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource::impl::file_storage_object.fs_datasource and default SQL empty - query for statement missing
while executing
"error "No fullquery for $statement_name and default SQL empty - query for statement missing""
(procedure "db_qd_replace_sql" line 10)
invoked from within
"db_qd_replace_sql $statement_name $pre_sql"
(procedure "db_exec" line 13)
invoked from within
"db_exec 0or1row $db $full_statement_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_statement_name $sql]
}"
(procedure "::nsf::procs::db_0or1row" line 48)
invoked from within
"db_0or1row fs_datasource {} -column_array datasource"
(procedure "::callback::search::datasource::impl::file_storage_object" line 4)
invoked from within
"::callback::search::datasource::impl::file_storage_object -object_id 43854"
("uplevel" body line 1)
invoked from within
"::uplevel 1 [::list $procname {*}$args]"
invoked from within
"callback -impl $object_type search::datasource -object_id $object_id"
invoked from within
search::indexer
invoked from within
ad_run_scheduled_proc {{t f 31 search::indexer {} 1525360476 0 f}}
File file-storage-callback-procs.tcl Line 52
ad_proc -public -callback search::datasource -impl file_storage_object {} {
...
db_0or1row fs_datasource {} -column_array datasource
...
However, the query is there and works fine, when used directly in the file-storage pkg.
<fullquery name="fs_datasource">
select r.revision_id as object_id, i.name as title, (case i.storage_type when 'lob' then r.lob::text when 'file' then '[cr_fs_path]' || r.content else r.content end) as content, r.mime_type as mime, '' as keywords, i.storage_type as storage_type from cr_items i, cr_revisions r where r.item_id = i.item_id and r.revision_id = 43854
Furthermore, the datasource exists. Meaning, the execution of fs::add_file seems ti be working just fine.
object_id | title | content | mime | keywords | storage_type
-----------+----------+----------------------------+--------------------------+----------+--------------
43854 | campanha | [cr_fs_path]/43/85/3/43854 | application/octet-stream | | file
(1 row)
How would I make the callback aware of "No fullquery for dbqd.file-storage.tcl.file-storage-callback-procs.callback::search::datasource::impl::file_storage_object.fs_datasource" when fs::add_file is declared outside file-stroage package?
What is the fundamental concept, which I don't understand here?
Best wishes,