master
Bill 2 years ago
parent b60bfc478d
commit c5bf4c46e4

3
.gitmodules vendored

@ -0,0 +1,3 @@
[submodule "paper"]
path = paper
url = https://github.com/sunyinqi0508/AQueryPaper

@ -0,0 +1 @@
Subproject commit fa4e3f5a0606b2dda75faaacfb66cdaf42153260

@ -26,6 +26,7 @@ def process(f : str):
with open(filename, 'rb') as ifile: with open(filename, 'rb') as ifile:
icontents = ifile.read() icontents = ifile.read()
with open(ofilename, 'wb') as ofile: with open(ofilename, 'wb') as ofile:
ofile.write(b'\n')
for l in icontents.splitlines(): for l in icontents.splitlines():
fields = l.strip().split(b' ') fields = l.strip().split(b' ')
subfields = fields[:-1] subfields = fields[:-1]

@ -1,22 +1,26 @@
#include "DecisionTree.h" #include "DecisionTree.h"
#include "RF.h"
// __AQ_NO_SESSION__ // __AQ_NO_SESSION__
#include "../server/table.h" #include "../server/table.h"
#include "aquery.h" #include "aquery.h"
DecisionTree *dt = nullptr; DecisionTree *dt = nullptr;
RandomForest *rf = nullptr;
__AQEXPORT__(bool) __AQEXPORT__(bool)
newtree(int height, long f, ColRef<int> sparse, double forget, long maxf, long noclasses, Evaluation e, long r, long rb) newtree(int height, long f, ColRef<int> X, double forget, long maxf, long noclasses, Evaluation e, long r, long rb)
{ {
if (sparse.size != f) if (X.size != f)
return false; return false;
int *issparse = (int *)malloc(f * sizeof(int)); int *X_cpy = (int *)malloc(f * sizeof(int));
for (long i = 0; i < f; i++)
issparse[i] = sparse.container[i]; memcpy(X_cpy, X.container, f);
if (maxf < 0) if (maxf < 0)
maxf = f; maxf = f;
dt = new DecisionTree(f, issparse, forget, maxf, noclasses, e); dt = new DecisionTree(f, X_cpy, forget, maxf, noclasses, e);
rf = new RandomForest(height, f, X_cpy, forget, noclasses, e)
return true; return true;
} }
@ -44,7 +48,8 @@ fit(vector_type<vector_type<double>> v, vector_type<long> res)
double **data = (double **)malloc(v.size * sizeof(double *)); double **data = (double **)malloc(v.size * sizeof(double *));
for (int i = 0; i < v.size; ++i) for (int i = 0; i < v.size; ++i)
data[i] = v.container[i].container; data[i] = v.container[i].container;
dt->fit(data, res.container, v.size); // dt->fit(data, res.container, v.size);
rf->fit(data, res.container, v.size);
return true; return true;
} }
@ -54,8 +59,8 @@ predict(vector_type<vector_type<double>> v)
int *result = (int *)malloc(v.size * sizeof(int)); int *result = (int *)malloc(v.size * sizeof(int));
for (long i = 0; i < v.size; i++) for (long i = 0; i < v.size; i++)
result[i] = dt->Test(v.container[i].container, dt->DTree); //result[i] = dt->Test(v.container[i].container, dt->DTree);
result[i] = rf->Test(v.container, rf->DTrees);
auto container = (vector_type<int> *)malloc(sizeof(vector_type<int>)); auto container = (vector_type<int> *)malloc(sizeof(vector_type<int>));
container->size = v.size; container->size = v.size;
container->capacity = 0; container->capacity = 0;

@ -281,15 +281,15 @@ inline const char* str(const bool& v) {
return v ? "true" : "false"; return v ? "true" : "false";
} }
class A{ class A {
public: public:
std::chrono::high_resolution_clock::time_point tp; std::chrono::high_resolution_clock::time_point tp;
A(){ A(){
tp = std::chrono::high_resolution_clock::now(); tp = std::chrono::high_resolution_clock::now();
printf("A %llx created.\n", tp.time_since_epoch().count()); printf("A %llu created.\n", tp.time_since_epoch().count());
} }
~A() { ~A() {
printf("A %llx died after %lldns.\n", tp.time_since_epoch().count(), printf("A %llu died after %lldns.\n", tp.time_since_epoch().count(),
(std::chrono::high_resolution_clock::now() - tp).count()); (std::chrono::high_resolution_clock::now() - tp).count());
} }
}; };

