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]

Reply via email to