finialize demo
This commit is contained in:
+11
-17
@@ -621,21 +621,15 @@ vector_type<std::string_view>::vector_type(const uint32_t size, void* data) :
|
||||
//std::cout<<size << container[1];
|
||||
}
|
||||
|
||||
void activate_callback_based_trigger(Context* context, const char* cmd)
|
||||
{
|
||||
const char* query_name = cmd + 2;
|
||||
const char* action_name = query_name;
|
||||
while (*action_name++);
|
||||
if(auto q = get_procedure(cxt, query_name),
|
||||
a = get_procedure(cxt, action_name);
|
||||
q.name == nullptr || a.name == nullptr
|
||||
)
|
||||
printf("Warning: Invalid query or action name: %s %s",
|
||||
query_name, action_name);
|
||||
else {
|
||||
auto query = AQ_DupObject(&q);
|
||||
auto action = AQ_DupObject(&a);
|
||||
|
||||
cxt->ct_host->execute_trigger(query, action);
|
||||
}
|
||||
StoredProcedure
|
||||
get_procedure(Context* cxt, const char* name) {
|
||||
auto res = cxt->stored_proc.find(name);
|
||||
if (res == cxt->stored_proc.end())
|
||||
return { .cnt = 0,
|
||||
.postproc_modules = 0,
|
||||
.queries = nullptr,
|
||||
.name = nullptr,
|
||||
.__rt_loaded_modules = nullptr
|
||||
};
|
||||
return res->second;
|
||||
}
|
||||
|
||||
+1
-2
@@ -291,6 +291,5 @@ inline _This_Type* AQ_DupObject(_This_Type* __val) {
|
||||
#endif //__USE_STD_SEMAPHORE__
|
||||
|
||||
void print_monetdb_results(void* _srv, const char* sep, const char* end, uint32_t limit);
|
||||
void activate_callback_based_trigger(Context* context, const char* cmd);
|
||||
|
||||
StoredProcedure get_procedure(Context* cxt, const char* name);
|
||||
#endif
|
||||
|
||||
@@ -382,7 +382,7 @@ int ExecuteStoredProcedureEx(const StoredProcedure *p, Context* cxt){
|
||||
break;
|
||||
case 'T' : {
|
||||
if (p->queries[i][1] == 'N') {
|
||||
cxt->ct_host->execute_trigger(p->queries[i] + 2, cxt);
|
||||
cxt->ct_host->execute_trigger(p->queries[i] + 2);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
+20
-13
@@ -97,24 +97,31 @@ have_hge() {
|
||||
|
||||
Context* _g_cxt;
|
||||
|
||||
StoredProcedure
|
||||
get_procedure(Context* cxt, const char* name) {
|
||||
auto res = cxt->stored_proc.find(name);
|
||||
if (res == cxt->stored_proc.end())
|
||||
return { .cnt = 0,
|
||||
.postproc_modules = 0,
|
||||
.queries = nullptr,
|
||||
.name = nullptr,
|
||||
.__rt_loaded_modules = nullptr
|
||||
};
|
||||
return res->second;
|
||||
}
|
||||
|
||||
__AQEXPORT__(StoredProcedure)
|
||||
get_procedure_ex(const char* name){
|
||||
return get_procedure(_g_cxt, name);
|
||||
}
|
||||
|
||||
void activate_callback_based_trigger(Context* context, const char* cmd)
|
||||
{
|
||||
const char* query_name = cmd + 2;
|
||||
const char* action_name = query_name;
|
||||
while (*action_name++);
|
||||
if(auto q = get_procedure(context, query_name),
|
||||
a = get_procedure(context, action_name);
|
||||
q.name == nullptr || a.name == nullptr
|
||||
)
|
||||
printf("Warning: Invalid query or action name: %s %s",
|
||||
query_name, action_name);
|
||||
else {
|
||||
auto query = AQ_DupObject(&q);
|
||||
auto action = AQ_DupObject(&a);
|
||||
|
||||
context->ct_host->execute_trigger(query, action);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// This function contains heap allocations, free after use
|
||||
template<class String_T>
|
||||
char* to_lpstr(const String_T& str){
|
||||
|
||||
@@ -235,14 +235,14 @@ void CallbackBasedTriggerHost::execute_trigger(StoredProcedure* query, StoredPro
|
||||
this->tp->enqueue_task(payload);
|
||||
}
|
||||
|
||||
void execute_trigger(const char* trigger_name) {
|
||||
void CallbackBasedTriggerHost::execute_trigger(const char* trigger_name) {
|
||||
auto vt_triggers = static_cast<aq_map<std::string, CallbackBasedTrigger> *>(this->triggers);
|
||||
auto ptr = vt_triggers->find(trigger_name);
|
||||
if (ptr != vt_triggers->end()) {
|
||||
auto& tr = ptr->second;
|
||||
if (!tr.materialized) {
|
||||
tr.query = new CallbackBasedTrigger(get_procedure(cxt, tr.query_name));
|
||||
tr.action = new CallbackBasedTrigger(get_procedure(cxt, tr.action_name));
|
||||
tr.query = new StoredProcedure(get_procedure(cxt, tr.query_name));
|
||||
tr.action = new StoredProcedure(get_procedure(cxt, tr.action_name));
|
||||
tr.materialized = true;
|
||||
}
|
||||
this->execute_trigger(AQ_DupObject(tr.query), AQ_DupObject(tr.action));
|
||||
|
||||
Reference in New Issue
Block a user