presage  0.9.1
databaseConnector.h
Go to the documentation of this file.
1 
2 /******************************************************
3  * Presage, an extensible predictive text entry system
4  * ---------------------------------------------------
5  *
6  * Copyright (C) 2008 Matteo Vescovi <matteo.vescovi@yahoo.co.uk>
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License along
19  with this program; if not, write to the Free Software Foundation, Inc.,
20  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
21  *
22  **********(*)*/
23 
24 
25 #ifndef DATABASECONNECTOR_H
26 #define DATABASECONNECTOR_H
27 
28 #ifdef HAVE_CONFIG_H
29 #include "config.h"
30 #endif
31 
32 #include "../../core/logger.h"
33 
34 #include <map>
35 #include <vector>
36 #include <string>
37 
38 typedef std::vector<std::string> Ngram;
39 typedef std::vector<Ngram> NgramTable;
40 
44 class DatabaseConnector {
45 public:
46  DatabaseConnector(const std::string database_name,
47  const size_t cardinality,
48  const bool read_write);
49  DatabaseConnector(const std::string database_name,
50  const size_t cardinality,
51  const bool read_write,
52  const std::string& log_level);
53  virtual ~DatabaseConnector();
54 
57  void createNgramTable(const size_t cardinality) const;
58  void createUnigramTable() const { createNgramTable(1); }
59  void createBigramTable() const { createNgramTable(2); }
60  void createTrigramTable() const { createNgramTable(3); }
61 
64  int getUnigramCountsSum() const;
65 
68  int getNgramCount(const Ngram ngram) const;
69 
72  NgramTable getNgramLikeTable(const Ngram ngram, int limit = -1) const;
73 
76  NgramTable getNgramLikeTableFiltered(const Ngram ngram, const char** filter, int limit = -1) const;
77 
83  int incrementNgramCount(const Ngram ngram) const;
84 
87  void insertNgram(const Ngram ngram, const int count) const;
88 
91  void updateNgram(const Ngram ngram, const int count) const;
92 
95  void removeNgram(const Ngram ngram) const;
96 
100  virtual void beginTransaction() const;
101 
105  virtual void endTransaction() const;
106 
110  virtual void rollbackTransaction() const;
111 
112 protected:
113  // Following functions to be overridden by derived classes.
114  virtual void openDatabase() = 0;
115  virtual void closeDatabase() = 0;
116  virtual NgramTable executeSql(const std::string query) const = 0;
117 
118  std::string get_database_filename () const;
119  std::string set_database_filename (const std::string& filename);
120 
121  void set_cardinality (const size_t cardinality);
122  size_t get_cardinality () const;
123 
124  void set_read_write_mode (const bool read_write);
125  bool get_read_write_mode () const;
126 
128 
129 private:
133  std::string buildSelectLikeClause(const int cardinality) const;
134 
137  std::string buildWhereClause(const Ngram ngram) const;
138 
142  std::string buildWhereLikeClause(const Ngram ngram) const;
143 
146  std::string buildWhereLikeClauseFiltered(const Ngram ngram,const char** filter) const;
147 
150  std::string buildValuesClause(const Ngram ngram, const int count) const;
151 
154  std::string sanitizeString(const std::string) const;
155 
158  int extractFirstInteger(const NgramTable&) const;
159 
160 
161  std::string expand_variables (std::string filename) const;
162  void substitute_variable_in_string (const std::string& variable_name, std::string& filepath) const;
163 
164  std::string database_filename;
165  size_t cardinality;
166  bool read_write_mode;
167 
168 };
169 
170 #endif // DATABASECONNECTOR_H
DatabaseConnector::substitute_variable_in_string
void substitute_variable_in_string(const std::string &variable_name, std::string &filepath) const
Definition: databaseConnector.cpp:404
DatabaseConnector::getNgramCount
int getNgramCount(const Ngram ngram) const
Definition: databaseConnector.cpp:104
DatabaseConnector::insertNgram
void insertNgram(const Ngram ngram, const int count) const
Definition: databaseConnector.cpp:180
DatabaseConnector::set_database_filename
std::string set_database_filename(const std::string &filename)
Definition: databaseConnector.cpp:351
DatabaseConnector::get_read_write_mode
bool get_read_write_mode() const
Definition: databaseConnector.cpp:460
DatabaseConnector::read_write_mode
bool read_write_mode
Definition: databaseConnector.h:165
NgramTable
std::vector< Ngram > NgramTable
Definition: databaseConnector.h:38
DatabaseConnector::get_cardinality
size_t get_cardinality() const
Definition: databaseConnector.cpp:450
Ngram
Definition: ngram.h:32
DatabaseConnector::set_read_write_mode
void set_read_write_mode(const bool read_write)
Definition: databaseConnector.cpp:455
DatabaseConnector::getUnigramCountsSum
int getUnigramCountsSum() const
Definition: databaseConnector.cpp:87
DatabaseConnector::createBigramTable
void createBigramTable() const
Definition: databaseConnector.h:58
DatabaseConnector::expand_variables
std::string expand_variables(std::string filename) const
Definition: databaseConnector.cpp:373
DatabaseConnector::database_filename
std::string database_filename
Definition: databaseConnector.h:163
DatabaseConnector::removeNgram
void removeNgram(const Ngram ngram) const
Definition: databaseConnector.cpp:177
DatabaseConnector::buildWhereLikeClauseFiltered
std::string buildWhereLikeClauseFiltered(const Ngram ngram, const char **filter) const
Definition: databaseConnector.cpp:234
DatabaseConnector::buildValuesClause
std::string buildValuesClause(const Ngram ngram, const int count) const
Definition: databaseConnector.cpp:280
DatabaseConnector::getNgramLikeTable
NgramTable getNgramLikeTable(const Ngram ngram, int limit=-1) const
Definition: databaseConnector.cpp:124
DatabaseConnector::extractFirstInteger
int extractFirstInteger(const NgramTable &) const
Definition: databaseConnector.cpp:304
DatabaseConnector::set_cardinality
void set_cardinality(const size_t cardinality)
Definition: databaseConnector.cpp:445
DatabaseConnector::cardinality
size_t cardinality
Definition: databaseConnector.h:164
DatabaseConnector::createTrigramTable
void createTrigramTable() const
Definition: databaseConnector.h:59
DatabaseConnector::createUnigramTable
void createUnigramTable() const
Definition: databaseConnector.h:57
DatabaseConnector::openDatabase
virtual void openDatabase()=0
DatabaseConnector::incrementNgramCount
int incrementNgramCount(const Ngram ngram) const
Definition: databaseConnector.cpp:156
DatabaseConnector::DatabaseConnector
DatabaseConnector(const std::string database_name, const size_t cardinality, const bool read_write)
Definition: databaseConnector.cpp:34
Ngram
std::vector< std::string > Ngram
Definition: databaseConnector.h:37
DatabaseConnector
Definition: databaseConnector.h:43
DatabaseConnector::endTransaction
virtual void endTransaction() const
Definition: databaseConnector.cpp:336
DatabaseConnector::executeSql
virtual NgramTable executeSql(const std::string query) const =0
DatabaseConnector::logger
Logger< char > logger
Definition: databaseConnector.h:126
DatabaseConnector::beginTransaction
virtual void beginTransaction() const
Definition: databaseConnector.cpp:331
DatabaseConnector::updateNgram
void updateNgram(const Ngram ngram, const int count) const
Definition: databaseConnector.cpp:191
DatabaseConnector::~DatabaseConnector
virtual ~DatabaseConnector()
Definition: databaseConnector.cpp:55
DatabaseConnector::createNgramTable
void createNgramTable(const size_t cardinality) const
Definition: databaseConnector.cpp:58
Logger< char >
DatabaseConnector::buildSelectLikeClause
std::string buildSelectLikeClause(const int cardinality) const
Definition: databaseConnector.cpp:264
DatabaseConnector::closeDatabase
virtual void closeDatabase()=0
DatabaseConnector::rollbackTransaction
virtual void rollbackTransaction() const
Definition: databaseConnector.cpp:341
DatabaseConnector::buildWhereClause
std::string buildWhereClause(const Ngram ngram) const
Definition: databaseConnector.cpp:202
DatabaseConnector::buildWhereLikeClause
std::string buildWhereLikeClause(const Ngram ngram) const
Definition: databaseConnector.cpp:219
DatabaseConnector::getNgramLikeTableFiltered
NgramTable getNgramLikeTableFiltered(const Ngram ngram, const char **filter, int limit=-1) const
Definition: databaseConnector.cpp:140
DatabaseConnector::sanitizeString
std::string sanitizeString(const std::string) const
Definition: databaseConnector.cpp:294
DatabaseConnector::get_database_filename
std::string get_database_filename() const
Definition: databaseConnector.cpp:346