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
27typedef 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 *extra, 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
63typedef 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
74mal_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);
75mal_export str TABLETcreate_bats(Tablet *as, BUN est);
76mal_export str TABLETcollect(BAT **bats, Tablet *as);
77mal_export str TABLETcollect_parts(BAT **bats, Tablet *as, BUN offset);
78mal_export void TABLETdestroy_format(Tablet *as);
79mal_export int TABLEToutput_file(Tablet *as, BAT *order, stream *s);
80mal_export str COPYrejects(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
81mal_export str COPYrejects_clear(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci);
82
83#endif
84