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 */
|