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,
 
            
            


