Changeset: 4e1afbcb87cf for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4e1afbcb87cf
Branch: default
Log Message:
Merged alloc-less-str branch into default
diffs (truncated from 7806 to 300 lines):
diff --git a/clients/Tests/MAL-signatures.stable.out
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -6462,6 +6462,7 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:int]):bat[:int] ", "STRbatstrLocate2;", ""
]
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:str,
X_3:int):bat[:int] ", "STRbatstrLocate2cst;", "" ]
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str],
X_2:bat[:str]):bat[:int] ", "STRbatstrLocate;", "" ]
+[ "batstr", "locate", "command batstr.locate(X_1:str,
X_2:bat[:str]):bat[:int] ", "STRbatstrLocate_strcst;", "" ]
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatstrLocatecst;", "" ]
[ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int],
X_3:bat[:str]):bat[:str] ", "STRbatLpad2_bat_bat;", "" ]
[ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int],
X_3:str):bat[:str] ", "STRbatLpad2_bat_const;", "" ]
@@ -6476,6 +6477,7 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str],
X_2:bat[:str]):bat[:int] ", "STRbatRstrSearch;", "" ]
[ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatRstrSearchcst;", "" ]
[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatrepeat;", "" ]
+[ "batstr", "repeat", "command batstr.repeat(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatrepeat_strcst;", "" ]
[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatrepeatcst;", "" ]
[ "batstr", "replace", "command batstr.replace(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str]):bat[:str] ", "STRbatReplace;", ""
]
[ "batstr", "replace", "command batstr.replace(X_1:bat[:str], X_2:str,
X_3:str):bat[:str] ", "STRbatReplacecst;", "" ]
@@ -6492,21 +6494,29 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "search", "command batstr.search(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatstrSearchcst;", "" ]
[ "batstr", "space", "command batstr.space(X_1:bat[:int]):bat[:str]
", "STRbatSpace;", "" ]
[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:int]):bat[:str] ", "STRbatsplitpart;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:bat[:str], X_3:int):bat[:str] ", "STRbatsplitpart_fieldcst;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:str, X_3:bat[:int]):bat[:str] ", "STRbatsplitpart_needlecst;", "" ]
[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:str, X_3:int):bat[:str] ", "STRbatsplitpartcst;", "" ]
[ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str],
X_2:bat[:str]):bat[:bit] ", "STRbatPrefix;", "" ]
[ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str],
X_2:str):bat[:bit] ", "STRbatPrefixcst;", "" ]
[ "batstr", "string", "command batstr.string(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatTail;", "" ]
+[ "batstr", "string", "command batstr.string(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatTail_strcst;", "" ]
[ "batstr", "string", "command batstr.string(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatTailcst;", "" ]
[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatprefix;", "" ]
+[ "batstr", "stringleft", "command batstr.stringleft(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatprefix_strcst;", "" ]
[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatprefixcst;", "" ]
[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatsuffix;", "" ]
+[ "batstr", "stringright", "command batstr.stringright(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatsuffix_strcst;", "" ]
[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatsuffixcst;", "" ]
[ "batstr", "substitute", "command batstr.substitute(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str], X_4:bat[:bit]):bat[:str] ",
"STRbatSubstitute;", "" ]
[ "batstr", "substitute", "command batstr.substitute(X_1:bat[:str],
X_2:str, X_3:str, X_4:bit):bat[:str] ", "STRbatSubstitutecst;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:bat[:int], X_3:bat[:int]):bat[:str] ", "STRbatsubstring;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatsubstringTail;", "" ]
+[ "batstr", "substring", "command batstr.substring(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatsubstringTail_strcst;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatsubstringTailcst;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;", "" ]
+[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:bat[:int], X_3:int):bat[:str] ", "STRbatsubstringcst_indexcst;", "" ]
+[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:int, X_3:bat[:int]):bat[:str] ", "STRbatsubstringcst_startcst;", "" ]
[ "batstr", "toLower", "command
batstr.toLower(X_1:bat[:str]):bat[:str] ", "STRbatLower;", "" ]
[ "batstr", "toUpper", "command
batstr.toUpper(X_1:bat[:str]):bat[:str] ", "STRbatUpper;", "" ]
[ "batstr", "trim", "command batstr.trim(X_1:bat[:str],
X_2:bat[:str]):bat[:str] ", "STRbatStrip2_bat;", "" ]
@@ -6519,6 +6529,7 @@ stdout of test 'MAL-signatures` in direc
[ "batudf", "fuse", "command batudf.fuse(X_1:bat[:int],
X_2:bat[:int]):bat[:lng] ", "UDFBATfuse;", "" ]
[ "batudf", "fuse", "command batudf.fuse(X_1:bat[:sht],
X_2:bat[:sht]):bat[:int] ", "UDFBATfuse;", "" ]
[ "batudf", "reverse", "command
batudf.reverse(X_1:bat[:str]):bat[:str] ", "UDFBATreverse;", "" ]
+[ "batuuid", "isaUUID", "command
batuuid.isaUUID(X_1:bat[:str]):bat[:bit] ", "UUIDisaUUID_bulk;", "" ]
[ "batxml", "attribute", "command batxml.attribute(X_1:str,
X_2:bat[:str]):bat[:xml] ", "BATXMLattribute;", "" ]
[ "batxml", "comment", "command
batxml.comment(X_1:bat[:str]):bat[:xml] ", "BATXMLcomment;", "" ]
[ "batxml", "concat", "command batxml.concat(X_1:bat[:xml],
X_2:bat[:xml]):bat[:xml] ", "BATXMLconcat;", "" ]
@@ -8234,8 +8245,6 @@ stdout of test 'MAL-signatures` in direc
[ "calc", "sub_noerror", "pattern calc.sub_noerror(X_1:sht, X_2:int):int
", "CMDvarSUB;", "" ]
[ "calc", "sub_noerror", "pattern calc.sub_noerror(X_1:sht, X_2:lng):lng
", "CMDvarSUB;", "" ]
[ "calc", "sub_noerror", "pattern calc.sub_noerror(X_1:sht, X_2:sht):sht
", "CMDvarSUB;", "" ]
-[ "calc", "substring", "command calc.substring(X_1:str, X_2:int,
X_3:int):str ", "STRsubstring;", "" ]
-[ "calc", "substring", "command calc.substring(X_1:str, X_2:int):str
", "STRsubstringTail;", "" ]
[ "calc", "timestamp", "command calc.timestamp(X_1:date):timestamp ",
"MTIMEtimestamp_fromdate;", "" ]
[ "calc", "timestamp", "command calc.timestamp(X_1:lng):timestamp ",
"MTIMEtimestamp_frommsec;", "" ]
[ "calc", "timestamp", "command calc.timestamp(X_1:int):timestamp ",
"MTIMEtimestamp_fromsecond;", "" ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -9062,6 +9062,7 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:int]):bat[:int] ", "STRbatstrLocate2;", ""
]
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str], X_2:str,
X_3:int):bat[:int] ", "STRbatstrLocate2cst;", "" ]
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str],
X_2:bat[:str]):bat[:int] ", "STRbatstrLocate;", "" ]
+[ "batstr", "locate", "command batstr.locate(X_1:str,
X_2:bat[:str]):bat[:int] ", "STRbatstrLocate_strcst;", "" ]
[ "batstr", "locate", "command batstr.locate(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatstrLocatecst;", "" ]
[ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int],
X_3:bat[:str]):bat[:str] ", "STRbatLpad2_bat_bat;", "" ]
[ "batstr", "lpad", "command batstr.lpad(X_1:bat[:str], X_2:bat[:int],
X_3:str):bat[:str] ", "STRbatLpad2_bat_const;", "" ]
@@ -9076,6 +9077,7 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str],
X_2:bat[:str]):bat[:int] ", "STRbatRstrSearch;", "" ]
[ "batstr", "r_search", "command batstr.r_search(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatRstrSearchcst;", "" ]
[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatrepeat;", "" ]
+[ "batstr", "repeat", "command batstr.repeat(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatrepeat_strcst;", "" ]
[ "batstr", "repeat", "command batstr.repeat(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatrepeatcst;", "" ]
[ "batstr", "replace", "command batstr.replace(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str]):bat[:str] ", "STRbatReplace;", ""
]
[ "batstr", "replace", "command batstr.replace(X_1:bat[:str], X_2:str,
X_3:str):bat[:str] ", "STRbatReplacecst;", "" ]
@@ -9092,21 +9094,29 @@ stdout of test 'MAL-signatures` in direc
[ "batstr", "search", "command batstr.search(X_1:bat[:str],
X_2:str):bat[:int] ", "STRbatstrSearchcst;", "" ]
[ "batstr", "space", "command batstr.space(X_1:bat[:int]):bat[:str]
", "STRbatSpace;", "" ]
[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:int]):bat[:str] ", "STRbatsplitpart;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:bat[:str], X_3:int):bat[:str] ", "STRbatsplitpart_fieldcst;", "" ]
+[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:str, X_3:bat[:int]):bat[:str] ", "STRbatsplitpart_needlecst;", "" ]
[ "batstr", "splitpart", "command batstr.splitpart(X_1:bat[:str],
X_2:str, X_3:int):bat[:str] ", "STRbatsplitpartcst;", "" ]
[ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str],
X_2:bat[:str]):bat[:bit] ", "STRbatPrefix;", "" ]
[ "batstr", "startsWith", "command batstr.startsWith(X_1:bat[:str],
X_2:str):bat[:bit] ", "STRbatPrefixcst;", "" ]
[ "batstr", "string", "command batstr.string(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatTail;", "" ]
+[ "batstr", "string", "command batstr.string(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatTail_strcst;", "" ]
[ "batstr", "string", "command batstr.string(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatTailcst;", "" ]
[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatprefix;", "" ]
+[ "batstr", "stringleft", "command batstr.stringleft(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatprefix_strcst;", "" ]
[ "batstr", "stringleft", "command batstr.stringleft(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatprefixcst;", "" ]
[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatsuffix;", "" ]
+[ "batstr", "stringright", "command batstr.stringright(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatsuffix_strcst;", "" ]
[ "batstr", "stringright", "command batstr.stringright(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatsuffixcst;", "" ]
[ "batstr", "substitute", "command batstr.substitute(X_1:bat[:str],
X_2:bat[:str], X_3:bat[:str], X_4:bat[:bit]):bat[:str] ",
"STRbatSubstitute;", "" ]
[ "batstr", "substitute", "command batstr.substitute(X_1:bat[:str],
X_2:str, X_3:str, X_4:bit):bat[:str] ", "STRbatSubstitutecst;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:bat[:int], X_3:bat[:int]):bat[:str] ", "STRbatsubstring;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:bat[:int]):bat[:str] ", "STRbatsubstringTail;", "" ]
+[ "batstr", "substring", "command batstr.substring(X_1:str,
X_2:bat[:int]):bat[:str] ", "STRbatsubstringTail_strcst;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:int):bat[:str] ", "STRbatsubstringTailcst;", "" ]
[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:int, X_3:int):bat[:str] ", "STRbatsubstringcst;", "" ]
+[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:bat[:int], X_3:int):bat[:str] ", "STRbatsubstringcst_indexcst;", "" ]
+[ "batstr", "substring", "command batstr.substring(X_1:bat[:str],
X_2:int, X_3:bat[:int]):bat[:str] ", "STRbatsubstringcst_startcst;", "" ]
[ "batstr", "toLower", "command
batstr.toLower(X_1:bat[:str]):bat[:str] ", "STRbatLower;", "" ]
[ "batstr", "toUpper", "command
batstr.toUpper(X_1:bat[:str]):bat[:str] ", "STRbatUpper;", "" ]
[ "batstr", "trim", "command batstr.trim(X_1:bat[:str],
X_2:bat[:str]):bat[:str] ", "STRbatStrip2_bat;", "" ]
@@ -9120,6 +9130,7 @@ stdout of test 'MAL-signatures` in direc
[ "batudf", "fuse", "command batudf.fuse(X_1:bat[:lng],
X_2:bat[:lng]):bat[:hge] ", "UDFBATfuse;", "" ]
[ "batudf", "fuse", "command batudf.fuse(X_1:bat[:sht],
X_2:bat[:sht]):bat[:int] ", "UDFBATfuse;", "" ]
[ "batudf", "reverse", "command
batudf.reverse(X_1:bat[:str]):bat[:str] ", "UDFBATreverse;", "" ]
+[ "batuuid", "isaUUID", "command
batuuid.isaUUID(X_1:bat[:str]):bat[:bit] ", "UUIDisaUUID_bulk;", "" ]
[ "batxml", "attribute", "command batxml.attribute(X_1:str,
X_2:bat[:str]):bat[:xml] ", "BATXMLattribute;", "" ]
[ "batxml", "comment", "command
batxml.comment(X_1:bat[:str]):bat[:xml] ", "BATXMLcomment;", "" ]
[ "batxml", "concat", "command batxml.concat(X_1:bat[:xml],
X_2:bat[:xml]):bat[:xml] ", "BATXMLconcat;", "" ]
@@ -11557,8 +11568,6 @@ stdout of test 'MAL-signatures` in direc
[ "calc", "sub_noerror", "pattern calc.sub_noerror(X_1:sht, X_2:int):int
", "CMDvarSUB;", "" ]
[ "calc", "sub_noerror", "pattern calc.sub_noerror(X_1:sht, X_2:lng):lng
", "CMDvarSUB;", "" ]
[ "calc", "sub_noerror", "pattern calc.sub_noerror(X_1:sht, X_2:sht):sht
", "CMDvarSUB;", "" ]
-[ "calc", "substring", "command calc.substring(X_1:str, X_2:int,
X_3:int):str ", "STRsubstring;", "" ]
-[ "calc", "substring", "command calc.substring(X_1:str, X_2:int):str
", "STRsubstringTail;", "" ]
[ "calc", "timestamp", "command calc.timestamp(X_1:date):timestamp ",
"MTIMEtimestamp_fromdate;", "" ]
[ "calc", "timestamp", "command calc.timestamp(X_1:lng):timestamp ",
"MTIMEtimestamp_frommsec;", "" ]
[ "calc", "timestamp", "command calc.timestamp(X_1:int):timestamp ",
"MTIMEtimestamp_fromsecond;", "" ]
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
@@ -1000,44 +1000,6 @@ str SERVERstop(void *ret);
str SERVERsuspend(void *ret);
str SERVERtrace(void *ret, int *mid, int *flag);
BUN SQLload_file(Client cntxt, Tablet *as, bstream *b, stream *out, const char
*csep, const char *rsep, char quote, lng skip, lng maxrow, int best, bool
from_stdin, const char *tabnam, bool escape);
-str STRBytes(int *res, const str *arg1);
-str STRFromWChr(str *res, const int *at);
-str STRLength(int *res, const str *arg1);
-str STRLower(str *res, const str *arg1);
-str STRLpad(str *res, const str *arg1, const int *len);
-str STRLpad2(str *res, const str *arg1, const int *len, const str *arg2);
-str STRLtrim(str *res, const str *arg1);
-str STRLtrim2(str *res, const str *arg1, const str *arg2);
-str STRPrefix(bit *res, const str *arg1, const str *arg2);
-str STRReverseStrSearch(int *res, const str *arg1, const str *arg2);
-str STRRpad(str *res, const str *arg1, const int *len);
-str STRRpad2(str *res, const str *arg1, const int *len, const str *arg2);
-str STRRtrim(str *res, const str *arg1);
-str STRRtrim2(str *res, const str *arg1, const str *arg2);
-str STRStrip(str *res, const str *arg1);
-str STRStrip2(str *res, const str *arg1, const str *arg2);
-str STRSubString(str *res, const str *arg1, const int *offset, const int
*length);
-str STRSubstitute(str *res, const str *arg1, const str *arg2, const str *arg3,
const bit *g);
-str STRSuffix(bit *res, const str *arg1, const str *arg2);
-str STRTail(str *res, const str *arg1, const int *offset);
-str STRUpper(str *res, const str *arg1);
-str STRWChrAt(int *res, const str *arg1, const int *at);
-str STRascii(int *ret, const str *s);
-str STRinsert(str *ret, const str *s, const int *start, const int *l, const
str *s2);
-str STRlikewrap(bit *ret, const str *s, const str *pat, const str *esc);
-str STRlikewrap2(bit *ret, const str *s, const str *pat);
-str STRlocate(int *ret, const str *s1, const str *s2);
-str STRlocate2(int *ret, const str *s1, const str *s2, const int *start);
-str STRprefix(str *ret, const str *s, const int *l);
-str STRrepeat(str *ret, const str *s, const int *c);
-str STRreplace(str *ret, const str *s1, const str *s2, const str *s3);
-str STRspace(str *ret, const int *l);
-str STRsplitpart(str *res, str *haystack, str *needle, int *field);
-str STRstrSearch(int *res, const str *arg1, const str *arg2);
-str STRsubstring(str *ret, const str *s, const int *start, const int *l);
-str STRsubstringTail(str *ret, const str *s, const int *start);
-str STRsuffix(str *ret, const str *s, const int *l);
-str STRtostr(str *res, const str *src);
str SYScpuStatistics(bat *ret, bat *ret2);
str SYSgdkEnv(bat *ret, bat *ret2);
str SYSgdkThread(bat *ret, bat *ret2);
@@ -1690,6 +1652,7 @@ str stoptraceRef;
void strAfterCall(ValPtr v, ValPtr bak);
void strBeforeCall(ValPtr v, ValPtr bak);
str strRef;
+int str_utf8_length(str s);
str streamsRef;
str subavgRef;
str subcountRef;
diff --git a/monetdb5/modules/atoms/mtime.c b/monetdb5/modules/atoms/mtime.c
--- a/monetdb5/modules/atoms/mtime.c
+++ b/monetdb5/modules/atoms/mtime.c
@@ -63,6 +63,8 @@ MTIMEcurrent_timestamp(timestamp *ret)
#define is_str_nil strNil
+#define MTIME_STR_BUFFER_LENGTH MAX(strlen(str_nil) + 1, 512)
+
#define DEC_VAR_R(TYPE, VAR) TYPE *restrict VAR
@@ -70,6 +72,14 @@ MTIMEcurrent_timestamp(timestamp *ret)
#define DEC_ITER(TYPE, VAR) BATiter VAR
+#define DEC_BUFFER(OUTTYPE, RES, MALFUNC) \
+ OUTTYPE RES = GDKmalloc(MTIME_STR_BUFFER_LENGTH); \
+ if (!res) { \
+ msg = createException(MAL, "batmtime." MALFUNC, SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
+ goto bailout; \
+ } \
+
+#define DEC_INT(OUTTYPE, RES, MALFUNC) OUTTYPE RES = (OUTTYPE){0};
#define INIT_VAR(VAR, VAR_BAT) VAR = Tloc(VAR_BAT, 0)
@@ -83,11 +93,9 @@ MTIMEcurrent_timestamp(timestamp *ret)
#define APPEND_STR(MALFUNC) \
if (tfastins_nocheckVAR(bn, i, res, Tsize(bn)) != GDK_SUCCEED) { \
- GDKfree(res); \
msg = createException(SQL, "batmtime." MALFUNC, SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
break; \
} \
- GDKfree(res); \
#define GET_NEXT_ITER(VAR) BUNtvar(VAR, i)
@@ -95,6 +103,21 @@ MTIMEcurrent_timestamp(timestamp *ret)
#define DEC_NOTHING(A, B) ;
+#define FINISH_BUFFER_SINGLE(MALFUNC) \
+bailout: \
+ *ret = NULL; \
+ if (!msg && res && !(*ret = GDKstrdup(res))) \
+ msg = createException(MAL, "batmtime." MALFUNC, SQLSTATE(HY013)
MAL_MALLOC_FAIL); \
+ GDKfree(res); \
+
+#define FINISH_INT_SINGLE(MALFUNC) \
+ *ret = res;
+
+#define FINISH_BUFFER_MULTI(RES) GDKfree(RES);
+
+#define CLEAR_NOTHING(RES) ;
+
+
#define COPYFLAGS do { bn->tsorted = b1->tsorted; bn->trevsorted =
b1->trevsorted; } while (0)
#define SETFLAGS do { bn->tsorted = bn->trevsorted = n < 2; } while (0)
#define func1(NAME, NAMEBULK, MALFUNC, INTYPE, OUTTYPE, FUNC, SETFLAGS,
FUNC_CALL, DEC_SRC, DEC_OUTPUT, \
@@ -152,11 +175,11 @@ bailout:
\
static str
\
NAMEBULK##_cand(bat *ret, const bat *bid, const bat *sid)
\
{
\
+ str msg = MAL_SUCCEED;
\
BAT *b1 = NULL, *s = NULL, *bn = NULL;
\
BUN n;
\
DEC_SRC(INTYPE, src1);
\
DEC_OUTPUT(OUTTYPE, dst);
\
- str msg = MAL_SUCCEED;
\
struct canditer ci;
\
oid off;
\
bool nils = false;
\
@@ -205,26 +228,30 @@ bailout:
\
#define func1_noexcept(FUNC, RET, PARAM) RET = FUNC(PARAM)
#define func1_except(FUNC, RET, PARAM) msg = FUNC(&RET, PARAM); if (msg) break;
-#define func2(NAME, NAMEBULK, MALFUNC, INTYPE1, INTYPE2, OUTTYPE, FUNC,
FUNC_CALL, DEC_INPUT1, DEC_INPUT2, DEC_SRC1, DEC_SRC2, DEC_OUTPUT, \
- INIT_SRC1, INIT_SRC2, INIT_OUTPUT, GET_NEXT_SRC1,
GET_NEXT_SRC2, APPEND_NEXT) \
+#define func2(NAME, NAMEBULK, MALFUNC, INTYPE1, INTYPE2, OUTTYPE, FUNC,
FUNC_CALL, DEC_INPUT1, DEC_INPUT2, DEC_SRC1, DEC_SRC2, DEC_OUTPUT, DEC_EXTRA, \
+ INIT_SRC1, INIT_SRC2, INIT_OUTPUT, GET_NEXT_SRC1,
GET_NEXT_SRC2, APPEND_NEXT, CLEAR_EXTRA_SINGLE, CLEAR_EXTRA_MULTI) \
static str
\
NAME(OUTTYPE *ret, const INTYPE1 *v1, const INTYPE2 *v2)
\
{
\
str msg = MAL_SUCCEED;
\
+ DEC_EXTRA(OUTTYPE, res, MALFUNC);
\
+
\
do {
\
- FUNC_CALL(FUNC, (*ret), *v1, *v2);
\
+ FUNC_CALL(FUNC, res, *v1, *v2);
\
} while (0);
\
+ CLEAR_EXTRA_SINGLE(MALFUNC);
\
return msg;
\
}
\
static str
\
NAMEBULK(bat *ret, const bat *bid1, const bat *bid2)
\
{
\
+ str msg = MAL_SUCCEED;
\
BAT *b1 = NULL, *b2 = NULL, *bn = NULL;
\
BUN n;
\
DEC_SRC1(INTYPE1, src1);
\
DEC_SRC2(INTYPE2, src2);
\
DEC_OUTPUT(OUTTYPE, dst);
\
- str msg = MAL_SUCCEED;
\
+ DEC_EXTRA(OUTTYPE, res, MALFUNC);
\
\
b1 = BATdescriptor(*bid1);
\
b2 = BATdescriptor(*bid2);
\
@@ -248,7 +275,6 @@ NAMEBULK(bat *ret, const bat *bid1, cons
INIT_SRC2(src2, b2);
\
INIT_OUTPUT(dst, bn);
\
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list