fix docker
This commit is contained in:
@@ -34,4 +34,9 @@ struct monetdbe_table_data{
|
||||
void* cols;
|
||||
};
|
||||
|
||||
size_t
|
||||
monetdbe_get_size(void* dbhdl, const char *table_name);
|
||||
|
||||
void*
|
||||
monetdbe_get_col(void* dbhdl, const char *table_name, uint32_t col_id);
|
||||
#endif
|
||||
|
||||
+7
-10
@@ -1,3 +1,5 @@
|
||||
// Non-standard Extensions for MonetDBe, may break concurrency control!
|
||||
|
||||
#include "monetdbe.h"
|
||||
#include <stdint.h>
|
||||
#include "mal_client.h"
|
||||
@@ -61,33 +63,28 @@ typedef struct {
|
||||
str mid;
|
||||
} monetdbe_database_internal;
|
||||
|
||||
|
||||
size_t
|
||||
monetdbe_get_size(monetdbe_database dbhdl, const char* schema_name, const char *table_name)
|
||||
monetdbe_get_size(monetdbe_database dbhdl, const char *table_name)
|
||||
{
|
||||
monetdbe_database_internal* hdl = (monetdbe_database_internal*)dbhdl;
|
||||
backend* be = ((backend *)(((monetdbe_database_internal*)dbhdl)->c->sqlcontext));
|
||||
mvc *m = be->mvc;
|
||||
mvc_trans(m);
|
||||
sql_table *t = find_table_or_view_on_scope(m, NULL, schema_name, table_name, "CATALOG", false);
|
||||
sql_table *t = find_table_or_view_on_scope(m, NULL, "sys", table_name, "CATALOG", false);
|
||||
sql_column *col = ol_first_node(t->columns)->data;
|
||||
sqlstore* store = m->store;
|
||||
size_t sz = store->storage_api.count_col(m->session->tr, col, QUICK);
|
||||
mvc_cancel_session(m);
|
||||
return sz;
|
||||
}
|
||||
|
||||
void*
|
||||
monetdbe_get_col(monetdbe_database dbhdl, const char* schema_name, const char *table_name, uint32_t col_id) {
|
||||
monetdbe_get_col(monetdbe_database dbhdl, const char *table_name, uint32_t col_id) {
|
||||
monetdbe_database_internal* hdl = (monetdbe_database_internal*)dbhdl;
|
||||
backend* be = ((backend *)(((monetdbe_database_internal*)dbhdl)->c->sqlcontext));
|
||||
mvc *m = be->mvc;
|
||||
mvc_trans(m);
|
||||
sql_table *t = find_table_or_view_on_scope(m, NULL, schema_name, table_name, "CATALOG", false);
|
||||
sql_table *t = find_table_or_view_on_scope(m, NULL, "sys", table_name, "CATALOG", false);
|
||||
sql_column *col = ol_fetch(t->columns, col_id);
|
||||
sqlstore* store = m->store;
|
||||
BAT *b = store->storage_api.bind_col(m->session->tr, col, RDONLY);
|
||||
BAT *b = store->storage_api.bind_col(m->session->tr, col, QUICK);
|
||||
BATiter iter = bat_iterator(b);
|
||||
mvc_cancel_session(m);
|
||||
return iter.base;
|
||||
}
|
||||
|
||||
@@ -157,16 +157,16 @@ bool ThreadPool::busy(){
|
||||
IntervalBasedTriggerHost::IntervalBasedTriggerHost(ThreadPool* tp){
|
||||
this->tp = tp;
|
||||
this->triggers = new vector_type<IntervalBasedTrigger>;
|
||||
adding_trigger = new mutex();
|
||||
trigger_queue_lock = new mutex();
|
||||
this->now = std::chrono::high_resolution_clock::now().time_since_epoch().count();
|
||||
}
|
||||
|
||||
void IntervalBasedTriggerHost::add_trigger(StoredProcedure *p, uint32_t interval) {
|
||||
auto tr = IntervalBasedTrigger{.interval = interval, .time_remaining = 0, .sp = p};
|
||||
auto vt_triggers = static_cast<vector_type<IntervalBasedTrigger> *>(this->triggers);
|
||||
adding_trigger->lock();
|
||||
trigger_queue_lock->lock();
|
||||
vt_triggers->emplace_back(tr);
|
||||
adding_trigger->unlock();
|
||||
trigger_queue_lock->unlock();
|
||||
}
|
||||
|
||||
void IntervalBasedTriggerHost::tick() {
|
||||
@@ -174,7 +174,7 @@ void IntervalBasedTriggerHost::tick() {
|
||||
const auto delta_t = static_cast<uint32_t>((current_time - now) / 1000000); // miliseconds precision
|
||||
now = current_time;
|
||||
auto vt_triggers = static_cast<vector_type<IntervalBasedTrigger> *>(this->triggers);
|
||||
adding_trigger->lock();
|
||||
trigger_queue_lock->lock();
|
||||
for(auto& t : *vt_triggers) {
|
||||
if(t.tick(delta_t)) {
|
||||
payload_t payload;
|
||||
@@ -184,7 +184,7 @@ void IntervalBasedTriggerHost::tick() {
|
||||
tp->enqueue_task(payload);
|
||||
}
|
||||
}
|
||||
adding_trigger->unlock();
|
||||
trigger_queue_lock->unlock();
|
||||
}
|
||||
|
||||
void IntervalBasedTrigger::reset() {
|
||||
|
||||
+2
-1
@@ -49,7 +49,7 @@ protected:
|
||||
std::thread* handle;
|
||||
ThreadPool *tp;
|
||||
Context* cxt;
|
||||
std::mutex* adding_trigger;
|
||||
std::mutex* trigger_queue_lock;
|
||||
|
||||
virtual void tick() = 0;
|
||||
public:
|
||||
@@ -71,6 +71,7 @@ class IntervalBasedTriggerHost : public TriggerHost {
|
||||
public:
|
||||
explicit IntervalBasedTriggerHost(ThreadPool *tp);
|
||||
void add_trigger(StoredProcedure* stored_procedure, uint32_t interval);
|
||||
void remove_trigger(uint32_t tid);
|
||||
private:
|
||||
unsigned long long now;
|
||||
void tick() override;
|
||||
|
||||
Reference in New Issue
Block a user