/*
* PageTable.java - SQL operations with the table page in wikipedia
*
* Copyright (c) 2005-2007 Andrew Krizhanovsky /aka at mail.iias.spb.su/
* Distributed under GNU Public License.
*/
package wikipedia.sql;
import wikipedia.language.Encodings;
import wikipedia.data.ArticleIdAndTitle;
import wikipedia.kleinberg.SessionHolder;
import java.sql.*;
/** The operations with the page table in MySQL wikipedia */
public class PageTable extends PageTableBase {
private static StringBuffer sb = new StringBuffer(255);
private static ArticleIdAndTitle aid_getbyid = new ArticleIdAndTitle ();
private static ArticleIdAndTitle aid_getbyid_result;
/** Gets
* 1. page's or category title by identifier, and
* 2. page's id is negative if it's redirect page.
*
* @return null if article's title is absent in the table page.
*
* Attention: returned ArticleIdAndTitle is constant construction,
* it will be changed after next call of this function.
*/
public static ArticleIdAndTitle getByID(Connect connect, int id) {
String title = null;
Statement s = null;
ResultSet rs= null;
if(id < 0) // special treatment of id of redirect page
id = -id;
aid_getbyid_result = null;
try {
s = connect.conn.createStatement ();
sb.setLength(0);
sb.append("SELECT page_title, page_is_redirect FROM page WHERE page_id=");
sb.append(id);
s.executeQuery(sb.toString());
rs = s.getResultSet ();
if (rs.next ())
{
Encodings e = connect.enc;
String db_str = Encodings.bytesTo(rs.getBytes("page_title"), e.GetDBEnc());
aid_getbyid.title = e.EncodeFromDB(db_str);
aid_getbyid.id = (1 == rs.getInt("page_is_redirect")) ? -id : id;
aid_getbyid_result = aid_getbyid;
}
} catch(SQLException ex) {
System.err.println("SQLException (PageTable.java getTitleByID()): " + ex.getMessage());
} finally {
if (rs != null) { try { rs.close(); } catch (SQLException sqlEx) { } rs = null; }
if (s != null) { try { s.close(); } catch (SQLException sqlEx) { } s = null; }
}
return aid_getbyid_result;
}
/** Gets type of the page.
* @return Returns namespace MAIN for the article, CATEGORY for the category,
* else null (old -1).
*/
public static PageNamespace getNamespaceByID (SessionHolder session, int id) {
return getNamespaceByID (session.connect, id);
}
}