@ -6,17 +6,17 @@
struct Context; struct Context;
struct Server{ struct Server{
MYSQL *server = 0; MYSQL *server = nullptr;
Context *cxt = 0; Context *cxt = nullptr;
bool status = 0; bool status = false;
bool has_error = false; bool has_error = false;
char* query = 0; char* query = nullptr;
int type = 0; int type = 0;
void connect(Context* cxt, const char* host = "bill.local", void connect(Context* cxt, const char* host = "bill.local",
const char* user = "root", const char* passwd = "0508", const char* user = "root", const char* passwd = "0508",
const char* db_name = "db", const unsigned int port = 3306, const char* db_name = "db", const unsigned int port = 3306,
const char* unix_socket = 0, const unsigned long client_flag = 0 const char* unix_socket = nullptr, const unsigned long client_flag = 0
); );
void exec(const char* q); void exec(const char* q);
void close(); void close();

@ -18,8 +18,12 @@
#include <atomic> #include <atomic>
#endif // _WIN32 #endif // _WIN32
#undef ERROR #ifdef ERROR
#undef static_assert #undef ERROR
#endif
#ifdef static_assert
#undef static_assert
#endif
constexpr const char* monetdbe_type_str[] = { constexpr const char* monetdbe_type_str[] = {
"monetdbe_bool", "monetdbe_int8_t", "monetdbe_int16_t", "monetdbe_int32_t", "monetdbe_int64_t", "monetdbe_bool", "monetdbe_int8_t", "monetdbe_int16_t", "monetdbe_int32_t", "monetdbe_int64_t",
@ -86,7 +90,7 @@ void Server::connect(Context *cxt){
char c[50]; char c[50];
std::cin.getline(c, 49); std::cin.getline(c, 49);
for(int i = 0; i < 50; ++i) { for(int i = 0; i < 50; ++i) {
if (!c[i] || c[i] == 'y' || c[i] == 'Y'){ if (!c[i] || c[i] == 'y' || c[i] == 'Y') {
monetdbe_close(*server); monetdbe_close(*server);
free(*server); free(*server);
this->server = nullptr; this->server = nullptr;
@ -120,7 +124,7 @@ void Server::exec(const char* q){
auto _res = static_cast<monetdbe_result*>(this->res); auto _res = static_cast<monetdbe_result*>(this->res);
monetdbe_cnt _cnt = 0; monetdbe_cnt _cnt = 0;
auto qresult = monetdbe_query(*server, const_cast<char*>(q), &_res, &_cnt); auto qresult = monetdbe_query(*server, const_cast<char*>(q), &_res, &_cnt);
if (_res != 0){ if (_res != nullptr){
this->cnt = _res->nrows; this->cnt = _res->nrows;
this->res = _res; this->res = _res;
} }
@ -162,6 +166,8 @@ void Server::print_results(const char* sep, const char* end){
col_data[i] = static_cast<char *>(cols[i]->data); col_data[i] = static_cast<char *>(cols[i]->data);
szs [i] = monetdbe_type_szs[cols[i]->type]; szs [i] = monetdbe_type_szs[cols[i]->type];
header_string = header_string + cols[i]->name + sep + '|' + sep; header_string = header_string + cols[i]->name + sep + '|' + sep;
if (err_msg) [[unlikely]]
puts(err_msg);
} }
if (const size_t l_sep = strlen(sep) + 1; header_string.size() >= l_sep) if (const size_t l_sep = strlen(sep) + 1; header_string.size() >= l_sep)
header_string.resize(header_string.size() - l_sep); header_string.resize(header_string.size() - l_sep);
@ -183,7 +189,7 @@ void Server::print_results(const char* sep, const char* end){
void Server::close(){ void Server::close(){
if(this->server){ if(this->server){
auto server = static_cast<monetdbe_database*>(this->server); auto server = static_cast<monetdbe_database*>(this->server);
monetdbe_close(*(server)); monetdbe_close(*server);
free(server); free(server);
this->server = nullptr; this->server = nullptr;
} }

@ -4,18 +4,18 @@
struct Context; struct Context;
struct Server{ struct Server{
void *server = 0; void *server = nullptr;
Context *cxt = 0; Context *cxt = nullptr;
bool status = 0; bool status = false;
char* query = 0; char* query = nullptr;
int type = 1; int type = 1;
void* res = 0; void* res = nullptr;
void* ret_col = 0; void* ret_col = nullptr;
long long cnt = 0; long long cnt = 0;
char* last_error = 0; char* last_error = nullptr;
Server(Context* cxt = nullptr); explicit Server(Context* cxt = nullptr);
void connect(Context* cxt); void connect(Context* cxt);
void exec(const char* q); void exec(const char* q);
void *getCol(int col_idx); void *getCol(int col_idx);

@ -77,7 +77,7 @@ monetdbe_get_size(monetdbe_database dbhdl, const char *table_name)
} }
void* void*
monetdbe_get_col(monetdbe_database dbhdl, 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; monetdbe_database_internal* hdl = (monetdbe_database_internal*)dbhdl;
backend* be = ((backend *)(((monetdbe_database_internal*)dbhdl)->c->sqlcontext)); backend* be = ((backend *)(((monetdbe_database_internal*)dbhdl)->c->sqlcontext));
mvc *m = be->mvc; mvc *m = be->mvc;

@ -6,7 +6,7 @@ template <class Comparator, typename T = uint32_t>
class priority_vector : public vector_type<T> { class priority_vector : public vector_type<T> {
const Comparator comp; const Comparator comp;
public: public:
priority_vector(Comparator comp = std::less<T>{}) : explicit priority_vector(Comparator comp = std::less<T>{}) :
comp(comp), vector_type<T>(0) {} comp(comp), vector_type<T>(0) {}
void emplace_back(T val) { void emplace_back(T val) {
vector_type<T>::emplace_back(val); vector_type<T>::emplace_back(val);

@ -6,6 +6,8 @@ LOAD MODULE FROM "./libirf.so"
); );
create table source(x1 double, x2 double, x3 double, x4 double, x5 int64); create table source(x1 double, x2 double, x3 double, x4 double, x5 int64);
-- Create trigger 1 ~~ to predict whenever sz(source > ?)
-- Create trigger 2 ~~ to auto feed ~
load data infile "data/benchmark" into table source fields terminated by ","; load data infile "data/benchmark" into table source fields terminated by ",";
create table sparse(x int); create table sparse(x int);

Loading…
Cancel
Save