Changeset: 99f9be40d724 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/99f9be40d724
Modified Files:
monetdb5/modules/mal/batExtensions.c
monetdb5/modules/mal/pcre.c
sql/backends/monet5/sql.c
sql/test/emptydb/Tests/check.stable.out
sql/test/emptydb/Tests/check.stable.out.int128
Branch: string_imprints
Log Message:
Merge with default
diffs (truncated from 1709 to 300 lines):
diff --git a/clients/mapiclient/dump.c b/clients/mapiclient/dump.c
--- a/clients/mapiclient/dump.c
+++ b/clients/mapiclient/dump.c
@@ -2391,7 +2391,7 @@ dump_database(Mapi mid, stream *toConsol
const char *sequences2 =
"SELECT s.name, "
"seq.name, "
- "get_value_for(s.name, seq.name), "
+ "peak_next_value_for(s.name, seq.name), "
"seq.\"minvalue\", "
"seq.\"maxvalue\", "
"seq.\"increment\", "
diff --git a/common/utils/matomic.h b/common/utils/matomic.h
--- a/common/utils/matomic.h
+++ b/common/utils/matomic.h
@@ -57,7 +57,6 @@
/* #define NO_ATOMIC_INSTRUCTIONS */
/* the atomic type we export is always a 64 bit unsigned integer */
-typedef uint64_t ATOMIC_BASE_TYPE;
/* ignore __STDC_NO_ATOMICS__ if compiling using Intel compiler on
* Windows since otherwise we can't compile this at all in C99 mode */
@@ -67,8 +66,10 @@ typedef uint64_t ATOMIC_BASE_TYPE;
#if SIZEOF_LONG_LONG == 8
typedef volatile atomic_ullong ATOMIC_TYPE;
+typedef unsigned long long ATOMIC_BASE_TYPE;
#elif SIZEOF_LONG == 8
typedef volatile atomic_ulong ATOMIC_TYPE;
+typedef unsigned long ATOMIC_BASE_TYPE;
#else
#error "we need a 64 bit atomic type"
#endif
@@ -106,6 +107,8 @@ typedef volatile atomic_flag ATOMIC_FLAG
#elif defined(_MSC_VER) && !defined(NO_ATOMIC_INSTRUCTIONS)
+typedef uint64_t ATOMIC_BASE_TYPE;
+
#include <intrin.h>
/* On Windows, with Visual Studio 2005, the compiler uses acquire
@@ -227,6 +230,7 @@ typedef volatile int ATOMIC_FLAG;
/* the new way of doing this according to GCC (the old way, using
* __sync_* primitives is not supported) */
+typedef uint64_t ATOMIC_BASE_TYPE;
typedef volatile ATOMIC_BASE_TYPE ATOMIC_TYPE;
#define ATOMIC_VAR_INIT(val) (val)
@@ -262,6 +266,8 @@ typedef volatile char ATOMIC_FLAG;
/* emulate using mutexes */
+typedef uint64_t ATOMIC_BASE_TYPE;
+
#include <pthread.h> /* required for pthread_mutex_t */
typedef struct {
diff --git a/monetdb5/mal/mal_client.c b/monetdb5/mal/mal_client.c
--- a/monetdb5/mal/mal_client.c
+++ b/monetdb5/mal/mal_client.c
@@ -598,7 +598,7 @@ MCreadClient(Client c)
in->pos++;
if (in->pos >= in->len || in->mode) {
- ssize_t rd, sum = 0;
+ ssize_t rd;
if (in->eof || !isa_block_stream(c->fdout)) {
if (!isa_block_stream(c->fdout) && c->promptlength > 0)
@@ -607,7 +607,6 @@ MCreadClient(Client c)
in->eof = false;
}
while ((rd = bstream_next(in)) > 0 && !in->eof) {
- sum += rd;
if (!in->mode) /* read one line at a time in line mode
*/
break;
}
diff --git a/monetdb5/modules/mal/batExtensions.c
b/monetdb5/modules/mal/batExtensions.c
--- a/monetdb5/modules/mal/batExtensions.c
+++ b/monetdb5/modules/mal/batExtensions.c
@@ -100,7 +100,7 @@ CMDBATsingle(Client cntxt, MalBlkPtr mb,
if( b == 0)
throw(MAL,"bat.single", SQLSTATE(HY013) MAL_MALLOC_FAIL);
if (ATOMextern(b->ttype))
- u = (ptr) *(str *)u;
+ u = (ptr) *(ptr *)u;
if (BUNappend(b, u, false) != GDK_SUCCEED) {
BBPreclaim(b);
throw(MAL, "bat.single", SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/monetdb5/modules/mal/mal_io.c b/monetdb5/modules/mal/mal_io.c
--- a/monetdb5/modules/mal/mal_io.c
+++ b/monetdb5/modules/mal/mal_io.c
@@ -120,8 +120,8 @@ IOprintBoth(Client cntxt, MalBlkPtr mb,
if (hd)
mnstr_printf(fp, "%s", hd);
- if (ATOMvarsized(tpe))
- ATOMprint(tpe, *(str *) val, fp);
+ if (ATOMextern(tpe))
+ ATOMprint(tpe, *(ptr *) val, fp);
else
ATOMprint(tpe, val, fp);
diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c
--- a/monetdb5/modules/mal/pcre.c
+++ b/monetdb5/modules/mal/pcre.c
@@ -285,8 +285,6 @@ mywstrcasestr(const char *restrict hayst
if (nlen == 0)
return atend ? haystack + strlen(haystack) : haystack;
- size_t hlen = strlen(haystack);
-
while (*haystack) {
size_t i;
size_t h;
@@ -312,7 +310,6 @@ mywstrcasestr(const char *restrict hayst
if (i == nlen && (!atend || haystack[h] == 0))
return haystack;
haystack += step;
- hlen -= step;
}
return NULL;
}
diff --git a/monetdb5/modules/mal/remote.c b/monetdb5/modules/mal/remote.c
--- a/monetdb5/modules/mal/remote.c
+++ b/monetdb5/modules/mal/remote.c
@@ -1102,7 +1102,7 @@ static str RMTput(Client cntxt, MalBlkPt
int (*atomcmp)(const void *, const void *) = ATOMcompare(type);
if (ATOMextern(type))
- p = *(str *)value;
+ p = *(ptr *)value;
val = ATOMformat(type, p);
if (val == NULL) {
diff --git a/monetdb5/modules/mal/tablet.c b/monetdb5/modules/mal/tablet.c
--- a/monetdb5/modules/mal/tablet.c
+++ b/monetdb5/modules/mal/tablet.c
@@ -1550,7 +1550,7 @@ SQLload_file(Client cntxt, Tablet *as, b
READERtask task;
READERtask ptask[MAXWORKERS];
int threads = (maxrow< 0 || maxrow > (1 << 16)) && GDKnr_threads > 1 ?
(GDKnr_threads < MAXWORKERS ? GDKnr_threads - 1 : MAXWORKERS - 1) : 1;
- lng lio = 0, tio, t1 = 0, total = 0, iototal = 0;
+ lng tio, t1 = 0;
char name[MT_NAME_LEN];
/* TRC_DEBUG(MAL_SERVER, "Prepare copy work for '%d' threads col '%s' rec
'%s' quot '%c'\n", threads, csep, rsep, quote);*/
@@ -1722,8 +1722,6 @@ SQLload_file(Client cntxt, Tablet *as, b
if (task.ateof && !task.top[task.cur])
break;
t1 = GDKusec() - t1;
- total += t1;
- iototal += tio;
/* TRC_DEBUG(MAL_SERVER, "Break: %d rows\n", task.top[task.cur]);*/
t1 = GDKusec();
@@ -1757,7 +1755,6 @@ SQLload_file(Client cntxt, Tablet *as, b
"Fill the BATs '%d' " BUNFMT " cap " BUNFMT "\n",
task.top[task.cur], task.cnt,
BATcapacity(as->format[task.cur].c));*/
- lio += GDKusec() - t1; /* row break done */
if (task.top[task.cur]) {
if (res == 0) {
SQLworkdivider(&task, ptask, (int)
as->nr_attrs, threads);
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -951,23 +951,11 @@ mvc_next_value_bulk(Client cntxt, MalBlk
if (!(r = COLnew(0, TYPE_lng, card, TRANSIENT)))
throw(SQL, "sql.next_value", SQLSTATE(HY013) MAL_MALLOC_FAIL);
- lng start, inc, minv, maxv, end, *restrict rb = Tloc(r, 0);
-
- if (seqbulk_next_value(be->mvc->session->tr->store, seq, card, &start,
&inc, &minv, &maxv, &end)) {
- be->last_id = end;
+ lng *restrict rb = Tloc(r, 0);
+
+ if (seqbulk_next_value(be->mvc->session->tr->store, seq, card, rb)) {
+ be->last_id = rb[card-1];
sqlvar_set_number(find_global_var(be->mvc,
mvc_bind_schema(be->mvc, "sys"), "last_id"), be->last_id);
- lng c = start;
- for(BUN i = 0; i<card; ) {
- if (maxv && c > maxv) {
- if (!seq->cycle)
- break;
- c = minv;
- }
- rb[i++] = c;
- if (i < card)
- c += inc;
- }
- assert(c == end);
BATsetcount(r, card);
r->tnonil = true;
r->tnil = false;
@@ -1007,6 +995,33 @@ mvc_get_value(Client cntxt, MalBlkPtr mb
throw(SQL, "sql.get_value", SQLSTATE(HY050) "Cannot get sequence value
%s.%s", sname, seqname);
}
+/* str mvc_peak_next_value(lng *res, str *sname, str *seqname); */
+str
+mvc_peak_next_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
+{
+ mvc *m = NULL;
+ str msg;
+ sql_schema *s;
+ sql_sequence *seq;
+ lng *res = getArgReference_lng(stk, pci, 0);
+ const char *sname = *getArgReference_str(stk, pci, 1);
+ const char *seqname = *getArgReference_str(stk, pci, 2);
+
+ if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
+ return msg;
+ if ((msg = checkSQLContext(cntxt)) != NULL)
+ return msg;
+ if (!(s = mvc_bind_schema(m, sname)))
+ throw(SQL, "sql.peak_next_value", SQLSTATE(3F000) "Cannot find
the schema %s", sname);
+ if (!(seq = find_sql_sequence(m->session->tr, s, seqname)))
+ throw(SQL, "sql.peak_next_value", SQLSTATE(HY050) "Cannot find
the sequence %s.%s", sname, seqname);
+
+ if (seq_peak_next_value(m->session->tr->store, seq, res))
+ return MAL_SUCCEED;
+
+ throw(SQL, "sql.peak_next_value", SQLSTATE(HY050) "Cannot peak at next
sequence value %s.%s", sname, seqname);
+}
+
str
mvc_getVersion(lng *version, const int *clientid)
{
@@ -5099,6 +5114,7 @@ static mel_func sql_init_funcs[] = {
pattern("sql", "next_value", mvc_next_value, true, "return the next value of
the sequence", args(1,3, arg("",lng),arg("sname",str),arg("sequence",str))),
pattern("batsql", "next_value", mvc_next_value_bulk, true, "return the next
value of the sequence", args(1,4, batarg("",lng),arg("card",lng),
arg("sname",str),arg("sequence",str))),
pattern("sql", "get_value", mvc_get_value, false, "return the current value
of the sequence", args(1,3, arg("",lng),arg("sname",str),arg("sequence",str))),
+ pattern("sql", "peak_next_value", mvc_peak_next_value, false, "Peaks at the
next value of the sequence", args(1,3,
arg("",lng),arg("sname",str),arg("sequence",str))),
pattern("sql", "restart", mvc_restart_seq, true, "restart the sequence with
value start", args(1,4,
arg("",lng),arg("sname",str),arg("sequence",str),arg("start",lng))),
pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes of all columns of the schema's tables, plus the current transaction
level", args(7,8,
batarg("ids",int),batarg("segments",lng),batarg("all",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str))),
pattern("sql", "deltas", mvc_delta_values, false, "Return the delta values
sizes from the table's columns, plus the current transaction level", args(7,9,
batarg("ids",int),batarg("segments",lng),batarg("all",lng),batarg("inserted",lng),batarg("updated",lng),batarg("deleted",lng),batarg("tr_level",int),arg("schema",str),arg("table",str))),
diff --git a/sql/backends/monet5/sql.h b/sql/backends/monet5/sql.h
--- a/sql/backends/monet5/sql.h
+++ b/sql/backends/monet5/sql.h
@@ -102,6 +102,7 @@ extern str mvc_logfile(Client cntxt, Mal
extern str mvc_next_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
extern str mvc_next_value_bulk(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
extern str mvc_get_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
+extern str mvc_peak_next_value(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
extern str mvc_getVersion(lng *r, const int *clientid);
extern str mvc_restart_seq(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr
pci);
extern str not_unique(bit *ret, const bat *bid);
diff --git a/sql/backends/monet5/sql_fround_impl.h
b/sql/backends/monet5/sql_fround_impl.h
--- a/sql/backends/monet5/sql_fround_impl.h
+++ b/sql/backends/monet5/sql_fround_impl.h
@@ -355,7 +355,9 @@ round_wrap(TYPE *res, const TYPE *v, con
assert(res && v && r);
bte rr = *r;
- if (is_bte_nil(rr) || (size_t) abs(rr) >= sizeof(scales) /
sizeof(scales[0]))
+ if (is_bte_nil(rr))
+ throw(MAL, "round", SQLSTATE(42000) "Number of digits cannot be
NULL");
+ if ((size_t) abs(rr) >= sizeof(scales) / sizeof(scales[0]))
throw(MAL, "round", SQLSTATE(42000) "Digits out of bounds");
*res = (ISNIL(TYPE)(*v)) ? NIL(TYPE) : round_body(*v, rr);
if (isinf(*res))
@@ -380,7 +382,11 @@ bat_round_wrap(Client cntxt, MalBlkPtr m
(void) cntxt;
(void) mb;
- if (is_bte_nil(r) || (size_t) abs(r) >= sizeof(scales) /
sizeof(scales[0])) {
+ if (is_bte_nil(r)) {
+ msg = createException(MAL, "round", SQLSTATE(42000) "Number of
digits cannot be NULL");
+ goto bailout;
+ }
+ if ((size_t) abs(r) >= sizeof(scales) / sizeof(scales[0])) {
msg = createException(MAL, "round", SQLSTATE(42000) "Digits out
of bounds");
goto bailout;
}
@@ -491,7 +497,10 @@ bat_round_wrap_cst(Client cntxt, MalBlkP
oid p1 = (canditer_next_dense(&ci1) - off1);
r = src[p1];
- if (is_bte_nil(r) || (size_t) abs(r) >= sizeof(scales)
/ sizeof(scales[0])) {
+ if (is_bte_nil(r)) {
+ msg = createException(MAL, "round",
SQLSTATE(42000) "Number of digits cannot be NULL");
+ goto bailout1;
+ } else if ((size_t) abs(r) >= sizeof(scales) /
sizeof(scales[0])) {
msg = createException(MAL, "round",
SQLSTATE(42000) "Digits out of bounds");
goto bailout1;
} else if (ISNIL(TYPE)(x)) {
@@ -510,7 +519,10 @@ bat_round_wrap_cst(Client cntxt, MalBlkP
oid p1 = (canditer_next(&ci1) - off1);
r = src[p1];
- if (is_bte_nil(r) || (size_t) abs(r) >= sizeof(scales)
/ sizeof(scales[0])) {
+ if (is_bte_nil(r)) {
+ msg = createException(MAL, "round",
SQLSTATE(42000) "Number of digits cannot be NULL");
+ goto bailout1;
+ } else if ((size_t) abs(r) >= sizeof(scales) /
sizeof(scales[0])) {
msg = createException(MAL, "round",
SQLSTATE(42000) "Digits out of bounds");
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list