Changeset: 33d2aeea0149 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/33d2aeea0149
Modified Files:
sql/backends/monet5/copy.c
sql/backends/monet5/copy.h
sql/backends/monet5/copy_convert.c
sql/backends/monet5/copy_convert_num.h
Branch: copyparpipe
Log Message:
Support every kind of decimal
diffs (175 lines):
diff --git a/sql/backends/monet5/copy.c b/sql/backends/monet5/copy.c
--- a/sql/backends/monet5/copy.c
+++ b/sql/backends/monet5/copy.c
@@ -946,11 +946,28 @@ static mel_func copy_init_funcs[] = {
batarg("block", bte), batarg("offsets", int), argany("type", 1)
)),
+ command("copy", "parse_decimal", COPYparse_decimal_bte, false, "Parse as a
decimal", args(1, 6,
+ batarg("", bte),
+ batarg("block", bte), batarg("offsets", int), arg("digits", int),
arg("scale", int), arg("type", bte)
+ )),
+ command("copy", "parse_decimal", COPYparse_decimal_sht, false, "Parse as a
decimal", args(1, 6,
+ batarg("", sht),
+ batarg("block", bte), batarg("offsets", int), arg("digits", int),
arg("scale", int), arg("type", sht)
+ )),
command("copy", "parse_decimal", COPYparse_decimal_int, false, "Parse as a
decimal", args(1, 6,
batarg("", int),
batarg("block", bte), batarg("offsets", int), arg("digits", int),
arg("scale", int), arg("type", int)
)),
-
+ command("copy", "parse_decimal", COPYparse_decimal_lng, false, "Parse as a
decimal", args(1, 6,
+ batarg("", lng),
+ batarg("block", bte), batarg("offsets", int), arg("digits", int),
arg("scale", int), arg("type", lng)
+ )),
+ #ifdef HAVE_HGE
+ command("copy", "parse_decimal", COPYparse_decimal_hge, false, "Parse as a
decimal", args(1, 6,
+ batarg("", hge),
+ batarg("block", bte), batarg("offsets", int), arg("digits", int),
arg("scale", int), arg("type", hge)
+ )),
+#endif
command("copy", "set_blocksize", COPYset_blocksize, true, "set the COPY block
size", args(1, 2,
arg("blocksize", int)
)),
diff --git a/sql/backends/monet5/copy.h b/sql/backends/monet5/copy.h
--- a/sql/backends/monet5/copy.h
+++ b/sql/backends/monet5/copy.h
@@ -33,9 +33,19 @@ str parse_fixed_width_column(bat *ret, c
extern str COPYparse_generic(Client cntxt, MalBlkPtr mb, MalStkPtr stk,
InstrPtr pci);
+extern str COPYparse_decimal_bte(bat *parsed_bat_id, bat *block_bat_id, bat
*offsets_bat_id, int *digits_p, int *scale_p, int *dummy);
+extern str COPYparse_decimal_sht(bat *parsed_bat_id, bat *block_bat_id, bat
*offsets_bat_id, int *digits_p, int *scale_p, int *dummy);
+extern str COPYparse_decimal_int(bat *parsed_bat_id, bat *block_bat_id, bat
*offsets_bat_id, int *digits_p, int *scale_p, int *dummy);
+extern str COPYparse_decimal_lng(bat *parsed_bat_id, bat *block_bat_id, bat
*offsets_bat_id, int *digits_p, int *scale_p, int *dummy);
+#ifdef HAVE_HGE
+extern str COPYparse_decimal_hge(bat *parsed_bat_id, bat *block_bat_id, bat
*offsets_bat_id, int *digits_p, int *scale_p, int *dummy);
+#endif
-extern str COPYparse_decimal_int(bat *parsed_bat_id, bat *block_bat_id, bat
*offsets_bat_id, int *digits_p, int *scale_p, int *dummy);
+struct decimal_parms {
+ int digits;
+ int scale;
+};
#endif /*_COPY_H_*/
diff --git a/sql/backends/monet5/copy_convert.c
b/sql/backends/monet5/copy_convert.c
--- a/sql/backends/monet5/copy_convert.c
+++ b/sql/backends/monet5/copy_convert.c
@@ -131,5 +131,24 @@ end:
return msg;
}
+#define TMPL_TYPE bte
+#define TMPL_SUFFIXED(s) s##_bte
+#include "copy_convert_num.h"
+#define TMPL_TYPE sht
+#define TMPL_SUFFIXED(s) s##_sht
#include "copy_convert_num.h"
+
+#define TMPL_TYPE int
+#define TMPL_SUFFIXED(s) s##_int
+#include "copy_convert_num.h"
+
+#define TMPL_TYPE lng
+#define TMPL_SUFFIXED(s) s##_lng
+#include "copy_convert_num.h"
+
+#ifdef HAVE_HGE
+#define TMPL_TYPE hge
+#define TMPL_SUFFIXED(s) s##_hge
+#include "copy_convert_num.h"
+#endif
diff --git a/sql/backends/monet5/copy_convert_num.h
b/sql/backends/monet5/copy_convert_num.h
--- a/sql/backends/monet5/copy_convert_num.h
+++ b/sql/backends/monet5/copy_convert_num.h
@@ -1,36 +1,19 @@
-#ifndef INSIDE_COPY_CONVERT
-
-#include "monetdb_config.h"
-#include "gdk.h"
-#include "mal.h"
-#include "mal_exception.h"
-#include "mal_interpreter.h"
-
-#include "copy.h"
+#if !defined(TMPL_TYPE) || !defined(TMPL_SUFFIXED)
+#error "This file is a template, it cannot be included standalone"
#endif
-#define TPE int
-#define STRINGIFY(S) #S
-#define GDK_TYPIFY(S) TYPE_##S
-#define TMPL_TYPE int;
-
-struct decimal_parms {
- int digits;
- int scale;
-};
-
-static int
-parse_one_decimal_int(struct error_handling *errors, struct decimal_parms
*parms, int rel_row, const char *s)
+static TMPL_TYPE
+TMPL_SUFFIXED(parse_one_decimal) (struct error_handling *errors, struct
decimal_parms *parms, int rel_row, const char *s)
{
int digits = parms->digits;
int scale = parms->scale;
int integer_digits = digits - scale;
bool neg = false;
- TPE res = 0;
+ TMPL_TYPE res = 0;
while(isspace((unsigned char) *s))
s++;
@@ -76,10 +59,10 @@ parse_one_decimal_int(struct error_handl
static str
-parse_many_decimal_int(struct error_handling *errors, void *parms_, int count,
void *dest_, char *data, int *offsets)
+TMPL_SUFFIXED(parse_many_decimal) (struct error_handling *errors, void
*parms_, int count, void *dest_, char *data, int *offsets)
{
struct decimal_parms *parms = parms_;
- int *dest = dest_;
+ TMPL_TYPE *dest = dest_;
for (int i = 0; i < count; i++) {
int offset = offsets[i];
@@ -87,7 +70,7 @@ parse_many_decimal_int(struct error_hand
dest[i] = int_nil;
continue;
}
- dest[i] = parse_one_decimal_int(errors, parms, i, data +
offset);
+ dest[i] = TMPL_SUFFIXED(parse_one_decimal)(errors, parms, i,
data + offset);
}
return MAL_SUCCEED;
@@ -95,7 +78,7 @@ parse_many_decimal_int(struct error_hand
str
-COPYparse_decimal_int(
+TMPL_SUFFIXED(COPYparse_decimal) (
bat *parsed_bat_id,
bat *block_bat_id, bat *offsets_bat_id,
int *digits, int *scale,
@@ -105,5 +88,12 @@ COPYparse_decimal_int(
.digits = *digits,
.scale = *scale,
};
- return parse_fixed_width_column(parsed_bat_id,
"copy.parse_decimal_int", *block_bat_id, *offsets_bat_id, TYPE_int,
parse_many_decimal_int, &myparms);
+ return parse_fixed_width_column(
+ parsed_bat_id, "copy.parse_decimal",
+ *block_bat_id, *offsets_bat_id,
+ TMPL_SUFFIXED(TYPE), TMPL_SUFFIXED(parse_many_decimal),
&myparms);
}
+
+
+#undef TMPL_TYPE
+#undef TMPL_SUFFIXED
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]