Added drop table, 'if (not) exists' support. Bug fixes
This commit is contained in:
@@ -137,6 +137,7 @@ decayed_t<VT, types::GetLongType<T>> sums(const VT<T>& arr) {
|
||||
ret[i] = ret[i-1] + arr[i];
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<class T, template<typename ...> class VT>
|
||||
decayed_t<VT, types::GetFPType<types::GetLongType<T>>> avgs(const VT<T>& arr) {
|
||||
const uint32_t& len = arr.size;
|
||||
@@ -149,6 +150,7 @@ decayed_t<VT, types::GetFPType<types::GetLongType<T>>> avgs(const VT<T>& arr) {
|
||||
ret[i] = (s+=arr[i])/(FPType)(i+1);
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<class T, template<typename ...> class VT>
|
||||
decayed_t<VT, types::GetLongType<T>> sumw(uint32_t w, const VT<T>& arr) {
|
||||
const uint32_t& len = arr.size;
|
||||
@@ -162,6 +164,7 @@ decayed_t<VT, types::GetLongType<T>> sumw(uint32_t w, const VT<T>& arr) {
|
||||
ret[i] = ret[i-1] + arr[i] - arr[i-w];
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<class T, template<typename ...> class VT>
|
||||
decayed_t<VT, types::GetFPType<types::GetLongType<T>>> avgw(uint32_t w, const VT<T>& arr) {
|
||||
typedef types::GetFPType<types::GetLongType<T>> FPType;
|
||||
|
||||
+13
-13
@@ -265,16 +265,16 @@ string base62uuid(int l) {
|
||||
}
|
||||
|
||||
|
||||
template<typename _Ty>
|
||||
inline void vector_type<_Ty>::out(uint32_t n, const char* sep) const
|
||||
{
|
||||
n = n > size ? size : n;
|
||||
std::cout << '(';
|
||||
{
|
||||
uint32_t i = 0;
|
||||
for (; i < n - 1; ++i)
|
||||
std::cout << this->operator[](i) << sep;
|
||||
std::cout << this->operator[](i);
|
||||
}
|
||||
std::cout << ')';
|
||||
}
|
||||
// template<typename _Ty>
|
||||
// inline void vector_type<_Ty>::out(uint32_t n, const char* sep) const
|
||||
// {
|
||||
// n = n > size ? size : n;
|
||||
// std::cout << '(';
|
||||
// {
|
||||
// uint32_t i = 0;
|
||||
// for (; i < n - 1; ++i)
|
||||
// std::cout << this->operator[](i) << sep;
|
||||
// std::cout << this->operator[](i);
|
||||
// }
|
||||
// std::cout << ')';
|
||||
// }
|
||||
|
||||
+1
-1
@@ -129,7 +129,7 @@ public:
|
||||
}
|
||||
|
||||
// defined in table_ext_monetdb.hpp
|
||||
void* monetdb_get_col();
|
||||
void* monetdb_get_col(void** gc_vecs, uint32_t& cnt);
|
||||
|
||||
};
|
||||
template<>
|
||||
|
||||
@@ -22,7 +22,7 @@ inline constexpr monetdbe_types AQType_2_monetdbe[] = {
|
||||
#else
|
||||
monetdbe_int64_t,
|
||||
#endif
|
||||
monetdbe_int16_t, monetdbe_int8_t, monetdbe_bool, monetdbe_int64_t,
|
||||
monetdbe_int16_t, monetdbe_int8_t, monetdbe_bool, monetdbe_int128_t,
|
||||
monetdbe_timestamp, monetdbe_int64_t, monetdbe_int64_t
|
||||
};
|
||||
|
||||
@@ -35,10 +35,13 @@ void TableInfo<Ts ...>::monetdb_append_table(void* srv, const char* alt_name) {
|
||||
monetdbe_column** monetdbe_cols = new monetdbe_column * [sizeof...(Ts)];
|
||||
|
||||
uint32_t i = 0;
|
||||
constexpr auto n_vecs = count_vector_type((tuple_type*)(0));
|
||||
void* gc_vecs[1 + n_vecs];
|
||||
puts("getcols...");
|
||||
const auto get_col = [&monetdbe_cols, &i, *this](auto v) {
|
||||
uint32_t cnt = 0;
|
||||
const auto get_col = [&monetdbe_cols, &i, *this, &gc_vecs, &cnt](auto v) {
|
||||
printf("%d %d\n", i, (ColRef<void>*)v - colrefs);
|
||||
monetdbe_cols[i++] = (monetdbe_column*)v->monetdb_get_col();
|
||||
monetdbe_cols[i++] = (monetdbe_column*)v->monetdb_get_col(gc_vecs, cnt);
|
||||
};
|
||||
(get_col((ColRef<Ts>*)(colrefs + i)), ...);
|
||||
puts("getcols done");
|
||||
@@ -47,7 +50,7 @@ void TableInfo<Ts ...>::monetdb_append_table(void* srv, const char* alt_name) {
|
||||
printf("no:%d name: %s count:%d data: %p type:%d \n",
|
||||
i, monetdbe_cols[i]->name, monetdbe_cols[i]->count, monetdbe_cols[i]->data, monetdbe_cols[i]->type);
|
||||
}
|
||||
std::string create_table_str = "CREATE TABLE ";
|
||||
std::string create_table_str = "CREATE TABLE IF NOT EXISTS ";
|
||||
create_table_str += alt_name;
|
||||
create_table_str += " (";
|
||||
i = 0;
|
||||
@@ -70,12 +73,14 @@ void TableInfo<Ts ...>::monetdb_append_table(void* srv, const char* alt_name) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
// for(uint32_t i = 0; i < n_vecs; ++i)
|
||||
// free(gc_vecs[i]);
|
||||
puts("Error! Empty table.");
|
||||
}
|
||||
|
||||
|
||||
template<class Type>
|
||||
void* ColRef<Type>::monetdb_get_col() {
|
||||
void* ColRef<Type>::monetdb_get_col(void** gc_vecs, uint32_t& cnt) {
|
||||
auto aq_type = AQType_2_monetdbe[types::Types<Type>::getType()];
|
||||
monetdbe_column* col = (monetdbe_column*)malloc(sizeof(monetdbe_column));
|
||||
|
||||
@@ -83,7 +88,13 @@ void* ColRef<Type>::monetdb_get_col() {
|
||||
col->count = this->size;
|
||||
col->data = this->container;
|
||||
col->name = const_cast<char*>(this->name);
|
||||
|
||||
// auto arr = (types::timestamp_t*) malloc (sizeof(types::timestamp_t)* this->size);
|
||||
// if constexpr (is_vector_type<Type>){
|
||||
// for(uint32_t i = 0; i < this->size; ++i){
|
||||
// memcpy(arr + i, this->container + i, sizeof(types::timestamp_t));
|
||||
// }
|
||||
// gc_vecs[cnt++] = arr;
|
||||
// }
|
||||
return col;
|
||||
}
|
||||
|
||||
|
||||
+9
-3
@@ -29,7 +29,7 @@ namespace types {
|
||||
static constexpr const char* printf_str[] = { "%d", "%f", "%s", "%lf", "%Lf", "%ld", "%d", "%hi", "%s", "%s", "%c",
|
||||
"%u", "%lu", "%s", "%hu", "%hhu", "%s", "%s", "Vector<%s>", "%s", "NULL", "ERROR" };
|
||||
static constexpr const char* SQL_Type[] = { "INT", "REAL", "TEXT", "DOUBLE", "DOUBLE", "BIGINT", "HUGEINT", "SMALLINT", "DATE", "TIME", "TINYINT",
|
||||
"INT", "BIGINT", "HUGEINT", "SMALLINT", "TINYINT", "BOOL", "BIGINT", "TIMESTAMP", "NULL", "ERROR"};
|
||||
"INT", "BIGINT", "HUGEINT", "SMALLINT", "TINYINT", "BOOL", "HUGEINT", "TIMESTAMP", "NULL", "ERROR"};
|
||||
|
||||
|
||||
// TODO: deal with data/time <=> str/uint conversion
|
||||
@@ -197,12 +197,12 @@ namespace types {
|
||||
struct astring_view {
|
||||
const unsigned char* str = 0;
|
||||
|
||||
#if defined(__clang__) or !defined(__GNUC__)
|
||||
#if defined(__clang__) || !defined(__GNUC__)
|
||||
constexpr
|
||||
#endif
|
||||
astring_view(const char* str) noexcept :
|
||||
str((const unsigned char*)(str)) {}
|
||||
#if defined(__clang__) or !defined(__GNUC__)
|
||||
#if defined(__clang__) || !defined(__GNUC__)
|
||||
constexpr
|
||||
#endif
|
||||
astring_view(const signed char* str) noexcept :
|
||||
@@ -373,4 +373,10 @@ constexpr size_t count_type(std::tuple<Types...>* ts) {
|
||||
size_t t[] = {sum_type<Types, T1...>() ...};
|
||||
return sum_type(t, sizeof...(Types));
|
||||
}
|
||||
template<class ...Types>
|
||||
constexpr size_t count_vector_type(std::tuple<Types...>* ts) {
|
||||
size_t t[] = {is_vector_type<Types> ...};
|
||||
return sum_type(t, sizeof...(Types));
|
||||
}
|
||||
|
||||
#endif // !_TYPES_H
|
||||
|
||||
+24
-1
@@ -12,11 +12,16 @@
|
||||
#include <iterator>
|
||||
#include <initializer_list>
|
||||
#include <unordered_set>
|
||||
#include <iostream>
|
||||
#include "hasher.h"
|
||||
#include "types.h"
|
||||
|
||||
#pragma pack(push, 1)
|
||||
template <typename _Ty>
|
||||
class slim_vector {
|
||||
|
||||
};
|
||||
template <typename _Ty>
|
||||
class vector_type {
|
||||
public:
|
||||
typedef vector_type<_Ty> Decayed_t;
|
||||
@@ -249,7 +254,25 @@ public:
|
||||
}
|
||||
size = this->size + dist;
|
||||
}
|
||||
void out(uint32_t n = 4, const char* sep = " ") const;
|
||||
inline void out(uint32_t n = 4, const char* sep = " ") const
|
||||
{
|
||||
const char* more = "";
|
||||
if (n < this->size)
|
||||
more = " ... ";
|
||||
else
|
||||
n = this->size;
|
||||
|
||||
std::cout << '(';
|
||||
if (n > 0)
|
||||
{
|
||||
uint32_t i = 0;
|
||||
for (; i < n - 1; ++i)
|
||||
std::cout << this->operator[](i) << sep;
|
||||
std::cout << this->operator[](i);
|
||||
}
|
||||
std::cout<< more;
|
||||
std::cout << ')';
|
||||
}
|
||||
vector_type<_Ty> subvec_memcpy(uint32_t start, uint32_t end) const {
|
||||
vector_type<_Ty> subvec(end - start);
|
||||
memcpy(subvec.container, container + start, sizeof(_Ty) * (end - start));
|
||||
|
||||
Reference in New Issue
Block a user