move knowledge base into the library
This commit is contained in:
@@ -6,10 +6,14 @@ configure_file(input : 'version.h.in',
|
||||
configuration : conf_data
|
||||
)
|
||||
|
||||
subdir('models')
|
||||
|
||||
obelisk_lib_sources = files(
|
||||
'obelisk.cpp'
|
||||
)
|
||||
|
||||
obelisk_lib_sources += obelisk_model_sources
|
||||
|
||||
sqlite3 = dependency('sqlite3')
|
||||
|
||||
incdirs = include_directories(['.', 'include'])
|
||||
|
32
src/lib/models/action.cpp
Normal file
32
src/lib/models/action.cpp
Normal file
@@ -0,0 +1,32 @@
|
||||
#include "models/action.h"
|
||||
|
||||
const char* obelisk::Action::createTable()
|
||||
{
|
||||
return R"(
|
||||
CREATE TABLE "action" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"name" TEXT NOT NULL CHECK(trim(name) != '') UNIQUE,
|
||||
PRIMARY KEY("id" AUTOINCREMENT)
|
||||
);
|
||||
)";
|
||||
}
|
||||
|
||||
int& obelisk::Action::getId()
|
||||
{
|
||||
return id_;
|
||||
}
|
||||
|
||||
void obelisk::Action::setId(int id)
|
||||
{
|
||||
id_ = id;
|
||||
}
|
||||
|
||||
std::string& obelisk::Action::getName()
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
void obelisk::Action::setName(std::string name)
|
||||
{
|
||||
name_ = name;
|
||||
}
|
110
src/lib/models/action.h
Normal file
110
src/lib/models/action.h
Normal file
@@ -0,0 +1,110 @@
|
||||
#ifndef OBELISK_MODELS_ACTION_H
|
||||
#define OBELISK_MODELS_ACTION_H
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
/**
|
||||
* @brief The Action model represents an action to take when a fact is true
|
||||
* or false.
|
||||
*
|
||||
*/
|
||||
class Action
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* @brief The ID of the Action in the knowledge base.
|
||||
*
|
||||
*/
|
||||
int id_;
|
||||
|
||||
/**
|
||||
* @brief The name of the Action.
|
||||
*
|
||||
*/
|
||||
std::string name_;
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief Construct a new Action object.
|
||||
*
|
||||
*/
|
||||
Action() :
|
||||
id_(0),
|
||||
name_("")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Action object.
|
||||
*
|
||||
* @param[in] id The ID of the Action.
|
||||
*/
|
||||
Action(int id) :
|
||||
id_(id),
|
||||
name_("")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Action object.
|
||||
*
|
||||
* @param[in] name The name of the Action.
|
||||
*/
|
||||
Action(std::string name) :
|
||||
id_(0),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Action object.
|
||||
*
|
||||
* @param[in] id The ID of the Action.
|
||||
* @param[in] name The name of the Action.
|
||||
*/
|
||||
Action(int id, std::string name) :
|
||||
id_(id),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create the Action table in the knowledge base.
|
||||
*
|
||||
* @return const char* Returns the query used to create the table.
|
||||
*/
|
||||
static const char* createTable();
|
||||
|
||||
/**
|
||||
* @brief Get the ID of the Action.
|
||||
*
|
||||
* @return int& Returns the ID.
|
||||
*/
|
||||
int& getId();
|
||||
|
||||
/**
|
||||
* @brief Set the ID of the Action.
|
||||
*
|
||||
* @param[in] id Set the ID of the Action.
|
||||
*/
|
||||
void setId(int id);
|
||||
|
||||
/**
|
||||
* @brief Get the name of the Action.
|
||||
*
|
||||
* @return std::string& The Action name.
|
||||
*/
|
||||
std::string& getName();
|
||||
|
||||
/**
|
||||
* @brief Set the name of the Action.
|
||||
*
|
||||
* @param[in] name The name of the Action.
|
||||
*/
|
||||
void setName(std::string name);
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
158
src/lib/models/entity.cpp
Normal file
158
src/lib/models/entity.cpp
Normal file
@@ -0,0 +1,158 @@
|
||||
#include "models/entity.h"
|
||||
#include "models/error.h"
|
||||
|
||||
const char* obelisk::Entity::createTable()
|
||||
{
|
||||
return R"(
|
||||
CREATE TABLE "entity" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"name" TEXT NOT NULL CHECK(trim(name) != '') UNIQUE,
|
||||
PRIMARY KEY("id" AUTOINCREMENT)
|
||||
);
|
||||
)";
|
||||
}
|
||||
|
||||
void obelisk::Entity::selectByName(sqlite3* dbConnection)
|
||||
{
|
||||
if (dbConnection == nullptr)
|
||||
{
|
||||
throw obelisk::DatabaseException("database isn't open");
|
||||
}
|
||||
|
||||
sqlite3_stmt* ppStmt = nullptr;
|
||||
|
||||
auto result = sqlite3_prepare_v2(dbConnection, "SELECT id, name FROM entity WHERE name=?", -1, &ppStmt, nullptr);
|
||||
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
|
||||
result = sqlite3_bind_text(ppStmt, 1, getName().c_str(), -1, SQLITE_STATIC);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_step(ppStmt);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_DONE :
|
||||
// no rows in the database
|
||||
break;
|
||||
case SQLITE_ROW :
|
||||
setId(sqlite3_column_int(ppStmt, 0));
|
||||
setName((char*) sqlite3_column_text(ppStmt, 1));
|
||||
break;
|
||||
case SQLITE_BUSY :
|
||||
throw obelisk::DatabaseBusyException();
|
||||
break;
|
||||
case SQLITE_MISUSE :
|
||||
throw obelisk::DatabaseMisuseException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_finalize(ppStmt);
|
||||
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
}
|
||||
|
||||
void obelisk::Entity::insert(sqlite3* dbConnection)
|
||||
{
|
||||
if (dbConnection == nullptr)
|
||||
{
|
||||
throw obelisk::DatabaseException("database isn't open");
|
||||
}
|
||||
|
||||
sqlite3_stmt* ppStmt = nullptr;
|
||||
|
||||
auto result = sqlite3_prepare_v2(dbConnection, "INSERT INTO entity (name) VALUES (?)", -1, &ppStmt, nullptr);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
|
||||
result = sqlite3_bind_text(ppStmt, 1, getName().c_str(), -1, SQLITE_TRANSIENT);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_step(ppStmt);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_DONE :
|
||||
setId((int) sqlite3_last_insert_rowid(dbConnection));
|
||||
sqlite3_set_last_insert_rowid(dbConnection, 0);
|
||||
break;
|
||||
case SQLITE_CONSTRAINT :
|
||||
throw obelisk::DatabaseConstraintException(sqlite3_errmsg(dbConnection));
|
||||
case SQLITE_BUSY :
|
||||
throw obelisk::DatabaseBusyException();
|
||||
break;
|
||||
case SQLITE_MISUSE :
|
||||
throw obelisk::DatabaseMisuseException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_finalize(ppStmt);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
}
|
||||
|
||||
int& obelisk::Entity::getId()
|
||||
{
|
||||
return id_;
|
||||
}
|
||||
|
||||
void obelisk::Entity::setId(int id)
|
||||
{
|
||||
id_ = id;
|
||||
}
|
||||
|
||||
std::string& obelisk::Entity::getName()
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
void obelisk::Entity::setName(std::string name)
|
||||
{
|
||||
name_ = name;
|
||||
}
|
127
src/lib/models/entity.h
Normal file
127
src/lib/models/entity.h
Normal file
@@ -0,0 +1,127 @@
|
||||
#ifndef OBELISK_MODELS_ENTITY_H
|
||||
#define OBELISK_MODELS_ENTITY_H
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
/**
|
||||
* @brief The Entity model represents either a left or right side entity,
|
||||
* typically used in facts and rules.
|
||||
*
|
||||
*/
|
||||
class Entity
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* @brief The ID of the Entity.
|
||||
*
|
||||
*/
|
||||
int id_;
|
||||
/**
|
||||
* @brief The name of the Entity.
|
||||
*
|
||||
*/
|
||||
std::string name_;
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief Construct a new Entity object.
|
||||
*
|
||||
*/
|
||||
Entity() :
|
||||
id_(0),
|
||||
name_("")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Entity object.
|
||||
*
|
||||
* @param[in] id The ID of the Entity.
|
||||
*/
|
||||
Entity(int id) :
|
||||
id_(id),
|
||||
name_("")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Entity object.
|
||||
*
|
||||
* @param[in] name The name of the Entity.
|
||||
*/
|
||||
Entity(std::string name) :
|
||||
id_(0),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Entity object.
|
||||
*
|
||||
* @param[in] id The ID of the Entity.
|
||||
* @param[in] name The name of the Entity.
|
||||
*/
|
||||
Entity(int id, std::string name) :
|
||||
id_(id),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create the table in the knowledge base.
|
||||
*
|
||||
* @return const char* Returns the query used to create the table.
|
||||
*/
|
||||
static const char* createTable();
|
||||
|
||||
/**
|
||||
* @brief Get the ID of the Entity.
|
||||
*
|
||||
* @return int& Returns the ID.
|
||||
*/
|
||||
int& getId();
|
||||
|
||||
/**
|
||||
* @brief Set the ID of the Entity.
|
||||
*
|
||||
* @param[in] id The ID of the Entity.
|
||||
*/
|
||||
void setId(int id);
|
||||
|
||||
/**
|
||||
* @brief Get the name of the Entity.
|
||||
*
|
||||
* @return std::string& The name of the Entity.
|
||||
*/
|
||||
std::string& getName();
|
||||
|
||||
/**
|
||||
* @brief Set the name of the Entity.
|
||||
*
|
||||
* @param[in] name The name of the Entity.
|
||||
*/
|
||||
void setName(std::string name);
|
||||
|
||||
/**
|
||||
* @brief Select an Entity from the database based on the object's
|
||||
* name.
|
||||
*
|
||||
* @param[in] dbConnection The database connection to use.
|
||||
*/
|
||||
void selectByName(sqlite3* dbConnection);
|
||||
|
||||
/**
|
||||
* @brief Insert an Entity into the database based on the object's
|
||||
* fields.
|
||||
*
|
||||
* @param[in] dbConnection The database connection to use.
|
||||
*/
|
||||
void insert(sqlite3* dbConnection);
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
102
src/lib/models/error.h
Normal file
102
src/lib/models/error.h
Normal file
@@ -0,0 +1,102 @@
|
||||
#ifndef OBELISK_MODELS_ERROR_H
|
||||
#define OBELISK_MODELS_ERROR_H
|
||||
|
||||
#include <exception>
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
class DatabaseException : public std::exception
|
||||
{
|
||||
protected:
|
||||
std::string errorMessage_;
|
||||
|
||||
public:
|
||||
DatabaseException() :
|
||||
errorMessage_("an unknown error ocurred")
|
||||
{
|
||||
}
|
||||
|
||||
DatabaseException(const int errorCode) :
|
||||
errorMessage_("database error " + std::to_string(errorCode) + " ocurred")
|
||||
{
|
||||
}
|
||||
|
||||
DatabaseException(const std::string& errorMessage) :
|
||||
errorMessage_(errorMessage)
|
||||
{
|
||||
}
|
||||
|
||||
virtual const char* what() const noexcept
|
||||
{
|
||||
return errorMessage_.c_str();
|
||||
}
|
||||
|
||||
virtual void setErrorMessage(const std::string errorMessage)
|
||||
{
|
||||
errorMessage_ = errorMessage;
|
||||
}
|
||||
};
|
||||
|
||||
class DatabaseSizeException : public obelisk::DatabaseException
|
||||
{
|
||||
public:
|
||||
DatabaseSizeException()
|
||||
{
|
||||
setErrorMessage("size of string or blob exceeds limits");
|
||||
}
|
||||
};
|
||||
|
||||
class DatabaseRangeException : public obelisk::DatabaseException
|
||||
{
|
||||
public:
|
||||
DatabaseRangeException()
|
||||
{
|
||||
setErrorMessage("parameter index is out of range");
|
||||
}
|
||||
};
|
||||
|
||||
class DatabaseMemoryException : public obelisk::DatabaseException
|
||||
{
|
||||
public:
|
||||
DatabaseMemoryException()
|
||||
{
|
||||
setErrorMessage("not enough memory for operation");
|
||||
}
|
||||
};
|
||||
|
||||
class DatabaseBusyException : public obelisk::DatabaseException
|
||||
{
|
||||
public:
|
||||
DatabaseBusyException()
|
||||
{
|
||||
setErrorMessage("database was busy and operation was not performed");
|
||||
}
|
||||
};
|
||||
|
||||
class DatabaseMisuseException : public obelisk::DatabaseException
|
||||
{
|
||||
public:
|
||||
DatabaseMisuseException()
|
||||
|
||||
{
|
||||
setErrorMessage("misuse of the database routine");
|
||||
}
|
||||
};
|
||||
|
||||
class DatabaseConstraintException : public obelisk::DatabaseException
|
||||
{
|
||||
public:
|
||||
DatabaseConstraintException()
|
||||
{
|
||||
setErrorMessage("a constraint exception occurred");
|
||||
}
|
||||
|
||||
DatabaseConstraintException(const std::string& errorMessage)
|
||||
{
|
||||
setErrorMessage(errorMessage);
|
||||
}
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
299
src/lib/models/fact.cpp
Normal file
299
src/lib/models/fact.cpp
Normal file
@@ -0,0 +1,299 @@
|
||||
#include "models/error.h"
|
||||
#include "models/fact.h"
|
||||
|
||||
const char* obelisk::Fact::createTable()
|
||||
{
|
||||
return R"(
|
||||
CREATE TABLE "fact" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"left_entity" INTEGER NOT NULL,
|
||||
"verb" INTEGER NOT NULL,
|
||||
"right_entity" INTEGER NOT NULL,
|
||||
"is_true" INTEGER NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY("id" AUTOINCREMENT),
|
||||
UNIQUE("left_entity", "right_entity", "verb")
|
||||
FOREIGN KEY("verb") REFERENCES "verb"("id") ON DELETE RESTRICT,
|
||||
FOREIGN KEY("right_entity") REFERENCES "entity"("id") ON DELETE RESTRICT,
|
||||
FOREIGN KEY("left_entity") REFERENCES "entity"("id") ON DELETE RESTRICT
|
||||
);
|
||||
)";
|
||||
}
|
||||
|
||||
void obelisk::Fact::selectByName(sqlite3* dbConnection)
|
||||
{
|
||||
if (dbConnection == nullptr)
|
||||
{
|
||||
throw obelisk::DatabaseException("database isn't open");
|
||||
}
|
||||
|
||||
sqlite3_stmt* ppStmt = nullptr;
|
||||
|
||||
auto result = sqlite3_prepare_v2(dbConnection,
|
||||
"SELECT id, left_entity, right_entity, verb, is_true FROM fact WHERE (left_entity=? AND right_entity=? AND verb=?)",
|
||||
-1,
|
||||
&ppStmt,
|
||||
nullptr);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 1, getLeftEntity().getId());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 2, getRightEntity().getId());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 3, getVerb().getId());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_step(ppStmt);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_DONE :
|
||||
// no rows in the database
|
||||
break;
|
||||
case SQLITE_ROW :
|
||||
setId(sqlite3_column_int(ppStmt, 0));
|
||||
getLeftEntity().setId(sqlite3_column_int(ppStmt, 1));
|
||||
getRightEntity().setId(sqlite3_column_int(ppStmt, 2));
|
||||
getVerb().setId(sqlite3_column_int(ppStmt, 3));
|
||||
setIsTrue(sqlite3_column_int(ppStmt, 4));
|
||||
break;
|
||||
case SQLITE_BUSY :
|
||||
throw obelisk::DatabaseBusyException();
|
||||
break;
|
||||
case SQLITE_MISUSE :
|
||||
throw obelisk::DatabaseMisuseException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_finalize(ppStmt);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
}
|
||||
|
||||
void obelisk::Fact::insert(sqlite3* dbConnection)
|
||||
{
|
||||
if (dbConnection == nullptr)
|
||||
{
|
||||
throw obelisk::DatabaseException("database isn't open");
|
||||
}
|
||||
|
||||
sqlite3_stmt* ppStmt = nullptr;
|
||||
|
||||
auto result = sqlite3_prepare_v2(dbConnection,
|
||||
"INSERT INTO fact (left_entity, right_entity, verb, is_true) VALUES (?, ?, ?, ?)",
|
||||
-1,
|
||||
&ppStmt,
|
||||
nullptr);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 1, getLeftEntity().getId());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 2, getRightEntity().getId());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 3, getVerb().getId());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_bind_int(ppStmt, 4, getIsTrue());
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_step(ppStmt);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_DONE :
|
||||
setId((int) sqlite3_last_insert_rowid(dbConnection));
|
||||
sqlite3_set_last_insert_rowid(dbConnection, 0);
|
||||
break;
|
||||
case SQLITE_CONSTRAINT :
|
||||
throw obelisk::DatabaseConstraintException(sqlite3_errmsg(dbConnection));
|
||||
case SQLITE_BUSY :
|
||||
throw obelisk::DatabaseBusyException();
|
||||
break;
|
||||
case SQLITE_MISUSE :
|
||||
throw obelisk::DatabaseMisuseException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_finalize(ppStmt);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
}
|
||||
|
||||
int& obelisk::Fact::getId()
|
||||
{
|
||||
return id_;
|
||||
}
|
||||
|
||||
void obelisk::Fact::setId(int id)
|
||||
{
|
||||
id_ = id;
|
||||
}
|
||||
|
||||
obelisk::Entity& obelisk::Fact::getLeftEntity()
|
||||
{
|
||||
return leftEntity_;
|
||||
}
|
||||
|
||||
void obelisk::Fact::setLeftEntity(obelisk::Entity leftEntity)
|
||||
{
|
||||
leftEntity_ = leftEntity;
|
||||
}
|
||||
|
||||
obelisk::Entity& obelisk::Fact::getRightEntity()
|
||||
{
|
||||
return rightEntity_;
|
||||
}
|
||||
|
||||
void obelisk::Fact::setRightEntity(obelisk::Entity rightEntity)
|
||||
{
|
||||
rightEntity_ = rightEntity;
|
||||
}
|
||||
|
||||
obelisk::Verb& obelisk::Fact::getVerb()
|
||||
{
|
||||
return verb_;
|
||||
}
|
||||
|
||||
void obelisk::Fact::setVerb(obelisk::Verb verb)
|
||||
{
|
||||
verb_ = verb;
|
||||
}
|
||||
|
||||
bool& obelisk::Fact::getIsTrue()
|
||||
{
|
||||
return isTrue_;
|
||||
}
|
||||
|
||||
void obelisk::Fact::setIsTrue(bool isTrue)
|
||||
{
|
||||
isTrue_ = isTrue;
|
||||
}
|
84
src/lib/models/fact.h
Normal file
84
src/lib/models/fact.h
Normal file
@@ -0,0 +1,84 @@
|
||||
#ifndef OBELISK_MODELS_FACT_H
|
||||
#define OBELISK_MODELS_FACT_H
|
||||
|
||||
#include "models/entity.h"
|
||||
#include "models/fact.h"
|
||||
#include "models/verb.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
class Fact
|
||||
{
|
||||
private:
|
||||
int id_;
|
||||
obelisk::Entity leftEntity_;
|
||||
obelisk::Entity rightEntity_;
|
||||
obelisk::Verb verb_;
|
||||
bool isTrue_;
|
||||
|
||||
public:
|
||||
Fact() :
|
||||
id_(0),
|
||||
leftEntity_(),
|
||||
rightEntity_(),
|
||||
verb_(),
|
||||
isTrue_(0)
|
||||
{
|
||||
}
|
||||
|
||||
Fact(int id) :
|
||||
id_(id),
|
||||
leftEntity_(),
|
||||
rightEntity_(),
|
||||
verb_(),
|
||||
isTrue_(0)
|
||||
{
|
||||
}
|
||||
|
||||
Fact(obelisk::Entity leftEntity, obelisk::Entity rightEntity, obelisk::Verb verb, bool isTrue = false) :
|
||||
id_(0),
|
||||
leftEntity_(leftEntity),
|
||||
rightEntity_(rightEntity),
|
||||
verb_(verb),
|
||||
isTrue_(isTrue)
|
||||
{
|
||||
}
|
||||
|
||||
Fact(int id,
|
||||
obelisk::Entity leftEntity,
|
||||
obelisk::Entity rightEntity,
|
||||
obelisk::Verb verb,
|
||||
bool isTrue = false) :
|
||||
id_(id),
|
||||
leftEntity_(leftEntity),
|
||||
rightEntity_(rightEntity),
|
||||
verb_(verb),
|
||||
isTrue_(isTrue)
|
||||
{
|
||||
}
|
||||
|
||||
static const char* createTable();
|
||||
|
||||
int& getId();
|
||||
void setId(int id);
|
||||
|
||||
Entity& getLeftEntity();
|
||||
void setLeftEntity(obelisk::Entity leftEntity);
|
||||
|
||||
Entity& getRightEntity();
|
||||
void setRightEntity(obelisk::Entity leftEntity);
|
||||
|
||||
Verb& getVerb();
|
||||
void setVerb(obelisk::Verb verb);
|
||||
|
||||
bool& getIsTrue();
|
||||
void setIsTrue(bool isTrue);
|
||||
|
||||
void selectByName(sqlite3* dbConnection);
|
||||
void insert(sqlite3* dbConnection);
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
8
src/lib/models/meson.build
Normal file
8
src/lib/models/meson.build
Normal file
@@ -0,0 +1,8 @@
|
||||
obelisk_model_sources = files(
|
||||
'action.cpp',
|
||||
'entity.cpp',
|
||||
'fact.cpp',
|
||||
'rule.cpp',
|
||||
'suggest_action.cpp',
|
||||
'verb.cpp'
|
||||
)
|
46
src/lib/models/rule.cpp
Normal file
46
src/lib/models/rule.cpp
Normal file
@@ -0,0 +1,46 @@
|
||||
#include "models/rule.h"
|
||||
|
||||
const char* obelisk::Rule::createTable()
|
||||
{
|
||||
return R"(
|
||||
CREATE TABLE "rule" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"fact" INTEGER NOT NULL,
|
||||
"reason" INTEGER NOT NULL CHECK("reason" != "fact"),
|
||||
PRIMARY KEY("id" AUTOINCREMENT),
|
||||
UNIQUE("fact", "reason"),
|
||||
FOREIGN KEY("fact") REFERENCES "fact"("id") ON DELETE RESTRICT,
|
||||
FOREIGN KEY("reason") REFERENCES "fact"("id") ON DELETE RESTRICT
|
||||
);
|
||||
)";
|
||||
}
|
||||
|
||||
int& obelisk::Rule::getId()
|
||||
{
|
||||
return id_;
|
||||
}
|
||||
|
||||
void obelisk::Rule::setId(int id)
|
||||
{
|
||||
id_ = id;
|
||||
}
|
||||
|
||||
obelisk::Fact& obelisk::Rule::getFact()
|
||||
{
|
||||
return fact_;
|
||||
}
|
||||
|
||||
void obelisk::Rule::setFact(obelisk::Fact fact)
|
||||
{
|
||||
fact_ = fact;
|
||||
}
|
||||
|
||||
obelisk::Fact& obelisk::Rule::getReason()
|
||||
{
|
||||
return reason_;
|
||||
}
|
||||
|
||||
void obelisk::Rule::setReason(obelisk::Fact reason)
|
||||
{
|
||||
reason_ = reason;
|
||||
}
|
59
src/lib/models/rule.h
Normal file
59
src/lib/models/rule.h
Normal file
@@ -0,0 +1,59 @@
|
||||
#ifndef OBELISK_MODELS_RULE_H
|
||||
#define OBELISK_MODELS_RULE_H
|
||||
|
||||
#include "models/fact.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
class Rule
|
||||
{
|
||||
private:
|
||||
int id_;
|
||||
obelisk::Fact fact_;
|
||||
obelisk::Fact reason_;
|
||||
|
||||
public:
|
||||
Rule() :
|
||||
id_(0),
|
||||
fact_(),
|
||||
reason_()
|
||||
{
|
||||
}
|
||||
|
||||
Rule(int id) :
|
||||
id_(id),
|
||||
fact_(),
|
||||
reason_()
|
||||
{
|
||||
}
|
||||
|
||||
Rule(obelisk::Fact fact, obelisk::Fact reason) :
|
||||
id_(0),
|
||||
fact_(fact),
|
||||
reason_(reason)
|
||||
{
|
||||
}
|
||||
|
||||
Rule(int id, obelisk::Fact fact, obelisk::Fact reason) :
|
||||
id_(id),
|
||||
fact_(fact),
|
||||
reason_(reason)
|
||||
{
|
||||
}
|
||||
|
||||
static const char* createTable();
|
||||
|
||||
int& getId();
|
||||
void setId(int id);
|
||||
|
||||
obelisk::Fact& getFact();
|
||||
void setFact(obelisk::Fact fact);
|
||||
|
||||
obelisk::Fact& getReason();
|
||||
void setReason(obelisk::Fact reason);
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
58
src/lib/models/suggest_action.cpp
Normal file
58
src/lib/models/suggest_action.cpp
Normal file
@@ -0,0 +1,58 @@
|
||||
#include "models/suggest_action.h"
|
||||
|
||||
const char* obelisk::SuggestAction::createTable()
|
||||
{
|
||||
return R"(
|
||||
CREATE TABLE "suggest_action" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"fact" INTEGER NOT NULL,
|
||||
"true_action" INTEGER NOT NULL,
|
||||
"false_action" INTEGER NOT NULL,
|
||||
PRIMARY KEY("id" AUTOINCREMENT),
|
||||
UNIQUE("fact", "true_action", "false_action"),
|
||||
FOREIGN KEY("fact") REFERENCES "fact"("id") ON DELETE RESTRICT,
|
||||
FOREIGN KEY("true_action") REFERENCES "action"("id") ON DELETE RESTRICT,
|
||||
FOREIGN KEY("false_action") REFERENCES "action"("id") ON DELETE RESTRICT
|
||||
);
|
||||
)";
|
||||
}
|
||||
|
||||
int& obelisk::SuggestAction::getId()
|
||||
{
|
||||
return id_;
|
||||
}
|
||||
|
||||
void obelisk::SuggestAction::setId(int id)
|
||||
{
|
||||
id_ = id;
|
||||
}
|
||||
|
||||
obelisk::Fact& obelisk::SuggestAction::getFact()
|
||||
{
|
||||
return fact_;
|
||||
}
|
||||
|
||||
void obelisk::SuggestAction::setFact(obelisk::Fact fact)
|
||||
{
|
||||
fact_ = fact;
|
||||
}
|
||||
|
||||
obelisk::Action& obelisk::SuggestAction::getTrueAction()
|
||||
{
|
||||
return trueAction_;
|
||||
}
|
||||
|
||||
void obelisk::SuggestAction::setTrueAction(obelisk::Action trueAction)
|
||||
{
|
||||
trueAction_ = trueAction;
|
||||
}
|
||||
|
||||
obelisk::Action& obelisk::SuggestAction::getFalseAction()
|
||||
{
|
||||
return falseAction_;
|
||||
}
|
||||
|
||||
void obelisk::SuggestAction::setFalseAction(obelisk::Action falseAction)
|
||||
{
|
||||
falseAction_ = falseAction;
|
||||
}
|
68
src/lib/models/suggest_action.h
Normal file
68
src/lib/models/suggest_action.h
Normal file
@@ -0,0 +1,68 @@
|
||||
#ifndef OBELISK_MODELS_SUGGEST_ACTION_H
|
||||
#define OBELISK_MODELS_SUGGEST_ACTION_H
|
||||
|
||||
#include "models/action.h"
|
||||
#include "models/fact.h"
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
class SuggestAction
|
||||
{
|
||||
private:
|
||||
int id_;
|
||||
obelisk::Fact fact_;
|
||||
obelisk::Action trueAction_;
|
||||
obelisk::Action falseAction_;
|
||||
|
||||
public:
|
||||
SuggestAction() :
|
||||
id_(0),
|
||||
fact_(),
|
||||
trueAction_(),
|
||||
falseAction_()
|
||||
{
|
||||
}
|
||||
|
||||
SuggestAction(int id) :
|
||||
id_(id),
|
||||
fact_(),
|
||||
trueAction_(),
|
||||
falseAction_()
|
||||
{
|
||||
}
|
||||
|
||||
SuggestAction(obelisk::Fact fact, obelisk::Action trueAction, obelisk::Action falseAction) :
|
||||
id_(0),
|
||||
fact_(fact),
|
||||
trueAction_(trueAction),
|
||||
falseAction_(falseAction)
|
||||
{
|
||||
}
|
||||
|
||||
SuggestAction(int id, obelisk::Fact fact, obelisk::Action trueAction, obelisk::Action falseAction) :
|
||||
id_(id),
|
||||
fact_(fact),
|
||||
trueAction_(trueAction),
|
||||
falseAction_(falseAction)
|
||||
{
|
||||
}
|
||||
|
||||
static const char* createTable();
|
||||
|
||||
int& getId();
|
||||
void setId(int id);
|
||||
|
||||
obelisk::Fact& getFact();
|
||||
void setFact(obelisk::Fact fact);
|
||||
|
||||
obelisk::Action& getTrueAction();
|
||||
void setTrueAction(obelisk::Action trueAction);
|
||||
|
||||
obelisk::Action& getFalseAction();
|
||||
void setFalseAction(obelisk::Action falseAction);
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
158
src/lib/models/verb.cpp
Normal file
158
src/lib/models/verb.cpp
Normal file
@@ -0,0 +1,158 @@
|
||||
#include "models/error.h"
|
||||
#include "models/verb.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
const char* obelisk::Verb::createTable()
|
||||
{
|
||||
return R"(
|
||||
CREATE TABLE "verb" (
|
||||
"id" INTEGER NOT NULL UNIQUE,
|
||||
"name" TEXT NOT NULL CHECK(trim(name) != "") UNIQUE,
|
||||
PRIMARY KEY("id" AUTOINCREMENT)
|
||||
);
|
||||
)";
|
||||
}
|
||||
|
||||
void obelisk::Verb::selectByName(sqlite3* dbConnection)
|
||||
{
|
||||
if (dbConnection == nullptr)
|
||||
{
|
||||
throw obelisk::DatabaseException("database isn't open");
|
||||
}
|
||||
|
||||
sqlite3_stmt* ppStmt = nullptr;
|
||||
|
||||
auto result = sqlite3_prepare_v2(dbConnection, "SELECT id, name FROM verb WHERE name=?", -1, &ppStmt, nullptr);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
|
||||
result = sqlite3_bind_text(ppStmt, 1, getName().c_str(), -1, SQLITE_STATIC);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_step(ppStmt);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_DONE :
|
||||
// no rows in the database
|
||||
break;
|
||||
case SQLITE_ROW :
|
||||
setId(sqlite3_column_int(ppStmt, 0));
|
||||
setName((char*) sqlite3_column_text(ppStmt, 1));
|
||||
break;
|
||||
case SQLITE_BUSY :
|
||||
throw obelisk::DatabaseBusyException();
|
||||
break;
|
||||
case SQLITE_MISUSE :
|
||||
throw obelisk::DatabaseMisuseException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_finalize(ppStmt);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
}
|
||||
|
||||
void obelisk::Verb::insert(sqlite3* dbConnection)
|
||||
{
|
||||
if (dbConnection == nullptr)
|
||||
{
|
||||
throw obelisk::DatabaseException("database isn't open");
|
||||
}
|
||||
|
||||
sqlite3_stmt* ppStmt = nullptr;
|
||||
|
||||
auto result = sqlite3_prepare_v2(dbConnection, "INSERT INTO verb (name) VALUES (?)", -1, &ppStmt, nullptr);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
|
||||
result = sqlite3_bind_text(ppStmt, 1, getName().c_str(), -1, SQLITE_TRANSIENT);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_OK :
|
||||
break;
|
||||
case SQLITE_TOOBIG :
|
||||
throw obelisk::DatabaseSizeException();
|
||||
break;
|
||||
case SQLITE_RANGE :
|
||||
throw obelisk::DatabaseRangeException();
|
||||
break;
|
||||
case SQLITE_NOMEM :
|
||||
throw obelisk::DatabaseMemoryException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_step(ppStmt);
|
||||
switch (result)
|
||||
{
|
||||
case SQLITE_DONE :
|
||||
setId((int) sqlite3_last_insert_rowid(dbConnection));
|
||||
sqlite3_set_last_insert_rowid(dbConnection, 0);
|
||||
break;
|
||||
case SQLITE_CONSTRAINT :
|
||||
throw obelisk::DatabaseConstraintException(sqlite3_errmsg(dbConnection));
|
||||
case SQLITE_BUSY :
|
||||
throw obelisk::DatabaseBusyException();
|
||||
break;
|
||||
case SQLITE_MISUSE :
|
||||
throw obelisk::DatabaseMisuseException();
|
||||
break;
|
||||
default :
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
break;
|
||||
}
|
||||
|
||||
result = sqlite3_finalize(ppStmt);
|
||||
if (result != SQLITE_OK)
|
||||
{
|
||||
throw obelisk::DatabaseException(sqlite3_errmsg(dbConnection));
|
||||
}
|
||||
}
|
||||
|
||||
int& obelisk::Verb::getId()
|
||||
{
|
||||
return id_;
|
||||
}
|
||||
|
||||
void obelisk::Verb::setId(int id)
|
||||
{
|
||||
id_ = id;
|
||||
}
|
||||
|
||||
std::string& obelisk::Verb::getName()
|
||||
{
|
||||
return name_;
|
||||
}
|
||||
|
||||
void obelisk::Verb::setName(std::string name)
|
||||
{
|
||||
name_ = name;
|
||||
}
|
126
src/lib/models/verb.h
Normal file
126
src/lib/models/verb.h
Normal file
@@ -0,0 +1,126 @@
|
||||
#ifndef OBELISK_MODELS_VERB_H
|
||||
#define OBELISK_MODELS_VERB_H
|
||||
|
||||
#include <sqlite3.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace obelisk
|
||||
{
|
||||
/**
|
||||
* @brief The Verb model represents a verb which is used to connnect
|
||||
* entities.
|
||||
*
|
||||
*/
|
||||
class Verb
|
||||
{
|
||||
private:
|
||||
/**
|
||||
* @brief The ID of the Verb in the knowledge base.
|
||||
*
|
||||
*/
|
||||
int id_;
|
||||
|
||||
/**
|
||||
* @brief The name of the Verb.
|
||||
*
|
||||
*/
|
||||
std::string name_;
|
||||
|
||||
public:
|
||||
/**
|
||||
* @brief Construct a new Verb object.
|
||||
*
|
||||
*/
|
||||
Verb() :
|
||||
id_(0),
|
||||
name_("")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Verb object.
|
||||
*
|
||||
* @param[in] id The ID of the Verb.
|
||||
*/
|
||||
Verb(int id) :
|
||||
id_(id),
|
||||
name_("")
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Verb object.
|
||||
*
|
||||
* @param[in] name The name of the Verb.
|
||||
*/
|
||||
Verb(std::string name) :
|
||||
id_(0),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Construct a new Verb object.
|
||||
*
|
||||
* @param[in] id The ID of the Verb.
|
||||
* @param[in] name The name of the Verb.
|
||||
*/
|
||||
Verb(int id, std::string name) :
|
||||
id_(id),
|
||||
name_(name)
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create the Verb table in the KnowledgeBase.
|
||||
*
|
||||
* @return const char* Returns the query used to create the table.
|
||||
*/
|
||||
static const char* createTable();
|
||||
|
||||
/**
|
||||
* @brief Get the ID of the Verb.
|
||||
*
|
||||
* @return int& Returns the ID.
|
||||
*/
|
||||
int& getId();
|
||||
|
||||
/**
|
||||
* @brief Set the ID of the Verb.
|
||||
*
|
||||
* @param[in] id Set the ID of the Verb.
|
||||
*/
|
||||
void setId(int id);
|
||||
|
||||
/**
|
||||
* @brief Get the name of the Verb.
|
||||
*
|
||||
* @return std::string& The Verb name.
|
||||
*/
|
||||
std::string& getName();
|
||||
|
||||
/**
|
||||
* @brief Set the name of the Verb.
|
||||
*
|
||||
* @param[in] name The Verb name.
|
||||
*/
|
||||
void setName(std::string name);
|
||||
|
||||
/**
|
||||
* @brief Select a verb by name from the KnowledgeBase.
|
||||
*
|
||||
* @param[in] dbConnection The database connection to use.
|
||||
*/
|
||||
void selectByName(sqlite3* dbConnection);
|
||||
|
||||
/**
|
||||
* @brief Insert a new verb into the KnowledgeBase.
|
||||
*
|
||||
* @param[in] dbConnection The database connection to use.
|
||||
*/
|
||||
void insert(sqlite3* dbConnection);
|
||||
};
|
||||
} // namespace obelisk
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user