| 1 | /* |
| 2 | * This Source Code Form is subject to the terms of the Mozilla Public |
| 3 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
| 4 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. |
| 5 | * |
| 6 | * Copyright 1997 - July 2008 CWI, August 2008 - 2019 MonetDB B.V. |
| 7 | */ |
| 8 | |
| 9 | /* |
| 10 | * @+ Implementation |
| 11 | * The implementation needs the stream abstraction, which also provides |
| 12 | * primitives to compress/decompress files on the fly. |
| 13 | * The file can plain ASCII, gzipped or bzipped, decided by the extention |
| 14 | * (none, gz or bz2). The default is plain ASCII, which is formatted to |
| 15 | * pre presented on the screen directly. |
| 16 | */ |
| 17 | #ifndef _TABLET_IO2_H_ |
| 18 | #define _TABLET_IO2_H_ |
| 19 | |
| 20 | /* #define _DEBUG_TABLET_ */ |
| 21 | |
| 22 | #include "gdk.h" |
| 23 | #include "mal_exception.h" |
| 24 | #include "mal_client.h" |
| 25 | #include "mal_interpreter.h" |
| 26 | |
| 27 | typedef struct Column_t { |
| 28 | const char *name; /* column title */ |
| 29 | const char *sep; |
| 30 | const char *rsep; |
| 31 | int seplen; |
| 32 | char *type; |
| 33 | int adt; /* type index */ |
| 34 | BAT *c; /* set to NULL when scalar is meant */ |
| 35 | BATiter ci; |
| 36 | BUN p; |
| 37 | unsigned int tabs; /* field size in tab positions */ |
| 38 | const char *nullstr; /* null representation */ |
| 39 | size_t null_length; /* its length */ |
| 40 | unsigned int width; /* actual column width */ |
| 41 | unsigned int maxwidth; /* permissible width */ |
| 42 | int fieldstart; /* Fixed character field load positions */ |
| 43 | int fieldwidth; |
| 44 | int scale, precision; |
| 45 | ssize_t (*tostr)(void *, char **buf, size_t *len, int type, const void *a); |
| 46 | void *(*frstr)(struct Column_t *fmt, int type, const char *s); |
| 47 | void *extra; |
| 48 | void *data; |
| 49 | int skip; /* only skip to the next field */ |
| 50 | size_t len; |
| 51 | bit ws; /* if set we need to skip white space */ |
| 52 | char quote; /* if set use this character for string quotes */ |
| 53 | const void *nildata; |
| 54 | int size; |
| 55 | } Column; |
| 56 | |
| 57 | /* |
| 58 | * All table printing is based on building a report structure first. |
| 59 | * This table structure is private to a client, which made us to |
| 60 | * keep it in an ADT. |
| 61 | */ |
| 62 | |
| 63 | typedef struct Table_t { |
| 64 | BUN offset; |
| 65 | BUN nr; /* allocated space for table loads */ |
| 66 | BUN nr_attrs; /* attributes found sofar */ |
| 67 | Column *format; /* remove later */ |
| 68 | str error; /* last error */ |
| 69 | int tryall; /* skip erroneous lines */ |
| 70 | str filename; /* source */ |
| 71 | BAT *complaints; /* lines that did not match the required input */ |
| 72 | } Tablet; |
| 73 | |
| 74 | mal_export 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); |
| 75 | mal_export str TABLETcreate_bats(Tablet *as, BUN est); |
| 76 | mal_export str TABLETcollect(BAT **bats, Tablet *as); |
| 77 | mal_export str TABLETcollect_parts(BAT **bats, Tablet *as, BUN offset); |
| 78 | mal_export void TABLETdestroy_format(Tablet *as); |
| 79 | mal_export int TABLEToutput_file(Tablet *as, BAT *order, stream *s); |
| 80 | mal_export str COPYrejects(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); |
| 81 | mal_export str COPYrejects_clear(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci); |
| 82 | |
| 83 | #endif |
| 84 | |