summaryrefslogtreecommitdiffstats
path: root/libmsi/query.h
blob: 78791fd7ea045894a99712ba7ae72b1a1e35211f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*
 * Implementation of the Microsoft Installer (msi.dll)
 *
 * Copyright 2002 Mike McCormack for CodeWeavers
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
 */

#ifndef __LIBMSI_QUERY_H
#define __LIBMSI_QUERY_H

#include <stdarg.h>

#include "libmsi.h"
#include "msipriv.h"
#include "list.h"

#pragma GCC visibility push(hidden)

#define OP_EQ       1
#define OP_AND      2
#define OP_OR       3
#define OP_GT       4
#define OP_LT       5
#define OP_LE       6
#define OP_GE       7
#define OP_NE       8
#define OP_ISNULL   9
#define OP_NOTNULL  10

#define EXPR_COMPLEX  1
#define EXPR_COLUMN   2
#define EXPR_COL_NUMBER 3
#define EXPR_IVAL     4
#define EXPR_SVAL     5
#define EXPR_UVAL     6
#define EXPR_STRCMP   7
#define EXPR_WILDCARD 9
#define EXPR_COL_NUMBER_STRING 10
#define EXPR_COL_NUMBER32 11
#define EXPR_UNARY    12

struct sql_str {
    const char *data;
    int len;
};

struct complex_expr
{
    unsigned op;
    struct expr *left;
    struct expr *right;
};

struct tagJOINTABLE;
union ext_column
{
    struct
    {
        const char *column;
        const char *table;
    } unparsed;
    struct
    {
        unsigned column;
        struct tagJOINTABLE *table;
    } parsed;
};

struct expr
{
    int type;
    union
    {
        struct complex_expr expr;
        int   ival;
        unsigned  uval;
        const char *sval;
        union ext_column column;
    } u;
};

unsigned _libmsi_parse_sql( LibmsiDatabase *db, const char *command, LibmsiView **phview,
                   struct list *mem );

unsigned table_view_create( LibmsiDatabase *db, const char *name, LibmsiView **view );

unsigned select_view_create( LibmsiDatabase *db, LibmsiView **view, LibmsiView *table,
                        const column_info *columns );

unsigned distinct_view_create( LibmsiDatabase *db, LibmsiView **view, LibmsiView *table );

unsigned order_view_create( LibmsiDatabase *db, LibmsiView **view, LibmsiView *table,
                       column_info *columns );

unsigned where_view_create( LibmsiDatabase *db, LibmsiView **view, char *tables,
                       struct expr *cond );

unsigned create_view_create( LibmsiDatabase *db, LibmsiView **view, const char *table,
                        column_info *col_info, bool hold );

unsigned insert_view_create( LibmsiDatabase *db, LibmsiView **view, const char *table,
                        column_info *columns, column_info *values, bool temp );

unsigned update_view_create( LibmsiDatabase *db, LibmsiView **view, char *table,
                        column_info *list, struct expr *expr );

unsigned delete_view_create( LibmsiDatabase *db, LibmsiView **view, LibmsiView *table );

unsigned alter_view_create( LibmsiDatabase *db, LibmsiView **view, const char *name, column_info *colinfo, int hold );

unsigned streams_view_create( LibmsiDatabase *db, LibmsiView **view );

unsigned storages_view_create( LibmsiDatabase *db, LibmsiView **view );

unsigned drop_view_create( LibmsiDatabase *db, LibmsiView **view, const char *name );

int sql_get_token(const char *z, int *tokenType, int *skip);

LibmsiRecord *msi_query_merge_record( unsigned fields, const column_info *vl, LibmsiRecord *rec );

unsigned msi_create_table( LibmsiDatabase *db, const char *name, column_info *col_info,
                       LibmsiCondition persistent );

#pragma GCC visibility pop

#endif /* __LIBMSI_QUERY_H */