Changeset: a94facf62cf5 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a94facf62cf5
Modified Files:
clients/Tests/exports.stable.out
gdk/gdk_atoms.c
gdk/gdk_atoms.h
gdk/gdk_group.c
gdk/gdk_hash.h
gdk/gdk_private.h
gdk/gdk_string.c
geom/monetdb5/geom.c
monetdb5/mal/mal_authorize.c
monetdb5/mal/mal_interpreter.c
monetdb5/modules/atoms/blob.c
monetdb5/modules/atoms/color.c
monetdb5/modules/atoms/inet.c
monetdb5/modules/atoms/json.c
monetdb5/modules/atoms/mtime.c
monetdb5/modules/atoms/str.c
monetdb5/modules/atoms/url.c
monetdb5/modules/atoms/uuid.c
monetdb5/modules/atoms/xml.c
monetdb5/modules/kernel/batcolor.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_rank.c
sql/backends/monet5/sql_result.c
sql/backends/monet5/sql_round_impl.h
sql/server/rel_optimizer.c
sql/server/rel_psm.c
sql/server/rel_select.c
sql/server/sql_atom.c
sql/server/sql_mvc.c
sql/server/sql_parser.y
sql/server/sql_symbol.c
sql/server/sql_symbol.h
sql/server/sql_tokens.h
sql/test/analytics/Tests/analytics01.stable.out
sql/test/analytics/Tests/analytics02.sql
sql/test/analytics/Tests/analytics02.stable.err
sql/test/analytics/Tests/analytics02.stable.out
sql/test/miscellaneous/Tests/simple_selects.sql
sql/test/miscellaneous/Tests/simple_selects.stable.out
sql/test/sample/Tests/sample.15.sql
sql/test/sample/Tests/sample.15.stable.err
sql/test/sample/Tests/sample.15.stable.out
Branch: default
Log Message:
Merged with linear-hashing
diffs (truncated from 2333 to 300 lines):
diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -510,8 +510,6 @@ ssize_t shtToStr(str *dst, size_t *len,
const sht sht_nil;
ssize_t strFromStr(const char *restrict src, size_t *restrict len, str
*restrict dst, bool external);
BUN strHash(const char *s);
-size_t strLen(const char *s);
-int strNil(const char *s);
const char str_nil[2];
gdk_return void_inplace(BAT *b, oid id, const void *val, bool force)
__attribute__((__warn_unused_result__));
int win_mkdir(const char *, const int mode);
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -450,7 +450,7 @@ bitFromStr(const char *src, size_t *len,
**dst = bit_nil;
- if (GDK_STRNIL(src))
+ if (strNil(src))
return 1;
while (GDKisspace(*p))
@@ -508,7 +508,7 @@ batFromStr(const char *src, size_t *len,
atommem(sizeof(bat));
- if (GDK_STRNIL(src)) {
+ if (strNil(src)) {
**dst = bat_nil;
return 1;
}
@@ -665,7 +665,7 @@ numFromStr(const char *src, size_t *len,
* values */
atommem(sz);
- if (GDK_STRNIL(src)) {
+ if (strNil(src)) {
memcpy(*dst, ATOMnilptr(tp), sz);
return 1;
}
@@ -903,7 +903,7 @@ ptrFromStr(const char *src, size_t *len,
atommem(sizeof(ptr));
**dst = ptr_nil;
- if (GDK_STRNIL(src))
+ if (strNil(src))
return 1;
while (GDKisspace(*p))
@@ -956,7 +956,7 @@ dblFromStr(const char *src, size_t *len,
/* alloc memory */
atommem(sizeof(dbl));
- if (GDK_STRNIL(src)) {
+ if (strNil(src)) {
**dst = dbl_nil;
return 1;
}
@@ -1029,7 +1029,7 @@ fltFromStr(const char *src, size_t *len,
/* alloc memory */
atommem(sizeof(flt));
- if (GDK_STRNIL(src)) {
+ if (strNil(src)) {
**dst = flt_nil;
return 1;
}
@@ -1110,7 +1110,7 @@ OIDfromStr(const char *src, size_t *len,
atommem(sizeof(oid));
**dst = oid_nil;
- if (GDK_STRNIL(src))
+ if (strNil(src))
return 1;
while (GDKisspace(*p))
diff --git a/gdk/gdk_atoms.h b/gdk/gdk_atoms.h
--- a/gdk/gdk_atoms.h
+++ b/gdk/gdk_atoms.h
@@ -69,8 +69,6 @@ gdk_export ssize_t dblToStr(str *dst, si
gdk_export ssize_t GDKstrFromStr(unsigned char *restrict dst, const unsigned
char *restrict src, ssize_t len);
gdk_export ssize_t strFromStr(const char *restrict src, size_t *restrict len,
str *restrict dst, bool external);
gdk_export BUN strHash(const char *s);
-gdk_export size_t strLen(const char *s);
-gdk_export int strNil(const char *s);
gdk_export size_t escapedStrlen(const char *restrict src, const char *sep1,
const char *sep2, int quote);
gdk_export size_t escapedStr(char *restrict dst, const char *restrict src,
size_t dstlen, const char *sep1, const char *sep2, int quote);
/*
@@ -323,11 +321,31 @@ ATOMreplaceVAR(int type, Heap *heap, var
* though we have to take corrective action to ensure that str(nil) is
* the smallest value of the domain.
*/
-#define GDK_STREQ(l,r) (strcmp(l,r) == 0)
-#define GDK_STRNIL(s) ((s) == NULL || *(const char*) (s) == '\200')
-#define GDK_STRLEN(s) ((GDK_STRNIL(s)?1:strlen(s))+1)
-#define GDK_STRCMP(l,r)
(GDK_STRNIL(l)?(GDK_STRNIL(r)?0:-1):GDK_STRNIL(r)?1: \
- strcmp((const char*)(l), (const char*)(r)))
+static inline bool
+strEQ(const char *l, const char *r)
+{
+ return strcmp(l, r) == 0;
+}
+
+static inline bool
+strNil(const char *s)
+{
+ return s == NULL || *s == '\200';
+}
+
+static inline size_t
+strLen(const char *s)
+{
+ return strNil(s) ? 2 : strlen(s) + 1;
+}
+
+static inline int
+strCmp(const char *l, const char *r)
+{
+ return strNil(r)
+ ? !strNil(l)
+ : strNil(l) ? -1 : strcmp(l, r);
+}
static inline var_t
VarHeapValRaw(const void *b, BUN p, int w)
diff --git a/gdk/gdk_group.c b/gdk/gdk_group.c
--- a/gdk/gdk_group.c
+++ b/gdk/gdk_group.c
@@ -420,16 +420,23 @@ rev(oid x)
}
/* population count: count number of 1 bits in a value */
-#ifdef __GNUC__
-#if SIZEOF_OID == SIZEOF_INT
-#define pop(x) __builtin_popcount(x)
-#else
-#define pop(x) __builtin_popcountl(x)
-#endif
-#else
static inline int
pop(oid x)
{
+#ifdef __GNUC__
+#if SIZEOF_OID == SIZEOF_INT
+ return __builtin_popcount(x);
+#else
+ return __builtin_popcountl(x);
+#endif
+#else
+#ifdef _MSC_VER
+#if SIZEOF_OID == SIZEOF_INT
+ return (int) __popcnt((unsigned int) (x));
+#else
+ return (int) __popcnt64((unsigned __int64) (x));
+#endif
+#else
/* divide and conquer implementation */
#if SIZEOF_OID == 8
x = (x & 0x5555555555555555) + ((x >> 1) & 0x5555555555555555);
@@ -446,8 +453,9 @@ pop(oid x)
x = (x & 0x0000FFFF) + ((x >> 16) & 0x0000FFFF);
#endif
return (int) x;
+#endif
+#endif
}
-#endif
#define GRP_create_partial_hash_table_core(INIT_1,HASH,EQUAL,ASSERT,GRPTST) \
do { \
diff --git a/gdk/gdk_hash.h b/gdk/gdk_hash.h
--- a/gdk/gdk_hash.h
+++ b/gdk/gdk_hash.h
@@ -196,12 +196,12 @@ HASHgetlink(Hash *h, BUN i)
for (hb = HASHget(h, HASHbucket(h, ((BUN *) (v))[-1])); \
hb != HASHnil(h); \
hb = HASHgetlink(h, hb)) \
- if (GDK_STREQ(v, BUNtvar(bi, hb)))
+ if (strEQ(v, BUNtvar(bi, hb)))
#define HASHloop_str(bi, h, hb, v) \
for (hb = HASHget(h, HASHbucket(h, strHash(v))); \
hb != HASHnil(h); \
hb = HASHgetlink(h, hb)) \
- if (GDK_STREQ(v, BUNtvar(bi, hb)))
+ if (strEQ(v, BUNtvar(bi, hb)))
#define HASHlooploc(bi, h, hb, v) \
for (hb = HASHget(h, HASHprobe(h, v)); \
diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h
--- a/gdk/gdk_private.h
+++ b/gdk/gdk_private.h
@@ -232,8 +232,6 @@ void IMPSprint(BAT *b) /* never called:
__attribute__((__visibility__("hidden")));
__hidden void strCleanHash(Heap *hp, bool rebuild)
__attribute__((__visibility__("hidden")));
-__hidden int strCmp(const char *l, const char *r)
- __attribute__((__visibility__("hidden")));
__hidden void strHeap(Heap *d, size_t cap)
__attribute__((__visibility__("hidden")));
__hidden var_t strLocate(Heap *h, const char *v)
diff --git a/gdk/gdk_string.c b/gdk/gdk_string.c
--- a/gdk/gdk_string.c
+++ b/gdk/gdk_string.c
@@ -64,24 +64,6 @@
const char str_nil[2] = { '\200', 0 };
-int
-strNil(const char *s)
-{
- return GDK_STRNIL(s);
-}
-
-size_t
-strLen(const char *s)
-{
- return GDK_STRLEN(s);
-}
-
-int
-strCmp(const char *l, const char *r)
-{
- return GDK_STRCMP(l, r);
-}
-
void
strHeap(Heap *d, size_t cap)
{
@@ -144,7 +126,7 @@ strCleanHash(Heap *h, bool rebuild)
strhash = GDK_STRHASH(s);
off = strhash & GDK_STRHASHMASK;
newhash[off] = (stridx_t) (pos - extralen - sizeof(stridx_t));
- pos += GDK_STRLEN(s);
+ pos += strLen(s);
}
/* only set dirty flag if the hash table actually changed */
if (memcmp(newhash, h->base, sizeof(newhash)) != 0) {
@@ -165,7 +147,7 @@ strCleanHash(Heap *h, bool rebuild)
pos += pad + extralen;
s = h->base + pos;
assert(strLocate(h, s) != 0);
- pos += GDK_STRLEN(s);
+ pos += strLen(s);
}
}
#endif
@@ -194,7 +176,7 @@ strLocate(Heap *h, const char *v)
/* search the linked list */
for (ref = ((stridx_t *) h->base) + off; *ref; ref = next) {
next = (stridx_t *) (h->base + *ref);
- if (GDK_STRCMP(v, (str) (next + 1) + extralen) == 0)
+ if (strCmp(v, (str) (next + 1) + extralen) == 0)
return (var_t) ((sizeof(stridx_t) + *ref + extralen));
/* found */
}
return 0;
@@ -205,7 +187,7 @@ strPut(Heap *h, var_t *dst, const char *
{
size_t elimbase = GDK_ELIMBASE(h->free);
size_t pad;
- size_t pos, len = GDK_STRLEN(v);
+ size_t pos, len = strLen(v);
const size_t extralen = h->hashash ? EXTRALEN : 0;
stridx_t *bucket;
BUN off, strhash;
@@ -224,7 +206,7 @@ strPut(Heap *h, var_t *dst, const char *
do {
pos = *ref + sizeof(stridx_t) + extralen;
- if (GDK_STRCMP(v, h->base + pos) == 0) {
+ if (strCmp(v, h->base + pos) == 0) {
/* found */
return *dst = (var_t) pos;
}
@@ -235,7 +217,7 @@ strPut(Heap *h, var_t *dst, const char *
* linked list, so only look at single
* entry */
pos = *bucket + extralen;
- if (GDK_STRCMP(v, h->base + pos) == 0) {
+ if (strCmp(v, h->base + pos) == 0) {
/* already in heap: reuse */
return *dst = (var_t) pos;
}
@@ -604,7 +586,7 @@ strFromStr(const char *restrict src, siz
return (ssize_t) strcpy_len(*dst, src, sz);
}
- if (GDK_STRNIL(src)) {
+ if (strNil(src)) {
atommem(2);
strcpy(*dst, str_nil);
return 1;
@@ -761,7 +743,7 @@ strToStr(char **restrict dst, size_t *re
atommem(sz);
return (ssize_t) strcpy_len(*dst, src, sz);
}
- if (GDK_STRNIL(src)) {
+ if (strNil(src)) {
atommem(4);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list