Skip to content
Snippets Groups Projects
Commit 0826cc6f authored by Cyrille Berger's avatar Cyrille Berger
Browse files

set if actions are owned by the query engine or not,and allow to remove them

parent fbe2f1af
No related branches found
No related tags found
No related merge requests found
...@@ -17,8 +17,8 @@ set(PROJECT_EXPORTED_TARGETS kDBSMQuery ${PROJECT_EXPORTED_TARGETS} CACHE INTER ...@@ -17,8 +17,8 @@ set(PROJECT_EXPORTED_TARGETS kDBSMQuery ${PROJECT_EXPORTED_TARGETS} CACHE INTER
install( FILES install( FILES
Engine.h Engine.h
DESTINATION ${INSTALL_INCLUDE_DIR}/kDBSMQuery ) DESTINATION ${INSTALL_INCLUDE_DIR}/kDB/SMQuery )
install( FILES install( FILES
Interfaces/Action.h Interfaces/Action.h
DESTINATION ${INSTALL_INCLUDE_DIR}/kDBSMQuery/Interfaces ) DESTINATION ${INSTALL_INCLUDE_DIR}/kDB/SMQuery/Interfaces )
...@@ -24,15 +24,32 @@ Engine::~Engine() ...@@ -24,15 +24,32 @@ Engine::~Engine()
delete d; delete d;
} }
void Engine::add(const QStringList& _keys, Interfaces::Action* _action) void Engine::add(const QStringList& _keys, Interfaces::Action* _action, bool _action_owned_by_engine)
{ {
d->actions.append(_action); if(_action_owned_by_engine)
{
d->actions.append(_action);
}
for(const QString& key : _keys) for(const QString& key : _keys)
{ {
d->key2action[key.toUpper()] = _action; d->key2action[key.toUpper()] = _action;
} }
} }
void Engine::remove(Interfaces::Action* _action)
{
d->actions.removeAll(_action);
for(QHash<QString, Interfaces::Action*>::iterator it = d->key2action.begin(); it != d->key2action.end();)
{
if(it.value() == _action)
{
it = d->key2action.erase(it);
} else {
++it;
}
}
}
knowCore::ReturnVoid Engine::execute(const QString& _text) knowCore::ReturnVoid Engine::execute(const QString& _text)
{ {
KNOWCORE_RETURN_VALUE_TRY(query, Parser::parse(_text)); KNOWCORE_RETURN_VALUE_TRY(query, Parser::parse(_text));
......
...@@ -17,9 +17,15 @@ namespace kDB::SMQuery ...@@ -17,9 +17,15 @@ namespace kDB::SMQuery
/** /**
* Add an \ref _action for the list of \ref _keys. * Add an \ref _action for the list of \ref _keys.
* *
* @param _action_owned_by_engine set to true if the action should be deleted by the engine
*
* _keys take the form of "SOME ACTION" and will react to query with "SOME ACTION". * _keys take the form of "SOME ACTION" and will react to query with "SOME ACTION".
*/ */
void add(const QStringList& _keys, Interfaces::Action* _action); void add(const QStringList& _keys, Interfaces::Action* _action, bool _action_owned_by_engine);
/**
* Remove the action. Do note that if the action will not be owned anymore by the engine.
*/
void remove(Interfaces::Action* _action);
/** /**
* Execute a query. * Execute a query.
*/ */
......
...@@ -51,8 +51,9 @@ public: ...@@ -51,8 +51,9 @@ public:
void TestEngine::testQuery() void TestEngine::testQuery()
{ {
kDB::SMQuery::Engine e; kDB::SMQuery::Engine e;
e.add({"TRIGGER FAIL"}, new TestFailAction); e.add({"TRIGGER FAIL"}, new TestFailAction, true);
e.add({"ALSO FAIL", "DO SUCCEED"}, new TestAction); TestAction ta;
e.add({"ALSO FAIL", "DO SUCCEED"}, &ta, false);
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("RANDOM ACTION")); KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("RANDOM ACTION"));
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("TRIGGER FAIL")); KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("TRIGGER FAIL"));
...@@ -64,6 +65,12 @@ void TestEngine::testQuery() ...@@ -64,6 +65,12 @@ void TestEngine::testQuery()
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED uri: <hello>")); KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED uri: <hello>"));
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED value: 121")); KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED value: 121"));
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED text: \"some wrong text\"")); KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED text: \"some wrong text\""));
e.remove(&ta);
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED uri: <hello world>"));
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED uri: <hello world> value: 12"));
KNOWCORE_TEST_VERIFY_FAILURE_VOID(e.execute("DO SUCCEED uri: <hello world> value: 12 text: \"some text\""));
} }
QTEST_MAIN(TestEngine) QTEST_MAIN(TestEngine)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment