https://bugzilla.wikimedia.org/show_bug.cgi?id=28070

           Summary: RSS feed for watchlist throws fatal error when
                    underlying db is postgres
           Product: MediaWiki
           Version: 1.16.2
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: critical
          Priority: Normal
         Component: Watchlist
        AssignedTo: [email protected]
        ReportedBy: [email protected]


Clicking on the Toolbox link "RSS" on the "My watchlist" page throws a fatal
error. The traceback is:

  1: 
  2: Warning: pg_query(): Query failed: ERROR:  invalid input syntax for type
timestamp with time zone: "20110314172654" at character 327 in
/czdata/dbg/phase3/includes/db/DatabasePostgres.php on line 584
  3: 
  4: Call Stack:
  5:     0.0002     673696   1. {main}() /czdata/dbg/phase3/api.php:0
  6:     0.0734   16784344   2. ApiMain->execute()
/czdata/dbg/phase3/api.php:116
  7:     0.0734   16784392   3. ApiMain->executeActionWithErrorHandling()
/czdata/dbg/phase3/includes/api/ApiMain.php:322
  8:     0.0734   16825512   4. ApiMain->executeAction()
/czdata/dbg/phase3/includes/api/ApiMain.php:338
  9:     0.0760   17293168   5. ApiFeedWatchlist->execute()
/czdata/dbg/phase3/includes/api/ApiMain.php:595
 10:     0.0762   17312384   6. ApiMain->execute()
/czdata/dbg/phase3/includes/api/ApiFeedWatchlist.php:95
 11:     0.0762   17312432   7. ApiMain->executeAction()
/czdata/dbg/phase3/includes/api/ApiMain.php:320
 12:     0.0778   17568576   8. ApiQuery->execute()
/czdata/dbg/phase3/includes/api/ApiMain.php:595
 13:     0.0819   18536048   9. ApiQueryWatchlist->execute()
/czdata/dbg/phase3/includes/api/ApiQuery.php:233
 14:     0.0819   18536048  10. ApiQueryWatchlist->run()
/czdata/dbg/phase3/includes/api/ApiQueryWatchlist.php:44
 15:     0.0860   18612800  11. ApiQueryBase->select()
/czdata/dbg/phase3/includes/api/ApiQueryWatchlist.php:188
 16:     0.0860   18612848  12. DatabaseBase->select()
/czdata/dbg/phase3/includes/api/ApiQueryBase.php:244
 17:     0.0861   18613256  13. DatabaseBase->query()
/czdata/dbg/phase3/includes/db/Database.php:874
 18:     0.0861   18614056  14. DatabasePostgres->doQuery()
/czdata/dbg/phase3/includes/db/Database.php:517
 19:     0.0862   18614648  15. pg_query()
/czdata/dbg/phase3/includes/db/DatabasePostgres.php:584
 20: 
 21: <?xml version="1.0"?>
 22: <?xml-stylesheet type="text/css"
href="http://localhost/skins/common/feed.css?270";?>
 23: <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/";>
 24:     <channel>

The problem occurs for the following reason. The timestamp provided to the
pg_qurey statement is in TS_UNIX format, not TS_POSTGRES format. It appears
there is a serious flaw with the logic visited as the result of the
piQueryWatchlist->execute() call. In particular, at line 644 of
ApiBase->getParameterFromSettingsm, thje case statement for 'timestamp' takes
the TS_POSTGRES formatted timestamp and converts it first to TS_UNIX and then
to TS_MW. This value is then supplied to the pg_query. A bit of thought reveals
why this problem does not occur for MySQL databases. Timestamps in TS_UNIX
format are valid for MySQL, so the fatal error doesn't occur.

The stack trace for the timestamp format conversion is:

org.netbeans.modules.viewmodel.TreeModelNode@24740a93[Name=,
displayName=includes/api/ApiBase.php.ApiBase->getParameterFromSettings:652]    
org.netbeans.modules.viewmodel.TreeModelNode@3e624b97[Name=,
displayName=includes/api/ApiBase.php.ApiBase->extractRequestParams:484]    
org.netbeans.modules.viewmodel.TreeModelNode@2750c680[Name=,
displayName=includes/api/ApiQuery.php.ApiQuery->execute:229]    
org.netbeans.modules.viewmodel.TreeModelNode@281811aa[Name=,
displayName=includes/api/ApiMain.php.ApiMain->executeAction:595]    
org.netbeans.modules.viewmodel.TreeModelNode@442fc476[Name=,
displayName=includes/api/ApiMain.php.ApiMain->execute:320]    
org.netbeans.modules.viewmodel.TreeModelNode@1c0b41f3[Name=,
displayName=includes/api/ApiFeedWatchlist.php.ApiFeedWatchlist->execute:95]    
org.netbeans.modules.viewmodel.TreeModelNode@2716c6e7[Name=,
displayName=includes/api/ApiMain.php.ApiMain->executeAction:595]    
org.netbeans.modules.viewmodel.TreeModelNode@485c7bbd[Name=,
displayName=includes/api/ApiMain.php.ApiMain->executeActionWithErrorHandling:338]

Value before conversion (TS_POSTGRES format) is:

2011-03-14 21:32:17 GMT

Value after conversion (TS_MW format) is:

20110314213217

The logic causing this problem is intricate and I cannot suggest a fix.
However, somehow the TS_POSTGRES formatted time should be supplied to the
pg_query, not the TS_MW formatted time. How to effect this change and still
maintain other valid uses of ApiQuery isn't clear (at least it isn't clear to
me).

-- 
Configure bugmail: https://bugzilla.wikimedia.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.
You are on the CC list for the bug.

_______________________________________________
Wikibugs-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikibugs-l

Reply via email to