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 | #ifndef MAL_BACKEND_H |
10 | #define MAL_BACKEND_H |
11 | |
12 | #include "streams.h" |
13 | #include "mal.h" |
14 | #include "mal_client.h" |
15 | #include "sql_mvc.h" |
16 | #include "sql_qc.h" |
17 | |
18 | /* |
19 | * The back-end structure collects the information needed to support |
20 | * compilation and execution of the SQL code against the Monet Version 5 |
21 | * back end. Note that the back-end can be called upon by the front-end |
22 | * to handle specific tasks, such as catalog management (sql_mvc) |
23 | * and query execution (sql_qc). For this purpose, the front-end needs |
24 | * access to operations defined in the back-end, in particular for |
25 | * freeing the stack and code segment. |
26 | */ |
27 | |
28 | typedef enum output_format { |
29 | OFMT_CSV = 0, |
30 | OFMT_JSON = 1, |
31 | OFMT_NONE = 3 |
32 | } ofmt; |
33 | |
34 | /* The cur_append variable on an insert/update/delete on a partitioned table, tracks the current MAL variable holding |
35 | * the total number of rows affected. The first_statement_generated looks if the first of the sub-statements was |
36 | * generated or not */ |
37 | |
38 | typedef struct backend { |
39 | char language; /* 'S' or 's' or 'X' */ |
40 | char depth; |
41 | bool first_statement_generated; |
42 | mvc *mvc; |
43 | stream *out; |
44 | ofmt output_format; /* csv, json */ |
45 | Client client; |
46 | MalBlkPtr mb; /* needed during mal generation */ |
47 | int mvc_var; |
48 | int cur_append; |
49 | int vtop; /* top of the variable stack before the current function */ |
50 | cq *q; /* pointer to the cached query */ |
51 | } backend; |
52 | |
53 | extern backend *backend_reset(backend *b); |
54 | extern backend *backend_create(mvc *m, Client c); |
55 | extern void backend_destroy(backend *b); |
56 | |
57 | #endif /*MAL_BACKEND_H*/ |
58 | |