/* IndexNative.java - SQL operations with the table 'index_native' in Wiktionary
* parsed database.
*
* Copyright (c) 2009-2011 Andrew Krizhanovsky <andrew.krizhanovsky at gmail.com>
* Distributed under EPL/LGPL/GPL/AL/BSD multi-license.
*/
package wikokit.base.wikt.sql.index;
import wikokit.base.wikt.sql.TPage;
import wikokit.base.wikipedia.sql.PageTableBase;
import wikokit.base.wikipedia.sql.Connect;
import java.sql.*;
/** The table 'index_native' - wordlist of words in main (native) language
* with non empty definitions (table in Wiktionary parsed database).
*/
public class IndexNative {
/** Unique page identifier. */
//private int page_id;
//private String page_title;
/** Wiktionary page in native language (page_title and page_id).
* Copy of page.page_title of this Wiktionary article, see TPage.page_title
*/
private TPage page;
/** true, if there is any semantic relation in this Wiktionary article */
private boolean has_relation;
public IndexNative(TPage _page, boolean _has_relation)
{
page = _page;
has_relation = _has_relation;
}
/** Gets unique ID (page.id) from database */
public int getID() {
if(null != page)
return page.getID();
return 0;
}
/** Gets title of the wiki page, word. */
public String getPageTitle() {
if(null != page)
return page.getPageTitle();
return "";
}
/** Returns true, if this Wiktionary page describes any semantic relation. */
public boolean hasRelation() {
return has_relation;
}
/** Counts number of parts of speech in the table 'index_native'
* (words in native language) with non-empty definitions. <br><br>
*
* SELECT COUNT(*) AS size from index_native;
*/
public static int countNumberPOSWithDefinition (Connect conn)
{
StringBuilder str_sql = new StringBuilder();
str_sql.append("SELECT COUNT(*) AS size from index_native");
int size = 0;
try {
Statement s = conn.conn.createStatement ();
try {
ResultSet rs = s.executeQuery (str_sql.toString());
try {
if (rs.next ())
size = rs.getInt("size");
} finally {
rs.close();
}
} finally {
s.close();
}
} catch(SQLException ex) {
System.out.println("SQLException (IndexNative.countNumberPOSWithDefinition()):: sql='" + str_sql.toString() + "' " + ex.getMessage());
}
return size;
}
/** Inserts record into the table 'index_native'.<br><br>
* INSERT INTO index_native (page_id,page_title,has_relation) VALUES (12,"water12",TRUE);
*
* @param page Wiktionary page with title in native language
* @param has_relation true, if there is any semantic relation in this Wiktionary article
*/
public static IndexNative insert ( Connect connect, //String page_title,
TPage page,
boolean has_relation) {
if(null == page) {
System.out.println("Error (IndexNative.insert()):: null argument: page="+page);
return null;
}
StringBuilder str_sql = new StringBuilder();
str_sql.append("INSERT INTO index_native (page_id,page_title,has_relation) VALUES (");
str_sql.append(page.getID());
str_sql.append(",\"");
String page_title = page.getPageTitle();
String safe_title = PageTableBase.convertToSafeStringEncodeToDBWunderscore(
connect, page_title);
str_sql.append(safe_title);
str_sql.append("\",");
str_sql.append(has_relation);
str_sql.append(")");
try
{
Statement s = connect.conn.createStatement ();
try {
s.executeUpdate (str_sql.toString());
} finally {
s.close();
}
}catch(SQLException ex) {
System.out.println("SQLException (IndexNative.insert()):: page_title="+page_title+
"; sql='" + str_sql.toString() + "' " + ex.getMessage());
}
IndexNative index_native = null;
index_native = new IndexNative(page, has_relation);
return index_native;
}
/** Selects row from the table 'index_native' by the page_title.<br><br>
*
* SELECT page_id,has_relation FROM index_native WHERE page_title="apple";
*
* @param page_title title of Wiktionary article
* @return null if page_title is absent
*/
public static IndexNative get (Connect connect,String page_title) {
TPage tp = TPage.get(connect, page_title);
if(null == tp)
return null;
StringBuilder str_sql = new StringBuilder();
str_sql.append("SELECT page_id,has_relation FROM index_native WHERE page_title=\"");
String safe_title = PageTableBase.convertToSafeStringEncodeToDBWunderscore(connect, page_title);
str_sql.append(safe_title);
str_sql.append("\"");
IndexNative _in = null;
try {
Statement s = connect.conn.createStatement ();
try {
ResultSet rs = s.executeQuery (str_sql.toString());
try {
if (rs.next ())
{
boolean has_relation = 0 != rs.getInt("has_relation");
_in = new IndexNative(tp, has_relation);
}
} finally {
rs.close();
}
} finally {
s.close();
}
} catch(SQLException ex) {
System.out.println("SQLException (IndexNative.get()):: sql='" + str_sql.toString() + "' " + ex.getMessage());
}
return _in;
}
/** Deletes row from the table 'index_native' by the page (e.g. by page_title).<br><br>
*
* DELETE FROM index_native WHERE page_title="apple";
*
* @param page Wiktionary article
*/
public static void delete (Connect connect,TPage page) {
StringBuilder str_sql = new StringBuilder();
String safe_title = PageTableBase.convertToSafeStringEncodeToDBWunderscore(
connect, page.getPageTitle());
str_sql.append("DELETE FROM index_native WHERE page_title=\"");
str_sql.append(safe_title);
str_sql.append("\"");
try {
Statement s = connect.conn.createStatement ();
try {
s.execute (str_sql.toString());
} finally {
s.close();
}
} catch(SQLException ex) {
System.out.println("SQLException (IndexNative.delete()):: sql='" + str_sql.toString() + "' " + ex.getMessage());
}
}
}